ETH Price: $3,128.97 (+0.90%)

Token

FanVerse (FANV)
 

Overview

Max Total Supply

1,000,000,000 FANV

Holders

1,925

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
2,099.672631727 FANV

Value
$0.00
0x6aEda3c8AB0943CE7bfd28c168f0aFEAC4e9feA9
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:
FanVerse

Compiler Version
v0.8.8+commit.dddeac2f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-01-31
*/

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

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

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

interface IERC20 {

    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
    

}

library SafeMath {

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

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

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

library Address {

    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }


    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    uint256 private _lockTime;

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

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

    function owner() public view returns (address) {
        return _owner;
    }   
    
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
    
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

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

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

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

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

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

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

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

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

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
    
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

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

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

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

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

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

contract FanVerse is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

    uint8 private _decimals = 9;
    uint256 public deadBlocks = 2;
    uint256 public launchedAt = 0;
    
    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 1000000000 * 10**_decimals;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;
    uint256 public _maxWalletToken = _tTotal.div(1000).mul(10); //2% for first few mins

    uint256 public _buyLiquidityFee = 50;    
    uint256 public _buymarketdevFee = 40;   
    uint256 public _buyReflectionFee = 10;

    uint256 public _sellLiquidityFee = 50; 
    uint256 public _sellmarketdevFee = 40;  
    uint256 public _sellReflectionFee = 10;
      
    uint256 private liquidityFee = _buyLiquidityFee;
    uint256 private marketdevFee = _buymarketdevFee;
    uint256 private reflectionFee=_buyReflectionFee;

    uint256 private totalFee = liquidityFee.add(marketdevFee);
    uint256 private currenttotalFee = totalFee;
    
    uint256 public swapThreshold = _tTotal.div(10000).mul(20); //0.2% 

    bool inSwap;
    bool public tradingOpen = false;
    bool public zeroBuyTaxmode = false;
    bool private antiBotmode = true;

    string private _name = "FanVerse";
    string private _symbol = "FANV";
   
    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;
    address payable private marketdevWallet = payable (0x3024C3B3A55EA5a430dDeD45D7caf1f94444f608); // marketdev Wallet
    address DEAD = 0x000000000000000000000000000000000000dEaD;
    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private _isSniper;
    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private _isMaxWalletExempt;
    mapping (address => bool) private _isExcluded;
    mapping (address => bool) private _isTrusted;
    address[] private _excluded;

    event SwapETHForTokens(
        uint256 amountIn,
        address[] path
    );
    
    event SwapTokensForETH(
        uint256 amountIn,
        address[] path
    );
    
    modifier lockTheSwap {
        inSwap = true;
        _;
        inSwap = false;
    }

    constructor () {

        _rOwned[_msgSender()] = _rTotal;
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
        .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;

        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isMaxWalletExempt[owner()] = true;
        _isMaxWalletExempt[address(this)] = true;
        _isMaxWalletExempt[uniswapV2Pair] = true;
        _isMaxWalletExempt[DEAD] = true;
        _isTrusted[owner()] = true;
        _isTrusted[uniswapV2Pair] = true;

        emit Transfer(address(0), _msgSender(), _tTotal);
    }

    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 approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }
    
    function deliver(uint256 tAmount) public {
        address sender = _msgSender();
        require(!_isExcluded[sender], "Excluded addresses cannot call this function");
        (uint256 rAmount,,,,,) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rTotal = _rTotal.sub(rAmount);
        _tFeeTotal = _tFeeTotal.add(tAmount);
    }

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

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

    function transferToAddressETH(address payable recipient, uint256 amount) private {
        recipient.transfer(amount);
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(!_isSniper[to], "Sorry Boss");
        require(!_isSniper[from], "Sorry Boss");
        if (from!= owner() && to!= owner()) require(tradingOpen, "Trading not yet enabled."); //transfers disabled before openTrading
        
        bool takeFee = false;
        //take fee on swaps
        if ( (from==uniswapV2Pair || to==uniswapV2Pair) && !(_isExcludedFromFee[from] || _isExcludedFromFee[to]) ) {
            takeFee = true;
        }

        if(launchedAt>0 && (!_isMaxWalletExempt[to] && from!= owner()) && ((launchedAt + deadBlocks) > block.number)){
                require(amount+ balanceOf(to)<=_maxWalletToken,
                    "Total Holding is currently limited");
        } 

        currenttotalFee=totalFee;
        reflectionFee=_buyReflectionFee;

        if(tradingOpen && to == uniswapV2Pair) { //sell
            currenttotalFee= _sellLiquidityFee.add(_sellmarketdevFee);
            reflectionFee=_sellReflectionFee;
        }
        
        //antibot
        if(launchedAt>0 && (launchedAt + deadBlocks) > block.number){
                _isSniper[to]=true;
        }
        
        //only bot 
        if(launchedAt>0 && from!= owner() && block.number <= (launchedAt + deadBlocks)  && antiBotmode){
                currenttotalFee=950;    //95%
        }

        //buys
        if(zeroBuyTaxmode){
             if(tradingOpen && from == uniswapV2Pair) { 
                    currenttotalFee=0;
             }
        }

        //sell
        if (!inSwap && tradingOpen && to == uniswapV2Pair) {
      
            uint256 contractTokenBalance = balanceOf(address(this));
            
            if(contractTokenBalance>=swapThreshold){
                    contractTokenBalance = swapThreshold;
                    swapTokens(contractTokenBalance);
            }
          
        }
        _tokenTransfer(from,to,amount,takeFee);
    }

    function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private {

        uint256 _previousReflectionFee=reflectionFee;
        uint256 _previousTotalFee=currenttotalFee;
        if(!takeFee){
            reflectionFee = 0;
            currenttotalFee=0;
        }
        
        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]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }
        
        if(!takeFee){
            reflectionFee = _previousReflectionFee;
            currenttotalFee=_previousTotalFee;
        }
    }

    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 _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }

    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 _takeLiquidity(uint256 tLiquidity) private {
        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);
    }

    //Swap and send 
    function swapTokens(uint256 contractTokenBalance) private lockTheSwap {
        
        uint256 amountToLiquify = contractTokenBalance
            .mul(liquidityFee)
            .div(totalFee)
            .div(2);

        uint256 amountToSwap = contractTokenBalance.sub(amountToLiquify);
        
        swapTokensForEth(amountToSwap);

        uint256 amountETH = address(this).balance;

        uint256 totalETHFee = totalFee.sub(liquidityFee.div(2));

        uint256 amountETHLiquidity = amountETH
            .mul(liquidityFee)
            .div(totalETHFee)
            .div(2);
        
        uint256 amountETHmarketdev = amountETH.mul(marketdevFee).div(totalETHFee);
        //Send to marketdev wallet
        uint256 contractETHBalance = address(this).balance;
        if(contractETHBalance > 0) {
            sendETHToFee(amountETHmarketdev,marketdevWallet);
        }
        if (amountToLiquify > 0) {
                addLiquidity(amountToLiquify,amountETHLiquidity);
        }
    }
    
    function sendETHToFee(uint256 amount,address payable wallet) private {
        wallet.transfer(amount);
    }
   
    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this), // The contract
            block.timestamp
        );
        
        emit SwapTokensForETH(tokenAmount, path);
    }

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

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

    //-------------------Private View-------------------
    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 _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 calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(reflectionFee).div(
            10**3
        );
    }
    
    function calculateLiquidityFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(currenttotalFee).div(
            10**3
        );
    }

    //-------------------Public View-------------------
    function name() public view returns (string memory) {
        return _name;
    }

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

    function decimals() public view returns (uint8) {
        return _decimals;
    }

    function totalSupply() public view 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 tokenFromReflection(uint256 rAmount) public view returns(uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        uint256 currentRate =  _getRate();
        return rAmount.div(currentRate);
    }

    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 isSniper(address account) public view returns (bool) {
        return _isSniper[account];
    }

    function isExcludedFromReward(address account) public view returns (bool) {
        return _isExcluded[account];
    }

    function totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }

    function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferFee) {
            (uint256 rAmount,,,,,) = _getValues(tAmount);
            return rAmount;
        } else {
            (,uint256 rTransferAmount,,,,) = _getValues(tAmount);
            return rTransferAmount;
        }
    }

    //-------------------only Owner-------------------
    function excludeFromReward(address account) public onlyOwner() {
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeInReward(address account) external onlyOwner() {
        require(_isExcluded[account], "Account is already excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }

    function openTrading(bool _status,uint256 _deadBlocks) external onlyOwner() {
        tradingOpen = _status;
        excludeFromReward(address(this));
        excludeFromReward(uniswapV2Pair);
        if(tradingOpen && launchedAt == 0){
            launchedAt = block.number;
            deadBlocks = _deadBlocks;
        }
    }
    
    function setZeroBuyTaxmode(bool _status) external onlyOwner() {
       zeroBuyTaxmode=_status;
    }

    function setAntiBotmode(bool _status) external onlyOwner() {
       antiBotmode=_status;
    }
    
    function setNewRouter(address newRouter) external onlyOwner() {
        IUniswapV2Router02 _newRouter = IUniswapV2Router02(newRouter);
        address get_pair = IUniswapV2Factory(_newRouter.factory()).getPair(address(this), _newRouter.WETH());
        if (get_pair == address(0)) {
            uniswapV2Pair = IUniswapV2Factory(_newRouter.factory()).createPair(address(this), _newRouter.WETH());
        }
        else {
            uniswapV2Pair = get_pair;
        }
        uniswapV2Router = _newRouter;
    }
    
    function excludeMultiple(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }

    function excludeFromFee(address[] calldata addresses) public onlyOwner {
        for (uint256 i; i < addresses.length; ++i) {
            _isExcludedFromFee[addresses[i]] = true;
        }
    }
    
    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }
    
    function setWallet(address _marketdevWallet) external onlyOwner() {
        marketdevWallet = payable(_marketdevWallet);
    }
    
    function manage_Snipers(address[] calldata addresses, bool status) public onlyOwner {
        for (uint256 i; i < addresses.length; ++i) {
                _isSniper[addresses[i]] = status; 
        }
    }
    
    function manage_trusted(address[] calldata addresses) public onlyOwner {
        for (uint256 i; i < addresses.length; ++i) {
            _isTrusted[addresses[i]]=true;
        }
    }
   
    function withDrawLeftoverETH(address payable receipient) public onlyOwner {
        receipient.transfer(address(this).balance);
    }

    function withdrawStuck(IERC20 token, address to) public onlyOwner {
        uint256 balance = token.balanceOf(address(this));
        token.transfer(to, balance);
    }

    function setMaxWallet_base1000(uint256 maxWallPercent_base1000) external onlyOwner() {
        _maxWalletToken = _tTotal.div(1000).mul(maxWallPercent_base1000);
    }

    function setMaxWalletExempt(address _addr) external onlyOwner {
        _isMaxWalletExempt[_addr] = true;
    }

    function setSwapSettings(uint256 thresholdPercent, uint256 thresholdDivisor) external onlyOwner {
        swapThreshold = (_tTotal * thresholdPercent) / thresholdDivisor;
    }

    function multiTransfer( address[] calldata addresses, uint256[] calldata tokens) external onlyOwner {

        require(addresses.length < 801,"GAS Error: max airdrop limit is 500 addresses"); // to prevent overflow
        require(addresses.length == tokens.length,"Mismatch between Address and token count");

        uint256 SCCC = 0;

        for(uint i=0; i < addresses.length; i++){
            SCCC = SCCC + (tokens[i] * 10**_decimals);
        }

        require(balanceOf(msg.sender) >= SCCC, "Not enough tokens in wallet");

        for(uint i=0; i < addresses.length; i++){
            _transfer(msg.sender,addresses[i],(tokens[i] * 10**_decimals));
        
        }
    }

    function multiTransfer_fixed( address[] calldata addresses, uint256 tokens) external onlyOwner {

        require(addresses.length < 2001,"GAS Error: max airdrop limit is 2000 addresses"); // to prevent overflow

        uint256 SCCC = tokens* 10**_decimals * addresses.length;

        require(balanceOf(msg.sender) >= SCCC, "Not enough tokens in wallet");

        for(uint i=0; i < addresses.length; i++){
            _transfer(msg.sender,addresses[i],(tokens* 10**_decimals));

        }
    }

    function setTaxBuy(uint256 _bReflectionFee, uint256 _bLiquidityFee, uint256 _bMarketdevFee) external onlyOwner {
       
        _buyLiquidityFee = _bLiquidityFee;
        _buymarketdevFee = _bMarketdevFee;
        _buyReflectionFee= _bReflectionFee;

        reflectionFee= _bReflectionFee;
        liquidityFee = _bLiquidityFee;
        marketdevFee = _bMarketdevFee;
        totalFee = liquidityFee.add(marketdevFee);
    }

    function setTaxSell(uint256 _sReflectionFee,uint256 _sLiquidityFee, uint256 _sMarketdevFee) external onlyOwner {
        _sellLiquidityFee = _sLiquidityFee;
        _sellmarketdevFee = _sMarketdevFee;
        _sellReflectionFee= _sReflectionFee;
    }
     //to recieve ETH uniswapV2Router
    receive() external payable {}
}

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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyReflectionFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buymarketdevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellReflectionFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellmarketdevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[],"name":"deadBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeMultiple","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","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":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isSniper","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"status","type":"bool"}],"name":"manage_Snipers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"manage_trusted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"tokens","type":"uint256[]"}],"name":"multiTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"multiTransfer_fixed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"},{"internalType":"uint256","name":"_deadBlocks","type":"uint256"}],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","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":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"setAntiBotmode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setMaxWalletExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWallPercent_base1000","type":"uint256"}],"name":"setMaxWallet_base1000","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setNewRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"thresholdPercent","type":"uint256"},{"internalType":"uint256","name":"thresholdDivisor","type":"uint256"}],"name":"setSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_bReflectionFee","type":"uint256"},{"internalType":"uint256","name":"_bLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"_bMarketdevFee","type":"uint256"}],"name":"setTaxBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_sReflectionFee","type":"uint256"},{"internalType":"uint256","name":"_sLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"_sMarketdevFee","type":"uint256"}],"name":"setTaxSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketdevWallet","type":"address"}],"name":"setWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"setZeroBuyTaxmode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"receipient","type":"address"}],"name":"withDrawLeftoverETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"}],"name":"withdrawStuck","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"zeroBuyTaxmode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526003805460ff19166009908117909155600260045560006005556200002b90600a620008b4565b6200003b90633b9aca00620008c5565b60068190556200004e90600019620008fd565b6200005c9060001962000914565b60075562000097600a620000836103e86006546200057e60201b620020611790919060201c565b620005d160201b620020a31790919060201c565b6009556032600a556028600b55600a600c556032600d556028600e55600a600f55600a54601055600b54601155600c54601255620000e86011546010546200065c60201b620021221790919060201c565b601355601354601455620001156014620000836127106006546200057e60201b620020611790919060201c565b6015556016805463ffffff00191663010000001790556040805180820190915260088082526746616e566572736560c01b60209092019182526200015c91601791620006fb565b50604080518082019091526004808252632320a72b60e11b60209092019182526200018a91601891620006fb565b50601b80546001600160a01b0319908116733024c3b3a55ea5a430dded45d7caf1f94444f60817909155601c805490911661dead179055348015620001ce57600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600754336000908152601d602090815260409182902092909255805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d92839263c45a01559260048083019392829003018186803b1580156200027257600080fd5b505afa15801562000287573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ad91906200092e565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620002f657600080fd5b505afa1580156200030b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033191906200092e565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200037a57600080fd5b505af11580156200038f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003b591906200092e565b601a80546001600160a01b03199081166001600160a01b039384161790915560198054909116918316919091179055600160216000620003fd6000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526021909252812080549092166001908117909255602290620004566000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790553081526022909352818320805485166001908117909155601a54821684528284208054861682179055601c54909116835290822080549093168117909255602490620004d86000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055601a5490911681526024909252902080549091166001179055620005273390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6006546040516200056f91815260200190565b60405180910390a35062000a20565b6000620005c883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250620006bf60201b60201c565b90505b92915050565b600082620005e257506000620005cb565b6000620005f08385620008c5565b905082620005ff858362000959565b14620005c85760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084015b60405180910390fd5b6000806200066b838562000970565b905083811015620005c85760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640162000653565b60008183620006e35760405162461bcd60e51b81526004016200065391906200098b565b506000620006f2848662000959565b95945050505050565b8280546200070990620009e3565b90600052602060002090601f0160209004810192826200072d576000855562000778565b82601f106200074857805160ff191683800117855562000778565b8280016001018555821562000778579182015b82811115620007785782518255916020019190600101906200075b565b50620007869291506200078a565b5090565b5b808211156200078657600081556001016200078b565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620007f8578160001904821115620007dc57620007dc620007a1565b80851615620007ea57918102915b93841c9390800290620007bc565b509250929050565b6000826200081157506001620005cb565b816200082057506000620005cb565b8160018114620008395760028114620008445762000864565b6001915050620005cb565b60ff841115620008585762000858620007a1565b50506001821b620005cb565b5060208310610133831016604e8410600b841016171562000889575081810a620005cb565b620008958383620007b7565b8060001904821115620008ac57620008ac620007a1565b029392505050565b6000620005c860ff84168362000800565b6000816000190483118215151615620008e257620008e2620007a1565b500290565b634e487b7160e01b600052601260045260246000fd5b6000826200090f576200090f620008e7565b500690565b600082821015620009295762000929620007a1565b500390565b6000602082840312156200094157600080fd5b81516001600160a01b0381168114620005c857600080fd5b6000826200096b576200096b620008e7565b500490565b60008219821115620009865762000986620007a1565b500190565b600060208083528351808285015260005b81811015620009ba578581018301518582016040015282016200099c565b81811115620009cd576000604083870101525b50601f01601f1916929092016040019392505050565b600181811c90821680620009f857607f821691505b6020821081141562000a1a57634e487b7160e01b600052602260045260246000fd5b50919050565b613ac98062000a306000396000f3fe6080604052600436106103545760003560e01c8063632e5442116101c6578063a457c2d7116100f7578063ea2f0b3711610095578063f2fde38b1161006f578063f2fde38b146109da578063f3b1e83b146109fa578063fabb0b4f14610a10578063ffb54a9914610a2657600080fd5b8063ea2f0b371461097a578063eafb5a3c1461099a578063f259c57b146109ba57600080fd5b8063bf56b371116100d1578063bf56b371146108e8578063dc44b6a0146108fe578063dd62ed3e14610914578063deaa59df1461095a57600080fd5b8063a457c2d714610888578063a9059cbb146108a8578063afb8865e146108c857600080fd5b806378109e541161016457806388f820201161013e57806388f82020146107fc5780638da5cb5b146108355780638f4590d21461085357806395d89b411461087357600080fd5b806378109e54146107b057806384530c46146107c657806388790a68146107e657600080fd5b806371b9189c116101a057806371b9189c1461074457806372fdf6ee14610764578063743942b61461077a5780637598f8bc1461079a57600080fd5b8063632e5442146106ef57806370a082311461070f578063715018a61461072f57600080fd5b80632dd5efe7116102a057806343b127a61161023e5780634b01547f116102185780634b01547f1461066f5780634eeaf4581461068f57806352390c02146106af5780635d54c0af146106cf57600080fd5b806343b127a61461060f5780634549b0391461062f57806349bd5a5e1461064f57600080fd5b8063395093511161027a57806339509351146105995780633bd5d173146105b95780633ddf65ab146105d9578063401aa5c0146105f957600080fd5b80632dd5efe714610537578063313ce567146105575780633685d4191461057957600080fd5b806318160ddd1161030d5780632691bc80116102e75780632691bc80146104b757806328a23cd1146104d75780632d4103d6146104f75780632d8381191461051757600080fd5b806318160ddd146104605780631e89d5451461047557806323b872dd1461049757600080fd5b80630445b6671461036057806306fdde0314610389578063095ea7b3146103ab5780630f3a325f146103db57806313114a9d146104135780631694505e1461042857600080fd5b3661035b57005b600080fd5b34801561036c57600080fd5b5061037660155481565b6040519081526020015b60405180910390f35b34801561039557600080fd5b5061039e610a45565b6040516103809190613352565b3480156103b757600080fd5b506103cb6103c63660046133bf565b610ad7565b6040519015158152602001610380565b3480156103e757600080fd5b506103cb6103f63660046133eb565b6001600160a01b0316600090815260208052604090205460ff1690565b34801561041f57600080fd5b50600854610376565b34801561043457600080fd5b50601954610448906001600160a01b031681565b6040516001600160a01b039091168152602001610380565b34801561046c57600080fd5b50600654610376565b34801561048157600080fd5b50610495610490366004613454565b610aee565b005b3480156104a357600080fd5b506103cb6104b23660046134c0565b610d28565b3480156104c357600080fd5b506016546103cb9062010000900460ff1681565b3480156104e357600080fd5b506104956104f2366004613501565b610d91565b34801561050357600080fd5b50610495610512366004613548565b610ec1565b34801561052357600080fd5b50610376610532366004613566565b610f46565b34801561054357600080fd5b506104956105523660046133eb565b610fca565b34801561056357600080fd5b5060035460405160ff9091168152602001610380565b34801561058557600080fd5b506104956105943660046133eb565b611018565b3480156105a557600080fd5b506103cb6105b43660046133bf565b6111cb565b3480156105c557600080fd5b506104956105d4366004613566565b611201565b3480156105e557600080fd5b506104956105f436600461357f565b6112eb565b34801561060557600080fd5b50610376600c5481565b34801561061b57600080fd5b5061049561062a36600461359c565b611333565b34801561063b57600080fd5b5061037661064a3660046135c8565b61138d565b34801561065b57600080fd5b50601a54610448906001600160a01b031681565b34801561067b57600080fd5b5061049561068a36600461357f565b61141a565b34801561069b57600080fd5b506104956106aa36600461359c565b611460565b3480156106bb57600080fd5b506104956106ca3660046133eb565b611498565b3480156106db57600080fd5b506104956106ea3660046135ed565b611582565b3480156106fb57600080fd5b5061049561070a366004613644565b61161b565b34801561071b57600080fd5b5061037661072a3660046133eb565b61179b565b34801561073b57600080fd5b506104956117fa565b34801561075057600080fd5b5061049561075f366004613690565b61186e565b34801561077057600080fd5b50610376600b5481565b34801561078657600080fd5b506104956107953660046133eb565b61190d565b3480156107a657600080fd5b50610376600f5481565b3480156107bc57600080fd5b5061037660095481565b3480156107d257600080fd5b506104956107e1366004613690565b61196c565b3480156107f257600080fd5b50610376600d5481565b34801561080857600080fd5b506103cb6108173660046133eb565b6001600160a01b031660009081526023602052604090205460ff1690565b34801561084157600080fd5b506000546001600160a01b0316610448565b34801561085f57600080fd5b5061049561086e3660046136d2565b611a06565b34801561087f57600080fd5b5061039e611a50565b34801561089457600080fd5b506103cb6108a33660046133bf565b611a5f565b3480156108b457600080fd5b506103cb6108c33660046133bf565b611aae565b3480156108d457600080fd5b506104956108e3366004613566565b611abb565b3480156108f457600080fd5b5061037660055481565b34801561090a57600080fd5b50610376600a5481565b34801561092057600080fd5b5061037661092f366004613501565b6001600160a01b039182166000908152601f6020908152604080832093909416825291909152205490565b34801561096657600080fd5b506104956109753660046133eb565b611b0c565b34801561098657600080fd5b506104956109953660046133eb565b611b58565b3480156109a657600080fd5b506104956109b53660046133eb565b611ba3565b3480156109c657600080fd5b506104956109d53660046133eb565b611f29565b3480156109e657600080fd5b506104956109f53660046133eb565b611f77565b348015610a0657600080fd5b50610376600e5481565b348015610a1c57600080fd5b5061037660045481565b348015610a3257600080fd5b506016546103cb90610100900460ff1681565b606060178054610a54906136f4565b80601f0160208091040260200160405190810160405280929190818152602001828054610a80906136f4565b8015610acd5780601f10610aa257610100808354040283529160200191610acd565b820191906000526020600020905b815481529060010190602001808311610ab057829003601f168201915b5050505050905090565b6000610ae4338484612181565b5060015b92915050565b6000546001600160a01b03163314610b215760405162461bcd60e51b8152600401610b189061372f565b60405180910390fd5b6103218310610b885760405162461bcd60e51b815260206004820152602d60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526c3530302061646472657373657360981b6064820152608401610b18565b828114610be85760405162461bcd60e51b815260206004820152602860248201527f4d69736d61746368206265747765656e204164647265737320616e6420746f6b604482015267195b8818dbdd5b9d60c21b6064820152608401610b18565b6000805b84811015610c4657600354610c059060ff16600a61385e565b848483818110610c1757610c1761386d565b90506020020135610c289190613883565b610c3290836138a2565b915080610c3e816138ba565b915050610bec565b5080610c513361179b565b1015610c9f5760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c657400000000006044820152606401610b18565b60005b84811015610d2057610d0e33878784818110610cc057610cc061386d565b9050602002016020810190610cd591906133eb565b600354610ce69060ff16600a61385e565b878786818110610cf857610cf861386d565b90506020020135610d099190613883565b6122a5565b80610d18816138ba565b915050610ca2565b505050505050565b6000610d358484846122a5565b610d878433610d8285604051806060016040528060288152602001613a47602891396001600160a01b038a166000908152601f6020908152604080832033845290915290205491906127e9565b612181565b5060019392505050565b6000546001600160a01b03163314610dbb5760405162461bcd60e51b8152600401610b189061372f565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a082319060240160206040518083038186803b158015610dfd57600080fd5b505afa158015610e11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e3591906138d5565b60405163a9059cbb60e01b81526001600160a01b038481166004830152602482018390529192509084169063a9059cbb90604401602060405180830381600087803b158015610e8357600080fd5b505af1158015610e97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ebb91906138ee565b50505050565b6000546001600160a01b03163314610eeb5760405162461bcd60e51b8152600401610b189061372f565b6016805461ff00191661010084151502179055610f0730611498565b601a54610f1c906001600160a01b0316611498565b601654610100900460ff168015610f335750600554155b15610f42574360055560048190555b5050565b6000600754821115610fad5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610b18565b6000610fb7612823565b9050610fc38382612061565b9392505050565b6000546001600160a01b03163314610ff45760405162461bcd60e51b8152600401610b189061372f565b6001600160a01b03166000908152602260205260409020805460ff19166001179055565b6000546001600160a01b031633146110425760405162461bcd60e51b8152600401610b189061372f565b6001600160a01b03811660009081526023602052604090205460ff166110aa5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610b18565b60005b602554811015610f4257816001600160a01b0316602582815481106110d4576110d461386d565b6000918252602090912001546001600160a01b031614156111b957602580546110ff9060019061390b565b8154811061110f5761110f61386d565b600091825260209091200154602580546001600160a01b03909216918390811061113b5761113b61386d565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152601e82526040808220829055602390925220805460ff19169055602580548061119357611193613922565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b806111c3816138ba565b9150506110ad565b336000818152601f602090815260408083206001600160a01b03871684529091528120549091610ae4918590610d829086612122565b3360008181526023602052604090205460ff16156112765760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610b18565b600061128183612846565b505050506001600160a01b0384166000908152601d60205260409020549192506112ad91905082612895565b6001600160a01b0383166000908152601d60205260409020556007546112d39082612895565b6007556008546112e39084612122565b600855505050565b6000546001600160a01b031633146113155760405162461bcd60e51b8152600401610b189061372f565b6016805491151563010000000263ff00000019909216919091179055565b6000546001600160a01b0316331461135d5760405162461bcd60e51b8152600401610b189061372f565b600a829055600b819055600c8390556012839055601082905560118190556113858282612122565b601355505050565b60006006548311156113e15760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610b18565b816114005760006113f184612846565b50939550610ae8945050505050565b600061140b84612846565b50929550610ae8945050505050565b6000546001600160a01b031633146114445760405162461bcd60e51b8152600401610b189061372f565b60168054911515620100000262ff000019909216919091179055565b6000546001600160a01b0316331461148a5760405162461bcd60e51b8152600401610b189061372f565b600d91909155600e55600f55565b6000546001600160a01b031633146114c25760405162461bcd60e51b8152600401610b189061372f565b6001600160a01b0381166000908152601d60205260409020541561151c576001600160a01b0381166000908152601d602052604090205461150290610f46565b6001600160a01b0382166000908152601e60205260409020555b6001600160a01b03166000818152602360205260408120805460ff191660019081179091556025805491820181559091527f401968ff42a154441da5f6c4c935ac46b8671f0e062baaa62a7545ba53bb6e4c0180546001600160a01b0319169091179055565b6000546001600160a01b031633146115ac5760405162461bcd60e51b8152600401610b189061372f565b60005b82811015610ebb5781602060008686858181106115ce576115ce61386d565b90506020020160208101906115e391906133eb565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055611614816138ba565b90506115af565b6000546001600160a01b031633146116455760405162461bcd60e51b8152600401610b189061372f565b6107d182106116ad5760405162461bcd60e51b815260206004820152602e60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526d323030302061646472657373657360901b6064820152608401610b18565b60035460009083906116c39060ff16600a61385e565b6116cd9084613883565b6116d79190613883565b9050806116e33361179b565b10156117315760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c657400000000006044820152606401610b18565b60005b8381101561179457611782338686848181106117525761175261386d565b905060200201602081019061176791906133eb565b6003546117789060ff16600a61385e565b610d099087613883565b8061178c816138ba565b915050611734565b5050505050565b6001600160a01b03811660009081526023602052604081205460ff16156117d857506001600160a01b03166000908152601e602052604090205490565b6001600160a01b0382166000908152601d6020526040902054610ae890610f46565b6000546001600160a01b031633146118245760405162461bcd60e51b8152600401610b189061372f565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146118985760405162461bcd60e51b8152600401610b189061372f565b60005b81811015611908576001602160008585858181106118bb576118bb61386d565b90506020020160208101906118d091906133eb565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055611901816138ba565b905061189b565b505050565b6000546001600160a01b031633146119375760405162461bcd60e51b8152600401610b189061372f565b6040516001600160a01b038216904780156108fc02916000818181858888f19350505050158015610f42573d6000803e3d6000fd5b6000546001600160a01b031633146119965760405162461bcd60e51b8152600401610b189061372f565b60005b81811015611908576001602460008585858181106119b9576119b961386d565b90506020020160208101906119ce91906133eb565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556119ff816138ba565b9050611999565b6000546001600160a01b03163314611a305760405162461bcd60e51b8152600401610b189061372f565b8082600654611a3f9190613883565b611a499190613938565b6015555050565b606060188054610a54906136f4565b6000610ae43384610d8285604051806060016040528060258152602001613a6f60259139336000908152601f602090815260408083206001600160a01b038d16845290915290205491906127e9565b6000610ae43384846122a5565b6000546001600160a01b03163314611ae55760405162461bcd60e51b8152600401610b189061372f565b611b0681611b006103e860065461206190919063ffffffff16565b906120a3565b60095550565b6000546001600160a01b03163314611b365760405162461bcd60e51b8152600401610b189061372f565b601b80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611b825760405162461bcd60e51b8152600401610b189061372f565b6001600160a01b03166000908152602160205260409020805460ff19169055565b6000546001600160a01b03163314611bcd5760405162461bcd60e51b8152600401610b189061372f565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611c0d57600080fd5b505afa158015611c21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c45919061395a565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611c8d57600080fd5b505afa158015611ca1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cc5919061395a565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b158015611d0b57600080fd5b505afa158015611d1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d43919061395a565b90506001600160a01b038116611ee957816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611d8c57600080fd5b505afa158015611da0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dc4919061395a565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611e0c57600080fd5b505afa158015611e20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e44919061395a565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015611e8c57600080fd5b505af1158015611ea0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ec4919061395a565b601a80546001600160a01b0319166001600160a01b0392909216919091179055611f05565b601a80546001600160a01b0319166001600160a01b0383161790555b50601980546001600160a01b0319166001600160a01b039290921691909117905550565b6000546001600160a01b03163314611f535760405162461bcd60e51b8152600401610b189061372f565b6001600160a01b03166000908152602160205260409020805460ff19166001179055565b6000546001600160a01b03163314611fa15760405162461bcd60e51b8152600401610b189061372f565b6001600160a01b0381166120065760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b18565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000610fc383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506128d7565b6000826120b257506000610ae8565b60006120be8385613883565b9050826120cb8583613938565b14610fc35760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b18565b60008061212f83856138a2565b905083811015610fc35760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b18565b6001600160a01b0383166121e35760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b18565b6001600160a01b0382166122445760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b18565b6001600160a01b038381166000818152601f602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166123095760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b18565b6001600160a01b03821661236b5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b18565b600081116123cd5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610b18565b6001600160a01b038216600090815260208052604090205460ff16156124225760405162461bcd60e51b815260206004820152600a602482015269536f72727920426f737360b01b6044820152606401610b18565b6001600160a01b038316600090815260208052604090205460ff16156124775760405162461bcd60e51b815260206004820152600a602482015269536f72727920426f737360b01b6044820152606401610b18565b6000546001600160a01b038481169116148015906124a357506000546001600160a01b03838116911614155b156124ff57601654610100900460ff166124ff5760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642e00000000000000006044820152606401610b18565b601a546000906001600160a01b038581169116148061252b5750601a546001600160a01b038481169116145b801561257357506001600160a01b03841660009081526021602052604090205460ff168061257157506001600160a01b03831660009081526021602052604090205460ff165b155b1561257c575060015b60006005541180156125c057506001600160a01b03831660009081526022602052604090205460ff161580156125c057506000546001600160a01b03858116911614155b80156125da5750436004546005546125d891906138a2565b115b1561264e576009546125eb8461179b565b6125f590846138a2565b111561264e5760405162461bcd60e51b815260206004820152602260248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d6974604482015261195960f21b6064820152608401610b18565b601354601455600c54601255601654610100900460ff16801561267e5750601a546001600160a01b038481169116145b1561269c57600e54600d5461269291612122565b601455600f546012555b60006005541180156126bc5750436004546005546126ba91906138a2565b115b156126e4576001600160a01b03831660009081526020805260409020805460ff191660011790555b600060055411801561270457506000546001600160a01b03858116911614155b801561271f575060045460055461271b91906138a2565b4311155b801561273457506016546301000000900460ff165b15612740576103b66014555b60165462010000900460ff161561278057601654610100900460ff1680156127755750601a546001600160a01b038581169116145b156127805760006014555b60165460ff1615801561279a5750601654610100900460ff165b80156127b35750601a546001600160a01b038481169116145b156127dd5760006127c33061179b565b905060155481106127db57506015546127db81612905565b505b610ebb848484846129f1565b6000818484111561280d5760405162461bcd60e51b8152600401610b189190613352565b50600061281a848661390b565b95945050505050565b6000806000612830612b1d565b909250905061283f8282612061565b9250505090565b600080600080600080600080600061285d8a612c9f565b925092509250600080600061287b8d8686612876612823565b612ce1565b919f909e50909c50959a5093985091965092945050505050565b6000610fc383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506127e9565b600081836128f85760405162461bcd60e51b8152600401610b189190613352565b50600061281a8486613938565b6016805460ff191660011790556013546010546000916129359160029161292f91829087906120a3565b90612061565b905060006129438383612895565b905061294e81612d31565b601054479060009061296e90612965906002612061565b60135490612895565b90506000612990600261292f8461292f601054886120a390919063ffffffff16565b905060006129ad8361292f601154876120a390919063ffffffff16565b90504780156129cd57601b546129cd9083906001600160a01b0316612ed3565b86156129dd576129dd8784612f09565b50506016805460ff19169055505050505050565b60125460145482612a0757600060128190556014555b6001600160a01b03861660009081526023602052604090205460ff168015612a4857506001600160a01b03851660009081526023602052604090205460ff16155b15612a5d57612a58868686612fe6565b612b09565b6001600160a01b03861660009081526023602052604090205460ff16158015612a9e57506001600160a01b03851660009081526023602052604090205460ff165b15612aae57612a5886868661310c565b6001600160a01b03861660009081526023602052604090205460ff168015612aee57506001600160a01b03851660009081526023602052604090205460ff165b15612afe57612a588686866131b5565b612b09868686613228565b82610d205760129190915560145550505050565b6007546006546000918291825b602554811015612c6f5782601d600060258481548110612b4c57612b4c61386d565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612bb7575081601e600060258481548110612b9057612b9061386d565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612bcd57600754600654945094505050509091565b612c13601d600060258481548110612be757612be761386d565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490612895565b9250612c5b601e600060258481548110612c2f57612c2f61386d565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390612895565b915080612c67816138ba565b915050612b2a565b50600654600754612c7f91612061565b821015612c96576007546006549350935050509091565b90939092509050565b600080600080612cae8561326c565b90506000612cbb86613289565b90506000612cd382612ccd8986612895565b90612895565b979296509094509092505050565b6000808080612cf088866120a3565b90506000612cfe88876120a3565b90506000612d0c88886120a3565b90506000612d1e82612ccd8686612895565b939b939a50919850919650505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612d6657612d6661386d565b6001600160a01b03928316602091820292909201810191909152601954604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015612dba57600080fd5b505afa158015612dce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612df2919061395a565b81600181518110612e0557612e0561386d565b6001600160a01b039283166020918202929092010152601954612e2b9130911684612181565b60195460405163791ac94760e01b81526001600160a01b039091169063791ac94790612e649085906000908690309042906004016139bb565b600060405180830381600087803b158015612e7e57600080fd5b505af1158015612e92573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051612ec79291906139f7565b60405180910390a15050565b6040516001600160a01b0382169083156108fc029084906000818181858888f19350505050158015611908573d6000803e3d6000fd5b601954612f219030906001600160a01b031684612181565b6019546001600160a01b031663f305d719823085600080612f4a6000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b158015612fad57600080fd5b505af1158015612fc1573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906117949190613a18565b600080600080600080612ff887612846565b6001600160a01b038f166000908152601e6020526040902054959b5093995091975095509350915061302a9088612895565b6001600160a01b038a166000908152601e6020908152604080832093909355601d905220546130599087612895565b6001600160a01b03808b166000908152601d602052604080822093909355908a16815220546130889086612122565b6001600160a01b0389166000908152601d60205260409020556130aa816132a6565b6130b4848361332e565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516130f991815260200190565b60405180910390a3505050505050505050565b60008060008060008061311e87612846565b6001600160a01b038f166000908152601d6020526040902054959b509399509197509550935091506131509087612895565b6001600160a01b03808b166000908152601d6020908152604080832094909455918b168152601e90915220546131869084612122565b6001600160a01b0389166000908152601e6020908152604080832093909355601d905220546130889086612122565b6000806000806000806131c787612846565b6001600160a01b038f166000908152601e6020526040902054959b509399509197509550935091506131f99088612895565b6001600160a01b038a166000908152601e6020908152604080832093909355601d905220546131509087612895565b60008060008060008061323a87612846565b6001600160a01b038f166000908152601d6020526040902054959b509399509197509550935091506130599087612895565b6000610ae86103e861292f601254856120a390919063ffffffff16565b6000610ae86103e861292f601454856120a390919063ffffffff16565b60006132b0612823565b905060006132be83836120a3565b306000908152601d60205260409020549091506132db9082612122565b306000908152601d602090815260408083209390935560239052205460ff161561190857306000908152601e60205260409020546133199084612122565b306000908152601e6020526040902055505050565b60075461333b9083612895565b60075560085461334b9082612122565b6008555050565b600060208083528351808285015260005b8181101561337f57858101830151858201604001528201613363565b81811115613391576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b03811681146133bc57600080fd5b50565b600080604083850312156133d257600080fd5b82356133dd816133a7565b946020939093013593505050565b6000602082840312156133fd57600080fd5b8135610fc3816133a7565b60008083601f84011261341a57600080fd5b50813567ffffffffffffffff81111561343257600080fd5b6020830191508360208260051b850101111561344d57600080fd5b9250929050565b6000806000806040858703121561346a57600080fd5b843567ffffffffffffffff8082111561348257600080fd5b61348e88838901613408565b909650945060208701359150808211156134a757600080fd5b506134b487828801613408565b95989497509550505050565b6000806000606084860312156134d557600080fd5b83356134e0816133a7565b925060208401356134f0816133a7565b929592945050506040919091013590565b6000806040838503121561351457600080fd5b823561351f816133a7565b9150602083013561352f816133a7565b809150509250929050565b80151581146133bc57600080fd5b6000806040838503121561355b57600080fd5b82356133dd8161353a565b60006020828403121561357857600080fd5b5035919050565b60006020828403121561359157600080fd5b8135610fc38161353a565b6000806000606084860312156135b157600080fd5b505081359360208301359350604090920135919050565b600080604083850312156135db57600080fd5b82359150602083013561352f8161353a565b60008060006040848603121561360257600080fd5b833567ffffffffffffffff81111561361957600080fd5b61362586828701613408565b90945092505060208401356136398161353a565b809150509250925092565b60008060006040848603121561365957600080fd5b833567ffffffffffffffff81111561367057600080fd5b61367c86828701613408565b909790965060209590950135949350505050565b600080602083850312156136a357600080fd5b823567ffffffffffffffff8111156136ba57600080fd5b6136c685828601613408565b90969095509350505050565b600080604083850312156136e557600080fd5b50508035926020909101359150565b600181811c9082168061370857607f821691505b6020821081141561372957634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156137b557816000190482111561379b5761379b613764565b808516156137a857918102915b93841c939080029061377f565b509250929050565b6000826137cc57506001610ae8565b816137d957506000610ae8565b81600181146137ef57600281146137f957613815565b6001915050610ae8565b60ff84111561380a5761380a613764565b50506001821b610ae8565b5060208310610133831016604e8410600b8410161715613838575081810a610ae8565b613842838361377a565b806000190482111561385657613856613764565b029392505050565b6000610fc360ff8416836137bd565b634e487b7160e01b600052603260045260246000fd5b600081600019048311821515161561389d5761389d613764565b500290565b600082198211156138b5576138b5613764565b500190565b60006000198214156138ce576138ce613764565b5060010190565b6000602082840312156138e757600080fd5b5051919050565b60006020828403121561390057600080fd5b8151610fc38161353a565b60008282101561391d5761391d613764565b500390565b634e487b7160e01b600052603160045260246000fd5b60008261395557634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561396c57600080fd5b8151610fc3816133a7565b600081518084526020808501945080840160005b838110156139b05781516001600160a01b03168752958201959082019060010161398b565b509495945050505050565b85815284602082015260a0604082015260006139da60a0830186613977565b6001600160a01b0394909416606083015250608001529392505050565b828152604060208201526000613a106040830184613977565b949350505050565b600080600060608486031215613a2d57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220d423a27d0d20c2e4c181f948db96f8bf6564818c7e7b96b93f24fb0fdfa445fa64736f6c63430008080033

Deployed Bytecode

0x6080604052600436106103545760003560e01c8063632e5442116101c6578063a457c2d7116100f7578063ea2f0b3711610095578063f2fde38b1161006f578063f2fde38b146109da578063f3b1e83b146109fa578063fabb0b4f14610a10578063ffb54a9914610a2657600080fd5b8063ea2f0b371461097a578063eafb5a3c1461099a578063f259c57b146109ba57600080fd5b8063bf56b371116100d1578063bf56b371146108e8578063dc44b6a0146108fe578063dd62ed3e14610914578063deaa59df1461095a57600080fd5b8063a457c2d714610888578063a9059cbb146108a8578063afb8865e146108c857600080fd5b806378109e541161016457806388f820201161013e57806388f82020146107fc5780638da5cb5b146108355780638f4590d21461085357806395d89b411461087357600080fd5b806378109e54146107b057806384530c46146107c657806388790a68146107e657600080fd5b806371b9189c116101a057806371b9189c1461074457806372fdf6ee14610764578063743942b61461077a5780637598f8bc1461079a57600080fd5b8063632e5442146106ef57806370a082311461070f578063715018a61461072f57600080fd5b80632dd5efe7116102a057806343b127a61161023e5780634b01547f116102185780634b01547f1461066f5780634eeaf4581461068f57806352390c02146106af5780635d54c0af146106cf57600080fd5b806343b127a61461060f5780634549b0391461062f57806349bd5a5e1461064f57600080fd5b8063395093511161027a57806339509351146105995780633bd5d173146105b95780633ddf65ab146105d9578063401aa5c0146105f957600080fd5b80632dd5efe714610537578063313ce567146105575780633685d4191461057957600080fd5b806318160ddd1161030d5780632691bc80116102e75780632691bc80146104b757806328a23cd1146104d75780632d4103d6146104f75780632d8381191461051757600080fd5b806318160ddd146104605780631e89d5451461047557806323b872dd1461049757600080fd5b80630445b6671461036057806306fdde0314610389578063095ea7b3146103ab5780630f3a325f146103db57806313114a9d146104135780631694505e1461042857600080fd5b3661035b57005b600080fd5b34801561036c57600080fd5b5061037660155481565b6040519081526020015b60405180910390f35b34801561039557600080fd5b5061039e610a45565b6040516103809190613352565b3480156103b757600080fd5b506103cb6103c63660046133bf565b610ad7565b6040519015158152602001610380565b3480156103e757600080fd5b506103cb6103f63660046133eb565b6001600160a01b0316600090815260208052604090205460ff1690565b34801561041f57600080fd5b50600854610376565b34801561043457600080fd5b50601954610448906001600160a01b031681565b6040516001600160a01b039091168152602001610380565b34801561046c57600080fd5b50600654610376565b34801561048157600080fd5b50610495610490366004613454565b610aee565b005b3480156104a357600080fd5b506103cb6104b23660046134c0565b610d28565b3480156104c357600080fd5b506016546103cb9062010000900460ff1681565b3480156104e357600080fd5b506104956104f2366004613501565b610d91565b34801561050357600080fd5b50610495610512366004613548565b610ec1565b34801561052357600080fd5b50610376610532366004613566565b610f46565b34801561054357600080fd5b506104956105523660046133eb565b610fca565b34801561056357600080fd5b5060035460405160ff9091168152602001610380565b34801561058557600080fd5b506104956105943660046133eb565b611018565b3480156105a557600080fd5b506103cb6105b43660046133bf565b6111cb565b3480156105c557600080fd5b506104956105d4366004613566565b611201565b3480156105e557600080fd5b506104956105f436600461357f565b6112eb565b34801561060557600080fd5b50610376600c5481565b34801561061b57600080fd5b5061049561062a36600461359c565b611333565b34801561063b57600080fd5b5061037661064a3660046135c8565b61138d565b34801561065b57600080fd5b50601a54610448906001600160a01b031681565b34801561067b57600080fd5b5061049561068a36600461357f565b61141a565b34801561069b57600080fd5b506104956106aa36600461359c565b611460565b3480156106bb57600080fd5b506104956106ca3660046133eb565b611498565b3480156106db57600080fd5b506104956106ea3660046135ed565b611582565b3480156106fb57600080fd5b5061049561070a366004613644565b61161b565b34801561071b57600080fd5b5061037661072a3660046133eb565b61179b565b34801561073b57600080fd5b506104956117fa565b34801561075057600080fd5b5061049561075f366004613690565b61186e565b34801561077057600080fd5b50610376600b5481565b34801561078657600080fd5b506104956107953660046133eb565b61190d565b3480156107a657600080fd5b50610376600f5481565b3480156107bc57600080fd5b5061037660095481565b3480156107d257600080fd5b506104956107e1366004613690565b61196c565b3480156107f257600080fd5b50610376600d5481565b34801561080857600080fd5b506103cb6108173660046133eb565b6001600160a01b031660009081526023602052604090205460ff1690565b34801561084157600080fd5b506000546001600160a01b0316610448565b34801561085f57600080fd5b5061049561086e3660046136d2565b611a06565b34801561087f57600080fd5b5061039e611a50565b34801561089457600080fd5b506103cb6108a33660046133bf565b611a5f565b3480156108b457600080fd5b506103cb6108c33660046133bf565b611aae565b3480156108d457600080fd5b506104956108e3366004613566565b611abb565b3480156108f457600080fd5b5061037660055481565b34801561090a57600080fd5b50610376600a5481565b34801561092057600080fd5b5061037661092f366004613501565b6001600160a01b039182166000908152601f6020908152604080832093909416825291909152205490565b34801561096657600080fd5b506104956109753660046133eb565b611b0c565b34801561098657600080fd5b506104956109953660046133eb565b611b58565b3480156109a657600080fd5b506104956109b53660046133eb565b611ba3565b3480156109c657600080fd5b506104956109d53660046133eb565b611f29565b3480156109e657600080fd5b506104956109f53660046133eb565b611f77565b348015610a0657600080fd5b50610376600e5481565b348015610a1c57600080fd5b5061037660045481565b348015610a3257600080fd5b506016546103cb90610100900460ff1681565b606060178054610a54906136f4565b80601f0160208091040260200160405190810160405280929190818152602001828054610a80906136f4565b8015610acd5780601f10610aa257610100808354040283529160200191610acd565b820191906000526020600020905b815481529060010190602001808311610ab057829003601f168201915b5050505050905090565b6000610ae4338484612181565b5060015b92915050565b6000546001600160a01b03163314610b215760405162461bcd60e51b8152600401610b189061372f565b60405180910390fd5b6103218310610b885760405162461bcd60e51b815260206004820152602d60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526c3530302061646472657373657360981b6064820152608401610b18565b828114610be85760405162461bcd60e51b815260206004820152602860248201527f4d69736d61746368206265747765656e204164647265737320616e6420746f6b604482015267195b8818dbdd5b9d60c21b6064820152608401610b18565b6000805b84811015610c4657600354610c059060ff16600a61385e565b848483818110610c1757610c1761386d565b90506020020135610c289190613883565b610c3290836138a2565b915080610c3e816138ba565b915050610bec565b5080610c513361179b565b1015610c9f5760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c657400000000006044820152606401610b18565b60005b84811015610d2057610d0e33878784818110610cc057610cc061386d565b9050602002016020810190610cd591906133eb565b600354610ce69060ff16600a61385e565b878786818110610cf857610cf861386d565b90506020020135610d099190613883565b6122a5565b80610d18816138ba565b915050610ca2565b505050505050565b6000610d358484846122a5565b610d878433610d8285604051806060016040528060288152602001613a47602891396001600160a01b038a166000908152601f6020908152604080832033845290915290205491906127e9565b612181565b5060019392505050565b6000546001600160a01b03163314610dbb5760405162461bcd60e51b8152600401610b189061372f565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a082319060240160206040518083038186803b158015610dfd57600080fd5b505afa158015610e11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e3591906138d5565b60405163a9059cbb60e01b81526001600160a01b038481166004830152602482018390529192509084169063a9059cbb90604401602060405180830381600087803b158015610e8357600080fd5b505af1158015610e97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ebb91906138ee565b50505050565b6000546001600160a01b03163314610eeb5760405162461bcd60e51b8152600401610b189061372f565b6016805461ff00191661010084151502179055610f0730611498565b601a54610f1c906001600160a01b0316611498565b601654610100900460ff168015610f335750600554155b15610f42574360055560048190555b5050565b6000600754821115610fad5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610b18565b6000610fb7612823565b9050610fc38382612061565b9392505050565b6000546001600160a01b03163314610ff45760405162461bcd60e51b8152600401610b189061372f565b6001600160a01b03166000908152602260205260409020805460ff19166001179055565b6000546001600160a01b031633146110425760405162461bcd60e51b8152600401610b189061372f565b6001600160a01b03811660009081526023602052604090205460ff166110aa5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610b18565b60005b602554811015610f4257816001600160a01b0316602582815481106110d4576110d461386d565b6000918252602090912001546001600160a01b031614156111b957602580546110ff9060019061390b565b8154811061110f5761110f61386d565b600091825260209091200154602580546001600160a01b03909216918390811061113b5761113b61386d565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152601e82526040808220829055602390925220805460ff19169055602580548061119357611193613922565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b806111c3816138ba565b9150506110ad565b336000818152601f602090815260408083206001600160a01b03871684529091528120549091610ae4918590610d829086612122565b3360008181526023602052604090205460ff16156112765760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610b18565b600061128183612846565b505050506001600160a01b0384166000908152601d60205260409020549192506112ad91905082612895565b6001600160a01b0383166000908152601d60205260409020556007546112d39082612895565b6007556008546112e39084612122565b600855505050565b6000546001600160a01b031633146113155760405162461bcd60e51b8152600401610b189061372f565b6016805491151563010000000263ff00000019909216919091179055565b6000546001600160a01b0316331461135d5760405162461bcd60e51b8152600401610b189061372f565b600a829055600b819055600c8390556012839055601082905560118190556113858282612122565b601355505050565b60006006548311156113e15760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610b18565b816114005760006113f184612846565b50939550610ae8945050505050565b600061140b84612846565b50929550610ae8945050505050565b6000546001600160a01b031633146114445760405162461bcd60e51b8152600401610b189061372f565b60168054911515620100000262ff000019909216919091179055565b6000546001600160a01b0316331461148a5760405162461bcd60e51b8152600401610b189061372f565b600d91909155600e55600f55565b6000546001600160a01b031633146114c25760405162461bcd60e51b8152600401610b189061372f565b6001600160a01b0381166000908152601d60205260409020541561151c576001600160a01b0381166000908152601d602052604090205461150290610f46565b6001600160a01b0382166000908152601e60205260409020555b6001600160a01b03166000818152602360205260408120805460ff191660019081179091556025805491820181559091527f401968ff42a154441da5f6c4c935ac46b8671f0e062baaa62a7545ba53bb6e4c0180546001600160a01b0319169091179055565b6000546001600160a01b031633146115ac5760405162461bcd60e51b8152600401610b189061372f565b60005b82811015610ebb5781602060008686858181106115ce576115ce61386d565b90506020020160208101906115e391906133eb565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055611614816138ba565b90506115af565b6000546001600160a01b031633146116455760405162461bcd60e51b8152600401610b189061372f565b6107d182106116ad5760405162461bcd60e51b815260206004820152602e60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526d323030302061646472657373657360901b6064820152608401610b18565b60035460009083906116c39060ff16600a61385e565b6116cd9084613883565b6116d79190613883565b9050806116e33361179b565b10156117315760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c657400000000006044820152606401610b18565b60005b8381101561179457611782338686848181106117525761175261386d565b905060200201602081019061176791906133eb565b6003546117789060ff16600a61385e565b610d099087613883565b8061178c816138ba565b915050611734565b5050505050565b6001600160a01b03811660009081526023602052604081205460ff16156117d857506001600160a01b03166000908152601e602052604090205490565b6001600160a01b0382166000908152601d6020526040902054610ae890610f46565b6000546001600160a01b031633146118245760405162461bcd60e51b8152600401610b189061372f565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146118985760405162461bcd60e51b8152600401610b189061372f565b60005b81811015611908576001602160008585858181106118bb576118bb61386d565b90506020020160208101906118d091906133eb565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055611901816138ba565b905061189b565b505050565b6000546001600160a01b031633146119375760405162461bcd60e51b8152600401610b189061372f565b6040516001600160a01b038216904780156108fc02916000818181858888f19350505050158015610f42573d6000803e3d6000fd5b6000546001600160a01b031633146119965760405162461bcd60e51b8152600401610b189061372f565b60005b81811015611908576001602460008585858181106119b9576119b961386d565b90506020020160208101906119ce91906133eb565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556119ff816138ba565b9050611999565b6000546001600160a01b03163314611a305760405162461bcd60e51b8152600401610b189061372f565b8082600654611a3f9190613883565b611a499190613938565b6015555050565b606060188054610a54906136f4565b6000610ae43384610d8285604051806060016040528060258152602001613a6f60259139336000908152601f602090815260408083206001600160a01b038d16845290915290205491906127e9565b6000610ae43384846122a5565b6000546001600160a01b03163314611ae55760405162461bcd60e51b8152600401610b189061372f565b611b0681611b006103e860065461206190919063ffffffff16565b906120a3565b60095550565b6000546001600160a01b03163314611b365760405162461bcd60e51b8152600401610b189061372f565b601b80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611b825760405162461bcd60e51b8152600401610b189061372f565b6001600160a01b03166000908152602160205260409020805460ff19169055565b6000546001600160a01b03163314611bcd5760405162461bcd60e51b8152600401610b189061372f565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611c0d57600080fd5b505afa158015611c21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c45919061395a565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611c8d57600080fd5b505afa158015611ca1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cc5919061395a565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b158015611d0b57600080fd5b505afa158015611d1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d43919061395a565b90506001600160a01b038116611ee957816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611d8c57600080fd5b505afa158015611da0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dc4919061395a565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611e0c57600080fd5b505afa158015611e20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e44919061395a565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015611e8c57600080fd5b505af1158015611ea0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ec4919061395a565b601a80546001600160a01b0319166001600160a01b0392909216919091179055611f05565b601a80546001600160a01b0319166001600160a01b0383161790555b50601980546001600160a01b0319166001600160a01b039290921691909117905550565b6000546001600160a01b03163314611f535760405162461bcd60e51b8152600401610b189061372f565b6001600160a01b03166000908152602160205260409020805460ff19166001179055565b6000546001600160a01b03163314611fa15760405162461bcd60e51b8152600401610b189061372f565b6001600160a01b0381166120065760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b18565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000610fc383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506128d7565b6000826120b257506000610ae8565b60006120be8385613883565b9050826120cb8583613938565b14610fc35760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b18565b60008061212f83856138a2565b905083811015610fc35760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b18565b6001600160a01b0383166121e35760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b18565b6001600160a01b0382166122445760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b18565b6001600160a01b038381166000818152601f602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166123095760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b18565b6001600160a01b03821661236b5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b18565b600081116123cd5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610b18565b6001600160a01b038216600090815260208052604090205460ff16156124225760405162461bcd60e51b815260206004820152600a602482015269536f72727920426f737360b01b6044820152606401610b18565b6001600160a01b038316600090815260208052604090205460ff16156124775760405162461bcd60e51b815260206004820152600a602482015269536f72727920426f737360b01b6044820152606401610b18565b6000546001600160a01b038481169116148015906124a357506000546001600160a01b03838116911614155b156124ff57601654610100900460ff166124ff5760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642e00000000000000006044820152606401610b18565b601a546000906001600160a01b038581169116148061252b5750601a546001600160a01b038481169116145b801561257357506001600160a01b03841660009081526021602052604090205460ff168061257157506001600160a01b03831660009081526021602052604090205460ff165b155b1561257c575060015b60006005541180156125c057506001600160a01b03831660009081526022602052604090205460ff161580156125c057506000546001600160a01b03858116911614155b80156125da5750436004546005546125d891906138a2565b115b1561264e576009546125eb8461179b565b6125f590846138a2565b111561264e5760405162461bcd60e51b815260206004820152602260248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d6974604482015261195960f21b6064820152608401610b18565b601354601455600c54601255601654610100900460ff16801561267e5750601a546001600160a01b038481169116145b1561269c57600e54600d5461269291612122565b601455600f546012555b60006005541180156126bc5750436004546005546126ba91906138a2565b115b156126e4576001600160a01b03831660009081526020805260409020805460ff191660011790555b600060055411801561270457506000546001600160a01b03858116911614155b801561271f575060045460055461271b91906138a2565b4311155b801561273457506016546301000000900460ff165b15612740576103b66014555b60165462010000900460ff161561278057601654610100900460ff1680156127755750601a546001600160a01b038581169116145b156127805760006014555b60165460ff1615801561279a5750601654610100900460ff165b80156127b35750601a546001600160a01b038481169116145b156127dd5760006127c33061179b565b905060155481106127db57506015546127db81612905565b505b610ebb848484846129f1565b6000818484111561280d5760405162461bcd60e51b8152600401610b189190613352565b50600061281a848661390b565b95945050505050565b6000806000612830612b1d565b909250905061283f8282612061565b9250505090565b600080600080600080600080600061285d8a612c9f565b925092509250600080600061287b8d8686612876612823565b612ce1565b919f909e50909c50959a5093985091965092945050505050565b6000610fc383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506127e9565b600081836128f85760405162461bcd60e51b8152600401610b189190613352565b50600061281a8486613938565b6016805460ff191660011790556013546010546000916129359160029161292f91829087906120a3565b90612061565b905060006129438383612895565b905061294e81612d31565b601054479060009061296e90612965906002612061565b60135490612895565b90506000612990600261292f8461292f601054886120a390919063ffffffff16565b905060006129ad8361292f601154876120a390919063ffffffff16565b90504780156129cd57601b546129cd9083906001600160a01b0316612ed3565b86156129dd576129dd8784612f09565b50506016805460ff19169055505050505050565b60125460145482612a0757600060128190556014555b6001600160a01b03861660009081526023602052604090205460ff168015612a4857506001600160a01b03851660009081526023602052604090205460ff16155b15612a5d57612a58868686612fe6565b612b09565b6001600160a01b03861660009081526023602052604090205460ff16158015612a9e57506001600160a01b03851660009081526023602052604090205460ff165b15612aae57612a5886868661310c565b6001600160a01b03861660009081526023602052604090205460ff168015612aee57506001600160a01b03851660009081526023602052604090205460ff165b15612afe57612a588686866131b5565b612b09868686613228565b82610d205760129190915560145550505050565b6007546006546000918291825b602554811015612c6f5782601d600060258481548110612b4c57612b4c61386d565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612bb7575081601e600060258481548110612b9057612b9061386d565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612bcd57600754600654945094505050509091565b612c13601d600060258481548110612be757612be761386d565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490612895565b9250612c5b601e600060258481548110612c2f57612c2f61386d565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390612895565b915080612c67816138ba565b915050612b2a565b50600654600754612c7f91612061565b821015612c96576007546006549350935050509091565b90939092509050565b600080600080612cae8561326c565b90506000612cbb86613289565b90506000612cd382612ccd8986612895565b90612895565b979296509094509092505050565b6000808080612cf088866120a3565b90506000612cfe88876120a3565b90506000612d0c88886120a3565b90506000612d1e82612ccd8686612895565b939b939a50919850919650505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612d6657612d6661386d565b6001600160a01b03928316602091820292909201810191909152601954604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015612dba57600080fd5b505afa158015612dce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612df2919061395a565b81600181518110612e0557612e0561386d565b6001600160a01b039283166020918202929092010152601954612e2b9130911684612181565b60195460405163791ac94760e01b81526001600160a01b039091169063791ac94790612e649085906000908690309042906004016139bb565b600060405180830381600087803b158015612e7e57600080fd5b505af1158015612e92573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051612ec79291906139f7565b60405180910390a15050565b6040516001600160a01b0382169083156108fc029084906000818181858888f19350505050158015611908573d6000803e3d6000fd5b601954612f219030906001600160a01b031684612181565b6019546001600160a01b031663f305d719823085600080612f4a6000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b158015612fad57600080fd5b505af1158015612fc1573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906117949190613a18565b600080600080600080612ff887612846565b6001600160a01b038f166000908152601e6020526040902054959b5093995091975095509350915061302a9088612895565b6001600160a01b038a166000908152601e6020908152604080832093909355601d905220546130599087612895565b6001600160a01b03808b166000908152601d602052604080822093909355908a16815220546130889086612122565b6001600160a01b0389166000908152601d60205260409020556130aa816132a6565b6130b4848361332e565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516130f991815260200190565b60405180910390a3505050505050505050565b60008060008060008061311e87612846565b6001600160a01b038f166000908152601d6020526040902054959b509399509197509550935091506131509087612895565b6001600160a01b03808b166000908152601d6020908152604080832094909455918b168152601e90915220546131869084612122565b6001600160a01b0389166000908152601e6020908152604080832093909355601d905220546130889086612122565b6000806000806000806131c787612846565b6001600160a01b038f166000908152601e6020526040902054959b509399509197509550935091506131f99088612895565b6001600160a01b038a166000908152601e6020908152604080832093909355601d905220546131509087612895565b60008060008060008061323a87612846565b6001600160a01b038f166000908152601d6020526040902054959b509399509197509550935091506130599087612895565b6000610ae86103e861292f601254856120a390919063ffffffff16565b6000610ae86103e861292f601454856120a390919063ffffffff16565b60006132b0612823565b905060006132be83836120a3565b306000908152601d60205260409020549091506132db9082612122565b306000908152601d602090815260408083209390935560239052205460ff161561190857306000908152601e60205260409020546133199084612122565b306000908152601e6020526040902055505050565b60075461333b9083612895565b60075560085461334b9082612122565b6008555050565b600060208083528351808285015260005b8181101561337f57858101830151858201604001528201613363565b81811115613391576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b03811681146133bc57600080fd5b50565b600080604083850312156133d257600080fd5b82356133dd816133a7565b946020939093013593505050565b6000602082840312156133fd57600080fd5b8135610fc3816133a7565b60008083601f84011261341a57600080fd5b50813567ffffffffffffffff81111561343257600080fd5b6020830191508360208260051b850101111561344d57600080fd5b9250929050565b6000806000806040858703121561346a57600080fd5b843567ffffffffffffffff8082111561348257600080fd5b61348e88838901613408565b909650945060208701359150808211156134a757600080fd5b506134b487828801613408565b95989497509550505050565b6000806000606084860312156134d557600080fd5b83356134e0816133a7565b925060208401356134f0816133a7565b929592945050506040919091013590565b6000806040838503121561351457600080fd5b823561351f816133a7565b9150602083013561352f816133a7565b809150509250929050565b80151581146133bc57600080fd5b6000806040838503121561355b57600080fd5b82356133dd8161353a565b60006020828403121561357857600080fd5b5035919050565b60006020828403121561359157600080fd5b8135610fc38161353a565b6000806000606084860312156135b157600080fd5b505081359360208301359350604090920135919050565b600080604083850312156135db57600080fd5b82359150602083013561352f8161353a565b60008060006040848603121561360257600080fd5b833567ffffffffffffffff81111561361957600080fd5b61362586828701613408565b90945092505060208401356136398161353a565b809150509250925092565b60008060006040848603121561365957600080fd5b833567ffffffffffffffff81111561367057600080fd5b61367c86828701613408565b909790965060209590950135949350505050565b600080602083850312156136a357600080fd5b823567ffffffffffffffff8111156136ba57600080fd5b6136c685828601613408565b90969095509350505050565b600080604083850312156136e557600080fd5b50508035926020909101359150565b600181811c9082168061370857607f821691505b6020821081141561372957634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156137b557816000190482111561379b5761379b613764565b808516156137a857918102915b93841c939080029061377f565b509250929050565b6000826137cc57506001610ae8565b816137d957506000610ae8565b81600181146137ef57600281146137f957613815565b6001915050610ae8565b60ff84111561380a5761380a613764565b50506001821b610ae8565b5060208310610133831016604e8410600b8410161715613838575081810a610ae8565b613842838361377a565b806000190482111561385657613856613764565b029392505050565b6000610fc360ff8416836137bd565b634e487b7160e01b600052603260045260246000fd5b600081600019048311821515161561389d5761389d613764565b500290565b600082198211156138b5576138b5613764565b500190565b60006000198214156138ce576138ce613764565b5060010190565b6000602082840312156138e757600080fd5b5051919050565b60006020828403121561390057600080fd5b8151610fc38161353a565b60008282101561391d5761391d613764565b500390565b634e487b7160e01b600052603160045260246000fd5b60008261395557634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561396c57600080fd5b8151610fc3816133a7565b600081518084526020808501945080840160005b838110156139b05781516001600160a01b03168752958201959082019060010161398b565b509495945050505050565b85815284602082015260a0604082015260006139da60a0830186613977565b6001600160a01b0394909416606083015250608001529392505050565b828152604060208201526000613a106040830184613977565b949350505050565b600080600060608486031215613a2d57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220d423a27d0d20c2e4c181f948db96f8bf6564818c7e7b96b93f24fb0fdfa445fa64736f6c63430008080033

Deployed Bytecode Sourcemap

14265:23642:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15351:57;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;15351:57:0;;;;;;;;30210:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;18306:161::-;;;;;;;;;;-1:-1:-1;18306:161:0;;;;;:::i;:::-;;:::i;:::-;;;1419:14:1;;1412:22;1394:41;;1382:2;1367:18;18306:161:0;1254:187:1;31393:106:0;;;;;;;;;;-1:-1:-1;31393:106:0;;;;;:::i;:::-;-1:-1:-1;;;;;31473:18:0;31449:4;31473:18;;;:9;:18;;;;;;;;;31393:106;31635:87;;;;;;;;;;-1:-1:-1;31704:10:0;;31635:87;;15645:41;;;;;;;;;;-1:-1:-1;15645:41:0;;;;-1:-1:-1;;;;;15645:41:0;;;;;;-1:-1:-1;;;;;1889:32:1;;;1871:51;;1859:2;1844:18;15645:41:0;1698:230:1;30487:95:0;;;;;;;;;;-1:-1:-1;30567:7:0;;30487:95;;35905:701;;;;;;;;;;-1:-1:-1;35905:701:0;;;;;:::i;:::-;;:::i;:::-;;17478:313;;;;;;;;;;-1:-1:-1;17478:313:0;;;;;:::i;:::-;;:::i;15481:34::-;;;;;;;;;;-1:-1:-1;15481:34:0;;;;;;;;;;;35243:171;;;;;;;;;;-1:-1:-1;35243:171:0;;;;;:::i;:::-;;:::i;32986:337::-;;;;;;;;;;-1:-1:-1;32986:337:0;;;;;:::i;:::-;;:::i;30806:253::-;;;;;;;;;;-1:-1:-1;30806:253:0;;;;;:::i;:::-;;:::i;35598:113::-;;;;;;;;;;-1:-1:-1;35598:113:0;;;;;:::i;:::-;;:::i;30396:83::-;;;;;;;;;;-1:-1:-1;30462:9:0;;30396:83;;30462:9;;;;4714:36:1;;4702:2;4687:18;30396:83:0;4572:184:1;32499:479:0;;;;;;;;;;-1:-1:-1;32499:479:0;;;;;:::i;:::-;;:::i;17799:218::-;;;;;;;;;;-1:-1:-1;17799:218:0;;;;;:::i;:::-;;:::i;18479:377::-;;;;;;;;;;-1:-1:-1;18479:377:0;;;;;:::i;:::-;;:::i;33445:96::-;;;;;;;;;;-1:-1:-1;33445:96:0;;;;;:::i;:::-;;:::i;14878:37::-;;;;;;;;;;;;;;;;37131:436;;;;;;;;;;-1:-1:-1;37131:436:0;;;;;:::i;:::-;;:::i;31730:::-;;;;;;;;;;-1:-1:-1;31730:436:0;;;;;:::i;:::-;;:::i;15693:28::-;;;;;;;;;;-1:-1:-1;15693:28:0;;;;-1:-1:-1;;;;;15693:28:0;;;33335:102;;;;;;;;;;-1:-1:-1;33335:102:0;;;;;:::i;:::-;;:::i;37575:255::-;;;;;;;;;;-1:-1:-1;37575:255:0;;;;;:::i;:::-;;:::i;32230:261::-;;;;;;;;;;-1:-1:-1;32230:261:0;;;;;:::i;:::-;;:::i;34680:209::-;;;;;;;;;;-1:-1:-1;34680:209:0;;;;;:::i;:::-;;:::i;36614:509::-;;;;;;;;;;-1:-1:-1;36614:509:0;;;;;:::i;:::-;;:::i;30590:208::-;;;;;;;;;;-1:-1:-1;30590:208:0;;;;;:::i;:::-;;:::i;6026:148::-;;;;;;;;;;;;;:::i;34208:198::-;;;;;;;;;;-1:-1:-1;34208:198:0;;;;;:::i;:::-;;:::i;14832:36::-;;;;;;;;;;;;;;;;35100:135;;;;;;;;;;-1:-1:-1;35100:135:0;;;;;:::i;:::-;;:::i;15015:38::-;;;;;;;;;;;;;;;;14694:58;;;;;;;;;;;;;;;;34901:188;;;;;;;;;;-1:-1:-1;34901:188:0;;;;;:::i;:::-;;:::i;14924:37::-;;;;;;;;;;;;;;;;31507:120;;;;;;;;;;-1:-1:-1;31507:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;31599:20:0;31575:4;31599:20;;;:11;:20;;;;;;;;;31507:120;5801:79;;;;;;;;;;-1:-1:-1;5839:7:0;5866:6;-1:-1:-1;;;;;5866:6:0;5801:79;;35719:178;;;;;;;;;;-1:-1:-1;35719:178:0;;;;;:::i;:::-;;:::i;30301:87::-;;;;;;;;;;;;;:::i;18025:269::-;;;;;;;;;;-1:-1:-1;18025:269:0;;;;;:::i;:::-;;:::i;31067:167::-;;;;;;;;;;-1:-1:-1;31067:167:0;;;;;:::i;:::-;;:::i;35422:168::-;;;;;;;;;;-1:-1:-1;35422:168:0;;;;;:::i;:::-;;:::i;14455:29::-;;;;;;;;;;;;;;;;14785:36;;;;;;;;;;;;;;;;31242:143;;;;;;;;;;-1:-1:-1;31242:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;31350:18:0;;;31323:7;31350:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;31242:143;34540:128;;;;;;;;;;-1:-1:-1;34540:128:0;;;;;:::i;:::-;;:::i;34418:110::-;;;;;;;;;;-1:-1:-1;34418:110:0;;;;;:::i;:::-;;:::i;33553:523::-;;;;;;;;;;-1:-1:-1;33553:523:0;;;;;:::i;:::-;;:::i;34088:112::-;;;;;;;;;;-1:-1:-1;34088:112:0;;;;;:::i;:::-;;:::i;6182:244::-;;;;;;;;;;-1:-1:-1;6182:244:0;;;;;:::i;:::-;;:::i;14969:37::-;;;;;;;;;;;;;;;;14419:29;;;;;;;;;;;;;;;;15443:31;;;;;;;;;;-1:-1:-1;15443:31:0;;;;;;;;;;;30210:83;30247:13;30280:5;30273:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30210:83;:::o;18306:161::-;18381:4;18398:39;189:10;18421:7;18430:6;18398:8;:39::i;:::-;-1:-1:-1;18455:4:0;18306:161;;;;;:::o;35905:701::-;5935:6;;-1:-1:-1;;;;;5935:6:0;189:10;5935:22;5927:67;;;;-1:-1:-1;;;5927:67:0;;;;;;;:::i;:::-;;;;;;;;;36045:3:::1;36026:22:::0;::::1;36018:79;;;::::0;-1:-1:-1;;;36018:79:0;;9227:2:1;36018:79:0::1;::::0;::::1;9209:21:1::0;9266:2;9246:18;;;9239:30;9305:34;9285:18;;;9278:62;-1:-1:-1;;;9356:18:1;;;9349:43;9409:19;;36018:79:0::1;9025:409:1::0;36018:79:0::1;36139:33:::0;;::::1;36131:85;;;::::0;-1:-1:-1;;;36131:85:0;;9641:2:1;36131:85:0::1;::::0;::::1;9623:21:1::0;9680:2;9660:18;;;9653:30;9719:34;9699:18;;;9692:62;-1:-1:-1;;;9770:18:1;;;9763:38;9818:19;;36131:85:0::1;9439:404:1::0;36131:85:0::1;36229:12;36262:6:::0;36258:108:::1;36272:20:::0;;::::1;36258:108;;;36344:9;::::0;36340:13:::1;::::0;36344:9:::1;;36340:2;:13;:::i;:::-;36328:6;;36335:1;36328:9;;;;;;;:::i;:::-;;;;;;;:25;;;;:::i;:::-;36320:34;::::0;:4;:34:::1;:::i;:::-;36313:41:::0;-1:-1:-1;36294:3:0;::::1;::::0;::::1;:::i;:::-;;;;36258:108;;;;36411:4;36386:21;36396:10;36386:9;:21::i;:::-;:29;;36378:69;;;::::0;-1:-1:-1;;;36378:69:0;;12143:2:1;36378:69:0::1;::::0;::::1;12125:21:1::0;12182:2;12162:18;;;12155:30;12221:29;12201:18;;;12194:57;12268:18;;36378:69:0::1;11941:351:1::0;36378:69:0::1;36464:6;36460:139;36474:20:::0;;::::1;36460:139;;;36515:62;36525:10;36536:9;;36546:1;36536:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;36566:9;::::0;36562:13:::1;::::0;36566:9:::1;;36562:2;:13;:::i;:::-;36550:6;;36557:1;36550:9;;;;;;;:::i;:::-;;;;;;;:25;;;;:::i;:::-;36515:9;:62::i;:::-;36496:3:::0;::::1;::::0;::::1;:::i;:::-;;;;36460:139;;;;36005:601;35905:701:::0;;;;:::o;17478:313::-;17576:4;17593:36;17603:6;17611:9;17622:6;17593:9;:36::i;:::-;17640:121;17649:6;189:10;17671:89;17709:6;17671:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17671:19:0;;;;;;:11;:19;;;;;;;;189:10;17671:33;;;;;;;;;;:37;:89::i;:::-;17640:8;:121::i;:::-;-1:-1:-1;17779:4:0;17478:313;;;;;:::o;35243:171::-;5935:6;;-1:-1:-1;;;;;5935:6:0;189:10;5935:22;5927:67;;;;-1:-1:-1;;;5927:67:0;;;;;;;:::i;:::-;35338:30:::1;::::0;-1:-1:-1;;;35338:30:0;;35362:4:::1;35338:30;::::0;::::1;1871:51:1::0;35320:15:0::1;::::0;-1:-1:-1;;;;;35338:15:0;::::1;::::0;::::1;::::0;1844:18:1;;35338:30:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35379:27;::::0;-1:-1:-1;;;35379:27:0;;-1:-1:-1;;;;;12678:32:1;;;35379:27:0::1;::::0;::::1;12660:51:1::0;12727:18;;;12720:34;;;35320:48:0;;-1:-1:-1;35379:14:0;;::::1;::::0;::::1;::::0;12633:18:1;;35379:27:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;35309:105;35243:171:::0;;:::o;32986:337::-;5935:6;;-1:-1:-1;;;;;5935:6:0;189:10;5935:22;5927:67;;;;-1:-1:-1;;;5927:67:0;;;;;;;:::i;:::-;33073:11:::1;:21:::0;;-1:-1:-1;;33073:21:0::1;;::::0;::::1;;;;::::0;;33105:32:::1;33131:4;33105:17;:32::i;:::-;33166:13;::::0;33148:32:::1;::::0;-1:-1:-1;;;;;33166:13:0::1;33148:17;:32::i;:::-;33194:11;::::0;::::1;::::0;::::1;;;:30:::0;::::1;;;-1:-1:-1::0;33209:10:0::1;::::0;:15;33194:30:::1;33191:125;;;33253:12;33240:10;:25:::0;33280:10:::1;:24:::0;;;33191:125:::1;32986:337:::0;;:::o;30806:253::-;30872:7;30911;;30900;:18;;30892:73;;;;-1:-1:-1;;;30892:73:0;;13217:2:1;30892:73:0;;;13199:21:1;13256:2;13236:18;;;13229:30;13295:34;13275:18;;;13268:62;-1:-1:-1;;;13346:18:1;;;13339:40;13396:19;;30892:73:0;13015:406:1;30892:73:0;30976:19;30999:10;:8;:10::i;:::-;30976:33;-1:-1:-1;31027:24:0;:7;30976:33;31027:11;:24::i;:::-;31020:31;30806:253;-1:-1:-1;;;30806:253:0:o;35598:113::-;5935:6;;-1:-1:-1;;;;;5935:6:0;189:10;5935:22;5927:67;;;;-1:-1:-1;;;5927:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35671:25:0::1;;::::0;;;:18:::1;:25;::::0;;;;:32;;-1:-1:-1;;35671:32:0::1;35699:4;35671:32;::::0;;35598:113::o;32499:479::-;5935:6;;-1:-1:-1;;;;;5935:6:0;189:10;5935:22;5927:67;;;;-1:-1:-1;;;5927:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32581:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;32573:60;;;::::0;-1:-1:-1;;;32573:60:0;;13628:2:1;32573:60:0::1;::::0;::::1;13610:21:1::0;13667:2;13647:18;;;13640:30;13706:29;13686:18;;;13679:57;13753:18;;32573:60:0::1;13426:351:1::0;32573:60:0::1;32649:9;32644:327;32668:9;:16:::0;32664:20;::::1;32644:327;;;32726:7;-1:-1:-1::0;;;;;32710:23:0::1;:9;32720:1;32710:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;32710:12:0::1;:23;32706:254;;;32769:9;32779:16:::0;;:20:::1;::::0;32798:1:::1;::::0;32779:20:::1;:::i;:::-;32769:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;32754:9:::1;:12:::0;;-1:-1:-1;;;;;32769:31:0;;::::1;::::0;32764:1;;32754:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;32754:46:0::1;-1:-1:-1::0;;;;;32754:46:0;;::::1;;::::0;;32819:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;32858:11:::1;:20:::0;;;;:28;;-1:-1:-1;;32858:28:0::1;::::0;;32905:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;32905:15:0;;;;;-1:-1:-1;;;;;;32905:15:0::1;::::0;;;;;32986:337;;:::o;32706:254::-:1;32686:3:::0;::::1;::::0;::::1;:::i;:::-;;;;32644:327;;17799:218:::0;189:10;17887:4;17936:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;17936:34:0;;;;;;;;;;17887:4;;17904:83;;17927:7;;17936:50;;17975:10;17936:38;:50::i;18479:377::-;189:10;18531:14;18580:19;;;:11;:19;;;;;;;;18579:20;18571:77;;;;-1:-1:-1;;;18571:77:0;;14246:2:1;18571:77:0;;;14228:21:1;14285:2;14265:18;;;14258:30;14324:34;14304:18;;;14297:62;-1:-1:-1;;;14375:18:1;;;14368:42;14427:19;;18571:77:0;14044:408:1;18571:77:0;18660:15;18684:19;18695:7;18684:10;:19::i;:::-;-1:-1:-1;;;;;;;;;18732:15:0;;;;;;:7;:15;;;;;;18659:44;;-1:-1:-1;18732:28:0;;:15;-1:-1:-1;18659:44:0;18732:19;:28::i;:::-;-1:-1:-1;;;;;18714:15:0;;;;;;:7;:15;;;;;:46;18781:7;;:20;;18793:7;18781:11;:20::i;:::-;18771:7;:30;18825:10;;:23;;18840:7;18825:14;:23::i;:::-;18812:10;:36;-1:-1:-1;;;18479:377:0:o;33445:96::-;5935:6;;-1:-1:-1;;;;;5935:6:0;189:10;5935:22;5927:67;;;;-1:-1:-1;;;5927:67:0;;;;;;;:::i;:::-;33514:11:::1;:19:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;33514:19:0;;::::1;::::0;;;::::1;::::0;;33445:96::o;37131:436::-;5935:6;;-1:-1:-1;;;;;5935:6:0;189:10;5935:22;5927:67;;;;-1:-1:-1;;;5927:67:0;;;;;;;:::i;:::-;37262:16:::1;:33:::0;;;37306:16:::1;:33:::0;;;37350:17:::1;:34:::0;;;37397:13:::1;:30:::0;;;37438:12:::1;:29:::0;;;37478:12:::1;:29:::0;;;37529:30:::1;37281:14:::0;37325;37529:16:::1;:30::i;:::-;37518:8;:41:::0;-1:-1:-1;;;37131:436:0:o;31730:::-;31820:7;31859;;31848;:18;;31840:62;;;;-1:-1:-1;;;31840:62:0;;14659:2:1;31840:62:0;;;14641:21:1;14698:2;14678:18;;;14671:30;14737:33;14717:18;;;14710:61;14788:18;;31840:62:0;14457:355:1;31840:62:0;31918:17;31913:246;;31953:15;31977:19;31988:7;31977:10;:19::i;:::-;-1:-1:-1;31952:44:0;;-1:-1:-1;32011:14:0;;-1:-1:-1;;;;;32011:14:0;31913:246;32060:23;32091:19;32102:7;32091:10;:19::i;:::-;-1:-1:-1;32058:52:0;;-1:-1:-1;32125:22:0;;-1:-1:-1;;;;;32125:22:0;33335:102;5935:6;;-1:-1:-1;;;;;5935:6:0;189:10;5935:22;5927:67;;;;-1:-1:-1;;;5927:67:0;;;;;;;:::i;:::-;33407:14:::1;:22:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;33407:22:0;;::::1;::::0;;;::::1;::::0;;33335:102::o;37575:255::-;5935:6;;-1:-1:-1;;;;;5935:6:0;189:10;5935:22;5927:67;;;;-1:-1:-1;;;5927:67:0;;;;;;;:::i;:::-;37697:17:::1;:34:::0;;;;37742:17:::1;:34:::0;37787:18:::1;:35:::0;37575:255::o;32230:261::-;5935:6;;-1:-1:-1;;;;;5935:6:0;189:10;5935:22;5927:67;;;;-1:-1:-1;;;5927:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32307:16:0;::::1;32326:1;32307:16:::0;;;:7:::1;:16;::::0;;;;;:20;32304:108:::1;;-1:-1:-1::0;;;;;32383:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;32363:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;32344:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;32304:108:::1;-1:-1:-1::0;;;;;32422:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;32422:27:0::1;32445:4;32422:27:::0;;::::1;::::0;;;32460:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;32460:23:0::1;::::0;;::::1;::::0;;32230:261::o;34680:209::-;5935:6;;-1:-1:-1;;;;;5935:6:0;189:10;5935:22;5927:67;;;;-1:-1:-1;;;5927:67:0;;;;;;;:::i;:::-;34780:9:::1;34775:107;34791:20:::0;;::::1;34775:107;;;34863:6;34837:9;:23;34847:9;;34857:1;34847:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;34837:23:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;34837:23:0;:32;;-1:-1:-1;;34837:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;34813:3:::1;::::0;::::1;:::i;:::-;;;34775:107;;36614:509:::0;5935:6;;-1:-1:-1;;;;;5935:6:0;189:10;5935:22;5927:67;;;;-1:-1:-1;;;5927:67:0;;;;;;;:::i;:::-;36749:4:::1;36730:23:::0;::::1;36722:81;;;::::0;-1:-1:-1;;;36722:81:0;;15019:2:1;36722:81:0::1;::::0;::::1;15001:21:1::0;15058:2;15038:18;;;15031:30;15097:34;15077:18;;;15070:62;-1:-1:-1;;;15148:18:1;;;15141:44;15202:19;;36722:81:0::1;14817:410:1::0;36722:81:0::1;36866:9;::::0;36839:12:::1;::::0;36878:9;;36862:13:::1;::::0;36866:9:::1;;36862:2;:13;:::i;:::-;36854:21;::::0;:6;:21:::1;:::i;:::-;:40;;;;:::i;:::-;36839:55;;36940:4;36915:21;36925:10;36915:9;:21::i;:::-;:29;;36907:69;;;::::0;-1:-1:-1;;;36907:69:0;;12143:2:1;36907:69:0::1;::::0;::::1;12125:21:1::0;12182:2;12162:18;;;12155:30;12221:29;12201:18;;;12194:57;12268:18;;36907:69:0::1;11941:351:1::0;36907:69:0::1;36993:6;36989:127;37003:20:::0;;::::1;36989:127;;;37044:58;37054:10;37065:9;;37075:1;37065:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;37091:9;::::0;37087:13:::1;::::0;37091:9:::1;;37087:2;:13;:::i;:::-;37079:21;::::0;:6;:21:::1;:::i;37044:58::-;37025:3:::0;::::1;::::0;::::1;:::i;:::-;;;;36989:127;;;;36709:414;36614:509:::0;;;:::o;30590:208::-;-1:-1:-1;;;;;30680:20:0;;30656:7;30680:20;;;:11;:20;;;;;;;;30676:59;;;-1:-1:-1;;;;;;30719:16:0;;;;;:7;:16;;;;;;;30590:208::o;30676:59::-;-1:-1:-1;;;;;30773:16:0;;;;;;:7;:16;;;;;;30753:37;;:19;:37::i;6026:148::-;5935:6;;-1:-1:-1;;;;;5935:6:0;189:10;5935:22;5927:67;;;;-1:-1:-1;;;5927:67:0;;;;;;;:::i;:::-;6133:1:::1;6117:6:::0;;6096:40:::1;::::0;-1:-1:-1;;;;;6117:6:0;;::::1;::::0;6096:40:::1;::::0;6133:1;;6096:40:::1;6164:1;6147:19:::0;;-1:-1:-1;;;;;;6147:19:0::1;::::0;;6026:148::o;34208:198::-;5935:6;;-1:-1:-1;;;;;5935:6:0;189:10;5935:22;5927:67;;;;-1:-1:-1;;;5927:67:0;;;;;;;:::i;:::-;34295:9:::1;34290:109;34306:20:::0;;::::1;34290:109;;;34383:4;34348:18;:32;34367:9;;34377:1;34367:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;34348:32:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;34348:32:0;:39;;-1:-1:-1;;34348:39:0::1;::::0;::::1;;::::0;;;::::1;::::0;;34328:3:::1;::::0;::::1;:::i;:::-;;;34290:109;;;;34208:198:::0;;:::o;35100:135::-;5935:6;;-1:-1:-1;;;;;5935:6:0;189:10;5935:22;5927:67;;;;-1:-1:-1;;;5927:67:0;;;;;;;:::i;:::-;35185:42:::1;::::0;-1:-1:-1;;;;;35185:19:0;::::1;::::0;35205:21:::1;35185:42:::0;::::1;;;::::0;::::1;::::0;;;35205:21;35185:19;:42;::::1;;;;;;;;;;;;;::::0;::::1;;;;34901:188:::0;5935:6;;-1:-1:-1;;;;;5935:6:0;189:10;5935:22;5927:67;;;;-1:-1:-1;;;5927:67:0;;;;;;;:::i;:::-;34988:9:::1;34983:99;34999:20:::0;;::::1;34983:99;;;35066:4;35041:10;:24;35052:9;;35062:1;35052:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;35041:24:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;35041:24:0;:29;;-1:-1:-1;;35041:29:0::1;::::0;::::1;;::::0;;;::::1;::::0;;35021:3:::1;::::0;::::1;:::i;:::-;;;34983:99;;35719:178:::0;5935:6;;-1:-1:-1;;;;;5935:6:0;189:10;5935:22;5927:67;;;;-1:-1:-1;;;5927:67:0;;;;;;;:::i;:::-;35873:16:::1;35853;35843:7;;:26;;;;:::i;:::-;35842:47;;;;:::i;:::-;35826:13;:63:::0;-1:-1:-1;;35719:178:0:o;30301:87::-;30340:13;30373:7;30366:14;;;;;:::i;18025:269::-;18118:4;18135:129;189:10;18158:7;18167:96;18206:15;18167:96;;;;;;;;;;;;;;;;;189:10;18167:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;18167:34:0;;;;;;;;;;;;:38;:96::i;31067:167::-;31145:4;31162:42;189:10;31186:9;31197:6;31162:9;:42::i;35422:168::-;5935:6;;-1:-1:-1;;;;;5935:6:0;189:10;5935:22;5927:67;;;;-1:-1:-1;;;5927:67:0;;;;;;;:::i;:::-;35536:46:::1;35558:23;35536:17;35548:4;35536:7;;:11;;:17;;;;:::i;:::-;:21:::0;::::1;:46::i;:::-;35518:15;:64:::0;-1:-1:-1;35422:168:0:o;34540:128::-;5935:6;;-1:-1:-1;;;;;5935:6:0;189:10;5935:22;5927:67;;;;-1:-1:-1;;;5927:67:0;;;;;;;:::i;:::-;34617:15:::1;:43:::0;;-1:-1:-1;;;;;;34617:43:0::1;-1:-1:-1::0;;;;;34617:43:0;;;::::1;::::0;;;::::1;::::0;;34540:128::o;34418:110::-;5935:6;;-1:-1:-1;;;;;5935:6:0;189:10;5935:22;5927:67;;;;-1:-1:-1;;;5927:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34485:27:0::1;34515:5;34485:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;34485:35:0::1;::::0;;34418:110::o;33553:523::-;5935:6;;-1:-1:-1;;;;;5935:6:0;189:10;5935:22;5927:67;;;;-1:-1:-1;;;5927:67:0;;;;;;;:::i;:::-;33626:29:::1;33677:9;33626:61;;33698:16;33735:10;-1:-1:-1::0;;;;;33735:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;33717:47:0::1;;33773:4;33780:10;-1:-1:-1::0;;;;;33780:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33717:81;::::0;-1:-1:-1;;;;;;33717:81:0::1;::::0;;;;;;-1:-1:-1;;;;;15940:15:1;;;33717:81:0::1;::::0;::::1;15922:34:1::0;15992:15;;15972:18;;;15965:43;15857:18;;33717:81:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33698:100:::0;-1:-1:-1;;;;;;33813:22:0;::::1;33809:221;;33886:10;-1:-1:-1::0;;;;;33886:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;33868:50:0::1;;33927:4;33934:10;-1:-1:-1::0;;;;;33934:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33868:84;::::0;-1:-1:-1;;;;;;33868:84:0::1;::::0;;;;;;-1:-1:-1;;;;;15940:15:1;;;33868:84:0::1;::::0;::::1;15922:34:1::0;15992:15;;15972:18;;;15965:43;15857:18;;33868:84:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33852:13;:100:::0;;-1:-1:-1;;;;;;33852:100:0::1;-1:-1:-1::0;;;;;33852:100:0;;;::::1;::::0;;;::::1;::::0;;33809:221:::1;;;33994:13;:24:::0;;-1:-1:-1;;;;;;33994:24:0::1;-1:-1:-1::0;;;;;33994:24:0;::::1;;::::0;;33809:221:::1;-1:-1:-1::0;34040:15:0::1;:28:::0;;-1:-1:-1;;;;;;34040:28:0::1;-1:-1:-1::0;;;;;34040:28:0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;33553:523:0:o;34088:112::-;5935:6;;-1:-1:-1;;;;;5935:6:0;189:10;5935:22;5927:67;;;;-1:-1:-1;;;5927:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34158:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;34158:34:0::1;34188:4;34158:34;::::0;;34088:112::o;6182:244::-;5935:6;;-1:-1:-1;;;;;5935:6:0;189:10;5935:22;5927:67;;;;-1:-1:-1;;;5927:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6271:22:0;::::1;6263:73;;;::::0;-1:-1:-1;;;6263:73:0;;16221:2:1;6263:73:0::1;::::0;::::1;16203:21:1::0;16260:2;16240:18;;;16233:30;16299:34;16279:18;;;16272:62;-1:-1:-1;;;16350:18:1;;;16343:36;16396:19;;6263:73:0::1;16019:402:1::0;6263:73:0::1;6373:6;::::0;;6352:38:::1;::::0;-1:-1:-1;;;;;6352:38:0;;::::1;::::0;6373:6;::::1;::::0;6352:38:::1;::::0;::::1;6401:6;:17:::0;;-1:-1:-1;;;;;;6401:17:0::1;-1:-1:-1::0;;;;;6401:17:0;;;::::1;::::0;;;::::1;::::0;;6182:244::o;1960:132::-;2018:7;2045:39;2049:1;2052;2045:39;;;;;;;;;;;;;;;;;:3;:39::i;1702:250::-;1760:7;1784:6;1780:47;;-1:-1:-1;1814:1:0;1807:8;;1780:47;1839:9;1851:5;1855:1;1851;:5;:::i;:::-;1839:17;-1:-1:-1;1884:1:0;1875:5;1879:1;1839:17;1875:5;:::i;:::-;:10;1867:56;;;;-1:-1:-1;;;1867:56:0;;16628:2:1;1867:56:0;;;16610:21:1;16667:2;16647:18;;;16640:30;16706:34;16686:18;;;16679:62;-1:-1:-1;;;16757:18:1;;;16750:31;16798:19;;1867:56:0;16426:397:1;1169:181:0;1227:7;;1259:5;1263:1;1259;:5;:::i;:::-;1247:17;;1288:1;1283;:6;;1275:46;;;;-1:-1:-1;;;1275:46:0;;17030:2:1;1275:46:0;;;17012:21:1;17069:2;17049:18;;;17042:30;17108:29;17088:18;;;17081:57;17155:18;;1275:46:0;16828:351:1;18864:337:0;-1:-1:-1;;;;;18957:19:0;;18949:68;;;;-1:-1:-1;;;18949:68:0;;17386:2:1;18949:68:0;;;17368:21:1;17425:2;17405:18;;;17398:30;17464:34;17444:18;;;17437:62;-1:-1:-1;;;17515:18:1;;;17508:34;17559:19;;18949:68:0;17184:400:1;18949:68:0;-1:-1:-1;;;;;19036:21:0;;19028:68;;;;-1:-1:-1;;;19028:68:0;;17791:2:1;19028:68:0;;;17773:21:1;17830:2;17810:18;;;17803:30;17869:34;17849:18;;;17842:62;-1:-1:-1;;;17920:18:1;;;17913:32;17962:19;;19028:68:0;17589:398:1;19028:68:0;-1:-1:-1;;;;;19109:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;19161:32;;160:25:1;;;19161:32:0;;133:18:1;19161:32:0;;;;;;;18864:337;;;:::o;19343:2270::-;-1:-1:-1;;;;;19465:18:0;;19457:68;;;;-1:-1:-1;;;19457:68:0;;18194:2:1;19457:68:0;;;18176:21:1;18233:2;18213:18;;;18206:30;18272:34;18252:18;;;18245:62;-1:-1:-1;;;18323:18:1;;;18316:35;18368:19;;19457:68:0;17992:401:1;19457:68:0;-1:-1:-1;;;;;19544:16:0;;19536:64;;;;-1:-1:-1;;;19536:64:0;;18600:2:1;19536:64:0;;;18582:21:1;18639:2;18619:18;;;18612:30;18678:34;18658:18;;;18651:62;-1:-1:-1;;;18729:18:1;;;18722:33;18772:19;;19536:64:0;18398:399:1;19536:64:0;19628:1;19619:6;:10;19611:64;;;;-1:-1:-1;;;19611:64:0;;19004:2:1;19611:64:0;;;18986:21:1;19043:2;19023:18;;;19016:30;19082:34;19062:18;;;19055:62;-1:-1:-1;;;19133:18:1;;;19126:39;19182:19;;19611:64:0;18802:405:1;19611:64:0;-1:-1:-1;;;;;19695:13:0;;;;;;:9;:13;;;;;;;;19694:14;19686:37;;;;-1:-1:-1;;;19686:37:0;;19414:2:1;19686:37:0;;;19396:21:1;19453:2;19433:18;;;19426:30;-1:-1:-1;;;19472:18:1;;;19465:40;19522:18;;19686:37:0;19212:334:1;19686:37:0;-1:-1:-1;;;;;19743:15:0;;;;;;:9;:15;;;;;;;;19742:16;19734:39;;;;-1:-1:-1;;;19734:39:0;;19414:2:1;19734:39:0;;;19396:21:1;19453:2;19433:18;;;19426:30;-1:-1:-1;;;19472:18:1;;;19465:40;19522:18;;19734:39:0;19212:334:1;19734:39:0;5839:7;5866:6;-1:-1:-1;;;;;19788:14:0;;;5866:6;;19788:14;;;;:30;;-1:-1:-1;5839:7:0;5866:6;-1:-1:-1;;;;;19806:12:0;;;5866:6;;19806:12;;19788:30;19784:84;;;19828:11;;;;;;;19820:48;;;;-1:-1:-1;;;19820:48:0;;19753:2:1;19820:48:0;;;19735:21:1;19792:2;19772:18;;;19765:30;19831:26;19811:18;;;19804:54;19875:18;;19820:48:0;19551:348:1;19820:48:0;20001:13;;19929:12;;-1:-1:-1;;;;;19995:19:0;;;20001:13;;19995:19;;:40;;-1:-1:-1;20022:13:0;;-1:-1:-1;;;;;20018:17:0;;;20022:13;;20018:17;19995:40;19994:99;;;;-1:-1:-1;;;;;;20042:24:0;;;;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;20070:22:0;;;;;;:18;:22;;;;;;;;20042:50;20040:53;19994:99;19989:148;;;-1:-1:-1;20121:4:0;19989:148;20163:1;20152:10;;:12;:59;;;;-1:-1:-1;;;;;;20170:22:0;;;;;;:18;:22;;;;;;;;20169:23;:41;;;;-1:-1:-1;5839:7:0;5866:6;-1:-1:-1;;;;;20196:14:0;;;5866:6;;20196:14;;20169:41;20152:105;;;;;20244:12;20230:10;;20217;;:23;;;;:::i;:::-;20216:40;20152:105;20149:246;;;20308:15;;20293:13;20303:2;20293:9;:13::i;:::-;20285:21;;:6;:21;:::i;:::-;:38;;20277:106;;;;-1:-1:-1;;;20277:106:0;;20106:2:1;20277:106:0;;;20088:21:1;20145:2;20125:18;;;20118:30;20184:34;20164:18;;;20157:62;-1:-1:-1;;;20235:18:1;;;20228:32;20277:19;;:106:0;19904:398:1;20277:106:0;20424:8;;20408:15;:24;20457:17;;20443:13;:31;20490:11;;;;;;;:34;;;;-1:-1:-1;20511:13:0;;-1:-1:-1;;;;;20505:19:0;;;20511:13;;20505:19;20490:34;20487:177;;;20587:17;;20565;;:40;;:21;:40::i;:::-;20548:15;:57;20634:18;;20620:13;:32;20487:177;20717:1;20706:10;;:12;:56;;;;;20750:12;20736:10;;20723;;:23;;;;:::i;:::-;20722:40;20706:56;20703:109;;;-1:-1:-1;;;;;20782:13:0;;;;;;:9;:13;;;;;:18;;-1:-1:-1;;20782:18:0;20796:4;20782:18;;;20703:109;20867:1;20856:10;;:12;:30;;;;-1:-1:-1;5839:7:0;5866:6;-1:-1:-1;;;;;20872:14:0;;;5866:6;;20872:14;;20856:30;:75;;;;;20920:10;;20907;;:23;;;;:::i;:::-;20890:12;:41;;20856:75;:91;;;;-1:-1:-1;20936:11:0;;;;;;;20856:91;20853:154;;;20983:3;20967:15;:19;20853:154;21038:14;;;;;;;21035:144;;;21072:11;;;;;;;:36;;;;-1:-1:-1;21095:13:0;;-1:-1:-1;;;;;21087:21:0;;;21095:13;;21087:21;21072:36;21069:99;;;21150:1;21134:15;:17;21069:99;21212:6;;;;21211:7;:22;;;;-1:-1:-1;21222:11:0;;;;;;;21211:22;:45;;;;-1:-1:-1;21243:13:0;;-1:-1:-1;;;;;21237:19:0;;;21243:13;;21237:19;21211:45;21207:350;;;21281:28;21312:24;21330:4;21312:9;:24::i;:::-;21281:55;;21390:13;;21368:20;:35;21365:169;;-1:-1:-1;21450:13:0;;21486:32;21450:13;21486:10;:32::i;:::-;21258:299;21207:350;21567:38;21582:4;21587:2;21590:6;21597:7;21567:14;:38::i;1502:192::-;1588:7;1624:12;1616:6;;;;1608:29;;;;-1:-1:-1;;;1608:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1648:9:0;1660:5;1664:1;1660;:5;:::i;:::-;1648:17;1502:192;-1:-1:-1;;;;;1502:192:0:o;29061:163::-;29102:7;29123:15;29140;29159:19;:17;:19::i;:::-;29122:56;;-1:-1:-1;29122:56:0;-1:-1:-1;29196:20:0;29122:56;;29196:11;:20::i;:::-;29189:27;;;;29061:163;:::o;28296:419::-;28355:7;28364;28373;28382;28391;28400;28421:23;28446:12;28460:18;28482:20;28494:7;28482:11;:20::i;:::-;28420:82;;;;;;28514:15;28531:23;28556:12;28572:50;28584:7;28593:4;28599:10;28611;:8;:10::i;:::-;28572:11;:50::i;:::-;28513:109;;;;-1:-1:-1;28513:109:0;;-1:-1:-1;28673:15:0;;-1:-1:-1;28690:4:0;;-1:-1:-1;28696:10:0;;-1:-1:-1;28296:419:0;;-1:-1:-1;;;;;28296:419:0:o;1358:136::-;1416:7;1443:43;1447:1;1450;1443:43;;;;;;;;;;;;;;;;;:3;:43::i;2100:278::-;2186:7;2221:12;2214:5;2206:28;;;;-1:-1:-1;;;2206:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2245:9:0;2257:5;2261:1;2257;:5;:::i;25881:1028::-;16618:6;:13;;-1:-1:-1;;16618:13:0;16627:4;16618:13;;;26069:8:::1;::::0;26037:12:::1;::::0;16618:6;;25998:101:::1;::::0;26097:1:::1;::::0;25998:80:::1;::::0;;;:20;;:38:::1;:52::i;:::-;:70:::0;::::1;:80::i;:101::-;25972:127:::0;-1:-1:-1;26112:20:0::1;26135:41;:20:::0;25972:127;26135:24:::1;:41::i;:::-;26112:64;;26197:30;26214:12;26197:16;:30::i;:::-;26329:12;::::0;26260:21:::1;::::0;26240:17:::1;::::0;26316:33:::1;::::0;26329:19:::1;::::0;26346:1:::1;26329:16;:19::i;:::-;26316:8;::::0;;:12:::1;:33::i;:::-;26294:55;;26362:26;26391:93;26482:1;26391:72;26451:11;26391:41;26419:12;;26391:9;:27;;:41;;;;:::i;:93::-;26362:122;;26505:26;26534:44;26566:11;26534:27;26548:12;;26534:9;:13;;:27;;;;:::i;:44::-;26505:73:::0;-1:-1:-1;26654:21:0::1;26689:22:::0;;26686:102:::1;;26760:15;::::0;26728:48:::1;::::0;26741:18;;-1:-1:-1;;;;;26760:15:0::1;26728:12;:48::i;:::-;26802:19:::0;;26798:104:::1;;26842:48;26855:15;26871:18;26842:12;:48::i;:::-;-1:-1:-1::0;;16654:6:0;:14;;-1:-1:-1;;16654:14:0;;;-1:-1:-1;;;;;;25881:1028:0:o;21621:943::-;21761:13;;21811:15;;21841:7;21837:88;;21880:1;21864:13;:17;;;21896:15;:17;21837:88;-1:-1:-1;;;;;21949:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;21973:22:0;;;;;;:11;:22;;;;;;;;21972:23;21949:46;21945:467;;;22012:48;22034:6;22042:9;22053:6;22012:21;:48::i;:::-;21945:467;;;-1:-1:-1;;;;;22083:19:0;;;;;;:11;:19;;;;;;;;22082:20;:46;;;;-1:-1:-1;;;;;;22106:22:0;;;;;;:11;:22;;;;;;;;22082:46;22078:334;;;22145:46;22165:6;22173:9;22184:6;22145:19;:46::i;22078:334::-;-1:-1:-1;;;;;22213:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;22236:22:0;;;;;;:11;:22;;;;;;;;22213:45;22209:203;;;22275:48;22297:6;22305:9;22316:6;22275:21;:48::i;22209:203::-;22356:44;22374:6;22382:9;22393:6;22356:17;:44::i;:::-;22436:7;22432:125;;22459:13;:38;;;;22512:15;:33;-1:-1:-1;;;;21621:943:0:o;29232:561::-;29329:7;;29365;;29282;;;;;29389:289;29413:9;:16;29409:20;;29389:289;;;29479:7;29455;:21;29463:9;29473:1;29463:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;29463:12:0;29455:21;;;;;;;;;;;;;:31;;:66;;;29514:7;29490;:21;29498:9;29508:1;29498:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;29498:12:0;29490:21;;;;;;;;;;;;;:31;29455:66;29451:97;;;29531:7;;29540;;29523:25;;;;;;;29232:561;;:::o;29451:97::-;29573:34;29585:7;:21;29593:9;29603:1;29593:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;29593:12:0;29585:21;;;;;;;;;;;;;29573:7;;:11;:34::i;:::-;29563:44;;29632:34;29644:7;:21;29652:9;29662:1;29652:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;29652:12:0;29644:21;;;;;;;;;;;;;29632:7;;:11;:34::i;:::-;29622:44;-1:-1:-1;29431:3:0;;;;:::i;:::-;;;;29389:289;;;-1:-1:-1;29714:7:0;;29702;;:20;;:11;:20::i;:::-;29692:7;:30;29688:61;;;29732:7;;29741;;29724:25;;;;;;29232:561;;:::o;29688:61::-;29768:7;;29777;;-1:-1:-1;29232:561:0;-1:-1:-1;29232:561:0:o;28723:330::-;28783:7;28792;28801;28821:12;28836:24;28852:7;28836:15;:24::i;:::-;28821:39;;28871:18;28892:30;28914:7;28892:21;:30::i;:::-;28871:51;-1:-1:-1;28933:23:0;28959:33;28871:51;28959:17;:7;28971:4;28959:11;:17::i;:::-;:21;;:33::i;:::-;28933:59;29028:4;;-1:-1:-1;29034:10:0;;-1:-1:-1;28723:330:0;;-1:-1:-1;;;28723:330:0:o;25055:429::-;25170:7;;;;25226:24;:7;25238:11;25226;:24::i;:::-;25208:42;-1:-1:-1;25261:12:0;25276:21;:4;25285:11;25276:8;:21::i;:::-;25261:36;-1:-1:-1;25308:18:0;25329:27;:10;25344:11;25329:14;:27::i;:::-;25308:48;-1:-1:-1;25367:23:0;25393:33;25308:48;25393:17;:7;25405:4;25393:11;:17::i;:33::-;25445:7;;;;-1:-1:-1;25471:4:0;;-1:-1:-1;25055:429:0;;-1:-1:-1;;;;;;;25055:429:0:o;27043:666::-;27193:16;;;27207:1;27193:16;;;;;;;;27169:21;;27193:16;;;;;;;;;;-1:-1:-1;27193:16:0;27169:40;;27238:4;27220;27225:1;27220:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27220:23:0;;;:7;;;;;;;;;;:23;;;;27264:15;;:22;;;-1:-1:-1;;;27264:22:0;;;;:15;;;;;:20;;:22;;;;;27220:7;;27264:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27254:4;27259:1;27254:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27254:32:0;;;:7;;;;;;;;;:32;27331:15;;27299:62;;27316:4;;27331:15;27349:11;27299:8;:62::i;:::-;27400:15;;:240;;-1:-1:-1;;;27400:240:0;;-1:-1:-1;;;;;27400:15:0;;;;:66;;:240;;27481:11;;27400:15;;27551:4;;27578;;27614:15;;27400:240;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27666:35;27683:11;27696:4;27666:35;;;;;;;:::i;:::-;;;;;;;;27098:611;27043:666;:::o;26921:111::-;27001:23;;-1:-1:-1;;;;;27001:15:0;;;:23;;;;;27017:6;;27001:23;;;;27017:6;27001:15;:23;;;;;;;;;;;;;;;;;;;27717:513;27897:15;;27865:62;;27882:4;;-1:-1:-1;;;;;27897:15:0;27915:11;27865:8;:62::i;:::-;27970:15;;-1:-1:-1;;;;;27970:15:0;:31;28009:9;28042:4;28062:11;27970:15;;28174:7;5839;5866:6;-1:-1:-1;;;;;5866:6:0;;5801:79;28174:7;27970:252;;;;;;-1:-1:-1;;;;;;27970:252:0;;;-1:-1:-1;;;;;22188:15:1;;;27970:252:0;;;22170:34:1;22220:18;;;22213:34;;;;22263:18;;;22256:34;;;;22306:18;;;22299:34;22370:15;;;22349:19;;;22342:44;28196:15:0;22402:19:1;;;22395:35;22104:19;;27970:252:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;23676:566::-;23779:15;23796:23;23821:12;23835:23;23860:12;23874:18;23896:19;23907:7;23896:10;:19::i;:::-;-1:-1:-1;;;;;23944:15:0;;;;;;:7;:15;;;;;;23778:137;;-1:-1:-1;23778:137:0;;-1:-1:-1;23778:137:0;;-1:-1:-1;23778:137:0;-1:-1:-1;23778:137:0;-1:-1:-1;23778:137:0;-1:-1:-1;23944:28:0;;23964:7;23944:19;:28::i;:::-;-1:-1:-1;;;;;23926:15:0;;;;;;:7;:15;;;;;;;;:46;;;;24001:7;:15;;;;:28;;24021:7;24001:19;:28::i;:::-;-1:-1:-1;;;;;23983:15:0;;;;;;;:7;:15;;;;;;:46;;;;24061:18;;;;;;;:39;;24084:15;24061:22;:39::i;:::-;-1:-1:-1;;;;;24040:18:0;;;;;;:7;:18;;;;;:60;24114:26;24129:10;24114:14;:26::i;:::-;24151:23;24163:4;24169;24151:11;:23::i;:::-;24207:9;-1:-1:-1;;;;;24190:44:0;24199:6;-1:-1:-1;;;;;24190:44:0;;24218:15;24190:44;;;;160:25:1;;148:2;133:18;;14:177;24190:44:0;;;;;;;;23767:475;;;;;;23676:566;;;:::o;23082:586::-;23183:15;23200:23;23225:12;23239:23;23264:12;23278:18;23300:19;23311:7;23300:10;:19::i;:::-;-1:-1:-1;;;;;23348:15:0;;;;;;:7;:15;;;;;;23182:137;;-1:-1:-1;23182:137:0;;-1:-1:-1;23182:137:0;;-1:-1:-1;23182:137:0;-1:-1:-1;23182:137:0;-1:-1:-1;23182:137:0;-1:-1:-1;23348:28:0;;23182:137;23348:19;:28::i;:::-;-1:-1:-1;;;;;23330:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;23408:18;;;;;:7;:18;;;;;:39;;23431:15;23408:22;:39::i;:::-;-1:-1:-1;;;;;23387:18:0;;;;;;:7;:18;;;;;;;;:60;;;;23479:7;:18;;;;:39;;23502:15;23479:22;:39::i;24250:642::-;24353:15;24370:23;24395:12;24409:23;24434:12;24448:18;24470:19;24481:7;24470:10;:19::i;:::-;-1:-1:-1;;;;;24518:15:0;;;;;;:7;:15;;;;;;24352:137;;-1:-1:-1;24352:137:0;;-1:-1:-1;24352:137:0;;-1:-1:-1;24352:137:0;-1:-1:-1;24352:137:0;-1:-1:-1;24352:137:0;-1:-1:-1;24518:28:0;;24538:7;24518:19;:28::i;:::-;-1:-1:-1;;;;;24500:15:0;;;;;;:7;:15;;;;;;;;:46;;;;24575:7;:15;;;;:28;;24595:7;24575:19;:28::i;22572:502::-;22671:15;22688:23;22713:12;22727:23;22752:12;22766:18;22788:19;22799:7;22788:10;:19::i;:::-;-1:-1:-1;;;;;22836:15:0;;;;;;:7;:15;;;;;;22670:137;;-1:-1:-1;22670:137:0;;-1:-1:-1;22670:137:0;;-1:-1:-1;22670:137:0;-1:-1:-1;22670:137:0;-1:-1:-1;22670:137:0;-1:-1:-1;22836:28:0;;22670:137;22836:19;:28::i;29805:160::-;29869:7;29896:61;29941:5;29896:26;29908:13;;29896:7;:11;;:26;;;;:::i;29977:168::-;30047:7;30074:63;30121:5;30074:28;30086:15;;30074:7;:11;;:28;;;;:::i;25496:355::-;25559:19;25582:10;:8;:10::i;:::-;25559:33;-1:-1:-1;25603:18:0;25624:27;:10;25559:33;25624:14;:27::i;:::-;25703:4;25687:22;;;;:7;:22;;;;;;25603:48;;-1:-1:-1;25687:38:0;;25603:48;25687:26;:38::i;:::-;25678:4;25662:22;;;;:7;:22;;;;;;;;:63;;;;25739:11;:26;;;;;;25736:107;;;25821:4;25805:22;;;;:7;:22;;;;;;:38;;25832:10;25805:26;:38::i;:::-;25796:4;25780:22;;;;:7;:22;;;;;:63;25548:303;;25496:355;:::o;24900:147::-;24978:7;;:17;;24990:4;24978:11;:17::i;:::-;24968:7;:27;25019:10;;:20;;25034:4;25019:14;:20::i;:::-;25006:10;:33;-1:-1:-1;;24900:147:0:o;196:597:1:-;308:4;337:2;366;355:9;348:21;398:6;392:13;441:6;436:2;425:9;421:18;414:34;466:1;476:140;490:6;487:1;484:13;476:140;;;585:14;;;581:23;;575:30;551:17;;;570:2;547:26;540:66;505:10;;476:140;;;634:6;631:1;628:13;625:91;;;704:1;699:2;690:6;679:9;675:22;671:31;664:42;625:91;-1:-1:-1;777:2:1;756:15;-1:-1:-1;;752:29:1;737:45;;;;784:2;733:54;;196:597;-1:-1:-1;;;196:597:1:o;798:131::-;-1:-1:-1;;;;;873:31:1;;863:42;;853:70;;919:1;916;909:12;853:70;798:131;:::o;934:315::-;1002:6;1010;1063:2;1051:9;1042:7;1038:23;1034:32;1031:52;;;1079:1;1076;1069:12;1031:52;1118:9;1105:23;1137:31;1162:5;1137:31;:::i;:::-;1187:5;1239:2;1224:18;;;;1211:32;;-1:-1:-1;;;934:315:1:o;1446:247::-;1505:6;1558:2;1546:9;1537:7;1533:23;1529:32;1526:52;;;1574:1;1571;1564:12;1526:52;1613:9;1600:23;1632:31;1657:5;1632:31;:::i;1933:367::-;1996:8;2006:6;2060:3;2053:4;2045:6;2041:17;2037:27;2027:55;;2078:1;2075;2068:12;2027:55;-1:-1:-1;2101:20:1;;2144:18;2133:30;;2130:50;;;2176:1;2173;2166:12;2130:50;2213:4;2205:6;2201:17;2189:29;;2273:3;2266:4;2256:6;2253:1;2249:14;2241:6;2237:27;2233:38;2230:47;2227:67;;;2290:1;2287;2280:12;2227:67;1933:367;;;;;:::o;2305:773::-;2427:6;2435;2443;2451;2504:2;2492:9;2483:7;2479:23;2475:32;2472:52;;;2520:1;2517;2510:12;2472:52;2560:9;2547:23;2589:18;2630:2;2622:6;2619:14;2616:34;;;2646:1;2643;2636:12;2616:34;2685:70;2747:7;2738:6;2727:9;2723:22;2685:70;:::i;:::-;2774:8;;-1:-1:-1;2659:96:1;-1:-1:-1;2862:2:1;2847:18;;2834:32;;-1:-1:-1;2878:16:1;;;2875:36;;;2907:1;2904;2897:12;2875:36;;2946:72;3010:7;2999:8;2988:9;2984:24;2946:72;:::i;:::-;2305:773;;;;-1:-1:-1;3037:8:1;-1:-1:-1;;;;2305:773:1:o;3083:456::-;3160:6;3168;3176;3229:2;3217:9;3208:7;3204:23;3200:32;3197:52;;;3245:1;3242;3235:12;3197:52;3284:9;3271:23;3303:31;3328:5;3303:31;:::i;:::-;3353:5;-1:-1:-1;3410:2:1;3395:18;;3382:32;3423:33;3382:32;3423:33;:::i;:::-;3083:456;;3475:7;;-1:-1:-1;;;3529:2:1;3514:18;;;;3501:32;;3083:456::o;3544:401::-;3625:6;3633;3686:2;3674:9;3665:7;3661:23;3657:32;3654:52;;;3702:1;3699;3692:12;3654:52;3741:9;3728:23;3760:31;3785:5;3760:31;:::i;:::-;3810:5;-1:-1:-1;3867:2:1;3852:18;;3839:32;3880:33;3839:32;3880:33;:::i;:::-;3932:7;3922:17;;;3544:401;;;;;:::o;3950:118::-;4036:5;4029:13;4022:21;4015:5;4012:32;4002:60;;4058:1;4055;4048:12;4073:309;4138:6;4146;4199:2;4187:9;4178:7;4174:23;4170:32;4167:52;;;4215:1;4212;4205:12;4167:52;4254:9;4241:23;4273:28;4295:5;4273:28;:::i;4387:180::-;4446:6;4499:2;4487:9;4478:7;4474:23;4470:32;4467:52;;;4515:1;4512;4505:12;4467:52;-1:-1:-1;4538:23:1;;4387:180;-1:-1:-1;4387:180:1:o;4761:241::-;4817:6;4870:2;4858:9;4849:7;4845:23;4841:32;4838:52;;;4886:1;4883;4876:12;4838:52;4925:9;4912:23;4944:28;4966:5;4944:28;:::i;5007:316::-;5084:6;5092;5100;5153:2;5141:9;5132:7;5128:23;5124:32;5121:52;;;5169:1;5166;5159:12;5121:52;-1:-1:-1;;5192:23:1;;;5262:2;5247:18;;5234:32;;-1:-1:-1;5313:2:1;5298:18;;;5285:32;;5007:316;-1:-1:-1;5007:316:1:o;5328:309::-;5393:6;5401;5454:2;5442:9;5433:7;5429:23;5425:32;5422:52;;;5470:1;5467;5460:12;5422:52;5506:9;5493:23;5483:33;;5566:2;5555:9;5551:18;5538:32;5579:28;5601:5;5579:28;:::i;5850:566::-;5942:6;5950;5958;6011:2;5999:9;5990:7;5986:23;5982:32;5979:52;;;6027:1;6024;6017:12;5979:52;6067:9;6054:23;6100:18;6092:6;6089:30;6086:50;;;6132:1;6129;6122:12;6086:50;6171:70;6233:7;6224:6;6213:9;6209:22;6171:70;:::i;:::-;6260:8;;-1:-1:-1;6145:96:1;-1:-1:-1;;6345:2:1;6330:18;;6317:32;6358:28;6317:32;6358:28;:::i;:::-;6405:5;6395:15;;;5850:566;;;;;:::o;6421:505::-;6516:6;6524;6532;6585:2;6573:9;6564:7;6560:23;6556:32;6553:52;;;6601:1;6598;6591:12;6553:52;6641:9;6628:23;6674:18;6666:6;6663:30;6660:50;;;6706:1;6703;6696:12;6660:50;6745:70;6807:7;6798:6;6787:9;6783:22;6745:70;:::i;:::-;6834:8;;6719:96;;-1:-1:-1;6916:2:1;6901:18;;;;6888:32;;6421:505;-1:-1:-1;;;;6421:505:1:o;6931:437::-;7017:6;7025;7078:2;7066:9;7057:7;7053:23;7049:32;7046:52;;;7094:1;7091;7084:12;7046:52;7134:9;7121:23;7167:18;7159:6;7156:30;7153:50;;;7199:1;7196;7189:12;7153:50;7238:70;7300:7;7291:6;7280:9;7276:22;7238:70;:::i;:::-;7327:8;;7212:96;;-1:-1:-1;6931:437:1;-1:-1:-1;;;;6931:437:1:o;7633:248::-;7701:6;7709;7762:2;7750:9;7741:7;7737:23;7733:32;7730:52;;;7778:1;7775;7768:12;7730:52;-1:-1:-1;;7801:23:1;;;7871:2;7856:18;;;7843:32;;-1:-1:-1;7633:248:1:o;8279:380::-;8358:1;8354:12;;;;8401;;;8422:61;;8476:4;8468:6;8464:17;8454:27;;8422:61;8529:2;8521:6;8518:14;8498:18;8495:38;8492:161;;;8575:10;8570:3;8566:20;8563:1;8556:31;8610:4;8607:1;8600:15;8638:4;8635:1;8628:15;8492:161;;8279:380;;;:::o;8664:356::-;8866:2;8848:21;;;8885:18;;;8878:30;8944:34;8939:2;8924:18;;8917:62;9011:2;8996:18;;8664:356::o;9848:127::-;9909:10;9904:3;9900:20;9897:1;9890:31;9940:4;9937:1;9930:15;9964:4;9961:1;9954:15;9980:422;10069:1;10112:5;10069:1;10126:270;10147:7;10137:8;10134:21;10126:270;;;10206:4;10202:1;10198:6;10194:17;10188:4;10185:27;10182:53;;;10215:18;;:::i;:::-;10265:7;10255:8;10251:22;10248:55;;;10285:16;;;;10248:55;10364:22;;;;10324:15;;;;10126:270;;;10130:3;9980:422;;;;;:::o;10407:806::-;10456:5;10486:8;10476:80;;-1:-1:-1;10527:1:1;10541:5;;10476:80;10575:4;10565:76;;-1:-1:-1;10612:1:1;10626:5;;10565:76;10657:4;10675:1;10670:59;;;;10743:1;10738:130;;;;10650:218;;10670:59;10700:1;10691:10;;10714:5;;;10738:130;10775:3;10765:8;10762:17;10759:43;;;10782:18;;:::i;:::-;-1:-1:-1;;10838:1:1;10824:16;;10853:5;;10650:218;;10952:2;10942:8;10939:16;10933:3;10927:4;10924:13;10920:36;10914:2;10904:8;10901:16;10896:2;10890:4;10887:12;10883:35;10880:77;10877:159;;;-1:-1:-1;10989:19:1;;;11021:5;;10877:159;11068:34;11093:8;11087:4;11068:34;:::i;:::-;11138:6;11134:1;11130:6;11126:19;11117:7;11114:32;11111:58;;;11149:18;;:::i;:::-;11187:20;;10407:806;-1:-1:-1;;;10407:806:1:o;11218:140::-;11276:5;11305:47;11346:4;11336:8;11332:19;11326:4;11305:47;:::i;11363:127::-;11424:10;11419:3;11415:20;11412:1;11405:31;11455:4;11452:1;11445:15;11479:4;11476:1;11469:15;11495:168;11535:7;11601:1;11597;11593:6;11589:14;11586:1;11583:21;11578:1;11571:9;11564:17;11560:45;11557:71;;;11608:18;;:::i;:::-;-1:-1:-1;11648:9:1;;11495:168::o;11668:128::-;11708:3;11739:1;11735:6;11732:1;11729:13;11726:39;;;11745:18;;:::i;:::-;-1:-1:-1;11781:9:1;;11668:128::o;11801:135::-;11840:3;-1:-1:-1;;11861:17:1;;11858:43;;;11881:18;;:::i;:::-;-1:-1:-1;11928:1:1;11917:13;;11801:135::o;12297:184::-;12367:6;12420:2;12408:9;12399:7;12395:23;12391:32;12388:52;;;12436:1;12433;12426:12;12388:52;-1:-1:-1;12459:16:1;;12297:184;-1:-1:-1;12297:184:1:o;12765:245::-;12832:6;12885:2;12873:9;12864:7;12860:23;12856:32;12853:52;;;12901:1;12898;12891:12;12853:52;12933:9;12927:16;12952:28;12974:5;12952:28;:::i;13782:125::-;13822:4;13850:1;13847;13844:8;13841:34;;;13855:18;;:::i;:::-;-1:-1:-1;13892:9:1;;13782:125::o;13912:127::-;13973:10;13968:3;13964:20;13961:1;13954:31;14004:4;14001:1;13994:15;14028:4;14025:1;14018:15;15232:217;15272:1;15298;15288:132;;15342:10;15337:3;15333:20;15330:1;15323:31;15377:4;15374:1;15367:15;15405:4;15402:1;15395:15;15288:132;-1:-1:-1;15434:9:1;;15232:217::o;15454:251::-;15524:6;15577:2;15565:9;15556:7;15552:23;15548:32;15545:52;;;15593:1;15590;15583:12;15545:52;15625:9;15619:16;15644:31;15669:5;15644:31;:::i;20439:461::-;20492:3;20530:5;20524:12;20557:6;20552:3;20545:19;20583:4;20612:2;20607:3;20603:12;20596:19;;20649:2;20642:5;20638:14;20670:1;20680:195;20694:6;20691:1;20688:13;20680:195;;;20759:13;;-1:-1:-1;;;;;20755:39:1;20743:52;;20815:12;;;;20850:15;;;;20791:1;20709:9;20680:195;;;-1:-1:-1;20891:3:1;;20439:461;-1:-1:-1;;;;;20439:461:1:o;20905:582::-;21204:6;21193:9;21186:25;21247:6;21242:2;21231:9;21227:18;21220:34;21290:3;21285:2;21274:9;21270:18;21263:31;21167:4;21311:57;21363:3;21352:9;21348:19;21340:6;21311:57;:::i;:::-;-1:-1:-1;;;;;21404:32:1;;;;21399:2;21384:18;;21377:60;-1:-1:-1;21468:3:1;21453:19;21446:35;21303:65;20905:582;-1:-1:-1;;;20905:582:1:o;21492:332::-;21699:6;21688:9;21681:25;21742:2;21737;21726:9;21722:18;21715:30;21662:4;21762:56;21814:2;21803:9;21799:18;21791:6;21762:56;:::i;:::-;21754:64;21492:332;-1:-1:-1;;;;21492:332:1:o;22441:306::-;22529:6;22537;22545;22598:2;22586:9;22577:7;22573:23;22569:32;22566:52;;;22614:1;22611;22604:12;22566:52;22643:9;22637:16;22627:26;;22693:2;22682:9;22678:18;22672:25;22662:35;;22737:2;22726:9;22722:18;22716:25;22706:35;;22441:306;;;;;:::o

Swarm Source

ipfs://d423a27d0d20c2e4c181f948db96f8bf6564818c7e7b96b93f24fb0fdfa445fa
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.