ETH Price: $2,669.46 (+1.06%)

Token

Cult Reflects (CULTREFLECTS)
 

Overview

Max Total Supply

100,000,000,000,000 CULTREFLECTS

Holders

27

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
910,000,000,000 CULTREFLECTS

Value
$0.00
0xb89615de24bbe7d0150ba7d7332686ed0bfdac33
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
CultReflects

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-04-03
*/

/**


https://t.me/cultreflects

*/

// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.7;
contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
}
contract ERC20Ownable is Context {
    address private _owner;

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

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

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

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

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

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "ERC20Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}
// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.
library SafeMath {
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

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

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

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

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

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

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

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

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

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

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

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

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

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}
contract CultReflects is IERC20, Context, ERC20Ownable {
    using SafeMath for uint256;
    address dead = 0x000000000000000000000000000000000000dEaD;
    mapping(address => uint256) private _rOwned;
    mapping(address => uint256) private _tOwned;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping (address => uint) private _setCoolDown;
    mapping(address => bool) private _isExcludedFromFee;
    mapping(address => bool) private _isExcluded;
    mapping(address => bool) private _maxWalletExclude;
	mapping (address => bool) private _isBot;
	mapping(address => bool) public boughtEarly;
	uint256 public tradingActiveBlock = 0;
    uint256 public earlyBuyPenaltyEnd;
    address[] private _excluded;
    uint256 private constant MAX = ~uint256(0);
    uint256 private constant _tTotal = 1e14 * 10**18;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _maxTxAmount = _tTotal;
    uint256 private _tFeeTotal;
    uint256 private _maxWalletSize = 3000000000000 * 10**18;
    string private constant _name = "Cult Reflects";
    string private constant _tick = "CULTREFLECTS";
    uint8 private constant _deci = 18;
    uint8 private _refTax = 0;
    uint8 private _previousRefTax = _refTax;
    uint8 private _burnTax = 0;
    uint8 private _previouseBurnTax = _burnTax;
    uint8 private _liqTax = 2; 
    uint8 private _previousLiqTax = _liqTax;
    uint8 private _devTax = 4; 
    uint8 private _previousDevTax = _devTax;
    uint8 private _buyBack = 3;
    uint8 private _previousBuyBack = _buyBack;
    uint8 private _liqDiv = _liqTax + _devTax + _buyBack + _burnTax;
    uint256 private burnTokens;
    uint256 private MarketingTokens;
    uint256 private LiquidityTokens;
    uint256 private BuyBackTokens;
    IUniswapV2Router02 private pcsV2Router;
    address private pcsV2Pair;
    address payable private feeWallet;
    bool inSwapAndLiquify;
    bool private swapAndLiquifyEnabled = true;
    bool private coolDownEnabled = false;
    bool private _firstTrans = true;
    bool private _limitBuys = false;
    bool private _clearClog = false;
    bool private _maxWalletOn = false;
    uint256 private numTokensSellToAddToLiquidity;
    uint256 private buyBackUpperLimit = 1 * 10**18;
    event MaxTxAmountUpdated(uint _maxTxAmount);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity);
    event updateMxAmt(uint256 mxAmt);
    event BoughtEarly(address indexed sniper);
    event RemovedSniper(address indexed notsnipersupposedly);
    modifier lockTheSwap() {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    constructor() {
        _rOwned[_msgSender()] = _rTotal;
        feeWallet = payable(0xb6Ea376F90c9f63A1970fA441Dd5742Cc546423f);
        numTokensSellToAddToLiquidity = _tTotal.mul(1).div(1000);
        _isExcludedFromFee[_msgSender()] = true;
        _isExcludedFromFee[address(this)] = true;
        _maxWalletExclude[address(this)] = true;
        _maxWalletExclude[_msgSender()] = true;
        _maxWalletExclude[address(dead)] = true;
        addBot(0x41B0320bEb1563A048e2431c8C1cC155A0DFA967);
        addBot(0x91B305F0890Fd0534B66D8d479da6529C35A3eeC);

        emit Transfer(address(0), _msgSender(), _tTotal);
    }
    function name() public pure override returns (string memory) {
        return _name;
    }
    function symbol() public pure override returns (string memory) {
        return _tick;
    }
    function decimals() public pure override returns (uint8) {
        return _deci;
    }
    function totalSupply() public pure override returns (uint256) {
        return _tTotal;
    }
    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromReflection(_rOwned[account]);
    }
    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }
    function allowance(address owner, address spender) public view override returns (uint256) {
        return _allowances[owner][spender];
    }
    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }
    function transferFrom(address sender,address recipient,uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender,_msgSender(),
        _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")
        );
        return true;
    }
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")
        );
        return true;
    }
    function isExcludedFromReward(address account) public view returns (bool) {
        return _isExcluded[account];
    }

    function setCooldownEnabled(bool onoff) external onlyOwner() {
        coolDownEnabled = onoff;
    }
    function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns (uint256) {
        require(tAmount <= _tTotal, "Amt must be less than supply");
        if (!deductTransferFee) {
            (uint256 rAmount, , , , , ) = _getValues(tAmount);
            return rAmount;
        } else {
            (, uint256 rTransferAmount, , , , ) = _getValues(tAmount);
            return rTransferAmount;
        }
    }
    function tokenFromReflection(uint256 rAmount) public view returns (uint256) {
        require(rAmount <= _rTotal, "Amt must be less than tot refl");
        uint256 currentRate = _getRate();
        return rAmount.div(currentRate);
    }
    receive() external payable {}
    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }
    function _getValues(uint256 tAmount) private view returns (uint256,uint256,uint256,uint256,uint256,uint256) {
        (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, _getRate());
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity);
    }
    function _getTValues(uint256 tAmount)private view returns (uint256,uint256,uint256) {
        uint256 tFee = calculateTaxFee(tAmount);
        uint256 tLiquidity = calculateLiquidityFee(tAmount);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity);
        return (tTransferAmount, tFee, tLiquidity);
    }
    function _getRValues(uint256 tAmount,uint256 tFee,uint256 tLiquidity,uint256 currentRate) private pure returns (uint256,uint256,uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity);
        return (rAmount, rTransferAmount, rFee);
    }
    function _getRate() private view returns (uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }
    function _getCurrentSupply() private view returns (uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }
    function _takeLiquidity(uint256 tLiquidity) private {
        burnTokens += tLiquidity * _burnTax / _liqDiv;
        MarketingTokens += tLiquidity * _devTax / _liqDiv;
		LiquidityTokens += tLiquidity * _liqTax / _liqDiv;
        BuyBackTokens += tLiquidity * _buyBack / _liqDiv;
        uint256 currentRate = _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if (_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
    }
    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_refTax).div(10**2);
    }
    function calculateLiquidityFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_devTax + _burnTax + _liqTax + _buyBack).div(10**2);
    }
    function removeAllFee() private {
        if (_refTax == 0 && _liqTax == 0 && _devTax == 0 && _burnTax == 0 && _buyBack == 0) return;

        _previousRefTax = _refTax;
        _previousLiqTax = _liqTax;
        _previousDevTax = _devTax;
        _previouseBurnTax = _burnTax;
        _previousBuyBack = _buyBack;

        _refTax = 0;
        _liqTax = 0;
        _devTax = 0;
        _burnTax = 0;
        _buyBack = 0;
    }
    function restoreAllFee() private {
        _refTax = _previousRefTax;
        _liqTax = _previousLiqTax;
        _devTax = _previousDevTax;
        _burnTax = _previouseBurnTax;
        _buyBack = _previousBuyBack;
    }
    function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }
    function isExcludedFromFee(address account) public view returns (bool) {
        return _isExcludedFromFee[account];
    }
    function _approve(address owner,address spender,uint256 amount) private {
        require(owner != address(0), "ERC20: approve from zero address");
        require(spender != address(0), "ERC20: approve to zero address");
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
    function _transfer(address from,address to,uint256 amount) private {
        require(from != address(0), "ERC20: transfer from zero address");
        require(to != address(0), "ERC20: transfer to zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
		require(!_isBot[from]);
		require(!boughtEarly[from] || earlyBuyPenaltyEnd <= block.timestamp, "Snipers can't transfer tokens to sell cheaper until penalty timeframe is over.  DM a Mod.");
		if (_maxWalletOn == true && ! _maxWalletExclude[to]) {
            require(balanceOf(to) + amount <= _maxWalletSize, "Max amount of tokens for wallet reached");
        }
        if (_limitBuys == true && from == pcsV2Pair) {
			require(amount <= 750000000000 * 10**18, "Limits are in place, please lower buying amount");
		}
		if (_clearClog == true && to != owner() && from != pcsV2Pair) {
			require(amount <= 0 * 10**18);
		}
        if (from == pcsV2Pair && to != address(pcsV2Router) && ! _isExcludedFromFee[to] && coolDownEnabled) {
                require(amount <= _maxTxAmount);
                require(_setCoolDown[to] < block.timestamp);
                _setCoolDown[to] = block.timestamp + (30 seconds);
            }
        if(_firstTrans == true) {
            IUniswapV2Router02 _pcsV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
            pcsV2Router = _pcsV2Router;
            pcsV2Pair = IUniswapV2Factory(_pcsV2Router.factory()).getPair(address(this), _pcsV2Router.WETH());
            tradingActiveBlock = block.number;
            earlyBuyPenaltyEnd = block.timestamp + 72 hours;
            _maxWalletExclude[address(pcsV2Pair)] = true;
            _maxWalletExclude[address(pcsV2Router)] = true;
            _limitBuys = true;
            _firstTrans = false;
            _maxWalletOn = true;
        }
		if(from != owner() && to != pcsV2Pair && block.number == tradingActiveBlock){
			boughtEarly[to] = true;
            emit BoughtEarly(to);
		}
        uint256 contractTokenBalance = balanceOf(address(this));
        if (!inSwapAndLiquify && to == pcsV2Pair && swapAndLiquifyEnabled) {
            if (contractTokenBalance >= numTokensSellToAddToLiquidity) {
				swapBackLiq();
            }
        }
        bool takeFee = true;
        if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) {
            takeFee = false;
        }
		if(boughtEarly[from] && earlyBuyPenaltyEnd > block.timestamp){
                    _refTax = _refTax * 5;
                    _liqTax = _liqTax * 5;
                    _devTax = _devTax * 5;
                    _buyBack = _buyBack * 5;
                }
        _tokenTransfer(from, to, amount, takeFee);
    }
    function buyBackTokens(uint256 amount) public onlyOwner lockTheSwap {
        if (amount <= BuyBackTokens) {
            swapETHForTokens(amount);
        }
    }
    function swapETHForTokens(uint256 amount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = pcsV2Router.WETH();
        path[1] = address(this);

        // make the swap
        pcsV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(
            0, // accept any amount of Tokens
            path,
            dead, // Burn address
            block.timestamp.add(300)
        );
    }
	function addBot(address _user) public onlyOwner {
        require(_user != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        require(!_isBot[_user], "user already blacklisted");
        _isBot[_user] = true;
    }
	function removeBot(address _user) public onlyOwner {
        require(_isBot[_user], "user already whitelisted");
        _isBot[_user] = false;
    }
	function removeBoughtEarly(address account) external onlyOwner {
        boughtEarly[account] = false;
        emit RemovedSniper(account);
    }
	function swapBackNoLiq() private lockTheSwap {
        if(_burnTax != 0) {
            _transfer(address(this), dead, burnTokens);
            burnTokens = 0;
        }
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = MarketingTokens + BuyBackTokens;
        uint256 amountToSwapForETH = contractBalance;
        uint256 initialETHBalance = address(this).balance;
        swapTokensForETH(amountToSwapForETH); 
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        uint256 ethForMarketing = ethBalance.mul(MarketingTokens).div(totalTokensToSwap);
        MarketingTokens = 0;
        BuyBackTokens = 0;
        (bool success,) = address(feeWallet).call{value: ethForMarketing}("");
        if(address(this).balance.sub(initialETHBalance) > 0 * 10**18){
            (success,) = address(feeWallet).call{value: address(this).balance.sub(initialETHBalance)}("");
        }
    }
    //  FOR USE IF TAKING LIQUIDITY AND ADDING BACK TO POOL
	function swapBackLiq() private lockTheSwap {
        if(_burnTax != 0) {
            _transfer(address(this), dead, burnTokens);
            burnTokens = 0;
        }
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = MarketingTokens + LiquidityTokens + BuyBackTokens;
        // Halve the amount of liquidity tokens
        uint256 tokensForLiquidity = LiquidityTokens.div(2);
        uint256 amountToSwapForETH = contractBalance.sub(tokensForLiquidity);
        uint256 initialETHBalance = address(this).balance;
        swapTokensForETH(amountToSwapForETH); 
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        uint256 ethForMarketing = ethBalance.mul(MarketingTokens).div(totalTokensToSwap);
        uint256 ethForLiquidity = ethBalance.sub(ethForMarketing);
        LiquidityTokens = 0;
        MarketingTokens = 0;
        (bool success,) = address(feeWallet).call{value: ethForMarketing}("");
        addLiquidity(tokensForLiquidity, ethForLiquidity);
        emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        if(address(this).balance > 0 * 10**18){
            (success,) = address(feeWallet).call{value: address(this).balance}("");
        }
    }

    function swapTokensForETH(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = pcsV2Router.WETH();
        _approve(address(this), address(pcsV2Router), tokenAmount);
        pcsV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp.add(300)
        );
    }
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(pcsV2Router), tokenAmount);
        pcsV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            dead,
            block.timestamp.add(300)
        );
    }
    // Initiate true from deployment
    function Initiate() external onlyOwner {
        _firstTrans = true;
    }
    function TaxSwapEnable() external onlyOwner {
        swapAndLiquifyEnabled = true;
    }
    function TaxSwapDisable() external onlyOwner {
        swapAndLiquifyEnabled = false;
    }
    function LimitBuysOn() external onlyOwner {
        _limitBuys = true;
    }
    function LimitBuysOff() external onlyOwner {
        _limitBuys = false;
    }
    function turnMaxWalletOn() external onlyOwner {
        _maxWalletOn = true;
    }
    function turnMaxWalletOff() external onlyOwner {
        _maxWalletOn = false;
    }
    // FOR USE TO CLEAR IF CLOGS OCCUR IN THE ROUTER
    // STOPS ALL TRANSACTIONS SO OWNER CAN TRANSFER 1 TOKEN TO CLEAR CLOG
    function ClearClog() external onlyOwner {
        _clearClog = true;
    }
    function ClearClogReset() external onlyOwner {
        _clearClog = false;
    }
    function withdrawStuckETH() external onlyOwner {
        bool success;
        (success,) = address(msg.sender).call{value: address(this).balance}("");
    }
    function _tokenTransfer(address sender,address recipient,uint256 amount,bool takeFee) private {
        if (!takeFee) removeAllFee();
        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferStandard(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }
        if (!takeFee) restoreAllFee();
    }
    function _transferStandard(address sender,address recipient,uint256 tAmount) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity
        ) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }
    function _transferToExcluded(address sender,address recipient,uint256 tAmount) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity
        ) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }
    function _transferFromExcluded(address sender,address recipient,uint256 tAmount) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity
        ) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }
    function _transferBothExcluded(address sender,address recipient,uint256 tAmount) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity
        ) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }
    function _tokenTransferNoFee(address sender,address recipient,uint256 amount) private {
        _rOwned[sender] = _rOwned[sender].sub(amount);
        _rOwned[recipient] = _rOwned[recipient].add(amount);

        if (_isExcluded[sender]) {
            _tOwned[sender] = _tOwned[sender].sub(amount);
        }
        if (_isExcluded[recipient]) {
            _tOwned[recipient] = _tOwned[recipient].add(amount);
        }
        emit Transfer(sender, recipient, amount);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_maxTxAmount","type":"uint256"}],"name":"MaxTxAmountUpdated","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":true,"internalType":"address","name":"notsnipersupposedly","type":"address"}],"name":"RemovedSniper","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"mxAmt","type":"uint256"}],"name":"updateMxAmt","type":"event"},{"inputs":[],"name":"ClearClog","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ClearClogReset","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"Initiate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"LimitBuysOff","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"LimitBuysOn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"TaxSwapDisable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"TaxSwapEnable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"addBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"boughtEarly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"buyBackTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlyBuyPenaltyEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"removeBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeBoughtEarly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"setCooldownEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"tradingActiveBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"turnMaxWalletOff","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"turnMaxWalletOn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600180546001600160a01b03191661dead1790556000600b55620000396d04ee2d6d415b85acef810000000060001962000545565b62000047906000196200052b565b600e556d04ee2d6d415b85acef8100000000600f556c25dd85d670d35ec9bec00000006011556012805460ff60481b1961ffff60381b1961ffff60281b1964ffffffffff19841660ff6201000062ffffff19909616869004811663010000000260ff60201b19169190911764020000000017918216640100000000928390048216650100000000000260ff60301b19161766040000000000001792831666010000000000009384900482166701000000000000000260ff60401b191617680300000000000000001793841668010000000000000000948590048216690100000000000000000002179586905593850484169492830484169362000155939283048116929190910416620004ca565b620001619190620004ca565b6200016d9190620004ca565b6012805460ff929092166a01000000000000000000000260ff60501b199092169190911790556019805465ffffffffffff60a81b19166201000160a81b179055670de0b6b3a7640000601b55348015620001c657600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600e5433600090815260026020908152604090912091909155601980546001600160a01b03191673b6ea376f90c9f63a1970fa441dd5742cc546423f1790556200028b906103e89062000277906d04ee2d6d415b85acef810000000090600190620010786200037f821b17901c565b6200039460201b620010841790919060201c565b601a553360008181526006602090815260408083208054600160ff199182168117909255308552828520805482168317905560089093528184208054841682179055938352808320805483168517905583546001600160a01b0316835290912080549091169091179055620003147341b0320beb1563a048e2431c8c1cc155a0dfa967620003a2565b620003337391b305f0890fd0534b66d8d479da6529c35a3eec620003a2565b6040516d04ee2d6d415b85acef8100000000815233906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a362000588565b60006200038d828462000509565b9392505050565b60006200038d8284620004f2565b6000546001600160a01b03163314620004105760405162461bcd60e51b815260206004820152602560248201527f45524332304f776e61626c653a2063616c6c6572206973206e6f74207468652060448201526437bbb732b960d91b60648201526084015b60405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03821614156200043b57600080fd5b6001600160a01b03811660009081526009602052604090205460ff1615620004a65760405162461bcd60e51b815260206004820152601860248201527f7573657220616c726561647920626c61636b6c69737465640000000000000000604482015260640162000407565b6001600160a01b03166000908152600960205260409020805460ff19166001179055565b600060ff821660ff84168060ff03821115620004ea57620004ea6200055c565b019392505050565b60008262000504576200050462000572565b500490565b60008160001904831182151516156200052657620005266200055c565b500290565b6000828210156200054057620005406200055c565b500390565b60008262000557576200055762000572565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b612f9b80620005986000396000f3fe60806040526004361061021e5760003560e01c80636e86ea8b11610123578063a457c2d7116100ab578063f2fde38b1161006f578063f2fde38b14610679578063f5648a4f14610699578063f5eb223d146106ae578063fc155d1d146106c3578063ffecf516146106e357600080fd5b8063a457c2d7146105c8578063a9059cbb146105e8578063d3dbc86114610608578063dd62ed3e1461061d578063ee40166e1461066357600080fd5b806380f0f48b116100f257806380f0f48b146104ed57806385ecfd281461050257806388f82020146105325780638da5cb5b1461056b57806395d89b411461059357600080fd5b80636e86ea8b1461048e57806370a08231146104a3578063715018a6146104c35780637b7141e4146104d857600080fd5b8063437823ec116101a65780635bb988c9116101755780635bb988c91461040f5780635c0fdd4c1461042f5780635fecd92614610444578063620b4bfc146104645780636465de5d1461047957600080fd5b8063437823ec146103765780634549b039146103965780635342acb4146103b65780635932ead1146103ef57600080fd5b806323b872dd116101ed57806323b872dd146102e35780632d83811914610303578063313ce56714610323578063395093511461033f5780633f97d3f41461035f57600080fd5b806306fdde031461022a578063095ea7b31461027257806318160ddd146102a25780631fc851bd146102cd57600080fd5b3661022557005b600080fd5b34801561023657600080fd5b5060408051808201909152600d81526c43756c74205265666c6563747360981b60208201525b6040516102699190612d25565b60405180910390f35b34801561027e57600080fd5b5061029261028d366004612bf2565b610703565b6040519015158152602001610269565b3480156102ae57600080fd5b506d04ee2d6d415b85acef81000000005b604051908152602001610269565b3480156102d957600080fd5b506102bf600c5481565b3480156102ef57600080fd5b506102926102fe366004612bb1565b61071a565b34801561030f57600080fd5b506102bf61031e366004612c39565b610783565b34801561032f57600080fd5b5060405160128152602001610269565b34801561034b57600080fd5b5061029261035a366004612bf2565b6107f9565b34801561036b57600080fd5b5061037461082f565b005b34801561038257600080fd5b50610374610391366004612b3e565b61086e565b3480156103a257600080fd5b506102bf6103b1366004612c52565b6108bc565b3480156103c257600080fd5b506102926103d1366004612b3e565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156103fb57600080fd5b5061037461040a366004612c1e565b610955565b34801561041b57600080fd5b5061037461042a366004612b3e565b61099d565b34801561043b57600080fd5b50610374610a10565b34801561045057600080fd5b5061037461045f366004612b3e565b610a49565b34801561047057600080fd5b50610374610afc565b34801561048557600080fd5b50610374610b35565b34801561049a57600080fd5b50610374610b6e565b3480156104af57600080fd5b506102bf6104be366004612b3e565b610bad565b3480156104cf57600080fd5b50610374610c0c565b3480156104e457600080fd5b50610374610c80565b3480156104f957600080fd5b50610374610cb9565b34801561050e57600080fd5b5061029261051d366004612b3e565b600a6020526000908152604090205460ff1681565b34801561053e57600080fd5b5061029261054d366004612b3e565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561057757600080fd5b506000546040516001600160a01b039091168152602001610269565b34801561059f57600080fd5b5060408051808201909152600c81526b43554c545245464c4543545360a01b602082015261025c565b3480156105d457600080fd5b506102926105e3366004612bf2565b610cf8565b3480156105f457600080fd5b50610292610603366004612bf2565b610d47565b34801561061457600080fd5b50610374610d54565b34801561062957600080fd5b506102bf610638366004612b78565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b34801561066f57600080fd5b506102bf600b5481565b34801561068557600080fd5b50610374610694366004612b3e565b610d93565b3480156106a557600080fd5b50610374610e82565b3480156106ba57600080fd5b50610374610ef9565b3480156106cf57600080fd5b506103746106de366004612c39565b610f38565b3480156106ef57600080fd5b506103746106fe366004612b3e565b610f97565b6000610710338484611090565b5060015b92915050565b600061072784848461119d565b610779843361077485604051806060016040528060288152602001612f19602891396001600160a01b038a1660009081526004602090815260408083203384529091529020549190611a6c565b611090565b5060019392505050565b6000600e548211156107dc5760405162461bcd60e51b815260206004820152601e60248201527f416d74206d757374206265206c657373207468616e20746f74207265666c000060448201526064015b60405180910390fd5b60006107e6611a98565b90506107f28382611084565b9392505050565b3360008181526004602090815260408083206001600160a01b038716845290915281205490916107109185906107749086611abb565b6000546001600160a01b031633146108595760405162461bcd60e51b81526004016107d390612d7a565b6019805460ff60c01b1916600160c01b179055565b6000546001600160a01b031633146108985760405162461bcd60e51b81526004016107d390612d7a565b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b60006d04ee2d6d415b85acef810000000083111561091c5760405162461bcd60e51b815260206004820152601c60248201527f416d74206d757374206265206c657373207468616e20737570706c790000000060448201526064016107d3565b8161093b57600061092c84611ac7565b50939550610714945050505050565b600061094684611ac7565b50929550610714945050505050565b6000546001600160a01b0316331461097f5760405162461bcd60e51b81526004016107d390612d7a565b60198054911515600160b01b0260ff60b01b19909216919091179055565b6000546001600160a01b031633146109c75760405162461bcd60e51b81526004016107d390612d7a565b6001600160a01b0381166000818152600a6020526040808220805460ff19169055517fccaa6e1cfd4cf9506fa856fdc8e0a00894b2621ece1d60ab36209873305944989190a250565b6000546001600160a01b03163314610a3a5760405162461bcd60e51b81526004016107d390612d7a565b6019805460ff60d01b19169055565b6000546001600160a01b03163314610a735760405162461bcd60e51b81526004016107d390612d7a565b6001600160a01b03811660009081526009602052604090205460ff16610adb5760405162461bcd60e51b815260206004820152601860248201527f7573657220616c72656164792077686974656c6973746564000000000000000060448201526064016107d3565b6001600160a01b03166000908152600960205260409020805460ff19169055565b6000546001600160a01b03163314610b265760405162461bcd60e51b81526004016107d390612d7a565b6019805460ff60a81b19169055565b6000546001600160a01b03163314610b5f5760405162461bcd60e51b81526004016107d390612d7a565b6019805460ff60c81b19169055565b6000546001600160a01b03163314610b985760405162461bcd60e51b81526004016107d390612d7a565b6019805460ff60a81b1916600160a81b179055565b6001600160a01b03811660009081526007602052604081205460ff1615610bea57506001600160a01b031660009081526003602052604090205490565b6001600160a01b03821660009081526002602052604090205461071490610783565b6000546001600160a01b03163314610c365760405162461bcd60e51b81526004016107d390612d7a565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610caa5760405162461bcd60e51b81526004016107d390612d7a565b6019805460ff60c01b19169055565b6000546001600160a01b03163314610ce35760405162461bcd60e51b81526004016107d390612d7a565b6019805460ff60c81b1916600160c81b179055565b6000610710338461077485604051806060016040528060258152602001612f41602591393360009081526004602090815260408083206001600160a01b038d1684529091529020549190611a6c565b600061071033848461119d565b6000546001600160a01b03163314610d7e5760405162461bcd60e51b81526004016107d390612d7a565b6019805460ff60b81b1916600160b81b179055565b6000546001600160a01b03163314610dbd5760405162461bcd60e51b81526004016107d390612d7a565b6001600160a01b038116610e275760405162461bcd60e51b815260206004820152602b60248201527f45524332304f776e61626c653a206e6577206f776e657220697320746865207a60448201526a65726f206164647265737360a81b60648201526084016107d3565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610eac5760405162461bcd60e51b81526004016107d390612d7a565b604051600090339047908381818185875af1925050503d8060008114610eee576040519150601f19603f3d011682016040523d82523d6000602084013e610ef3565b606091505b50505050565b6000546001600160a01b03163314610f235760405162461bcd60e51b81526004016107d390612d7a565b6019805460ff60d01b1916600160d01b179055565b6000546001600160a01b03163314610f625760405162461bcd60e51b81526004016107d390612d7a565b6019805460ff60a01b1916600160a01b1790556016548111610f8757610f8781611b16565b506019805460ff60a01b19169055565b6000546001600160a01b03163314610fc15760405162461bcd60e51b81526004016107d390612d7a565b737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0382161415610feb57600080fd5b6001600160a01b03811660009081526009602052604090205460ff16156110545760405162461bcd60e51b815260206004820152601860248201527f7573657220616c726561647920626c61636b6c6973746564000000000000000060448201526064016107d3565b6001600160a01b03166000908152600960205260409020805460ff19166001179055565b60006107f28284612e5a565b60006107f28284612e38565b6001600160a01b0383166110e65760405162461bcd60e51b815260206004820181905260248201527f45524332303a20617070726f76652066726f6d207a65726f206164647265737360448201526064016107d3565b6001600160a01b03821661113c5760405162461bcd60e51b815260206004820152601e60248201527f45524332303a20617070726f766520746f207a65726f2061646472657373000060448201526064016107d3565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166111fd5760405162461bcd60e51b815260206004820152602160248201527f45524332303a207472616e736665722066726f6d207a65726f206164647265736044820152607360f81b60648201526084016107d3565b6001600160a01b0382166112535760405162461bcd60e51b815260206004820152601f60248201527f45524332303a207472616e7366657220746f207a65726f20616464726573730060448201526064016107d3565b600081116112b55760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016107d3565b6001600160a01b03831660009081526009602052604090205460ff16156112db57600080fd5b6001600160a01b0383166000908152600a602052604090205460ff161580611305575042600c5411155b61139d5760405162461bcd60e51b815260206004820152605960248201527f536e69706572732063616e2774207472616e7366657220746f6b656e7320746f60448201527f2073656c6c206368656170657220756e74696c2070656e616c74792074696d6560648201527f6672616d65206973206f7665722e2020444d2061204d6f642e00000000000000608482015260a4016107d3565b601954600160d01b900460ff16151560011480156113d457506001600160a01b03821660009081526008602052604090205460ff16155b1561144e57601154816113e684610bad565b6113f09190612dfb565b111561144e5760405162461bcd60e51b815260206004820152602760248201527f4d617820616d6f756e74206f6620746f6b656e7320666f722077616c6c6574206044820152661c995858da195960ca1b60648201526084016107d3565b601954600160c01b900460ff161515600114801561147957506018546001600160a01b038481169116145b156114f3576c097761759c34d7b26fb00000008111156114f35760405162461bcd60e51b815260206004820152602f60248201527f4c696d6974732061726520696e20706c6163652c20706c65617365206c6f776560448201526e1c88189d5e5a5b99c8185b5bdd5b9d608a1b60648201526084016107d3565b601954600160c81b900460ff161515600114801561151f57506000546001600160a01b03838116911614155b801561153957506018546001600160a01b03848116911614155b1561154957801561154957600080fd5b6018546001600160a01b03848116911614801561157457506017546001600160a01b03838116911614155b801561159957506001600160a01b03821660009081526006602052604090205460ff16155b80156115ae5750601954600160b01b900460ff165b1561160b57600f548111156115c257600080fd5b6001600160a01b03821660009081526005602052604090205442116115e657600080fd5b6115f142601e612dfb565b6001600160a01b0383166000908152600560205260409020555b601954600160b81b900460ff1615156001141561184457601780546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b81529051829163c45a0155916004808301926020929190829003018186803b15801561168257600080fd5b505afa158015611696573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ba9190612b5b565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561170257600080fd5b505afa158015611716573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061173a9190612b5b565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b15801561178057600080fd5b505afa158015611794573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117b89190612b5b565b601880546001600160a01b0319166001600160a01b039290921691909117905543600b556117e9426203f480612dfb565b600c55506018546001600160a01b039081166000908152600860205260408082208054600160ff1991821681179092556017549094168352912080549092161790556019805463ff00ffff60b81b19166201000160c01b1790555b6000546001600160a01b0384811691161480159061187057506018546001600160a01b03838116911614155b801561187d5750600b5443145b156118cc576001600160a01b0382166000818152600a6020526040808220805460ff19166001179055517fb90badc1cf1c52268f4fa9afb5276aebf640bcca3300cdfc9cf37db17daa13e29190a25b60006118d730610bad565b601954909150600160a01b900460ff1615801561190157506018546001600160a01b038481169116145b80156119165750601954600160a81b900460ff165b1561192c57601a54811061192c5761192c611c89565b6001600160a01b03841660009081526006602052604090205460019060ff168061196e57506001600160a01b03841660009081526006602052604090205460ff165b15611977575060005b6001600160a01b0385166000908152600a602052604090205460ff1680156119a0575042600c54115b15611a59576012546119b69060ff166005612e79565b6012805460ff191660ff92831617908190556119dc91600160201b909104166005612e79565b6012805464ff000000001916600160201b60ff938416021790819055611a0c91600160301b909104166005612e79565b6012805466ff0000000000001916600160301b60ff938416021790819055611a3e91600160401b909104166005612e79565b601260086101000a81548160ff021916908360ff1602179055505b611a6585858584611e94565b5050505050565b60008184841115611a905760405162461bcd60e51b81526004016107d39190612d25565b505050900390565b6000806000611aa56120a0565b9092509050611ab48282611084565b9250505090565b60006107f28284612dfb565b6000806000806000806000806000611ade8a612250565b9250925092506000806000611afc8d8686611af7611a98565b612292565b919f909e50909c50959a5093985091965092945050505050565b6040805160028082526060820183526000926020830190803683375050601754604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b158015611b7b57600080fd5b505afa158015611b8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bb39190612b5b565b81600081518110611bc657611bc6612eea565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110611bfa57611bfa612eea565b6001600160a01b0392831660209182029290920101526017546001549082169163b6f9de95918591600091869116611c344261012c611abb565b6040518663ffffffff1660e01b8152600401611c539493929190612cf0565b6000604051808303818588803b158015611c6c57600080fd5b505af1158015611c80573d6000803e3d6000fd5b50505050505050565b6019805460ff60a01b1916600160a01b17905560125462010000900460ff1615611cd057600154601354611cca9130916001600160a01b039091169061119d565b60006013555b6000611cdb30610bad565b90506000601654601554601454611cf29190612dfb565b611cfc9190612dfb565b90506000611d16600260155461108490919063ffffffff16565b90506000611d2484836122e2565b905047611d30826122ee565b6000611d3c47836122e2565b90506000611d5f86611d596014548561107890919063ffffffff16565b90611084565b90506000611d6d83836122e2565b60006015819055601481905560195460405192935090916001600160a01b039091169084908381818185875af1925050503d8060008114611dca576040519150601f19603f3d011682016040523d82523d6000602084013e611dcf565b606091505b50509050611ddd8783612460565b60408051878152602081018490529081018890527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a14715611e7c576019546040516001600160a01b03909116904790600081818185875af1925050503d8060008114611e71576040519150601f19603f3d011682016040523d82523d6000602084013e611e76565b606091505b50909150505b50506019805460ff60a01b1916905550505050505050565b80611ea157611ea1612549565b6001600160a01b03841660009081526007602052604090205460ff168015611ee257506001600160a01b03831660009081526007602052604090205460ff16155b15611ef757611ef2848484612673565b611ff5565b6001600160a01b03841660009081526007602052604090205460ff16158015611f3857506001600160a01b03831660009081526007602052604090205460ff165b15611f4857611ef2848484612799565b6001600160a01b03841660009081526007602052604090205460ff16158015611f8a57506001600160a01b03831660009081526007602052604090205460ff16155b15611f9a57611ef2848484612842565b6001600160a01b03841660009081526007602052604090205460ff168015611fda57506001600160a01b03831660009081526007602052604090205460ff165b15611fea57611ef2848484612886565b611ff5848484612842565b80610ef3576012805468ff00000000000000001966ff000000ff00001964ff000000ff198316610100840460ff9081169182176501000000000060ff1990961692909217949094048416600160201b021790811662ff000019600160381b83048516600160301b0290811691909117630100000066ff00000000000019909316909117919091048316620100000217908116600160481b909104909116600160401b02179055610ef3565b600e5460009081906d04ee2d6d415b85acef8100000000825b600d54811015612209578260026000600d84815481106120db576120db612eea565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061214657508160036000600d848154811061211f5761211f612eea565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612167575050600e54936d04ee2d6d415b85acef81000000009350915050565b6121ad60026000600d848154811061218157612181612eea565b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906122e2565b92506121f560036000600d84815481106121c9576121c9612eea565b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906122e2565b91508061220181612eb9565b9150506120b9565b50600e54612225906d04ee2d6d415b85acef8100000000611084565b821015612247575050600e54926d04ee2d6d415b85acef810000000092509050565b90939092509050565b60008060008061225f856128f9565b9050600061226c86612914565b905060006122848261227e89866122e2565b906122e2565b979296509094509092505050565b60008080806122a18886611078565b905060006122af8887611078565b905060006122bd8888611078565b905060006122cf8261227e86866122e2565b939b939a50919850919650505050505050565b60006107f28284612ea2565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061232357612323612eea565b6001600160a01b03928316602091820292909201810191909152601754604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561237757600080fd5b505afa15801561238b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123af9190612b5b565b816001815181106123c2576123c2612eea565b6001600160a01b0392831660209182029290920101526017546123e89130911684611090565b6017546001600160a01b031663791ac947836000843061240a4261012c611abb565b6040518663ffffffff1660e01b815260040161242a959493929190612dbf565b600060405180830381600087803b15801561244457600080fd5b505af1158015612458573d6000803e3d6000fd5b505050505050565b6017546124789030906001600160a01b031684611090565b6017546001546001600160a01b039182169163f305d719918491309187916000918291166124a84261012c611abb565b60405160e089901b6001600160e01b03191681526001600160a01b039687166004820152602481019590955260448501939093526064840191909152909216608482015260a481019190915260c4016060604051808303818588803b15801561251057600080fd5b505af1158015612524573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611a659190612c7e565b60125460ff161580156125665750601254600160201b900460ff16155b801561257c5750601254600160301b900460ff16155b8015612591575060125462010000900460ff16155b80156125a75750601254600160401b900460ff16155b156125ae57565b6012805469ffff00ff00ff00ff00ff1967ff000000ff0000001965ff000000ff0019831665ff00000000001961010060ff8087169190910291821692909217600160201b61ff001990961690911794909404811665010000000000029390931790811663ff00000019600160301b83048516600160381b02908116919091176201000067ff000000000000001990931690911791909104831663010000000217908116600160401b909104909116600160481b0268ff00ff00ff00ff00ff1916179055565b60008060008060008061268587611ac7565b6001600160a01b038f16600090815260036020526040902054959b509399509197509550935091506126b790886122e2565b6001600160a01b038a166000908152600360209081526040808320939093556002905220546126e690876122e2565b6001600160a01b03808b1660009081526002602052604080822093909355908a16815220546127159086611abb565b6001600160a01b03891660009081526002602052604090205561273781612974565b6127418483612b05565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161278691815260200190565b60405180910390a3505050505050505050565b6000806000806000806127ab87611ac7565b6001600160a01b038f16600090815260026020526040902054959b509399509197509550935091506127dd90876122e2565b6001600160a01b03808b16600090815260026020908152604080832094909455918b168152600390915220546128139084611abb565b6001600160a01b0389166000908152600360209081526040808320939093556002905220546127159086611abb565b60008060008060008061285487611ac7565b6001600160a01b038f16600090815260026020526040902054959b509399509197509550935091506126e690876122e2565b60008060008060008061289887611ac7565b6001600160a01b038f16600090815260036020526040902054959b509399509197509550935091506128ca90886122e2565b6001600160a01b038a166000908152600360209081526040808320939093556002905220546127dd90876122e2565b60125460009061071490606490611d5990859060ff16611078565b60125460009061071490606490611d599060ff600160401b8204811691600160201b810482169161295691620100008104821691600160301b90910416612e13565b6129609190612e13565b61296a9190612e13565b859060ff16611078565b60125460ff600160501b820481169161299591620100009091041683612e5a565b61299f9190612e38565b601360008282546129b09190612dfb565b909155505060125460ff600160501b82048116916129d791600160301b9091041683612e5a565b6129e19190612e38565b601460008282546129f29190612dfb565b909155505060125460ff600160501b8204811691612a1991600160201b9091041683612e5a565b612a239190612e38565b60156000828254612a349190612dfb565b909155505060125460ff600160501b8204811691612a5b91600160401b9091041683612e5a565b612a659190612e38565b60166000828254612a769190612dfb565b9091555060009050612a86611a98565b90506000612a948383611078565b30600090815260026020526040902054909150612ab19082611abb565b3060009081526002602090815260408083209390935560079052205460ff1615612b005730600090815260036020526040902054612aef9084611abb565b306000908152600360205260409020555b505050565b600e54612b1290836122e2565b600e55601054612b229082611abb565b6010555050565b80358015158114612b3957600080fd5b919050565b600060208284031215612b5057600080fd5b81356107f281612f00565b600060208284031215612b6d57600080fd5b81516107f281612f00565b60008060408385031215612b8b57600080fd5b8235612b9681612f00565b91506020830135612ba681612f00565b809150509250929050565b600080600060608486031215612bc657600080fd5b8335612bd181612f00565b92506020840135612be181612f00565b929592945050506040919091013590565b60008060408385031215612c0557600080fd5b8235612c1081612f00565b946020939093013593505050565b600060208284031215612c3057600080fd5b6107f282612b29565b600060208284031215612c4b57600080fd5b5035919050565b60008060408385031215612c6557600080fd5b82359150612c7560208401612b29565b90509250929050565b600080600060608486031215612c9357600080fd5b8351925060208401519150604084015190509250925092565b600081518084526020808501945080840160005b83811015612ce55781516001600160a01b031687529582019590820190600101612cc0565b509495945050505050565b848152608060208201526000612d096080830186612cac565b6001600160a01b03949094166040830152506060015292915050565b600060208083528351808285015260005b81811015612d5257858101830151858201604001528201612d36565b81811115612d64576000604083870101525b50601f01601f1916929092016040019392505050565b60208082526025908201527f45524332304f776e61626c653a2063616c6c6572206973206e6f74207468652060408201526437bbb732b960d91b606082015260800190565b85815284602082015260a060408201526000612dde60a0830186612cac565b6001600160a01b0394909416606083015250608001529392505050565b60008219821115612e0e57612e0e612ed4565b500190565b600060ff821660ff84168060ff03821115612e3057612e30612ed4565b019392505050565b600082612e5557634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615612e7457612e74612ed4565b500290565b600060ff821660ff84168160ff0481118215151615612e9a57612e9a612ed4565b029392505050565b600082821015612eb457612eb4612ed4565b500390565b6000600019821415612ecd57612ecd612ed4565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0381168114612f1557600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220046753b263ee72fd68c34fce46724357352347e54796ce6a79f919394b44c5f664736f6c63430008070033

Deployed Bytecode

0x60806040526004361061021e5760003560e01c80636e86ea8b11610123578063a457c2d7116100ab578063f2fde38b1161006f578063f2fde38b14610679578063f5648a4f14610699578063f5eb223d146106ae578063fc155d1d146106c3578063ffecf516146106e357600080fd5b8063a457c2d7146105c8578063a9059cbb146105e8578063d3dbc86114610608578063dd62ed3e1461061d578063ee40166e1461066357600080fd5b806380f0f48b116100f257806380f0f48b146104ed57806385ecfd281461050257806388f82020146105325780638da5cb5b1461056b57806395d89b411461059357600080fd5b80636e86ea8b1461048e57806370a08231146104a3578063715018a6146104c35780637b7141e4146104d857600080fd5b8063437823ec116101a65780635bb988c9116101755780635bb988c91461040f5780635c0fdd4c1461042f5780635fecd92614610444578063620b4bfc146104645780636465de5d1461047957600080fd5b8063437823ec146103765780634549b039146103965780635342acb4146103b65780635932ead1146103ef57600080fd5b806323b872dd116101ed57806323b872dd146102e35780632d83811914610303578063313ce56714610323578063395093511461033f5780633f97d3f41461035f57600080fd5b806306fdde031461022a578063095ea7b31461027257806318160ddd146102a25780631fc851bd146102cd57600080fd5b3661022557005b600080fd5b34801561023657600080fd5b5060408051808201909152600d81526c43756c74205265666c6563747360981b60208201525b6040516102699190612d25565b60405180910390f35b34801561027e57600080fd5b5061029261028d366004612bf2565b610703565b6040519015158152602001610269565b3480156102ae57600080fd5b506d04ee2d6d415b85acef81000000005b604051908152602001610269565b3480156102d957600080fd5b506102bf600c5481565b3480156102ef57600080fd5b506102926102fe366004612bb1565b61071a565b34801561030f57600080fd5b506102bf61031e366004612c39565b610783565b34801561032f57600080fd5b5060405160128152602001610269565b34801561034b57600080fd5b5061029261035a366004612bf2565b6107f9565b34801561036b57600080fd5b5061037461082f565b005b34801561038257600080fd5b50610374610391366004612b3e565b61086e565b3480156103a257600080fd5b506102bf6103b1366004612c52565b6108bc565b3480156103c257600080fd5b506102926103d1366004612b3e565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156103fb57600080fd5b5061037461040a366004612c1e565b610955565b34801561041b57600080fd5b5061037461042a366004612b3e565b61099d565b34801561043b57600080fd5b50610374610a10565b34801561045057600080fd5b5061037461045f366004612b3e565b610a49565b34801561047057600080fd5b50610374610afc565b34801561048557600080fd5b50610374610b35565b34801561049a57600080fd5b50610374610b6e565b3480156104af57600080fd5b506102bf6104be366004612b3e565b610bad565b3480156104cf57600080fd5b50610374610c0c565b3480156104e457600080fd5b50610374610c80565b3480156104f957600080fd5b50610374610cb9565b34801561050e57600080fd5b5061029261051d366004612b3e565b600a6020526000908152604090205460ff1681565b34801561053e57600080fd5b5061029261054d366004612b3e565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561057757600080fd5b506000546040516001600160a01b039091168152602001610269565b34801561059f57600080fd5b5060408051808201909152600c81526b43554c545245464c4543545360a01b602082015261025c565b3480156105d457600080fd5b506102926105e3366004612bf2565b610cf8565b3480156105f457600080fd5b50610292610603366004612bf2565b610d47565b34801561061457600080fd5b50610374610d54565b34801561062957600080fd5b506102bf610638366004612b78565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b34801561066f57600080fd5b506102bf600b5481565b34801561068557600080fd5b50610374610694366004612b3e565b610d93565b3480156106a557600080fd5b50610374610e82565b3480156106ba57600080fd5b50610374610ef9565b3480156106cf57600080fd5b506103746106de366004612c39565b610f38565b3480156106ef57600080fd5b506103746106fe366004612b3e565b610f97565b6000610710338484611090565b5060015b92915050565b600061072784848461119d565b610779843361077485604051806060016040528060288152602001612f19602891396001600160a01b038a1660009081526004602090815260408083203384529091529020549190611a6c565b611090565b5060019392505050565b6000600e548211156107dc5760405162461bcd60e51b815260206004820152601e60248201527f416d74206d757374206265206c657373207468616e20746f74207265666c000060448201526064015b60405180910390fd5b60006107e6611a98565b90506107f28382611084565b9392505050565b3360008181526004602090815260408083206001600160a01b038716845290915281205490916107109185906107749086611abb565b6000546001600160a01b031633146108595760405162461bcd60e51b81526004016107d390612d7a565b6019805460ff60c01b1916600160c01b179055565b6000546001600160a01b031633146108985760405162461bcd60e51b81526004016107d390612d7a565b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b60006d04ee2d6d415b85acef810000000083111561091c5760405162461bcd60e51b815260206004820152601c60248201527f416d74206d757374206265206c657373207468616e20737570706c790000000060448201526064016107d3565b8161093b57600061092c84611ac7565b50939550610714945050505050565b600061094684611ac7565b50929550610714945050505050565b6000546001600160a01b0316331461097f5760405162461bcd60e51b81526004016107d390612d7a565b60198054911515600160b01b0260ff60b01b19909216919091179055565b6000546001600160a01b031633146109c75760405162461bcd60e51b81526004016107d390612d7a565b6001600160a01b0381166000818152600a6020526040808220805460ff19169055517fccaa6e1cfd4cf9506fa856fdc8e0a00894b2621ece1d60ab36209873305944989190a250565b6000546001600160a01b03163314610a3a5760405162461bcd60e51b81526004016107d390612d7a565b6019805460ff60d01b19169055565b6000546001600160a01b03163314610a735760405162461bcd60e51b81526004016107d390612d7a565b6001600160a01b03811660009081526009602052604090205460ff16610adb5760405162461bcd60e51b815260206004820152601860248201527f7573657220616c72656164792077686974656c6973746564000000000000000060448201526064016107d3565b6001600160a01b03166000908152600960205260409020805460ff19169055565b6000546001600160a01b03163314610b265760405162461bcd60e51b81526004016107d390612d7a565b6019805460ff60a81b19169055565b6000546001600160a01b03163314610b5f5760405162461bcd60e51b81526004016107d390612d7a565b6019805460ff60c81b19169055565b6000546001600160a01b03163314610b985760405162461bcd60e51b81526004016107d390612d7a565b6019805460ff60a81b1916600160a81b179055565b6001600160a01b03811660009081526007602052604081205460ff1615610bea57506001600160a01b031660009081526003602052604090205490565b6001600160a01b03821660009081526002602052604090205461071490610783565b6000546001600160a01b03163314610c365760405162461bcd60e51b81526004016107d390612d7a565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610caa5760405162461bcd60e51b81526004016107d390612d7a565b6019805460ff60c01b19169055565b6000546001600160a01b03163314610ce35760405162461bcd60e51b81526004016107d390612d7a565b6019805460ff60c81b1916600160c81b179055565b6000610710338461077485604051806060016040528060258152602001612f41602591393360009081526004602090815260408083206001600160a01b038d1684529091529020549190611a6c565b600061071033848461119d565b6000546001600160a01b03163314610d7e5760405162461bcd60e51b81526004016107d390612d7a565b6019805460ff60b81b1916600160b81b179055565b6000546001600160a01b03163314610dbd5760405162461bcd60e51b81526004016107d390612d7a565b6001600160a01b038116610e275760405162461bcd60e51b815260206004820152602b60248201527f45524332304f776e61626c653a206e6577206f776e657220697320746865207a60448201526a65726f206164647265737360a81b60648201526084016107d3565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610eac5760405162461bcd60e51b81526004016107d390612d7a565b604051600090339047908381818185875af1925050503d8060008114610eee576040519150601f19603f3d011682016040523d82523d6000602084013e610ef3565b606091505b50505050565b6000546001600160a01b03163314610f235760405162461bcd60e51b81526004016107d390612d7a565b6019805460ff60d01b1916600160d01b179055565b6000546001600160a01b03163314610f625760405162461bcd60e51b81526004016107d390612d7a565b6019805460ff60a01b1916600160a01b1790556016548111610f8757610f8781611b16565b506019805460ff60a01b19169055565b6000546001600160a01b03163314610fc15760405162461bcd60e51b81526004016107d390612d7a565b737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0382161415610feb57600080fd5b6001600160a01b03811660009081526009602052604090205460ff16156110545760405162461bcd60e51b815260206004820152601860248201527f7573657220616c726561647920626c61636b6c6973746564000000000000000060448201526064016107d3565b6001600160a01b03166000908152600960205260409020805460ff19166001179055565b60006107f28284612e5a565b60006107f28284612e38565b6001600160a01b0383166110e65760405162461bcd60e51b815260206004820181905260248201527f45524332303a20617070726f76652066726f6d207a65726f206164647265737360448201526064016107d3565b6001600160a01b03821661113c5760405162461bcd60e51b815260206004820152601e60248201527f45524332303a20617070726f766520746f207a65726f2061646472657373000060448201526064016107d3565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166111fd5760405162461bcd60e51b815260206004820152602160248201527f45524332303a207472616e736665722066726f6d207a65726f206164647265736044820152607360f81b60648201526084016107d3565b6001600160a01b0382166112535760405162461bcd60e51b815260206004820152601f60248201527f45524332303a207472616e7366657220746f207a65726f20616464726573730060448201526064016107d3565b600081116112b55760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016107d3565b6001600160a01b03831660009081526009602052604090205460ff16156112db57600080fd5b6001600160a01b0383166000908152600a602052604090205460ff161580611305575042600c5411155b61139d5760405162461bcd60e51b815260206004820152605960248201527f536e69706572732063616e2774207472616e7366657220746f6b656e7320746f60448201527f2073656c6c206368656170657220756e74696c2070656e616c74792074696d6560648201527f6672616d65206973206f7665722e2020444d2061204d6f642e00000000000000608482015260a4016107d3565b601954600160d01b900460ff16151560011480156113d457506001600160a01b03821660009081526008602052604090205460ff16155b1561144e57601154816113e684610bad565b6113f09190612dfb565b111561144e5760405162461bcd60e51b815260206004820152602760248201527f4d617820616d6f756e74206f6620746f6b656e7320666f722077616c6c6574206044820152661c995858da195960ca1b60648201526084016107d3565b601954600160c01b900460ff161515600114801561147957506018546001600160a01b038481169116145b156114f3576c097761759c34d7b26fb00000008111156114f35760405162461bcd60e51b815260206004820152602f60248201527f4c696d6974732061726520696e20706c6163652c20706c65617365206c6f776560448201526e1c88189d5e5a5b99c8185b5bdd5b9d608a1b60648201526084016107d3565b601954600160c81b900460ff161515600114801561151f57506000546001600160a01b03838116911614155b801561153957506018546001600160a01b03848116911614155b1561154957801561154957600080fd5b6018546001600160a01b03848116911614801561157457506017546001600160a01b03838116911614155b801561159957506001600160a01b03821660009081526006602052604090205460ff16155b80156115ae5750601954600160b01b900460ff165b1561160b57600f548111156115c257600080fd5b6001600160a01b03821660009081526005602052604090205442116115e657600080fd5b6115f142601e612dfb565b6001600160a01b0383166000908152600560205260409020555b601954600160b81b900460ff1615156001141561184457601780546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b81529051829163c45a0155916004808301926020929190829003018186803b15801561168257600080fd5b505afa158015611696573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ba9190612b5b565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561170257600080fd5b505afa158015611716573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061173a9190612b5b565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b15801561178057600080fd5b505afa158015611794573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117b89190612b5b565b601880546001600160a01b0319166001600160a01b039290921691909117905543600b556117e9426203f480612dfb565b600c55506018546001600160a01b039081166000908152600860205260408082208054600160ff1991821681179092556017549094168352912080549092161790556019805463ff00ffff60b81b19166201000160c01b1790555b6000546001600160a01b0384811691161480159061187057506018546001600160a01b03838116911614155b801561187d5750600b5443145b156118cc576001600160a01b0382166000818152600a6020526040808220805460ff19166001179055517fb90badc1cf1c52268f4fa9afb5276aebf640bcca3300cdfc9cf37db17daa13e29190a25b60006118d730610bad565b601954909150600160a01b900460ff1615801561190157506018546001600160a01b038481169116145b80156119165750601954600160a81b900460ff165b1561192c57601a54811061192c5761192c611c89565b6001600160a01b03841660009081526006602052604090205460019060ff168061196e57506001600160a01b03841660009081526006602052604090205460ff165b15611977575060005b6001600160a01b0385166000908152600a602052604090205460ff1680156119a0575042600c54115b15611a59576012546119b69060ff166005612e79565b6012805460ff191660ff92831617908190556119dc91600160201b909104166005612e79565b6012805464ff000000001916600160201b60ff938416021790819055611a0c91600160301b909104166005612e79565b6012805466ff0000000000001916600160301b60ff938416021790819055611a3e91600160401b909104166005612e79565b601260086101000a81548160ff021916908360ff1602179055505b611a6585858584611e94565b5050505050565b60008184841115611a905760405162461bcd60e51b81526004016107d39190612d25565b505050900390565b6000806000611aa56120a0565b9092509050611ab48282611084565b9250505090565b60006107f28284612dfb565b6000806000806000806000806000611ade8a612250565b9250925092506000806000611afc8d8686611af7611a98565b612292565b919f909e50909c50959a5093985091965092945050505050565b6040805160028082526060820183526000926020830190803683375050601754604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b158015611b7b57600080fd5b505afa158015611b8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bb39190612b5b565b81600081518110611bc657611bc6612eea565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110611bfa57611bfa612eea565b6001600160a01b0392831660209182029290920101526017546001549082169163b6f9de95918591600091869116611c344261012c611abb565b6040518663ffffffff1660e01b8152600401611c539493929190612cf0565b6000604051808303818588803b158015611c6c57600080fd5b505af1158015611c80573d6000803e3d6000fd5b50505050505050565b6019805460ff60a01b1916600160a01b17905560125462010000900460ff1615611cd057600154601354611cca9130916001600160a01b039091169061119d565b60006013555b6000611cdb30610bad565b90506000601654601554601454611cf29190612dfb565b611cfc9190612dfb565b90506000611d16600260155461108490919063ffffffff16565b90506000611d2484836122e2565b905047611d30826122ee565b6000611d3c47836122e2565b90506000611d5f86611d596014548561107890919063ffffffff16565b90611084565b90506000611d6d83836122e2565b60006015819055601481905560195460405192935090916001600160a01b039091169084908381818185875af1925050503d8060008114611dca576040519150601f19603f3d011682016040523d82523d6000602084013e611dcf565b606091505b50509050611ddd8783612460565b60408051878152602081018490529081018890527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a14715611e7c576019546040516001600160a01b03909116904790600081818185875af1925050503d8060008114611e71576040519150601f19603f3d011682016040523d82523d6000602084013e611e76565b606091505b50909150505b50506019805460ff60a01b1916905550505050505050565b80611ea157611ea1612549565b6001600160a01b03841660009081526007602052604090205460ff168015611ee257506001600160a01b03831660009081526007602052604090205460ff16155b15611ef757611ef2848484612673565b611ff5565b6001600160a01b03841660009081526007602052604090205460ff16158015611f3857506001600160a01b03831660009081526007602052604090205460ff165b15611f4857611ef2848484612799565b6001600160a01b03841660009081526007602052604090205460ff16158015611f8a57506001600160a01b03831660009081526007602052604090205460ff16155b15611f9a57611ef2848484612842565b6001600160a01b03841660009081526007602052604090205460ff168015611fda57506001600160a01b03831660009081526007602052604090205460ff165b15611fea57611ef2848484612886565b611ff5848484612842565b80610ef3576012805468ff00000000000000001966ff000000ff00001964ff000000ff198316610100840460ff9081169182176501000000000060ff1990961692909217949094048416600160201b021790811662ff000019600160381b83048516600160301b0290811691909117630100000066ff00000000000019909316909117919091048316620100000217908116600160481b909104909116600160401b02179055610ef3565b600e5460009081906d04ee2d6d415b85acef8100000000825b600d54811015612209578260026000600d84815481106120db576120db612eea565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061214657508160036000600d848154811061211f5761211f612eea565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612167575050600e54936d04ee2d6d415b85acef81000000009350915050565b6121ad60026000600d848154811061218157612181612eea565b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906122e2565b92506121f560036000600d84815481106121c9576121c9612eea565b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906122e2565b91508061220181612eb9565b9150506120b9565b50600e54612225906d04ee2d6d415b85acef8100000000611084565b821015612247575050600e54926d04ee2d6d415b85acef810000000092509050565b90939092509050565b60008060008061225f856128f9565b9050600061226c86612914565b905060006122848261227e89866122e2565b906122e2565b979296509094509092505050565b60008080806122a18886611078565b905060006122af8887611078565b905060006122bd8888611078565b905060006122cf8261227e86866122e2565b939b939a50919850919650505050505050565b60006107f28284612ea2565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061232357612323612eea565b6001600160a01b03928316602091820292909201810191909152601754604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561237757600080fd5b505afa15801561238b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123af9190612b5b565b816001815181106123c2576123c2612eea565b6001600160a01b0392831660209182029290920101526017546123e89130911684611090565b6017546001600160a01b031663791ac947836000843061240a4261012c611abb565b6040518663ffffffff1660e01b815260040161242a959493929190612dbf565b600060405180830381600087803b15801561244457600080fd5b505af1158015612458573d6000803e3d6000fd5b505050505050565b6017546124789030906001600160a01b031684611090565b6017546001546001600160a01b039182169163f305d719918491309187916000918291166124a84261012c611abb565b60405160e089901b6001600160e01b03191681526001600160a01b039687166004820152602481019590955260448501939093526064840191909152909216608482015260a481019190915260c4016060604051808303818588803b15801561251057600080fd5b505af1158015612524573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611a659190612c7e565b60125460ff161580156125665750601254600160201b900460ff16155b801561257c5750601254600160301b900460ff16155b8015612591575060125462010000900460ff16155b80156125a75750601254600160401b900460ff16155b156125ae57565b6012805469ffff00ff00ff00ff00ff1967ff000000ff0000001965ff000000ff0019831665ff00000000001961010060ff8087169190910291821692909217600160201b61ff001990961690911794909404811665010000000000029390931790811663ff00000019600160301b83048516600160381b02908116919091176201000067ff000000000000001990931690911791909104831663010000000217908116600160401b909104909116600160481b0268ff00ff00ff00ff00ff1916179055565b60008060008060008061268587611ac7565b6001600160a01b038f16600090815260036020526040902054959b509399509197509550935091506126b790886122e2565b6001600160a01b038a166000908152600360209081526040808320939093556002905220546126e690876122e2565b6001600160a01b03808b1660009081526002602052604080822093909355908a16815220546127159086611abb565b6001600160a01b03891660009081526002602052604090205561273781612974565b6127418483612b05565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161278691815260200190565b60405180910390a3505050505050505050565b6000806000806000806127ab87611ac7565b6001600160a01b038f16600090815260026020526040902054959b509399509197509550935091506127dd90876122e2565b6001600160a01b03808b16600090815260026020908152604080832094909455918b168152600390915220546128139084611abb565b6001600160a01b0389166000908152600360209081526040808320939093556002905220546127159086611abb565b60008060008060008061285487611ac7565b6001600160a01b038f16600090815260026020526040902054959b509399509197509550935091506126e690876122e2565b60008060008060008061289887611ac7565b6001600160a01b038f16600090815260036020526040902054959b509399509197509550935091506128ca90886122e2565b6001600160a01b038a166000908152600360209081526040808320939093556002905220546127dd90876122e2565b60125460009061071490606490611d5990859060ff16611078565b60125460009061071490606490611d599060ff600160401b8204811691600160201b810482169161295691620100008104821691600160301b90910416612e13565b6129609190612e13565b61296a9190612e13565b859060ff16611078565b60125460ff600160501b820481169161299591620100009091041683612e5a565b61299f9190612e38565b601360008282546129b09190612dfb565b909155505060125460ff600160501b82048116916129d791600160301b9091041683612e5a565b6129e19190612e38565b601460008282546129f29190612dfb565b909155505060125460ff600160501b8204811691612a1991600160201b9091041683612e5a565b612a239190612e38565b60156000828254612a349190612dfb565b909155505060125460ff600160501b8204811691612a5b91600160401b9091041683612e5a565b612a659190612e38565b60166000828254612a769190612dfb565b9091555060009050612a86611a98565b90506000612a948383611078565b30600090815260026020526040902054909150612ab19082611abb565b3060009081526002602090815260408083209390935560079052205460ff1615612b005730600090815260036020526040902054612aef9084611abb565b306000908152600360205260409020555b505050565b600e54612b1290836122e2565b600e55601054612b229082611abb565b6010555050565b80358015158114612b3957600080fd5b919050565b600060208284031215612b5057600080fd5b81356107f281612f00565b600060208284031215612b6d57600080fd5b81516107f281612f00565b60008060408385031215612b8b57600080fd5b8235612b9681612f00565b91506020830135612ba681612f00565b809150509250929050565b600080600060608486031215612bc657600080fd5b8335612bd181612f00565b92506020840135612be181612f00565b929592945050506040919091013590565b60008060408385031215612c0557600080fd5b8235612c1081612f00565b946020939093013593505050565b600060208284031215612c3057600080fd5b6107f282612b29565b600060208284031215612c4b57600080fd5b5035919050565b60008060408385031215612c6557600080fd5b82359150612c7560208401612b29565b90509250929050565b600080600060608486031215612c9357600080fd5b8351925060208401519150604084015190509250925092565b600081518084526020808501945080840160005b83811015612ce55781516001600160a01b031687529582019590820190600101612cc0565b509495945050505050565b848152608060208201526000612d096080830186612cac565b6001600160a01b03949094166040830152506060015292915050565b600060208083528351808285015260005b81811015612d5257858101830151858201604001528201612d36565b81811115612d64576000604083870101525b50601f01601f1916929092016040019392505050565b60208082526025908201527f45524332304f776e61626c653a2063616c6c6572206973206e6f74207468652060408201526437bbb732b960d91b606082015260800190565b85815284602082015260a060408201526000612dde60a0830186612cac565b6001600160a01b0394909416606083015250608001529392505050565b60008219821115612e0e57612e0e612ed4565b500190565b600060ff821660ff84168060ff03821115612e3057612e30612ed4565b019392505050565b600082612e5557634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615612e7457612e74612ed4565b500290565b600060ff821660ff84168160ff0481118215151615612e9a57612e9a612ed4565b029392505050565b600082821015612eb457612eb4612ed4565b500390565b6000600019821415612ecd57612ecd612ed4565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0381168114612f1557600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220046753b263ee72fd68c34fce46724357352347e54796ce6a79f919394b44c5f664736f6c63430008070033

Deployed Bytecode Sourcemap

12933:22859:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16363:92;;;;;;;;;;-1:-1:-1;16442:5:0;;;;;;;;;;;;-1:-1:-1;;;16442:5:0;;;;16363:92;;;;;;;:::i;:::-;;;;;;;;17282:161;;;;;;;;;;-1:-1:-1;17282:161:0;;;;;:::i;:::-;;:::i;:::-;;;4765:14:1;;4758:22;4740:41;;4728:2;4713:18;17282:161:0;4600:187:1;16655:95:0;;;;;;;;;;-1:-1:-1;13775:13:0;16655:95;;;11509:25:1;;;11497:2;11482:18;16655:95:0;11363:177:1;13617:33:0;;;;;;;;;;;;;;;;17449:329;;;;;;;;;;-1:-1:-1;17449:329:0;;;;;:::i;:::-;;:::i;19020:241::-;;;;;;;;;;-1:-1:-1;19020:241:0;;;;;:::i;:::-;;:::i;16561:88::-;;;;;;;;;;-1:-1:-1;16561:88:0;;14129:2;12598:36:1;;12586:2;12571:18;16561:88:0;12456:184:1;17784:218:0;;;;;;;;;;-1:-1:-1;17784:218:0;;;;;:::i;:::-;;:::i;31044:78::-;;;;;;;;;;;;;:::i;:::-;;22937:111;;;;;;;;;;-1:-1:-1;22937:111:0;;;;;:::i;:::-;;:::i;18570:444::-;;;;;;;;;;-1:-1:-1;18570:444:0;;;;;:::i;:::-;;:::i;23054:124::-;;;;;;;;;;-1:-1:-1;23054:124:0;;;;;:::i;:::-;-1:-1:-1;;;;;23143:27:0;23119:4;23143:27;;;:18;:27;;;;;;;;;23054:124;18461:103;;;;;;;;;;-1:-1:-1;18461:103:0;;;;;:::i;:::-;;:::i;27325:148::-;;;;;;;;;;-1:-1:-1;27325:148:0;;;;;:::i;:::-;;:::i;31304:86::-;;;;;;;;;;;;;:::i;27170:152::-;;;;;;;;;;-1:-1:-1;27170:152:0;;;;;:::i;:::-;;:::i;30945:93::-;;;;;;;;;;;;;:::i;31607:82::-;;;;;;;;;;;;;:::i;30848:91::-;;;;;;;;;;;;;:::i;16756:198::-;;;;;;;;;;-1:-1:-1;16756:198:0;;;;;:::i;:::-;;:::i;788:148::-;;;;;;;;;;;;;:::i;31128:80::-;;;;;;;;;;;;;:::i;31525:76::-;;;;;;;;;;;;;:::i;13526:43::-;;;;;;;;;;-1:-1:-1;13526:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;18333:120;;;;;;;;;;-1:-1:-1;18333:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;18425:20:0;18401:4;18425:20;;;:11;:20;;;;;;;;;18333:120;560:87;;;;;;;;;;-1:-1:-1;606:7:0;633:6;560:87;;-1:-1:-1;;;;;633:6:0;;;3617:51:1;;3605:2;3590:18;560:87:0;3471:203:1;16461:94:0;;;;;;;;;;-1:-1:-1;16542:5:0;;;;;;;;;;;;-1:-1:-1;;;16542:5:0;;;;16461:94;;18008:319;;;;;;;;;;-1:-1:-1;18008:319:0;;;;;:::i;:::-;;:::i;16960:167::-;;;;;;;;;;-1:-1:-1;16960:167:0;;;;;:::i;:::-;;:::i;30766:76::-;;;;;;;;;;;;;:::i;17133:143::-;;;;;;;;;;-1:-1:-1;17133:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;17241:18:0;;;17214:7;17241:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;17133:143;13573:37;;;;;;;;;;;;;;;;944:249;;;;;;;;;;-1:-1:-1;944:249:0;;;;;:::i;:::-;;:::i;31695:160::-;;;;;;;;;;;;;:::i;31214:84::-;;;;;;;;;;;;;:::i;26263:166::-;;;;;;;;;;-1:-1:-1;26263:166:0;;;;;:::i;:::-;;:::i;26947:220::-;;;;;;;;;;-1:-1:-1;26947:220:0;;;;;:::i;:::-;;:::i;17282:161::-;17357:4;17374:39;213:10;17397:7;17406:6;17374:8;:39::i;:::-;-1:-1:-1;17431:4:0;17282:161;;;;;:::o;17449:329::-;17545:4;17562:36;17572:6;17580:9;17591:6;17562:9;:36::i;:::-;17609:139;17618:6;213:10;17648:89;17686:6;17648:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17648:19:0;;;;;;:11;:19;;;;;;;;213:10;17648:33;;;;;;;;;;:37;:89::i;:::-;17609:8;:139::i;:::-;-1:-1:-1;17766:4:0;17449:329;;;;;:::o;19020:241::-;19087:7;19126;;19115;:18;;19107:61;;;;-1:-1:-1;;;19107:61:0;;8413:2:1;19107:61:0;;;8395:21:1;8452:2;8432:18;;;8425:30;8491:32;8471:18;;;8464:60;8541:18;;19107:61:0;;;;;;;;;19179:19;19201:10;:8;:10::i;:::-;19179:32;-1:-1:-1;19229:24:0;:7;19179:32;19229:11;:24::i;:::-;19222:31;19020:241;-1:-1:-1;;;19020:241:0:o;17784:218::-;213:10;17872:4;17921:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;17921:34:0;;;;;;;;;;17872:4;;17889:83;;17912:7;;17921:50;;17960:10;17921:38;:50::i;31044:78::-;606:7;633:6;-1:-1:-1;;;;;633:6:0;213:10;695:23;687:73;;;;-1:-1:-1;;;687:73:0;;;;;;;:::i;:::-;31097:10:::1;:17:::0;;-1:-1:-1;;;;31097:17:0::1;-1:-1:-1::0;;;31097:17:0::1;::::0;;31044:78::o;22937:111::-;606:7;633:6;-1:-1:-1;;;;;633:6:0;213:10;695:23;687:73;;;;-1:-1:-1;;;687:73:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23006:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;23006:34:0::1;23036:4;23006:34;::::0;;22937:111::o;18570:444::-;18661:7;13775:13;18689:7;:18;;18681:59;;;;-1:-1:-1;;;18681:59:0;;6470:2:1;18681:59:0;;;6452:21:1;6509:2;6489:18;;;6482:30;6548;6528:18;;;6521:58;6596:18;;18681:59:0;6268:352:1;18681:59:0;18756:17;18751:256;;18791:15;18820:19;18831:7;18820:10;:19::i;:::-;-1:-1:-1;18790:49:0;;-1:-1:-1;18854:14:0;;-1:-1:-1;;;;;18854:14:0;18751:256;18904:23;18939:19;18950:7;18939:10;:19::i;:::-;-1:-1:-1;18901:57:0;;-1:-1:-1;18973:22:0;;-1:-1:-1;;;;;18973:22:0;18461:103;606:7;633:6;-1:-1:-1;;;;;633:6:0;213:10;695:23;687:73;;;;-1:-1:-1;;;687:73:0;;;;;;;:::i;:::-;18533:15:::1;:23:::0;;;::::1;;-1:-1:-1::0;;;18533:23:0::1;-1:-1:-1::0;;;;18533:23:0;;::::1;::::0;;;::::1;::::0;;18461:103::o;27325:148::-;606:7;633:6;-1:-1:-1;;;;;633:6:0;213:10;695:23;687:73;;;;-1:-1:-1;;;687:73:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27399:20:0;::::1;27422:5;27399:20:::0;;;:11:::1;:20;::::0;;;;;:28;;-1:-1:-1;;27399:28:0::1;::::0;;27443:22;::::1;::::0;27422:5;27443:22:::1;27325:148:::0;:::o;31304:86::-;606:7;633:6;-1:-1:-1;;;;;633:6:0;213:10;695:23;687:73;;;;-1:-1:-1;;;687:73:0;;;;;;;:::i;:::-;31362:12:::1;:20:::0;;-1:-1:-1;;;;31362:20:0::1;::::0;;31304:86::o;27170:152::-;606:7;633:6;-1:-1:-1;;;;;633:6:0;213:10;695:23;687:73;;;;-1:-1:-1;;;687:73:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27240:13:0;::::1;;::::0;;;:6:::1;:13;::::0;;;;;::::1;;27232:50;;;::::0;-1:-1:-1;;;27232:50:0;;9125:2:1;27232:50:0::1;::::0;::::1;9107:21:1::0;9164:2;9144:18;;;9137:30;9203:26;9183:18;;;9176:54;9247:18;;27232:50:0::1;8923:348:1::0;27232:50:0::1;-1:-1:-1::0;;;;;27293:13:0::1;27309:5;27293:13:::0;;;:6:::1;:13;::::0;;;;:21;;-1:-1:-1;;27293:21:0::1;::::0;;27170:152::o;30945:93::-;606:7;633:6;-1:-1:-1;;;;;633:6:0;213:10;695:23;687:73;;;;-1:-1:-1;;;687:73:0;;;;;;;:::i;:::-;31001:21:::1;:29:::0;;-1:-1:-1;;;;31001:29:0::1;::::0;;30945:93::o;31607:82::-;606:7;633:6;-1:-1:-1;;;;;633:6:0;213:10;695:23;687:73;;;;-1:-1:-1;;;687:73:0;;;;;;;:::i;:::-;31663:10:::1;:18:::0;;-1:-1:-1;;;;31663:18:0::1;::::0;;31607:82::o;30848:91::-;606:7;633:6;-1:-1:-1;;;;;633:6:0;213:10;695:23;687:73;;;;-1:-1:-1;;;687:73:0;;;;;;;:::i;:::-;30903:21:::1;:28:::0;;-1:-1:-1;;;;30903:28:0::1;-1:-1:-1::0;;;30903:28:0::1;::::0;;30848:91::o;16756:198::-;-1:-1:-1;;;;;16846:20:0;;16822:7;16846:20;;;:11;:20;;;;;;;;16842:49;;;-1:-1:-1;;;;;;16875:16:0;;;;;:7;:16;;;;;;;16756:198::o;16842:49::-;-1:-1:-1;;;;;16929:16:0;;;;;;:7;:16;;;;;;16909:37;;:19;:37::i;788:148::-;606:7;633:6;-1:-1:-1;;;;;633:6:0;213:10;695:23;687:73;;;;-1:-1:-1;;;687:73:0;;;;;;;:::i;:::-;895:1:::1;879:6:::0;;858:40:::1;::::0;-1:-1:-1;;;;;879:6:0;;::::1;::::0;858:40:::1;::::0;895:1;;858:40:::1;926:1;909:19:::0;;-1:-1:-1;;;;;;909:19:0::1;::::0;;788:148::o;31128:80::-;606:7;633:6;-1:-1:-1;;;;;633:6:0;213:10;695:23;687:73;;;;-1:-1:-1;;;687:73:0;;;;;;;:::i;:::-;31182:10:::1;:18:::0;;-1:-1:-1;;;;31182:18:0::1;::::0;;31128:80::o;31525:76::-;606:7;633:6;-1:-1:-1;;;;;633:6:0;213:10;695:23;687:73;;;;-1:-1:-1;;;687:73:0;;;;;;;:::i;:::-;31576:10:::1;:17:::0;;-1:-1:-1;;;;31576:17:0::1;-1:-1:-1::0;;;31576:17:0::1;::::0;;31525:76::o;18008:319::-;18101:4;18118:179;213:10;18168:7;18190:96;18229:15;18190:96;;;;;;;;;;;;;;;;;213:10;18190:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;18190:34:0;;;;;;;;;;;;:38;:96::i;16960:167::-;17038:4;17055:42;213:10;17079:9;17090:6;17055:9;:42::i;30766:76::-;606:7;633:6;-1:-1:-1;;;;;633:6:0;213:10;695:23;687:73;;;;-1:-1:-1;;;687:73:0;;;;;;;:::i;:::-;30816:11:::1;:18:::0;;-1:-1:-1;;;;30816:18:0::1;-1:-1:-1::0;;;30816:18:0::1;::::0;;30766:76::o;944:249::-;606:7;633:6;-1:-1:-1;;;;;633:6:0;213:10;695:23;687:73;;;;-1:-1:-1;;;687:73:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;1033:22:0;::::1;1025:78;;;::::0;-1:-1:-1;;;1025:78:0;;9478:2:1;1025:78:0::1;::::0;::::1;9460:21:1::0;9517:2;9497:18;;;9490:30;9556:34;9536:18;;;9529:62;-1:-1:-1;;;9607:18:1;;;9600:41;9658:19;;1025:78:0::1;9276:407:1::0;1025:78:0::1;1140:6;::::0;;1119:38:::1;::::0;-1:-1:-1;;;;;1119:38:0;;::::1;::::0;1140:6;::::1;::::0;1119:38:::1;::::0;::::1;1168:6;:17:::0;;-1:-1:-1;;;;;;1168:17:0::1;-1:-1:-1::0;;;;;1168:17:0;;;::::1;::::0;;;::::1;::::0;;944:249::o;31695:160::-;606:7;633:6;-1:-1:-1;;;;;633:6:0;213:10;695:23;687:73;;;;-1:-1:-1;;;687:73:0;;;;;;;:::i;:::-;31789:58:::1;::::0;31753:12:::1;::::0;31797:10:::1;::::0;31821:21:::1;::::0;31753:12;31789:58;31753:12;31789:58;31821:21;31797:10;31789:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;31695:160:0:o;31214:84::-;606:7;633:6;-1:-1:-1;;;;;633:6:0;213:10;695:23;687:73;;;;-1:-1:-1;;;687:73:0;;;;;;;:::i;:::-;31271:12:::1;:19:::0;;-1:-1:-1;;;;31271:19:0::1;-1:-1:-1::0;;;31271:19:0::1;::::0;;31214:84::o;26263:166::-;606:7;633:6;-1:-1:-1;;;;;633:6:0;213:10;695:23;687:73;;;;-1:-1:-1;;;687:73:0;;;;;;;:::i;:::-;15635:16:::1;:23:::0;;-1:-1:-1;;;;15635:23:0::1;-1:-1:-1::0;;;15635:23:0::1;::::0;;26356:13:::2;::::0;26346:23;::::2;26342:80;;26386:24;26403:6;26386:16;:24::i;:::-;-1:-1:-1::0;15681:16:0::1;:24:::0;;-1:-1:-1;;;;15681:24:0::1;::::0;;26263:166::o;26947:220::-;606:7;633:6;-1:-1:-1;;;;;633:6:0;213:10;695:23;687:73;;;;-1:-1:-1;;;687:73:0;;;;;;;:::i;:::-;27023:42:::1;-1:-1:-1::0;;;;;27014:51:0;::::1;;;27006:60;;;::::0;::::1;;-1:-1:-1::0;;;;;27086:13:0;::::1;;::::0;;;:6:::1;:13;::::0;;;;;::::1;;27085:14;27077:51;;;::::0;-1:-1:-1;;;27077:51:0;;8772:2:1;27077:51:0::1;::::0;::::1;8754:21:1::0;8811:2;8791:18;;;8784:30;8850:26;8830:18;;;8823:54;8894:18;;27077:51:0::1;8570:348:1::0;27077:51:0::1;-1:-1:-1::0;;;;;27139:13:0::1;;::::0;;;:6:::1;:13;::::0;;;;:20;;-1:-1:-1;;27139:20:0::1;27155:4;27139:20;::::0;;26947:220::o;2924:98::-;2982:7;3009:5;3013:1;3009;:5;:::i;3028:98::-;3086:7;3113:5;3117:1;3113;:5;:::i;23184:325::-;-1:-1:-1;;;;;23275:19:0;;23267:64;;;;-1:-1:-1;;;23267:64:0;;11204:2:1;23267:64:0;;;11186:21:1;;;11223:18;;;11216:30;11282:34;11262:18;;;11255:62;11334:18;;23267:64:0;11002:356:1;23267:64:0;-1:-1:-1;;;;;23350:21:0;;23342:64;;;;-1:-1:-1;;;23342:64:0;;6111:2:1;23342:64:0;;;6093:21:1;6150:2;6130:18;;;6123:30;6189:32;6169:18;;;6162:60;6239:18;;23342:64:0;5909:354:1;23342:64:0;-1:-1:-1;;;;;23417:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;23469:32;;11509:25:1;;;23469:32:0;;11482:18:1;23469:32:0;;;;;;;23184:325;;;:::o;23515:2742::-;-1:-1:-1;;;;;23601:18:0;;23593:64;;;;-1:-1:-1;;;23593:64:0;;7243:2:1;23593:64:0;;;7225:21:1;7282:2;7262:18;;;7255:30;7321:34;7301:18;;;7294:62;-1:-1:-1;;;7372:18:1;;;7365:31;7413:19;;23593:64:0;7041:397:1;23593:64:0;-1:-1:-1;;;;;23676:16:0;;23668:60;;;;-1:-1:-1;;;23668:60:0;;7645:2:1;23668:60:0;;;7627:21:1;7684:2;7664:18;;;7657:30;7723:33;7703:18;;;7696:61;7774:18;;23668:60:0;7443:355:1;23668:60:0;23756:1;23747:6;:10;23739:64;;;;-1:-1:-1;;;23739:64:0;;10296:2:1;23739:64:0;;;10278:21:1;10335:2;10315:18;;;10308:30;10374:34;10354:18;;;10347:62;-1:-1:-1;;;10425:18:1;;;10418:39;10474:19;;23739:64:0;10094:405:1;23739:64:0;-1:-1:-1;;;;;23817:12:0;;;;;;:6;:12;;;;;;;;23816:13;23808:22;;;;;;-1:-1:-1;;;;;23844:17:0;;;;;;:11;:17;;;;;;;;23843:18;;:59;;;23887:15;23865:18;;:37;;23843:59;23835:161;;;;-1:-1:-1;;;23835:161:0;;10706:2:1;23835:161:0;;;10688:21:1;10745:2;10725:18;;;10718:30;10784:34;10764:18;;;10757:62;10855:34;10835:18;;;10828:62;10927:27;10906:19;;;10899:56;10972:19;;23835:161:0;10504:493:1;23835:161:0;24005:12;;-1:-1:-1;;;24005:12:0;;;;:20;;24021:4;24005:20;:47;;;;-1:-1:-1;;;;;;24031:21:0;;;;;;:17;:21;;;;;;;;24029:23;24005:47;24001:172;;;24103:14;;24093:6;24077:13;24087:2;24077:9;:13::i;:::-;:22;;;;:::i;:::-;:40;;24069:92;;;;-1:-1:-1;;;24069:92:0;;8005:2:1;24069:92:0;;;7987:21:1;8044:2;8024:18;;;8017:30;8083:34;8063:18;;;8056:62;-1:-1:-1;;;8134:18:1;;;8127:37;8181:19;;24069:92:0;7803:403:1;24069:92:0;24187:10;;-1:-1:-1;;;24187:10:0;;;;:18;;24201:4;24187:18;:39;;;;-1:-1:-1;24217:9:0;;-1:-1:-1;;;;;24209:17:0;;;24217:9;;24209:17;24187:39;24183:148;;;24252:21;24242:6;:31;;24234:91;;;;-1:-1:-1;;;24234:91:0;;6827:2:1;24234:91:0;;;6809:21:1;6866:2;6846:18;;;6839:30;6905:34;6885:18;;;6878:62;-1:-1:-1;;;6956:18:1;;;6949:45;7011:19;;24234:91:0;6625:411:1;24234:91:0;24339:10;;-1:-1:-1;;;24339:10:0;;;;:18;;24353:4;24339:18;:35;;;;-1:-1:-1;606:7:0;633:6;-1:-1:-1;;;;;24361:13:0;;;633:6;;24361:13;;24339:35;:56;;;;-1:-1:-1;24386:9:0;;-1:-1:-1;;;;;24378:17:0;;;24386:9;;24378:17;;24339:56;24335:103;;;24411:20;;24403:29;;;;;;24460:9;;-1:-1:-1;;;;;24452:17:0;;;24460:9;;24452:17;:47;;;;-1:-1:-1;24487:11:0;;-1:-1:-1;;;;;24473:26:0;;;24487:11;;24473:26;;24452:47;:75;;;;-1:-1:-1;;;;;;24505:22:0;;;;;;:18;:22;;;;;;;;24503:24;24452:75;:94;;;;-1:-1:-1;24531:15:0;;-1:-1:-1;;;24531:15:0;;;;24452:94;24448:296;;;24585:12;;24575:6;:22;;24567:31;;;;;;-1:-1:-1;;;;;24625:16:0;;;;;;:12;:16;;;;;;24644:15;-1:-1:-1;24617:43:0;;;;;;24698:30;:15;24717:10;24698:30;:::i;:::-;-1:-1:-1;;;;;24679:16:0;;;;;;:12;:16;;;;;:49;24448:296;24757:11;;-1:-1:-1;;;24757:11:0;;;;:19;;24772:4;24757:19;24754:630;;;24904:11;:26;;-1:-1:-1;;;;;;24904:26:0;24846:42;24904:26;;;;;;24975:22;;;-1:-1:-1;;;24975:22:0;;;;24846:42;;24975:20;;:22;;;;;;;;;;;;;;24846:42;24975:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;24957:49:0;;25015:4;25022:12;-1:-1:-1;;;;;25022:17:0;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24957:85;;-1:-1:-1;;;;;;24957:85:0;;;;;;;-1:-1:-1;;;;;3909:15:1;;;24957:85:0;;;3891:34:1;3961:15;;3941:18;;;3934:43;3826:18;;24957:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24945:9;:97;;-1:-1:-1;;;;;;24945:97:0;-1:-1:-1;;;;;24945:97:0;;;;;;;;;;25078:12;25057:18;:33;25126:26;:15;25144:8;25126:26;:::i;:::-;25105:18;:47;-1:-1:-1;25193:9:0;;-1:-1:-1;;;;;25193:9:0;;;25167:37;;;;:17;:37;;;;;;:44;;25207:4;-1:-1:-1;;25167:44:0;;;;;;;;25252:11;;;;;25226:39;;;;:46;;;;;;;;25287:10;:17;;-1:-1:-1;;;;25353:19:0;-1:-1:-1;;;25353:19:0;;;24754:630;606:7;633:6;-1:-1:-1;;;;;25391:15:0;;;633:6;;25391:15;;;;:34;;-1:-1:-1;25416:9:0;;-1:-1:-1;;;;;25410:15:0;;;25416:9;;25410:15;;25391:34;:72;;;;;25445:18;;25429:12;:34;25391:72;25388:145;;;-1:-1:-1;;;;;25470:15:0;;;;;;:11;:15;;;;;;:22;;-1:-1:-1;;25470:22:0;25488:4;25470:22;;;25512:15;;;25470;25512;25388:145;25543:28;25574:24;25592:4;25574:9;:24::i;:::-;25614:16;;25543:55;;-1:-1:-1;;;;25614:16:0;;;;25613:17;:36;;;;-1:-1:-1;25640:9:0;;-1:-1:-1;;;;;25634:15:0;;;25640:9;;25634:15;25613:36;:61;;;;-1:-1:-1;25653:21:0;;-1:-1:-1;;;25653:21:0;;;;25613:61;25609:188;;;25719:29;;25695:20;:53;25691:95;;25757:13;:11;:13::i;:::-;-1:-1:-1;;;;;25841:24:0;;25807:12;25841:24;;;:18;:24;;;;;;25822:4;;25841:24;;;:50;;-1:-1:-1;;;;;;25869:22:0;;;;;;:18;:22;;;;;;;;25841:50;25837:98;;;-1:-1:-1;25918:5:0;25837:98;-1:-1:-1;;;;;25942:17:0;;;;;;:11;:17;;;;;;;;:57;;;;;25984:15;25963:18;;:36;25942:57;25939:259;;;26033:7;;:11;;:7;;26043:1;26033:11;:::i;:::-;26023:7;:21;;-1:-1:-1;;26023:21:0;;;;;;;;;;26077:11;;-1:-1:-1;;;26077:7:0;;;;26087:1;26077:11;:::i;:::-;26067:7;:21;;-1:-1:-1;;26067:21:0;-1:-1:-1;;;26067:21:0;;;;;;;;;;26121:11;;-1:-1:-1;;;26121:7:0;;;;26131:1;26121:11;:::i;:::-;26111:7;:21;;-1:-1:-1;;26111:21:0;-1:-1:-1;;;26111:21:0;;;;;;;;;;26166:12;;-1:-1:-1;;;26166:8:0;;;;26177:1;26166:12;:::i;:::-;26155:8;;:23;;;;;;;;;;;;;;;;;;25939:259;26208:41;26223:4;26229:2;26233:6;26241:7;26208:14;:41::i;:::-;23582:2675;;23515:2742;;;:::o;3236:206::-;3322:7;3383:12;3375:6;;;;3367:29;;;;-1:-1:-1;;;3367:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;3418:5:0;;;3236:206::o;20638:164::-;20680:7;20701:15;20718;20737:19;:17;:19::i;:::-;20700:56;;-1:-1:-1;20700:56:0;-1:-1:-1;20774:20:0;20700:56;;20774:11;:20::i;:::-;20767:27;;;;20638:164;:::o;2716:98::-;2774:7;2801:5;2805:1;2801;:5;:::i;19455:414::-;19514:7;19522;19530;19538;19546;19554;19575:23;19600:12;19614:18;19636:20;19648:7;19636:11;:20::i;:::-;19574:82;;;;;;19668:15;19685:23;19710:12;19726:50;19738:7;19747:4;19753:10;19765;:8;:10::i;:::-;19726:11;:50::i;:::-;19667:109;;;;-1:-1:-1;19667:109:0;;-1:-1:-1;19827:15:0;;-1:-1:-1;19844:4:0;;-1:-1:-1;19850:10:0;;-1:-1:-1;19455:414:0;;-1:-1:-1;;;;;19455:414:0:o;26435:509::-;26580:16;;;26594:1;26580:16;;;;;;;;26556:21;;26580:16;;;;;;;;-1:-1:-1;;26617:11:0;;:18;;;-1:-1:-1;;;26617:18:0;;;;26556:40;;-1:-1:-1;;;;;;26617:11:0;;;;:16;;-1:-1:-1;26617:18:0;;;;;;;;;;;;;;:11;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26607:4;26612:1;26607:7;;;;;;;;:::i;:::-;;;;;;:28;-1:-1:-1;;;;;26607:28:0;;;-1:-1:-1;;;;;26607:28:0;;;;;26664:4;26646;26651:1;26646:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;26646:23:0;;;:7;;;;;;;;;:23;26708:11;;;26866:4;26708:11;;;;:62;;26778:6;;26708:11;;26847:4;;26866;26901:24;:15;26921:3;26901:19;:24::i;:::-;26708:228;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26485:459;26435:509;:::o;28509:1291::-;15635:16;:23;;-1:-1:-1;;;;15635:23:0;-1:-1:-1;;;15635:23:0;;;28566:8:::1;::::0;;;::::1;15635:23:::0;28566:8:::1;:13:::0;28563:116:::1;;28621:4;::::0;28627:10:::1;::::0;28596:42:::1;::::0;28614:4:::1;::::0;-1:-1:-1;;;;;28621:4:0;;::::1;::::0;28596:9:::1;:42::i;:::-;28666:1;28653:10;:14:::0;28563:116:::1;28689:23;28715:24;28733:4;28715:9;:24::i;:::-;28689:50;;28750:25;28814:13;;28796:15;;28778;;:33;;;;:::i;:::-;:49;;;;:::i;:::-;28750:77;;28887:26;28916:22;28936:1;28916:15;;:19;;:22;;;;:::i;:::-;28887:51:::0;-1:-1:-1;28949:26:0::1;28978:39;:15:::0;28887:51;28978:19:::1;:39::i;:::-;28949:68:::0;-1:-1:-1;29056:21:0::1;29088:36;28949:68:::0;29088:16:::1;:36::i;:::-;29136:18;29157:44;:21;29183:17:::0;29157:25:::1;:44::i;:::-;29136:65;;29212:23;29238:54;29274:17;29238:31;29253:15;;29238:10;:14;;:31;;;;:::i;:::-;:35:::0;::::1;:54::i;:::-;29212:80:::0;-1:-1:-1;29303:23:0::1;29329:31;:10:::0;29212:80;29329:14:::1;:31::i;:::-;29389:1;29371:15;:19:::0;;;29401:15:::1;:19:::0;;;29457:9:::1;::::0;29449:51:::1;::::0;29303:57;;-1:-1:-1;29389:1:0;;-1:-1:-1;;;;;29457:9:0;;::::1;::::0;29480:15;;29389:1;29449:51;29389:1;29449:51;29480:15;29457:9;29449:51:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29431:69;;;29511:49;29524:18;29544:15;29511:12;:49::i;:::-;29576:71;::::0;;12334:25:1;;;12390:2;12375:18;;12368:34;;;12418:18;;;12411:34;;;29576:71:0::1;::::0;12322:2:1;12307:18;29576:71:0::1;;;;;;;29661:21;:34:::0;29658:135:::1;;29732:9;::::0;29724:57:::1;::::0;-1:-1:-1;;;;;29732:9:0;;::::1;::::0;29755:21:::1;::::0;29724:57:::1;::::0;;;29755:21;29732:9;29724:57:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;29711:70:0;;-1:-1:-1;;29658:135:0::1;-1:-1:-1::0;;15681:16:0;:24;;-1:-1:-1;;;;15681:24:0;;;-1:-1:-1;;;;;;;28509:1291:0:o;31861:788::-;31971:7;31966:28;;31980:14;:12;:14::i;:::-;-1:-1:-1;;;;;32009:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;32033:22:0;;;;;;:11;:22;;;;;;;;32032:23;32009:46;32005:597;;;32072:48;32094:6;32102:9;32113:6;32072:21;:48::i;:::-;32005:597;;;-1:-1:-1;;;;;32143:19:0;;;;;;:11;:19;;;;;;;;32142:20;:46;;;;-1:-1:-1;;;;;;32166:22:0;;;;;;:11;:22;;;;;;;;32142:46;32138:464;;;32205:46;32225:6;32233:9;32244:6;32205:19;:46::i;32138:464::-;-1:-1:-1;;;;;32274:19:0;;;;;;:11;:19;;;;;;;;32273:20;:47;;;;-1:-1:-1;;;;;;32298:22:0;;;;;;:11;:22;;;;;;;;32297:23;32273:47;32269:333;;;32337:44;32355:6;32363:9;32374:6;32337:17;:44::i;32269:333::-;-1:-1:-1;;;;;32403:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;32426:22:0;;;;;;:11;:22;;;;;;;;32403:45;32399:203;;;32465:48;32487:6;32495:9;32506:6;32465:21;:48::i;32399:203::-;32546:44;32564:6;32572:9;32583:6;32546:17;:44::i;:::-;32617:7;32612:29;;22759:15;;;-1:-1:-1;;;;;;22785:25:0;;22759:15;;;;;;;22785:25;;;22795:15;-1:-1:-1;;22749:25:0;;;;;;;22795:15;;;;;;-1:-1:-1;;;22785:25:0;;22857:28;;;-1:-1:-1;;;;;22831:15:0;;;;-1:-1:-1;;;22821:25:0;22857:28;;;;;;;22868:17;-1:-1:-1;;22821:25:0;;;;;;22868:17;;;;;;22857:28;;;22896:27;;;-1:-1:-1;;;22907:16:0;;;;;;-1:-1:-1;;;22896:27:0;;;;32626:15;22705:226;20808:556;20906:7;;20859;;;;13775:13;20859:7;20960:289;20984:9;:16;20980:20;;20960:289;;;21050:7;21026;:21;21034:9;21044:1;21034:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;21034:12:0;21026:21;;;;;;;;;;;;;:31;;:66;;;21085:7;21061;:21;21069:9;21079:1;21069:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;21069:12:0;21061:21;;;;;;;;;;;;;:31;21026:66;21022:97;;;-1:-1:-1;;21102:7:0;;;13775:13;;-1:-1:-1;20808:556:0;-1:-1:-1;;20808:556:0:o;21022:97::-;21144:34;21156:7;:21;21164:9;21174:1;21164:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;21164:12:0;21156:21;;;;;;;;;;;;;21144:7;;:11;:34::i;:::-;21134:44;;21203:34;21215:7;:21;21223:9;21233:1;21223:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;21223:12:0;21215:21;;;;;;;;;;;;;21203:7;;:11;:34::i;:::-;21193:44;-1:-1:-1;21002:3:0;;;;:::i;:::-;;;;20960:289;;;-1:-1:-1;21273:7:0;;:20;;13775:13;21273:11;:20::i;:::-;21263:7;:30;21259:61;;;-1:-1:-1;;21303:7:0;;;13775:13;;-1:-1:-1;20808:556:0;-1:-1:-1;20808:556:0:o;21259:61::-;21339:7;;21348;;-1:-1:-1;20808:556:0;-1:-1:-1;20808:556:0:o;19875:327::-;19934:7;19942;19950;19970:12;19985:24;20001:7;19985:15;:24::i;:::-;19970:39;;20020:18;20041:30;20063:7;20041:21;:30::i;:::-;20020:51;-1:-1:-1;20082:23:0;20108:33;20020:51;20108:17;:7;20120:4;20108:11;:17::i;:::-;:21;;:33::i;:::-;20082:59;20177:4;;-1:-1:-1;20183:10:0;;-1:-1:-1;19875:327:0;;-1:-1:-1;;;19875:327:0:o;20208:424::-;20320:7;;;;20374:24;:7;20386:11;20374;:24::i;:::-;20356:42;-1:-1:-1;20409:12:0;20424:21;:4;20433:11;20424:8;:21::i;:::-;20409:36;-1:-1:-1;20456:18:0;20477:27;:10;20492:11;20477:14;:27::i;:::-;20456:48;-1:-1:-1;20515:23:0;20541:33;20456:48;20541:17;:7;20553:4;20541:11;:17::i;:33::-;20593:7;;;;-1:-1:-1;20619:4:0;;-1:-1:-1;20208:424:0;;-1:-1:-1;;;;;;;20208:424:0:o;2820:98::-;2878:7;2905:5;2909:1;2905;:5;:::i;29808:496::-;29898:16;;;29912:1;29898:16;;;;;;;;29874:21;;29898:16;;;;;;;;;;-1:-1:-1;29898:16:0;29874:40;;29943:4;29925;29930:1;29925:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;29925:23:0;;;:7;;;;;;;;;;:23;;;;29969:11;;:18;;;-1:-1:-1;;;29969:18:0;;;;:11;;;;;:16;;:18;;;;;29925:7;;29969:18;;;;;:11;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29959:4;29964:1;29959:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;29959:28:0;;;:7;;;;;;;;;:28;30030:11;;29998:58;;30015:4;;30030:11;30044;29998:8;:58::i;:::-;30067:11;;-1:-1:-1;;;;;30067:11:0;:62;30144:11;30067;30214:4;30241;30261:24;:15;30281:3;30261:19;:24::i;:::-;30067:229;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29863:441;29808:496;:::o;30310:412::-;30423:11;;30391:58;;30408:4;;-1:-1:-1;;;;;30423:11:0;30437;30391:8;:58::i;:::-;30460:11;;;30660:4;-1:-1:-1;;;;;30460:11:0;;;;:27;;30495:9;;30528:4;;30548:11;;30460;;;;30660:4;30679:24;:15;30699:3;30679:19;:24::i;:::-;30460:254;;;;;;-1:-1:-1;;;;;;30460:254:0;;;-1:-1:-1;;;;;4347:15:1;;;30460:254:0;;;4329:34:1;4379:18;;;4372:34;;;;4422:18;;;4415:34;;;;4465:18;;;4458:34;;;;4529:15;;;4508:19;;;4501:44;4561:19;;;4554:35;;;;4263:19;;30460:254:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;22257:442::-;22304:7;;;;:12;:28;;;;-1:-1:-1;22320:7:0;;-1:-1:-1;;;22320:7:0;;;;:12;22304:28;:44;;;;-1:-1:-1;22336:7:0;;-1:-1:-1;;;22336:7:0;;;;:12;22304:44;:61;;;;-1:-1:-1;22352:8:0;;;;;;;:13;22304:61;:78;;;;-1:-1:-1;22369:8:0;;-1:-1:-1;;;22369:8:0;;;;:13;22304:78;22300:91;;;22257:442::o;22300:91::-;22421:7;;;-1:-1:-1;;;;;;22439:25:0;;-1:-1:-1;;22421:7:0;;;;;22403:25;;;;22439;;;;;;;-1:-1:-1;;;;;22403:25:0;;;;;;22457:7;;;;;;22439:25;;;;;;22511:28;;;-1:-1:-1;;;;;22493:7:0;;;;-1:-1:-1;;;22475:25:0;22511:28;;;;;;;22531:8;-1:-1:-1;;22475:25:0;;;;;;22531:8;;;;;;22511:28;;;22679:12;;;-1:-1:-1;;;22569:8:0;;;;;;-1:-1:-1;;;22550:27:0;-1:-1:-1;;22679:12:0;;;;22257:442::o;33918:650::-;34033:15;34063:23;34101:12;34128:23;34166:12;34193:18;34225:19;34236:7;34225:10;:19::i;:::-;-1:-1:-1;;;;;34273:15:0;;;;;;:7;:15;;;;;;34018:226;;-1:-1:-1;34018:226:0;;-1:-1:-1;34018:226:0;;-1:-1:-1;34018:226:0;-1:-1:-1;34018:226:0;-1:-1:-1;34018:226:0;-1:-1:-1;34273:28:0;;34293:7;34273:19;:28::i;:::-;-1:-1:-1;;;;;34255:15:0;;;;;;:7;:15;;;;;;;;:46;;;;34330:7;:15;;;;:28;;34350:7;34330:19;:28::i;:::-;-1:-1:-1;;;;;34312:15:0;;;;;;;:7;:15;;;;;;:46;;;;34390:18;;;;;;;:39;;34413:15;34390:22;:39::i;:::-;-1:-1:-1;;;;;34369:18:0;;;;;;:7;:18;;;;;:60;34440:26;34455:10;34440:14;:26::i;:::-;34477:23;34489:4;34495;34477:11;:23::i;:::-;34533:9;-1:-1:-1;;;;;34516:44:0;34525:6;-1:-1:-1;;;;;34516:44:0;;34544:15;34516:44;;;;11509:25:1;;11497:2;11482:18;;11363:177;34516:44:0;;;;;;;;34007:561;;;;;;33918:650;;;:::o;33250:662::-;33363:15;33393:23;33431:12;33458:23;33496:12;33523:18;33555:19;33566:7;33555:10;:19::i;:::-;-1:-1:-1;;;;;33603:15:0;;;;;;:7;:15;;;;;;33348:226;;-1:-1:-1;33348:226:0;;-1:-1:-1;33348:226:0;;-1:-1:-1;33348:226:0;-1:-1:-1;33348:226:0;-1:-1:-1;33348:226:0;-1:-1:-1;33603:28:0;;33348:226;33603:19;:28::i;:::-;-1:-1:-1;;;;;33585:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;33663:18;;;;;:7;:18;;;;;:39;;33686:15;33663:22;:39::i;:::-;-1:-1:-1;;;;;33642:18:0;;;;;;:7;:18;;;;;;;;:60;;;;33734:7;:18;;;;:39;;33757:15;33734:22;:39::i;32655:589::-;32766:15;32796:23;32834:12;32861:23;32899:12;32926:18;32958:19;32969:7;32958:10;:19::i;:::-;-1:-1:-1;;;;;33006:15:0;;;;;;:7;:15;;;;;;32751:226;;-1:-1:-1;32751:226:0;;-1:-1:-1;32751:226:0;;-1:-1:-1;32751:226:0;-1:-1:-1;32751:226:0;-1:-1:-1;32751:226:0;-1:-1:-1;33006:28:0;;32751:226;33006:19;:28::i;34574:721::-;34689:15;34719:23;34757:12;34784:23;34822:12;34849:18;34881:19;34892:7;34881:10;:19::i;:::-;-1:-1:-1;;;;;34929:15:0;;;;;;:7;:15;;;;;;34674:226;;-1:-1:-1;34674:226:0;;-1:-1:-1;34674:226:0;;-1:-1:-1;34674:226:0;-1:-1:-1;34674:226:0;-1:-1:-1;34674:226:0;-1:-1:-1;34929:28:0;;34949:7;34929:19;:28::i;:::-;-1:-1:-1;;;;;34911:15:0;;;;;;:7;:15;;;;;;;;:46;;;;34986:7;:15;;;;:28;;35006:7;34986:19;:28::i;21947:130::-;22050:7;;22011;;22038:31;;22063:5;;22038:20;;:7;;22050;;22038:11;:20::i;22083:168::-;22223:8;;22153:7;;22180:63;;22237:5;;22180:52;;22223:8;-1:-1:-1;;;22223:8:0;;;;;-1:-1:-1;;;22213:7:0;;;;;22192:18;;22202:8;;;;;;-1:-1:-1;;;22192:7:0;;;;:18;:::i;:::-;:28;;;;:::i;:::-;:39;;;;:::i;:::-;22180:7;;:52;;:11;:52::i;21370:571::-;21471:7;;;-1:-1:-1;;;21471:7:0;;;;;21447:21;;21460:8;;;;;21447:10;:21;:::i;:::-;:31;;;;:::i;:::-;21433:10;;:45;;;;;;;:::i;:::-;;;;-1:-1:-1;;21531:7:0;;;-1:-1:-1;;;21531:7:0;;;;;21508:20;;-1:-1:-1;;;21521:7:0;;;;21508:10;:20;:::i;:::-;:30;;;;:::i;:::-;21489:15;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;21585:7:0;;;-1:-1:-1;;;21585:7:0;;;;;21562:20;;-1:-1:-1;;;21575:7:0;;;;21562:10;:20;:::i;:::-;:30;;;;:::i;:::-;21543:15;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;21644:7:0;;;-1:-1:-1;;;21644:7:0;;;;;21620:21;;-1:-1:-1;;;21633:8:0;;;;21620:10;:21;:::i;:::-;:31;;;;:::i;:::-;21603:13;;:48;;;;;;;:::i;:::-;;;;-1:-1:-1;21662:19:0;;-1:-1:-1;21684:10:0;:8;:10::i;:::-;21662:32;-1:-1:-1;21705:18:0;21726:27;:10;21662:32;21726:14;:27::i;:::-;21805:4;21789:22;;;;:7;:22;;;;;;21705:48;;-1:-1:-1;21789:38:0;;21705:48;21789:26;:38::i;:::-;21780:4;21764:22;;;;:7;:22;;;;;;;;:63;;;;21842:11;:26;;;;;;21838:95;;;21911:4;21895:22;;;;:7;:22;;;;;;:38;;21922:10;21895:26;:38::i;:::-;21886:4;21870:22;;;;:7;:22;;;;;:63;21838:95;21422:519;;21370:571;:::o;19302:147::-;19380:7;;:17;;19392:4;19380:11;:17::i;:::-;19370:7;:27;19421:10;;:20;;19436:4;19421:14;:20::i;:::-;19408:10;:33;-1:-1:-1;;19302:147:0:o;14:160:1:-;79:20;;135:13;;128:21;118:32;;108:60;;164:1;161;154:12;108:60;14:160;;;:::o;179:247::-;238:6;291:2;279:9;270:7;266:23;262:32;259:52;;;307:1;304;297:12;259:52;346:9;333:23;365:31;390:5;365:31;:::i;431:251::-;501:6;554:2;542:9;533:7;529:23;525:32;522:52;;;570:1;567;560:12;522:52;602:9;596:16;621:31;646:5;621:31;:::i;687:388::-;755:6;763;816:2;804:9;795:7;791:23;787:32;784:52;;;832:1;829;822:12;784:52;871:9;858:23;890:31;915:5;890:31;:::i;:::-;940:5;-1:-1:-1;997:2:1;982:18;;969:32;1010:33;969:32;1010:33;:::i;:::-;1062:7;1052:17;;;687:388;;;;;:::o;1080:456::-;1157:6;1165;1173;1226:2;1214:9;1205:7;1201:23;1197:32;1194:52;;;1242:1;1239;1232:12;1194:52;1281:9;1268:23;1300:31;1325:5;1300:31;:::i;:::-;1350:5;-1:-1:-1;1407:2:1;1392:18;;1379:32;1420:33;1379:32;1420:33;:::i;:::-;1080:456;;1472:7;;-1:-1:-1;;;1526:2:1;1511:18;;;;1498:32;;1080:456::o;1541:315::-;1609:6;1617;1670:2;1658:9;1649:7;1645:23;1641:32;1638:52;;;1686:1;1683;1676:12;1638:52;1725:9;1712:23;1744:31;1769:5;1744:31;:::i;:::-;1794:5;1846:2;1831:18;;;;1818:32;;-1:-1:-1;;;1541:315:1:o;1861:180::-;1917:6;1970:2;1958:9;1949:7;1945:23;1941:32;1938:52;;;1986:1;1983;1976:12;1938:52;2009:26;2025:9;2009:26;:::i;2046:180::-;2105:6;2158:2;2146:9;2137:7;2133:23;2129:32;2126:52;;;2174:1;2171;2164:12;2126:52;-1:-1:-1;2197:23:1;;2046:180;-1:-1:-1;2046:180:1:o;2231:248::-;2296:6;2304;2357:2;2345:9;2336:7;2332:23;2328:32;2325:52;;;2373:1;2370;2363:12;2325:52;2409:9;2396:23;2386:33;;2438:35;2469:2;2458:9;2454:18;2438:35;:::i;:::-;2428:45;;2231:248;;;;;:::o;2484:306::-;2572:6;2580;2588;2641:2;2629:9;2620:7;2616:23;2612:32;2609:52;;;2657:1;2654;2647:12;2609:52;2686:9;2680:16;2670:26;;2736:2;2725:9;2721:18;2715:25;2705:35;;2780:2;2769:9;2765:18;2759:25;2749:35;;2484:306;;;;;:::o;2795:461::-;2848:3;2886:5;2880:12;2913:6;2908:3;2901:19;2939:4;2968:2;2963:3;2959:12;2952:19;;3005:2;2998:5;2994:14;3026:1;3036:195;3050:6;3047:1;3044:13;3036:195;;;3115:13;;-1:-1:-1;;;;;3111:39:1;3099:52;;3171:12;;;;3206:15;;;;3147:1;3065:9;3036:195;;;-1:-1:-1;3247:3:1;;2795:461;-1:-1:-1;;;;;2795:461:1:o;4792:510::-;5063:6;5052:9;5045:25;5106:3;5101:2;5090:9;5086:18;5079:31;5026:4;5127:57;5179:3;5168:9;5164:19;5156:6;5127:57;:::i;:::-;-1:-1:-1;;;;;5220:32:1;;;;5215:2;5200:18;;5193:60;-1:-1:-1;5284:2:1;5269:18;5262:34;5119:65;4792:510;-1:-1:-1;;4792:510:1:o;5307:597::-;5419:4;5448:2;5477;5466:9;5459:21;5509:6;5503:13;5552:6;5547:2;5536:9;5532:18;5525:34;5577:1;5587:140;5601:6;5598:1;5595:13;5587:140;;;5696:14;;;5692:23;;5686:30;5662:17;;;5681:2;5658:26;5651:66;5616:10;;5587:140;;;5745:6;5742:1;5739:13;5736:91;;;5815:1;5810:2;5801:6;5790:9;5786:22;5782:31;5775:42;5736:91;-1:-1:-1;5888:2:1;5867:15;-1:-1:-1;;5863:29:1;5848:45;;;;5895:2;5844:54;;5307:597;-1:-1:-1;;;5307:597:1:o;9688:401::-;9890:2;9872:21;;;9929:2;9909:18;;;9902:30;9968:34;9963:2;9948:18;;9941:62;-1:-1:-1;;;10034:2:1;10019:18;;10012:35;10079:3;10064:19;;9688:401::o;11545:582::-;11844:6;11833:9;11826:25;11887:6;11882:2;11871:9;11867:18;11860:34;11930:3;11925:2;11914:9;11910:18;11903:31;11807:4;11951:57;12003:3;11992:9;11988:19;11980:6;11951:57;:::i;:::-;-1:-1:-1;;;;;12044:32:1;;;;12039:2;12024:18;;12017:60;-1:-1:-1;12108:3:1;12093:19;12086:35;11943:65;11545:582;-1:-1:-1;;;11545:582:1:o;12645:128::-;12685:3;12716:1;12712:6;12709:1;12706:13;12703:39;;;12722:18;;:::i;:::-;-1:-1:-1;12758:9:1;;12645:128::o;12778:204::-;12816:3;12852:4;12849:1;12845:12;12884:4;12881:1;12877:12;12919:3;12913:4;12909:14;12904:3;12901:23;12898:49;;;12927:18;;:::i;:::-;12963:13;;12778:204;-1:-1:-1;;;12778:204:1:o;12987:217::-;13027:1;13053;13043:132;;13097:10;13092:3;13088:20;13085:1;13078:31;13132:4;13129:1;13122:15;13160:4;13157:1;13150:15;13043:132;-1:-1:-1;13189:9:1;;12987:217::o;13209:168::-;13249:7;13315:1;13311;13307:6;13303:14;13300:1;13297:21;13292:1;13285:9;13278:17;13274:45;13271:71;;;13322:18;;:::i;:::-;-1:-1:-1;13362:9:1;;13209:168::o;13382:238::-;13420:7;13460:4;13457:1;13453:12;13492:4;13489:1;13485:12;13552:3;13546:4;13542:14;13537:3;13534:23;13527:3;13520:11;13513:19;13509:49;13506:75;;;13561:18;;:::i;:::-;13601:13;;13382:238;-1:-1:-1;;;13382:238:1:o;13625:125::-;13665:4;13693:1;13690;13687:8;13684:34;;;13698:18;;:::i;:::-;-1:-1:-1;13735:9:1;;13625:125::o;13755:135::-;13794:3;-1:-1:-1;;13815:17:1;;13812:43;;;13835:18;;:::i;:::-;-1:-1:-1;13882:1:1;13871:13;;13755:135::o;13895:127::-;13956:10;13951:3;13947:20;13944:1;13937:31;13987:4;13984:1;13977:15;14011:4;14008:1;14001:15;14027:127;14088:10;14083:3;14079:20;14076:1;14069:31;14119:4;14116:1;14109:15;14143:4;14140:1;14133:15;14291:131;-1:-1:-1;;;;;14366:31:1;;14356:42;;14346:70;;14412:1;14409;14402:12;14346:70;14291:131;:::o

Swarm Source

ipfs://046753b263ee72fd68c34fce46724357352347e54796ce6a79f919394b44c5f6
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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