ETH Price: $2,285.22 (-3.08%)

Token

USA Patriot Token (UPT)
 

Overview

Max Total Supply

100,000,000,000 UPT

Holders

39

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 8 Decimals)

Filtered by Token Holder
Uniswap V2: UPT 2
Balance
5,589,260,602.80715914 UPT

Value
$0.00
0xc65182d5e89842ed7754004b85bc2672e6a2ff9f
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:
PatriotToken

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/**

Welcome to USA Patriot Token.

https://t.me/USAPatriotToken
https://www.usapatriottoken.com/

*/

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

// pragma solidity >=0.5.0;

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


// pragma solidity >=0.5.0;

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

// pragma solidity >=0.6.2;

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



// pragma solidity >=0.6.2;

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 PatriotToken is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;
    
    address payable private marketingWallet = payable(0x8f4e24Db1c977C6eC5CADd7a2AA7c29BcAdba223); // Marketing Wallet
    address payable private crowdfundWallet = payable(0x4919578BF7fC683E4989837463E9e4a05C296AD7); // Crowd Fund Wallet
    address payable private devWallet = payable (0xAD2D07D5021aB96Fa168F7A8b648c94d43d62143); // Dev Wallet
    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private _isSniper;
    
    uint256 public deadBlocks = 2;
    uint256 public launchedAt = 0;
    

    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private _isMaxWalletExempt;
    mapping (address => bool) private _isExcluded;
    mapping (address => bool) private _isTrusted;
    address[] private _excluded;
    mapping (address => bool) internal authorizations;
   
    address DEAD = 0x000000000000000000000000000000000000dEaD;

    uint8 private _decimals = 8;
    
    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 100000000000 * 10**_decimals;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private _name = "USA Patriot Token";
    string private _symbol = "UPT";

    //Below was originally _tTotal.div(1000).mul(5); //0.5%

    uint256 public _maxWalletToken = _tTotal.div(100).mul(5); //5%

    uint256 public _buyLiquidityFee = 20; //2%
    uint256 public _buyDevFee = 20;    //2%
    uint256 public _buyMarketingFee = 40;   //4%
    uint256 public _buyReflectionFee = 0;   //0%

    uint256 public _sellLiquidityFee = 40; //4%
    uint256 public _sellMarketingFee = 40;  //4%
    uint256 public _sellDevFee = 40;   //4%
    uint256 public _sellReflectionFee = 10;   //1%
    
    uint256 private crowdfundfee = 20;   //2% same for buys and sells
    uint256 private liquidityFee = _buyLiquidityFee;
    uint256 private marketingFee = _buyMarketingFee;
    uint256 private devFee = _buyDevFee;
    uint256 private reflectionFee=_buyReflectionFee;


    uint256 private totalFee =
        liquidityFee.add(marketingFee).add(devFee).add(crowdfundfee);
    uint256 private currenttotalFee = totalFee;
    
    uint256 public swapThreshold = _tTotal.div(10000).mul(5); //0.05%
   
    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;
    
    bool inSwap;
    
    bool public tradingOpen = false;
    bool public zeroBuyTaxmode = false;
    
    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;
        authorizations[msg.sender] = true;

        emit Transfer(address(0), _msgSender(), _tTotal);
    }
    
    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 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 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 transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

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

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

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

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

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

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

    function totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }
    
    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 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;
        }
    }

    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 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 _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 _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 Buddy, Get Rekt");
        require(!_isSniper[from], "Sorry Buddy, Get Rekt");
        
        if(!authorizations[from]){
            require(tradingOpen,"Trading not open yet");
        }

         bool takeFee = false;
        //take fee only on swaps
        if ( (from==uniswapV2Pair || to==uniswapV2Pair) && !(_isExcludedFromFee[from] || _isExcludedFromFee[to]) ) {
            takeFee = true;
        }

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

        currenttotalFee=totalFee;
        reflectionFee=_buyReflectionFee;

        if(tradingOpen && to == uniswapV2Pair) { //sell
            currenttotalFee= _sellLiquidityFee.add(_sellMarketingFee).add(_sellDevFee);
            reflectionFee=_sellReflectionFee;
        }
        
        //antibot - first 2 blocks
        if(launchedAt>0 && (launchedAt + deadBlocks) > block.number){
                _isSniper[to]=true;
        }

        if(zeroBuyTaxmode){
             if(tradingOpen && from == uniswapV2Pair) { //buys
                    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 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 amountETHdev = amountETH.mul(devFee).div(totalETHFee);
        uint256 amountETHMarketing = amountETH.mul(marketingFee).div(
            totalETHFee
        );
         uint256 amountETHcrowdfund = amountETH.mul(crowdfundfee).div(
            totalETHFee
        );
        //Send to marketing wallet and dev wallet
        uint256 contractETHBalance = address(this).balance;
        if(contractETHBalance > 0) {
            sendETHToFee(amountETHMarketing,marketingWallet);
            sendETHToFee(amountETHcrowdfund,crowdfundWallet);
            sendETHToFee(amountETHdev,devWallet);
        }
        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
        );
    }

    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 _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) {
        (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, _getRate());
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity);
    }

    function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256) {
        uint256 tFee = calculateTaxFee(tAmount);
        uint256 tLiquidity = calculateLiquidityFee(tAmount);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity);
        return (tTransferAmount, tFee, tLiquidity);
    }

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity);
        return (rAmount, rTransferAmount, rFee);
    }

    function _getRate() private view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;      
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }
    
    function _takeLiquidity(uint256 tLiquidity) private {
        uint256 currentRate =  _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
    }
    
    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(reflectionFee).div(
            10**3
        );
    }
    
    function calculateLiquidityFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(currenttotalFee).div(
            10**3
        );
    }
    
    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 setWallets(address _marketingWallet,address _devWallet) external onlyOwner() {
        marketingWallet = payable(_marketingWallet);
        devWallet = payable(_devWallet);
    }


    function transferToAddressETH(address payable recipient, uint256 amount) private {
        recipient.transfer(amount);
    }
    
    function isSniper(address account) public view returns (bool) {
        return _isSniper[account];
    }
    
    function manage_Snipers(address[] calldata addresses, bool status) public onlyOwner {
        for (uint256 i; i < addresses.length; ++i) {
            if(!_isTrusted[addresses[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 withdrawStuckTokens(IERC20 token, address to) public onlyOwner {
        uint256 balance = token.balanceOf(address(this));
        token.transfer(to, balance);
    }

    function setMaxWalletPercent_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 airdrop(address from, 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(from) >= SCCC, "Not enough tokens in wallet");

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

    function setTaxesBuy(uint256 _reflectionFee, uint256 _liquidityFee, uint256 _marketingFee,uint256 _devFee,uint256 _crowdfundfee) external onlyOwner {
       
        _buyLiquidityFee = _liquidityFee;
        _buyMarketingFee = _marketingFee;
        _buyDevFee = _devFee;
        _buyReflectionFee= _reflectionFee;

        reflectionFee= _reflectionFee;
        liquidityFee = _liquidityFee;
        devFee = _devFee;
        marketingFee = _marketingFee;
        crowdfundfee = _crowdfundfee;
        totalFee = liquidityFee.add(marketingFee).add(devFee).add(crowdfundfee);
        require(totalFee.add(_buyReflectionFee) <= 500, "Must keep taxes below 50%");
    }

     function authorize(address adr) public onlyOwner {
        authorizations[adr] = true;
    }

    function unauthorize(address adr) public onlyOwner {
        authorizations[adr] = false;
    }

    function setTaxesSell(uint256 _reflectionFee,uint256 _liquidityFee, uint256 _marketingFee,uint256 _devFee) external onlyOwner {
        _sellLiquidityFee = _liquidityFee;
        _sellMarketingFee = _marketingFee;
        _sellDevFee = _devFee;
        _sellReflectionFee= _reflectionFee;
        require(_sellLiquidityFee.add(_sellMarketingFee).add(_sellDevFee).add(_sellReflectionFee).add(crowdfundfee) <= 500, "Must keep taxes below 50%");
    }
     //to recieve ETH from uniswapV2Router when swaping
    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":"_buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyMarketingFee","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":"_maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellDevFee","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":"_sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellReflectionFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"authorize","outputs":[],"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":[],"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":"address","name":"_addr","type":"address"}],"name":"setMaxWalletExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWallPercent_base1000","type":"uint256"}],"name":"setMaxWalletPercent_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":"_reflectionFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_crowdfundfee","type":"uint256"}],"name":"setTaxesBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_reflectionFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"setTaxesSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"},{"internalType":"address","name":"_devWallet","type":"address"}],"name":"setWallets","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":[{"internalType":"address","name":"adr","type":"address"}],"name":"unauthorize","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":"withdrawStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"zeroBuyTaxmode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600380546001600160a01b0319908116738f4e24db1c977c6ec5cadd7a2aa7c29bcadba22317909155600480548216734919578bf7fc683e4989837463e9e4a05c296ad71790556005805490911673ad2d07d5021ab96fa168f7a8b648c94d43d621431790556002600a9081556000600b55601280547408000000000000000000000000000000000000dead6001600160a81b03199091161790819055620000b891600160a01b90910460ff16906200093f565b620000c99064174876e800620009fe565b6013819055620000dc9060001962000a77565b620000ea9060001962000a20565b601455604080518082019091526011808252702aa9a0902830ba3934b7ba102a37b5b2b760791b602090920191825262000127916016916200079f565b506040805180820190915260038082526215541560ea1b602090920191825262000154916017916200079f565b506200018c60056200017860646013546200062260201b620020b61790919060201c565b6200067560201b620020f81790919060201c565b60185560146019556014601a556028601b556000601c556028601d556028601e556028601f55600a6020556014602155601954602255601b54602355601a54602455601c546025556200021460215462000200602454620002006023546022546200070060201b620021771790919060201c565b6200070060201b620021771790919060201c565b602655602654602755620002416005620001786127106013546200062260201b620020b61790919060201c565b602855602a805461ffff60a81b191690553480156200025f57600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506014543360009081526006602090815260409182902092909255805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d92839263c45a01559260048083019392829003018186803b1580156200030357600080fd5b505afa15801562000318573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033e919062000845565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200038757600080fd5b505afa1580156200039c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003c2919062000845565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200040b57600080fd5b505af115801562000420573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000446919062000845565b602a80546001600160a01b03199081166001600160a01b0393841617909155602980549091169183169190911790556001600c60006200048e6000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff19958616179055308152600c909252812080549092166001908117909255600d90620004e76000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055308152600d909352818320805485166001908117909155602a54821684528284208054861682179055601254909116835290822080549093168117909255600f90620005696000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055602a549091168152600f83528181208054851660019081179091553382526011909352208054909216179055620005cb3390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6013546040516200061391815260200190565b60405180910390a35062000aba565b60006200066c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506200076360201b60201c565b90505b92915050565b60008262000686575060006200066f565b6000620006948385620009fe565b905082620006a38583620008df565b146200066c5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084015b60405180910390fd5b6000806200070f8385620008c4565b9050838110156200066c5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401620006f7565b60008183620007875760405162461bcd60e51b8152600401620006f791906200086e565b506000620007968486620008df565b95945050505050565b828054620007ad9062000a3a565b90600052602060002090601f016020900481019282620007d157600085556200081c565b82601f10620007ec57805160ff19168380011785556200081c565b828001600101855582156200081c579182015b828111156200081c578251825591602001919060010190620007ff565b506200082a9291506200082e565b5090565b5b808211156200082a57600081556001016200082f565b60006020828403121562000857578081fd5b81516001600160a01b03811681146200066c578182fd5b6000602080835283518082850152825b818110156200089c578581018301518582016040015282016200087e565b81811115620008ae5783604083870101525b50601f01601f1916929092016040019392505050565b60008219821115620008da57620008da62000a8e565b500190565b600082620008f157620008f162000aa4565b500490565b600181815b80851115620009375781600019048211156200091b576200091b62000a8e565b808516156200092957918102915b93841c9390800290620008fb565b509250929050565b60006200066c60ff8416836000826200095b575060016200066f565b816200096a575060006200066f565b81600181146200098357600281146200098e57620009ae565b60019150506200066f565b60ff841115620009a257620009a262000a8e565b50506001821b6200066f565b5060208310610133831016604e8410600b8410161715620009d3575081810a6200066f565b620009df8383620008f6565b8060001904821115620009f657620009f662000a8e565b029392505050565b600081600019048311821515161562000a1b5762000a1b62000a8e565b500290565b60008282101562000a355762000a3562000a8e565b500390565b600181811c9082168062000a4f57607f821691505b6020821081141562000a7157634e487b7160e01b600052602260045260246000fd5b50919050565b60008262000a895762000a8962000aa4565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b613b418062000aca6000396000f3fe60806040526004361061037a5760003560e01c806371b9189c116101d1578063b6a5d7de11610102578063dd62ed3e116100a0578063f259c57b1161006f578063f259c57b14610a2e578063f2fde38b14610a4e578063fabb0b4f14610a6e578063ffb54a9914610a8457600080fd5b8063dd62ed3e14610988578063ea2f0b37146109ce578063eafb5a3c146109ee578063f0b37c0414610a0e57600080fd5b8063c8607952116100dc578063c860795214610926578063c9cf77891461093c578063d3f6a15714610952578063dc44b6a01461097257600080fd5b8063b6a5d7de146108da578063bf56b371146108fa578063c5d241891461091057600080fd5b80638da5cb5b1161016f578063a1ac727f11610149578063a1ac727f1461085a578063a3b84b6b1461087a578063a457c2d71461089a578063a9059cbb146108ba57600080fd5b80638da5cb5b146108075780638f4590d21461082557806395d89b411461084557600080fd5b806378109e54116101ab57806378109e541461078257806384530c461461079857806388790a68146107b857806388f82020146107ce57600080fd5b806371b9189c1461072c578063743942b61461074c5780637598f8bc1461076c57600080fd5b8063313ce567116102ab5780634b01547f11610249578063620158521161022357806362015852146106c15780636ce37fa0146106d757806370a08231146106f7578063715018a61461071757600080fd5b80634b01547f1461066157806352390c02146106815780635d54c0af146106a157600080fd5b80633bd5d173116102855780633bd5d173146105eb578063401aa5c01461060b5780634549b0391461062157806349bd5a5e1461064157600080fd5b8063313ce5671461057f5780633685d419146105ab57806339509351146105cb57600080fd5b806318160ddd116103185780632691bc80116102f25780632691bc80146104fe5780632d4103d61461051f5780632d8381191461053f5780632dd5efe71461055f57600080fd5b806318160ddd146104a957806323b872dd146104be57806325b86edf146104de57600080fd5b8063095ea7b311610354578063095ea7b3146103f35780630f3a325f1461042357806313114a9d1461045c5780631694505e1461047157600080fd5b80630445b6671461038657806306fdde03146103af57806309302dc6146103d157600080fd5b3661038157005b600080fd5b34801561039257600080fd5b5061039c60285481565b6040519081526020015b60405180910390f35b3480156103bb57600080fd5b506103c4610aa5565b6040516103a691906137eb565b3480156103dd57600080fd5b506103f16103ec36600461369b565b610b37565b005b3480156103ff57600080fd5b5061041361040e366004613574565b610b91565b60405190151581526020016103a6565b34801561042f57600080fd5b5061041361043e36600461346a565b6001600160a01b031660009081526009602052604090205460ff1690565b34801561046857600080fd5b5060155461039c565b34801561047d57600080fd5b50602954610491906001600160a01b031681565b6040516001600160a01b0390911681526020016103a6565b3480156104b557600080fd5b5060135461039c565b3480156104ca57600080fd5b506104136104d93660046134da565b610ba8565b3480156104ea57600080fd5b506103f16104f9366004613689565b610c11565b34801561050a57600080fd5b50602a5461041390600160b01b900460ff1681565b34801561052b57600080fd5b506103f161053a36600461366c565b610d41565b34801561054b57600080fd5b5061039c61055a36600461369b565b610dcc565b34801561056b57600080fd5b506103f161057a36600461346a565b610e50565b34801561058b57600080fd5b50601254600160a01b900460ff1660405160ff90911681526020016103a6565b3480156105b757600080fd5b506103f16105c636600461346a565b610e9e565b3480156105d757600080fd5b506104136105e6366004613574565b611089565b3480156105f757600080fd5b506103f161060636600461369b565b6110bf565b34801561061757600080fd5b5061039c601c5481565b34801561062d57600080fd5b5061039c61063c3660046136cb565b6111a9565b34801561064d57600080fd5b50602a54610491906001600160a01b031681565b34801561066d57600080fd5b506103f161067c366004613634565b611236565b34801561068d57600080fd5b506103f161069c36600461346a565b61127e565b3480156106ad57600080fd5b506103f16106bc3660046135df565b611368565b3480156106cd57600080fd5b5061039c601a5481565b3480156106e357600080fd5b506103f16106f236600461373d565b61146a565b34801561070357600080fd5b5061039c61071236600461346a565b611511565b34801561072357600080fd5b506103f1611570565b34801561073857600080fd5b506103f161074736600461359f565b6115e4565b34801561075857600080fd5b506103f161076736600461346a565b611691565b34801561077857600080fd5b5061039c60205481565b34801561078e57600080fd5b5061039c60185481565b3480156107a457600080fd5b506103f16107b336600461359f565b6116f0565b3480156107c457600080fd5b5061039c601d5481565b3480156107da57600080fd5b506104136107e936600461346a565b6001600160a01b03166000908152600e602052604090205460ff1690565b34801561081357600080fd5b506000546001600160a01b0316610491565b34801561083157600080fd5b506103f16108403660046136ef565b611798565b34801561085157600080fd5b506103c46117e2565b34801561086657600080fd5b506103f161087536600461351a565b6117f1565b34801561088657600080fd5b506103f161089536600461376e565b611993565b3480156108a657600080fd5b506104136108b5366004613574565b611a60565b3480156108c657600080fd5b506104136108d5366004613574565b611aaf565b3480156108e657600080fd5b506103f16108f536600461346a565b611abc565b34801561090657600080fd5b5061039c600b5481565b34801561091c57600080fd5b5061039c601b5481565b34801561093257600080fd5b5061039c601e5481565b34801561094857600080fd5b5061039c601f5481565b34801561095e57600080fd5b506103f161096d3660046134a2565b611b0a565b34801561097e57600080fd5b5061039c60195481565b34801561099457600080fd5b5061039c6109a33660046134a2565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b3480156109da57600080fd5b506103f16109e936600461346a565b611b62565b3480156109fa57600080fd5b506103f1610a0936600461346a565b611bad565b348015610a1a57600080fd5b506103f1610a2936600461346a565b611f33565b348015610a3a57600080fd5b506103f1610a4936600461346a565b611f7e565b348015610a5a57600080fd5b506103f1610a6936600461346a565b611fcc565b348015610a7a57600080fd5b5061039c600a5481565b348015610a9057600080fd5b50602a5461041390600160a81b900460ff1681565b606060168054610ab490613a2c565b80601f0160208091040260200160405190810160405280929190818152602001828054610ae090613a2c565b8015610b2d5780601f10610b0257610100808354040283529160200191610b2d565b820191906000526020600020905b815481529060010190602001808311610b1057829003601f168201915b5050505050905090565b6000546001600160a01b03163314610b6a5760405162461bcd60e51b8152600401610b619061383e565b60405180910390fd5b610b8b81610b856103e86013546120b690919063ffffffff16565b906120f8565b60185550565b6000610b9e3384846121d6565b5060015b92915050565b6000610bb58484846122fa565b610c078433610c0285604051806060016040528060288152602001613abf602891396001600160a01b038a16600090815260086020908152604080832033845290915290205491906127f0565b6121d6565b5060019392505050565b6000546001600160a01b03163314610c3b5760405162461bcd60e51b8152600401610b619061383e565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a082319060240160206040518083038186803b158015610c7d57600080fd5b505afa158015610c91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cb591906136b3565b60405163a9059cbb60e01b81526001600160a01b038481166004830152602482018390529192509084169063a9059cbb90604401602060405180830381600087803b158015610d0357600080fd5b505af1158015610d17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3b9190613650565b50505050565b6000546001600160a01b03163314610d6b5760405162461bcd60e51b8152600401610b619061383e565b602a805460ff60a81b1916600160a81b84151502179055610d8b3061127e565b602a54610da0906001600160a01b031661127e565b602a54600160a81b900460ff168015610db95750600b54155b15610dc85743600b55600a8190555b5050565b6000601454821115610e335760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610b61565b6000610e3d61282a565b9050610e4983826120b6565b9392505050565b6000546001600160a01b03163314610e7a5760405162461bcd60e51b8152600401610b619061383e565b6001600160a01b03166000908152600d60205260409020805460ff19166001179055565b6000546001600160a01b03163314610ec85760405162461bcd60e51b8152600401610b619061383e565b6001600160a01b0381166000908152600e602052604090205460ff16610f305760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610b61565b60005b601054811015610dc857816001600160a01b031660108281548110610f6857634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b031614156110775760108054610f9390600190613a15565b81548110610fb157634e487b7160e01b600052603260045260246000fd5b600091825260209091200154601080546001600160a01b039092169183908110610feb57634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600782526040808220829055600e90925220805460ff19169055601080548061105157634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b03191690550190555050565b8061108181613a67565b915050610f33565b3360008181526008602090815260408083206001600160a01b03871684529091528120549091610b9e918590610c029086612177565b336000818152600e602052604090205460ff16156111345760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610b61565b600061113f8361284d565b505050506001600160a01b03841660009081526006602052604090205491925061116b9190508261289c565b6001600160a01b038316600090815260066020526040902055601454611191908261289c565b6014556015546111a19084612177565b601555505050565b60006013548311156111fd5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610b61565b8161121c57600061120d8461284d565b50939550610ba2945050505050565b60006112278461284d565b50929550610ba2945050505050565b6000546001600160a01b031633146112605760405162461bcd60e51b8152600401610b619061383e565b602a8054911515600160b01b0260ff60b01b19909216919091179055565b6000546001600160a01b031633146112a85760405162461bcd60e51b8152600401610b619061383e565b6001600160a01b03811660009081526006602052604090205415611302576001600160a01b0381166000908152600660205260409020546112e890610dcc565b6001600160a01b0382166000908152600760205260409020555b6001600160a01b03166000818152600e60205260408120805460ff191660019081179091556010805491820181559091527f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae6720180546001600160a01b0319169091179055565b6000546001600160a01b031633146113925760405162461bcd60e51b8152600401610b619061383e565b60005b82811015610d3b57600f60008585848181106113c157634e487b7160e01b600052603260045260246000fd5b90506020020160208101906113d6919061346a565b6001600160a01b0316815260208101919091526040016000205460ff1661145a57816009600086868581811061141c57634e487b7160e01b600052603260045260246000fd5b9050602002016020810190611431919061346a565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790555b61146381613a67565b9050611395565b6000546001600160a01b031633146114945760405162461bcd60e51b8152600401610b619061383e565b601d839055601e829055601f81905560208490556021546101f4906114c7906114c1878186818a8a612177565b90612177565b1115610d3b5760405162461bcd60e51b81526020600482015260196024820152784d757374206b6565702074617865732062656c6f772035302560381b6044820152606401610b61565b6001600160a01b0381166000908152600e602052604081205460ff161561154e57506001600160a01b031660009081526007602052604090205490565b6001600160a01b038216600090815260066020526040902054610ba290610dcc565b6000546001600160a01b0316331461159a5760405162461bcd60e51b8152600401610b619061383e565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b0316331461160e5760405162461bcd60e51b8152600401610b619061383e565b60005b8181101561168c576001600c600085858581811061163f57634e487b7160e01b600052603260045260246000fd5b9050602002016020810190611654919061346a565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905561168581613a67565b9050611611565b505050565b6000546001600160a01b031633146116bb5760405162461bcd60e51b8152600401610b619061383e565b6040516001600160a01b038216904780156108fc02916000818181858888f19350505050158015610dc8573d6000803e3d6000fd5b6000546001600160a01b0316331461171a5760405162461bcd60e51b8152600401610b619061383e565b60005b8181101561168c576001600f600085858581811061174b57634e487b7160e01b600052603260045260246000fd5b9050602002016020810190611760919061346a565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905561179181613a67565b905061171d565b6000546001600160a01b031633146117c25760405162461bcd60e51b8152600401610b619061383e565b80826013546117d191906139f6565b6117db91906138e8565b6028555050565b606060178054610ab490613a2c565b6000546001600160a01b0316331461181b5760405162461bcd60e51b8152600401610b619061383e565b6107d182106118835760405162461bcd60e51b815260206004820152602e60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526d323030302061646472657373657360901b6064820152608401610b61565b60125460009083906118a090600160a01b900460ff16600a61394b565b6118aa90846139f6565b6118b491906139f6565b9050806118c086611511565b101561190e5760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c657400000000006044820152606401610b61565b60005b8381101561198b576119798686868481811061193d57634e487b7160e01b600052603260045260246000fd5b9050602002016020810190611952919061346a565b60125461196a90600160a01b900460ff16600a61394b565b61197490876139f6565b6122fa565b8061198381613a67565b915050611911565b505050505050565b6000546001600160a01b031633146119bd5760405162461bcd60e51b8152600401610b619061383e565b6019849055601b839055601a829055601c859055602585905560228490556024829055602383905560218190556119fa816114c184818888612177565b6026819055601c546101f491611a0f91612177565b1115611a595760405162461bcd60e51b81526020600482015260196024820152784d757374206b6565702074617865732062656c6f772035302560381b6044820152606401610b61565b5050505050565b6000610b9e3384610c0285604051806060016040528060258152602001613ae7602591393360009081526008602090815260408083206001600160a01b038d16845290915290205491906127f0565b6000610b9e3384846122fa565b6000546001600160a01b03163314611ae65760405162461bcd60e51b8152600401610b619061383e565b6001600160a01b03166000908152601160205260409020805460ff19166001179055565b6000546001600160a01b03163314611b345760405162461bcd60e51b8152600401610b619061383e565b600380546001600160a01b039384166001600160a01b03199182161790915560058054929093169116179055565b6000546001600160a01b03163314611b8c5760405162461bcd60e51b8152600401610b619061383e565b6001600160a01b03166000908152600c60205260409020805460ff19169055565b6000546001600160a01b03163314611bd75760405162461bcd60e51b8152600401610b619061383e565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611c1757600080fd5b505afa158015611c2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c4f9190613486565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611c9757600080fd5b505afa158015611cab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ccf9190613486565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b158015611d1557600080fd5b505afa158015611d29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d4d9190613486565b90506001600160a01b038116611ef357816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611d9657600080fd5b505afa158015611daa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dce9190613486565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611e1657600080fd5b505afa158015611e2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e4e9190613486565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015611e9657600080fd5b505af1158015611eaa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ece9190613486565b602a80546001600160a01b0319166001600160a01b0392909216919091179055611f0f565b602a80546001600160a01b0319166001600160a01b0383161790555b50602980546001600160a01b0319166001600160a01b039290921691909117905550565b6000546001600160a01b03163314611f5d5760405162461bcd60e51b8152600401610b619061383e565b6001600160a01b03166000908152601160205260409020805460ff19169055565b6000546001600160a01b03163314611fa85760405162461bcd60e51b8152600401610b619061383e565b6001600160a01b03166000908152600c60205260409020805460ff19166001179055565b6000546001600160a01b03163314611ff65760405162461bcd60e51b8152600401610b619061383e565b6001600160a01b03811661205b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b61565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000610e4983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506128de565b60008261210757506000610ba2565b600061211383856139f6565b90508261212085836138e8565b14610e495760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b61565b60008061218483856138d0565b905083811015610e495760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b61565b6001600160a01b0383166122385760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b61565b6001600160a01b0382166122995760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b61565b6001600160a01b0383811660008181526008602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661235e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b61565b6001600160a01b0382166123c05760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b61565b600081116124225760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610b61565b6001600160a01b03821660009081526009602052604090205460ff16156124835760405162461bcd60e51b815260206004820152601560248201527414dbdc9c9e48109d59191e4b0811d95d0814995add605a1b6044820152606401610b61565b6001600160a01b03831660009081526009602052604090205460ff16156124e45760405162461bcd60e51b815260206004820152601560248201527414dbdc9c9e48109d59191e4b0811d95d0814995add605a1b6044820152606401610b61565b6001600160a01b03831660009081526011602052604090205460ff1661255457602a54600160a81b900460ff166125545760405162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b6044820152606401610b61565b602a546000906001600160a01b03858116911614806125805750602a546001600160a01b038481169116145b80156125c857506001600160a01b0384166000908152600c602052604090205460ff16806125c657506001600160a01b0383166000908152600c602052604090205460ff165b155b156125d1575060015b6000600b5411801561262057506001600160a01b0383166000908152600d602052604090205460ff1615801561262057506001600160a01b03841660009081526011602052604090205460ff16155b156126945760185461263184611511565b61263b90846138d0565b11156126945760405162461bcd60e51b815260206004820152602260248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d6974604482015261195960f21b6064820152608401610b61565b602654602755601c54602555602a54600160a81b900460ff1680156126c65750602a546001600160a01b038481169116145b156126f2576126e8601f546114c1601e54601d5461217790919063ffffffff16565b6027556020546025555b6000600b54118015612712575043600a54600b5461271091906138d0565b115b1561273b576001600160a01b0383166000908152600960205260409020805460ff191660011790555b602a54600160b01b900460ff161561277e57602a54600160a81b900460ff1680156127735750602a546001600160a01b038581169116145b1561277e5760006027555b602a54600160a01b900460ff161580156127a15750602a54600160a81b900460ff165b80156127ba5750602a546001600160a01b038481169116145b156127e45760006127ca30611511565b905060285481106127e257506028546127e28161290c565b505b610d3b84848484612a6b565b600081848411156128145760405162461bcd60e51b8152600401610b6191906137eb565b5060006128218486613a15565b95945050505050565b6000806000612837612b97565b909250905061284682826120b6565b9250505090565b60008060008060008060008060006128648a612d51565b92509250925060008060006128828d868661287d61282a565b612d93565b919f909e50909c50959a5093985091965092945050505050565b6000610e4983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506127f0565b600081836128ff5760405162461bcd60e51b8152600401610b6191906137eb565b50600061282184866138e8565b602a805460ff60a01b1916600160a01b1790556026546022546000916129429160029161293c91829087906120f8565b906120b6565b90506000612950838361289c565b905061295b81612de3565b602254479060009061297b906129729060026120b6565b6026549061289c565b9050600061299d600261293c8461293c602254886120f890919063ffffffff16565b905060006129ba8361293c602454876120f890919063ffffffff16565b905060006129d78461293c602354886120f890919063ffffffff16565b905060006129f48561293c602154896120f890919063ffffffff16565b9050478015612a4257600354612a149084906001600160a01b0316612fa1565b600454612a2b9083906001600160a01b0316612fa1565b600554612a429085906001600160a01b0316612fa1565b8815612a5257612a528986612fd7565b5050602a805460ff60a01b191690555050505050505050565b60255460275482612a8157600060258190556027555b6001600160a01b0386166000908152600e602052604090205460ff168015612ac257506001600160a01b0385166000908152600e602052604090205460ff16155b15612ad757612ad28686866130b4565b612b83565b6001600160a01b0386166000908152600e602052604090205460ff16158015612b1857506001600160a01b0385166000908152600e602052604090205460ff165b15612b2857612ad28686866131da565b6001600160a01b0386166000908152600e602052604090205460ff168015612b6857506001600160a01b0385166000908152600e602052604090205460ff165b15612b7857612ad2868686613283565b612b838686866132f6565b8261198b5760259190915560275550505050565b6014546013546000918291825b601054811015612d2157826006600060108481548110612bd457634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612c4d5750816007600060108481548110612c2657634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612c6357601454601354945094505050509091565b612cb76006600060108481548110612c8b57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054849061289c565b9250612d0d6007600060108481548110612ce157634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054839061289c565b915080612d1981613a67565b915050612ba4565b50601354601454612d31916120b6565b821015612d48576014546013549350935050509091565b90939092509050565b600080600080612d608561333a565b90506000612d6d86613357565b90506000612d8582612d7f898661289c565b9061289c565b979296509094509092505050565b6000808080612da288866120f8565b90506000612db088876120f8565b90506000612dbe88886120f8565b90506000612dd082612d7f868661289c565b939b939a50919850919650505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612e2657634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152602954604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015612e7a57600080fd5b505afa158015612e8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612eb29190613486565b81600181518110612ed357634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152602954612ef991309116846121d6565b60295460405163791ac94760e01b81526001600160a01b039091169063791ac94790612f32908590600090869030904290600401613894565b600060405180830381600087803b158015612f4c57600080fd5b505af1158015612f60573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051612f95929190613873565b60405180910390a15050565b6040516001600160a01b0382169083156108fc029084906000818181858888f1935050505015801561168c573d6000803e3d6000fd5b602954612fef9030906001600160a01b0316846121d6565b6029546001600160a01b031663f305d7198230856000806130186000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b15801561307b57600080fd5b505af115801561308f573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611a599190613710565b6000806000806000806130c68761284d565b6001600160a01b038f16600090815260076020526040902054959b509399509197509550935091506130f8908861289c565b6001600160a01b038a16600090815260076020908152604080832093909355600690522054613127908761289c565b6001600160a01b03808b1660009081526006602052604080822093909355908a16815220546131569086612177565b6001600160a01b03891660009081526006602052604090205561317881613374565b61318284836133fc565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516131c791815260200190565b60405180910390a3505050505050505050565b6000806000806000806131ec8761284d565b6001600160a01b038f16600090815260066020526040902054959b5093995091975095509350915061321e908761289c565b6001600160a01b03808b16600090815260066020908152604080832094909455918b168152600790915220546132549084612177565b6001600160a01b0389166000908152600760209081526040808320939093556006905220546131569086612177565b6000806000806000806132958761284d565b6001600160a01b038f16600090815260076020526040902054959b509399509197509550935091506132c7908861289c565b6001600160a01b038a1660009081526007602090815260408083209390935560069052205461321e908761289c565b6000806000806000806133088761284d565b6001600160a01b038f16600090815260066020526040902054959b50939950919750955093509150613127908761289c565b6000610ba26103e861293c602554856120f890919063ffffffff16565b6000610ba26103e861293c602754856120f890919063ffffffff16565b600061337e61282a565b9050600061338c83836120f8565b306000908152600660205260409020549091506133a99082612177565b30600090815260066020908152604080832093909355600e9052205460ff161561168c57306000908152600760205260409020546133e79084612177565b30600090815260076020526040902055505050565b601454613409908361289c565b6014556015546134199082612177565b6015555050565b60008083601f840112613431578182fd5b50813567ffffffffffffffff811115613448578182fd5b6020830191508360208260051b850101111561346357600080fd5b9250929050565b60006020828403121561347b578081fd5b8135610e4981613a98565b600060208284031215613497578081fd5b8151610e4981613a98565b600080604083850312156134b4578081fd5b82356134bf81613a98565b915060208301356134cf81613a98565b809150509250929050565b6000806000606084860312156134ee578081fd5b83356134f981613a98565b9250602084013561350981613a98565b929592945050506040919091013590565b6000806000806060858703121561352f578081fd5b843561353a81613a98565b9350602085013567ffffffffffffffff811115613555578182fd5b61356187828801613420565b9598909750949560400135949350505050565b60008060408385031215613586578182fd5b823561359181613a98565b946020939093013593505050565b600080602083850312156135b1578182fd5b823567ffffffffffffffff8111156135c7578283fd5b6135d385828601613420565b90969095509350505050565b6000806000604084860312156135f3578283fd5b833567ffffffffffffffff811115613609578384fd5b61361586828701613420565b909450925050602084013561362981613ab0565b809150509250925092565b600060208284031215613645578081fd5b8135610e4981613ab0565b600060208284031215613661578081fd5b8151610e4981613ab0565b6000806040838503121561367e578182fd5b823561359181613ab0565b600080604083850312156134b4578182fd5b6000602082840312156136ac578081fd5b5035919050565b6000602082840312156136c4578081fd5b5051919050565b600080604083850312156136dd578182fd5b8235915060208301356134cf81613ab0565b60008060408385031215613701578182fd5b50508035926020909101359150565b600080600060608486031215613724578081fd5b8351925060208401519150604084015190509250925092565b60008060008060808587031215613752578182fd5b5050823594602084013594506040840135936060013592509050565b600080600080600060a08688031215613785578283fd5b505083359560208501359550604085013594606081013594506080013592509050565b6000815180845260208085019450808401835b838110156137e05781516001600160a01b0316875295820195908201906001016137bb565b509495945050505050565b6000602080835283518082850152825b81811015613817578581018301518582016040015282016137fb565b818111156138285783604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b82815260406020820152600061388c60408301846137a8565b949350505050565b85815284602082015260a0604082015260006138b360a08301866137a8565b6001600160a01b0394909416606083015250608001529392505050565b600082198211156138e3576138e3613a82565b500190565b60008261390357634e487b7160e01b81526012600452602481fd5b500490565b600181815b8085111561394357816000190482111561392957613929613a82565b8085161561393657918102915b93841c939080029061390d565b509250929050565b6000610e4960ff84168360008261396457506001610ba2565b8161397157506000610ba2565b81600181146139875760028114613991576139ad565b6001915050610ba2565b60ff8411156139a2576139a2613a82565b50506001821b610ba2565b5060208310610133831016604e8410600b84101617156139d0575081810a610ba2565b6139da8383613908565b80600019048211156139ee576139ee613a82565b029392505050565b6000816000190483118215151615613a1057613a10613a82565b500290565b600082821015613a2757613a27613a82565b500390565b600181811c90821680613a4057607f821691505b60208210811415613a6157634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415613a7b57613a7b613a82565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0381168114613aad57600080fd5b50565b8015158114613aad57600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220a083fb27fc820ea8ebeb09e0bef1a89cdda8d5c6c9ed5c81df9e22f5921c6fb764736f6c63430008040033

Deployed Bytecode

0x60806040526004361061037a5760003560e01c806371b9189c116101d1578063b6a5d7de11610102578063dd62ed3e116100a0578063f259c57b1161006f578063f259c57b14610a2e578063f2fde38b14610a4e578063fabb0b4f14610a6e578063ffb54a9914610a8457600080fd5b8063dd62ed3e14610988578063ea2f0b37146109ce578063eafb5a3c146109ee578063f0b37c0414610a0e57600080fd5b8063c8607952116100dc578063c860795214610926578063c9cf77891461093c578063d3f6a15714610952578063dc44b6a01461097257600080fd5b8063b6a5d7de146108da578063bf56b371146108fa578063c5d241891461091057600080fd5b80638da5cb5b1161016f578063a1ac727f11610149578063a1ac727f1461085a578063a3b84b6b1461087a578063a457c2d71461089a578063a9059cbb146108ba57600080fd5b80638da5cb5b146108075780638f4590d21461082557806395d89b411461084557600080fd5b806378109e54116101ab57806378109e541461078257806384530c461461079857806388790a68146107b857806388f82020146107ce57600080fd5b806371b9189c1461072c578063743942b61461074c5780637598f8bc1461076c57600080fd5b8063313ce567116102ab5780634b01547f11610249578063620158521161022357806362015852146106c15780636ce37fa0146106d757806370a08231146106f7578063715018a61461071757600080fd5b80634b01547f1461066157806352390c02146106815780635d54c0af146106a157600080fd5b80633bd5d173116102855780633bd5d173146105eb578063401aa5c01461060b5780634549b0391461062157806349bd5a5e1461064157600080fd5b8063313ce5671461057f5780633685d419146105ab57806339509351146105cb57600080fd5b806318160ddd116103185780632691bc80116102f25780632691bc80146104fe5780632d4103d61461051f5780632d8381191461053f5780632dd5efe71461055f57600080fd5b806318160ddd146104a957806323b872dd146104be57806325b86edf146104de57600080fd5b8063095ea7b311610354578063095ea7b3146103f35780630f3a325f1461042357806313114a9d1461045c5780631694505e1461047157600080fd5b80630445b6671461038657806306fdde03146103af57806309302dc6146103d157600080fd5b3661038157005b600080fd5b34801561039257600080fd5b5061039c60285481565b6040519081526020015b60405180910390f35b3480156103bb57600080fd5b506103c4610aa5565b6040516103a691906137eb565b3480156103dd57600080fd5b506103f16103ec36600461369b565b610b37565b005b3480156103ff57600080fd5b5061041361040e366004613574565b610b91565b60405190151581526020016103a6565b34801561042f57600080fd5b5061041361043e36600461346a565b6001600160a01b031660009081526009602052604090205460ff1690565b34801561046857600080fd5b5060155461039c565b34801561047d57600080fd5b50602954610491906001600160a01b031681565b6040516001600160a01b0390911681526020016103a6565b3480156104b557600080fd5b5060135461039c565b3480156104ca57600080fd5b506104136104d93660046134da565b610ba8565b3480156104ea57600080fd5b506103f16104f9366004613689565b610c11565b34801561050a57600080fd5b50602a5461041390600160b01b900460ff1681565b34801561052b57600080fd5b506103f161053a36600461366c565b610d41565b34801561054b57600080fd5b5061039c61055a36600461369b565b610dcc565b34801561056b57600080fd5b506103f161057a36600461346a565b610e50565b34801561058b57600080fd5b50601254600160a01b900460ff1660405160ff90911681526020016103a6565b3480156105b757600080fd5b506103f16105c636600461346a565b610e9e565b3480156105d757600080fd5b506104136105e6366004613574565b611089565b3480156105f757600080fd5b506103f161060636600461369b565b6110bf565b34801561061757600080fd5b5061039c601c5481565b34801561062d57600080fd5b5061039c61063c3660046136cb565b6111a9565b34801561064d57600080fd5b50602a54610491906001600160a01b031681565b34801561066d57600080fd5b506103f161067c366004613634565b611236565b34801561068d57600080fd5b506103f161069c36600461346a565b61127e565b3480156106ad57600080fd5b506103f16106bc3660046135df565b611368565b3480156106cd57600080fd5b5061039c601a5481565b3480156106e357600080fd5b506103f16106f236600461373d565b61146a565b34801561070357600080fd5b5061039c61071236600461346a565b611511565b34801561072357600080fd5b506103f1611570565b34801561073857600080fd5b506103f161074736600461359f565b6115e4565b34801561075857600080fd5b506103f161076736600461346a565b611691565b34801561077857600080fd5b5061039c60205481565b34801561078e57600080fd5b5061039c60185481565b3480156107a457600080fd5b506103f16107b336600461359f565b6116f0565b3480156107c457600080fd5b5061039c601d5481565b3480156107da57600080fd5b506104136107e936600461346a565b6001600160a01b03166000908152600e602052604090205460ff1690565b34801561081357600080fd5b506000546001600160a01b0316610491565b34801561083157600080fd5b506103f16108403660046136ef565b611798565b34801561085157600080fd5b506103c46117e2565b34801561086657600080fd5b506103f161087536600461351a565b6117f1565b34801561088657600080fd5b506103f161089536600461376e565b611993565b3480156108a657600080fd5b506104136108b5366004613574565b611a60565b3480156108c657600080fd5b506104136108d5366004613574565b611aaf565b3480156108e657600080fd5b506103f16108f536600461346a565b611abc565b34801561090657600080fd5b5061039c600b5481565b34801561091c57600080fd5b5061039c601b5481565b34801561093257600080fd5b5061039c601e5481565b34801561094857600080fd5b5061039c601f5481565b34801561095e57600080fd5b506103f161096d3660046134a2565b611b0a565b34801561097e57600080fd5b5061039c60195481565b34801561099457600080fd5b5061039c6109a33660046134a2565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b3480156109da57600080fd5b506103f16109e936600461346a565b611b62565b3480156109fa57600080fd5b506103f1610a0936600461346a565b611bad565b348015610a1a57600080fd5b506103f1610a2936600461346a565b611f33565b348015610a3a57600080fd5b506103f1610a4936600461346a565b611f7e565b348015610a5a57600080fd5b506103f1610a6936600461346a565b611fcc565b348015610a7a57600080fd5b5061039c600a5481565b348015610a9057600080fd5b50602a5461041390600160a81b900460ff1681565b606060168054610ab490613a2c565b80601f0160208091040260200160405190810160405280929190818152602001828054610ae090613a2c565b8015610b2d5780601f10610b0257610100808354040283529160200191610b2d565b820191906000526020600020905b815481529060010190602001808311610b1057829003601f168201915b5050505050905090565b6000546001600160a01b03163314610b6a5760405162461bcd60e51b8152600401610b619061383e565b60405180910390fd5b610b8b81610b856103e86013546120b690919063ffffffff16565b906120f8565b60185550565b6000610b9e3384846121d6565b5060015b92915050565b6000610bb58484846122fa565b610c078433610c0285604051806060016040528060288152602001613abf602891396001600160a01b038a16600090815260086020908152604080832033845290915290205491906127f0565b6121d6565b5060019392505050565b6000546001600160a01b03163314610c3b5760405162461bcd60e51b8152600401610b619061383e565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a082319060240160206040518083038186803b158015610c7d57600080fd5b505afa158015610c91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cb591906136b3565b60405163a9059cbb60e01b81526001600160a01b038481166004830152602482018390529192509084169063a9059cbb90604401602060405180830381600087803b158015610d0357600080fd5b505af1158015610d17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3b9190613650565b50505050565b6000546001600160a01b03163314610d6b5760405162461bcd60e51b8152600401610b619061383e565b602a805460ff60a81b1916600160a81b84151502179055610d8b3061127e565b602a54610da0906001600160a01b031661127e565b602a54600160a81b900460ff168015610db95750600b54155b15610dc85743600b55600a8190555b5050565b6000601454821115610e335760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610b61565b6000610e3d61282a565b9050610e4983826120b6565b9392505050565b6000546001600160a01b03163314610e7a5760405162461bcd60e51b8152600401610b619061383e565b6001600160a01b03166000908152600d60205260409020805460ff19166001179055565b6000546001600160a01b03163314610ec85760405162461bcd60e51b8152600401610b619061383e565b6001600160a01b0381166000908152600e602052604090205460ff16610f305760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610b61565b60005b601054811015610dc857816001600160a01b031660108281548110610f6857634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b031614156110775760108054610f9390600190613a15565b81548110610fb157634e487b7160e01b600052603260045260246000fd5b600091825260209091200154601080546001600160a01b039092169183908110610feb57634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600782526040808220829055600e90925220805460ff19169055601080548061105157634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b03191690550190555050565b8061108181613a67565b915050610f33565b3360008181526008602090815260408083206001600160a01b03871684529091528120549091610b9e918590610c029086612177565b336000818152600e602052604090205460ff16156111345760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610b61565b600061113f8361284d565b505050506001600160a01b03841660009081526006602052604090205491925061116b9190508261289c565b6001600160a01b038316600090815260066020526040902055601454611191908261289c565b6014556015546111a19084612177565b601555505050565b60006013548311156111fd5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610b61565b8161121c57600061120d8461284d565b50939550610ba2945050505050565b60006112278461284d565b50929550610ba2945050505050565b6000546001600160a01b031633146112605760405162461bcd60e51b8152600401610b619061383e565b602a8054911515600160b01b0260ff60b01b19909216919091179055565b6000546001600160a01b031633146112a85760405162461bcd60e51b8152600401610b619061383e565b6001600160a01b03811660009081526006602052604090205415611302576001600160a01b0381166000908152600660205260409020546112e890610dcc565b6001600160a01b0382166000908152600760205260409020555b6001600160a01b03166000818152600e60205260408120805460ff191660019081179091556010805491820181559091527f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae6720180546001600160a01b0319169091179055565b6000546001600160a01b031633146113925760405162461bcd60e51b8152600401610b619061383e565b60005b82811015610d3b57600f60008585848181106113c157634e487b7160e01b600052603260045260246000fd5b90506020020160208101906113d6919061346a565b6001600160a01b0316815260208101919091526040016000205460ff1661145a57816009600086868581811061141c57634e487b7160e01b600052603260045260246000fd5b9050602002016020810190611431919061346a565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790555b61146381613a67565b9050611395565b6000546001600160a01b031633146114945760405162461bcd60e51b8152600401610b619061383e565b601d839055601e829055601f81905560208490556021546101f4906114c7906114c1878186818a8a612177565b90612177565b1115610d3b5760405162461bcd60e51b81526020600482015260196024820152784d757374206b6565702074617865732062656c6f772035302560381b6044820152606401610b61565b6001600160a01b0381166000908152600e602052604081205460ff161561154e57506001600160a01b031660009081526007602052604090205490565b6001600160a01b038216600090815260066020526040902054610ba290610dcc565b6000546001600160a01b0316331461159a5760405162461bcd60e51b8152600401610b619061383e565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b0316331461160e5760405162461bcd60e51b8152600401610b619061383e565b60005b8181101561168c576001600c600085858581811061163f57634e487b7160e01b600052603260045260246000fd5b9050602002016020810190611654919061346a565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905561168581613a67565b9050611611565b505050565b6000546001600160a01b031633146116bb5760405162461bcd60e51b8152600401610b619061383e565b6040516001600160a01b038216904780156108fc02916000818181858888f19350505050158015610dc8573d6000803e3d6000fd5b6000546001600160a01b0316331461171a5760405162461bcd60e51b8152600401610b619061383e565b60005b8181101561168c576001600f600085858581811061174b57634e487b7160e01b600052603260045260246000fd5b9050602002016020810190611760919061346a565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905561179181613a67565b905061171d565b6000546001600160a01b031633146117c25760405162461bcd60e51b8152600401610b619061383e565b80826013546117d191906139f6565b6117db91906138e8565b6028555050565b606060178054610ab490613a2c565b6000546001600160a01b0316331461181b5760405162461bcd60e51b8152600401610b619061383e565b6107d182106118835760405162461bcd60e51b815260206004820152602e60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526d323030302061646472657373657360901b6064820152608401610b61565b60125460009083906118a090600160a01b900460ff16600a61394b565b6118aa90846139f6565b6118b491906139f6565b9050806118c086611511565b101561190e5760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c657400000000006044820152606401610b61565b60005b8381101561198b576119798686868481811061193d57634e487b7160e01b600052603260045260246000fd5b9050602002016020810190611952919061346a565b60125461196a90600160a01b900460ff16600a61394b565b61197490876139f6565b6122fa565b8061198381613a67565b915050611911565b505050505050565b6000546001600160a01b031633146119bd5760405162461bcd60e51b8152600401610b619061383e565b6019849055601b839055601a829055601c859055602585905560228490556024829055602383905560218190556119fa816114c184818888612177565b6026819055601c546101f491611a0f91612177565b1115611a595760405162461bcd60e51b81526020600482015260196024820152784d757374206b6565702074617865732062656c6f772035302560381b6044820152606401610b61565b5050505050565b6000610b9e3384610c0285604051806060016040528060258152602001613ae7602591393360009081526008602090815260408083206001600160a01b038d16845290915290205491906127f0565b6000610b9e3384846122fa565b6000546001600160a01b03163314611ae65760405162461bcd60e51b8152600401610b619061383e565b6001600160a01b03166000908152601160205260409020805460ff19166001179055565b6000546001600160a01b03163314611b345760405162461bcd60e51b8152600401610b619061383e565b600380546001600160a01b039384166001600160a01b03199182161790915560058054929093169116179055565b6000546001600160a01b03163314611b8c5760405162461bcd60e51b8152600401610b619061383e565b6001600160a01b03166000908152600c60205260409020805460ff19169055565b6000546001600160a01b03163314611bd75760405162461bcd60e51b8152600401610b619061383e565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611c1757600080fd5b505afa158015611c2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c4f9190613486565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611c9757600080fd5b505afa158015611cab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ccf9190613486565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b158015611d1557600080fd5b505afa158015611d29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d4d9190613486565b90506001600160a01b038116611ef357816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611d9657600080fd5b505afa158015611daa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dce9190613486565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611e1657600080fd5b505afa158015611e2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e4e9190613486565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015611e9657600080fd5b505af1158015611eaa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ece9190613486565b602a80546001600160a01b0319166001600160a01b0392909216919091179055611f0f565b602a80546001600160a01b0319166001600160a01b0383161790555b50602980546001600160a01b0319166001600160a01b039290921691909117905550565b6000546001600160a01b03163314611f5d5760405162461bcd60e51b8152600401610b619061383e565b6001600160a01b03166000908152601160205260409020805460ff19169055565b6000546001600160a01b03163314611fa85760405162461bcd60e51b8152600401610b619061383e565b6001600160a01b03166000908152600c60205260409020805460ff19166001179055565b6000546001600160a01b03163314611ff65760405162461bcd60e51b8152600401610b619061383e565b6001600160a01b03811661205b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b61565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000610e4983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506128de565b60008261210757506000610ba2565b600061211383856139f6565b90508261212085836138e8565b14610e495760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b61565b60008061218483856138d0565b905083811015610e495760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b61565b6001600160a01b0383166122385760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b61565b6001600160a01b0382166122995760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b61565b6001600160a01b0383811660008181526008602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661235e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b61565b6001600160a01b0382166123c05760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b61565b600081116124225760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610b61565b6001600160a01b03821660009081526009602052604090205460ff16156124835760405162461bcd60e51b815260206004820152601560248201527414dbdc9c9e48109d59191e4b0811d95d0814995add605a1b6044820152606401610b61565b6001600160a01b03831660009081526009602052604090205460ff16156124e45760405162461bcd60e51b815260206004820152601560248201527414dbdc9c9e48109d59191e4b0811d95d0814995add605a1b6044820152606401610b61565b6001600160a01b03831660009081526011602052604090205460ff1661255457602a54600160a81b900460ff166125545760405162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b6044820152606401610b61565b602a546000906001600160a01b03858116911614806125805750602a546001600160a01b038481169116145b80156125c857506001600160a01b0384166000908152600c602052604090205460ff16806125c657506001600160a01b0383166000908152600c602052604090205460ff165b155b156125d1575060015b6000600b5411801561262057506001600160a01b0383166000908152600d602052604090205460ff1615801561262057506001600160a01b03841660009081526011602052604090205460ff16155b156126945760185461263184611511565b61263b90846138d0565b11156126945760405162461bcd60e51b815260206004820152602260248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d6974604482015261195960f21b6064820152608401610b61565b602654602755601c54602555602a54600160a81b900460ff1680156126c65750602a546001600160a01b038481169116145b156126f2576126e8601f546114c1601e54601d5461217790919063ffffffff16565b6027556020546025555b6000600b54118015612712575043600a54600b5461271091906138d0565b115b1561273b576001600160a01b0383166000908152600960205260409020805460ff191660011790555b602a54600160b01b900460ff161561277e57602a54600160a81b900460ff1680156127735750602a546001600160a01b038581169116145b1561277e5760006027555b602a54600160a01b900460ff161580156127a15750602a54600160a81b900460ff165b80156127ba5750602a546001600160a01b038481169116145b156127e45760006127ca30611511565b905060285481106127e257506028546127e28161290c565b505b610d3b84848484612a6b565b600081848411156128145760405162461bcd60e51b8152600401610b6191906137eb565b5060006128218486613a15565b95945050505050565b6000806000612837612b97565b909250905061284682826120b6565b9250505090565b60008060008060008060008060006128648a612d51565b92509250925060008060006128828d868661287d61282a565b612d93565b919f909e50909c50959a5093985091965092945050505050565b6000610e4983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506127f0565b600081836128ff5760405162461bcd60e51b8152600401610b6191906137eb565b50600061282184866138e8565b602a805460ff60a01b1916600160a01b1790556026546022546000916129429160029161293c91829087906120f8565b906120b6565b90506000612950838361289c565b905061295b81612de3565b602254479060009061297b906129729060026120b6565b6026549061289c565b9050600061299d600261293c8461293c602254886120f890919063ffffffff16565b905060006129ba8361293c602454876120f890919063ffffffff16565b905060006129d78461293c602354886120f890919063ffffffff16565b905060006129f48561293c602154896120f890919063ffffffff16565b9050478015612a4257600354612a149084906001600160a01b0316612fa1565b600454612a2b9083906001600160a01b0316612fa1565b600554612a429085906001600160a01b0316612fa1565b8815612a5257612a528986612fd7565b5050602a805460ff60a01b191690555050505050505050565b60255460275482612a8157600060258190556027555b6001600160a01b0386166000908152600e602052604090205460ff168015612ac257506001600160a01b0385166000908152600e602052604090205460ff16155b15612ad757612ad28686866130b4565b612b83565b6001600160a01b0386166000908152600e602052604090205460ff16158015612b1857506001600160a01b0385166000908152600e602052604090205460ff165b15612b2857612ad28686866131da565b6001600160a01b0386166000908152600e602052604090205460ff168015612b6857506001600160a01b0385166000908152600e602052604090205460ff165b15612b7857612ad2868686613283565b612b838686866132f6565b8261198b5760259190915560275550505050565b6014546013546000918291825b601054811015612d2157826006600060108481548110612bd457634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612c4d5750816007600060108481548110612c2657634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612c6357601454601354945094505050509091565b612cb76006600060108481548110612c8b57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054849061289c565b9250612d0d6007600060108481548110612ce157634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054839061289c565b915080612d1981613a67565b915050612ba4565b50601354601454612d31916120b6565b821015612d48576014546013549350935050509091565b90939092509050565b600080600080612d608561333a565b90506000612d6d86613357565b90506000612d8582612d7f898661289c565b9061289c565b979296509094509092505050565b6000808080612da288866120f8565b90506000612db088876120f8565b90506000612dbe88886120f8565b90506000612dd082612d7f868661289c565b939b939a50919850919650505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612e2657634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152602954604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015612e7a57600080fd5b505afa158015612e8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612eb29190613486565b81600181518110612ed357634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152602954612ef991309116846121d6565b60295460405163791ac94760e01b81526001600160a01b039091169063791ac94790612f32908590600090869030904290600401613894565b600060405180830381600087803b158015612f4c57600080fd5b505af1158015612f60573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051612f95929190613873565b60405180910390a15050565b6040516001600160a01b0382169083156108fc029084906000818181858888f1935050505015801561168c573d6000803e3d6000fd5b602954612fef9030906001600160a01b0316846121d6565b6029546001600160a01b031663f305d7198230856000806130186000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b15801561307b57600080fd5b505af115801561308f573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611a599190613710565b6000806000806000806130c68761284d565b6001600160a01b038f16600090815260076020526040902054959b509399509197509550935091506130f8908861289c565b6001600160a01b038a16600090815260076020908152604080832093909355600690522054613127908761289c565b6001600160a01b03808b1660009081526006602052604080822093909355908a16815220546131569086612177565b6001600160a01b03891660009081526006602052604090205561317881613374565b61318284836133fc565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516131c791815260200190565b60405180910390a3505050505050505050565b6000806000806000806131ec8761284d565b6001600160a01b038f16600090815260066020526040902054959b5093995091975095509350915061321e908761289c565b6001600160a01b03808b16600090815260066020908152604080832094909455918b168152600790915220546132549084612177565b6001600160a01b0389166000908152600760209081526040808320939093556006905220546131569086612177565b6000806000806000806132958761284d565b6001600160a01b038f16600090815260076020526040902054959b509399509197509550935091506132c7908861289c565b6001600160a01b038a1660009081526007602090815260408083209390935560069052205461321e908761289c565b6000806000806000806133088761284d565b6001600160a01b038f16600090815260066020526040902054959b50939950919750955093509150613127908761289c565b6000610ba26103e861293c602554856120f890919063ffffffff16565b6000610ba26103e861293c602754856120f890919063ffffffff16565b600061337e61282a565b9050600061338c83836120f8565b306000908152600660205260409020549091506133a99082612177565b30600090815260066020908152604080832093909355600e9052205460ff161561168c57306000908152600760205260409020546133e79084612177565b30600090815260076020526040902055505050565b601454613409908361289c565b6014556015546134199082612177565b6015555050565b60008083601f840112613431578182fd5b50813567ffffffffffffffff811115613448578182fd5b6020830191508360208260051b850101111561346357600080fd5b9250929050565b60006020828403121561347b578081fd5b8135610e4981613a98565b600060208284031215613497578081fd5b8151610e4981613a98565b600080604083850312156134b4578081fd5b82356134bf81613a98565b915060208301356134cf81613a98565b809150509250929050565b6000806000606084860312156134ee578081fd5b83356134f981613a98565b9250602084013561350981613a98565b929592945050506040919091013590565b6000806000806060858703121561352f578081fd5b843561353a81613a98565b9350602085013567ffffffffffffffff811115613555578182fd5b61356187828801613420565b9598909750949560400135949350505050565b60008060408385031215613586578182fd5b823561359181613a98565b946020939093013593505050565b600080602083850312156135b1578182fd5b823567ffffffffffffffff8111156135c7578283fd5b6135d385828601613420565b90969095509350505050565b6000806000604084860312156135f3578283fd5b833567ffffffffffffffff811115613609578384fd5b61361586828701613420565b909450925050602084013561362981613ab0565b809150509250925092565b600060208284031215613645578081fd5b8135610e4981613ab0565b600060208284031215613661578081fd5b8151610e4981613ab0565b6000806040838503121561367e578182fd5b823561359181613ab0565b600080604083850312156134b4578182fd5b6000602082840312156136ac578081fd5b5035919050565b6000602082840312156136c4578081fd5b5051919050565b600080604083850312156136dd578182fd5b8235915060208301356134cf81613ab0565b60008060408385031215613701578182fd5b50508035926020909101359150565b600080600060608486031215613724578081fd5b8351925060208401519150604084015190509250925092565b60008060008060808587031215613752578182fd5b5050823594602084013594506040840135936060013592509050565b600080600080600060a08688031215613785578283fd5b505083359560208501359550604085013594606081013594506080013592509050565b6000815180845260208085019450808401835b838110156137e05781516001600160a01b0316875295820195908201906001016137bb565b509495945050505050565b6000602080835283518082850152825b81811015613817578581018301518582016040015282016137fb565b818111156138285783604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b82815260406020820152600061388c60408301846137a8565b949350505050565b85815284602082015260a0604082015260006138b360a08301866137a8565b6001600160a01b0394909416606083015250608001529392505050565b600082198211156138e3576138e3613a82565b500190565b60008261390357634e487b7160e01b81526012600452602481fd5b500490565b600181815b8085111561394357816000190482111561392957613929613a82565b8085161561393657918102915b93841c939080029061390d565b509250929050565b6000610e4960ff84168360008261396457506001610ba2565b8161397157506000610ba2565b81600181146139875760028114613991576139ad565b6001915050610ba2565b60ff8411156139a2576139a2613a82565b50506001821b610ba2565b5060208310610133831016604e8410600b84101617156139d0575081810a610ba2565b6139da8383613908565b80600019048211156139ee576139ee613a82565b029392505050565b6000816000190483118215151615613a1057613a10613a82565b500290565b600082821015613a2757613a27613a82565b500390565b600181811c90821680613a4057607f821691505b60208210811415613a6157634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415613a7b57613a7b613a82565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0381168114613aad57600080fd5b50565b8015158114613aad57600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220a083fb27fc820ea8ebeb09e0bef1a89cdda8d5c6c9ed5c81df9e22f5921c6fb764736f6c63430008040033

Deployed Bytecode Sourcemap

14511:24249:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16981:56;;;;;;;;;;;;;;;;;;;17939:25:1;;;17927:2;17912:18;16981:56:0;;;;;;;;19385:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;36320:175::-;;;;;;;;;;-1:-1:-1;36320:175:0;;;;;:::i;:::-;;:::i;:::-;;20297:161;;;;;;;;;;-1:-1:-1;20297:161:0;;;;;:::i;:::-;;:::i;:::-;;;9602:14:1;;9595:22;9577:41;;9565:2;9550:18;20297:161:0;9532:92:1;35391:106:0;;;;;;;;;;-1:-1:-1;35391:106:0;;;;;:::i;:::-;-1:-1:-1;;;;;35471:18:0;35447:4;35471:18;;;:9;:18;;;;;;;;;35391:106;21418:87;;;;;;;;;;-1:-1:-1;21487:10:0;;21418:87;;17057:41;;;;;;;;;;-1:-1:-1;17057:41:0;;;;-1:-1:-1;;;;;17057:41:0;;;;;;-1:-1:-1;;;;;8193:32:1;;;8175:51;;8163:2;8148:18;17057:41:0;8130:102:1;19662:95:0;;;;;;;;;;-1:-1:-1;19742:7:0;;19662:95;;20466:313;;;;;;;;;;-1:-1:-1;20466:313:0;;;;;:::i;:::-;;:::i;36135:177::-;;;;;;;;;;-1:-1:-1;36135:177:0;;;;;:::i;:::-;;:::i;17208:34::-;;;;;;;;;;-1:-1:-1;17208:34:0;;;;-1:-1:-1;;;17208:34:0;;;;;;18389:337;;;;;;;;;;-1:-1:-1;18389:337:0;;;;;:::i;:::-;;:::i;22350:253::-;;;;;;;;;;-1:-1:-1;22350:253:0;;;;;:::i;:::-;;:::i;36503:113::-;;;;;;;;;;-1:-1:-1;36503:113:0;;;;;:::i;:::-;;:::i;19571:83::-;;;;;;;;;;-1:-1:-1;19637:9:0;;-1:-1:-1;;;19637:9:0;;;;19571:83;;19071:4:1;19059:17;;;19041:36;;19029:2;19014:18;19571:83:0;18996:87:1;22882:479:0;;;;;;;;;;-1:-1:-1;22882:479:0;;;;;:::i;:::-;;:::i;20787:218::-;;;;;;;;;;-1:-1:-1;20787:218:0;;;;;:::i;:::-;;:::i;21517:377::-;;;;;;;;;;-1:-1:-1;21517:377:0;;;;;:::i;:::-;;:::i;16290:36::-;;;;;;;;;;;;;;;;21906:436;;;;;;;;;;-1:-1:-1;21906:436:0;;;;;:::i;:::-;;:::i;17105:28::-;;;;;;;;;;-1:-1:-1;17105:28:0;;;;-1:-1:-1;;;;;17105:28:0;;;18740:102;;;;;;;;;;-1:-1:-1;18740:102:0;;;;;:::i;:::-;;:::i;22611:263::-;;;;;;;;;;-1:-1:-1;22611:263:0;;;;;:::i;:::-;;:::i;35509:267::-;;;;;;;;;;-1:-1:-1;35509:267:0;;;;;:::i;:::-;;:::i;16195:30::-;;;;;;;;;;;;;;;;38211:454;;;;;;;;;;-1:-1:-1;38211:454:0;;;;;:::i;:::-;;:::i;19765:198::-;;;;;;;;;;-1:-1:-1;19765:198:0;;;;;:::i;:::-;;:::i;6142:148::-;;;;;;;;;;;;;:::i;34715:198::-;;;;;;;;;;-1:-1:-1;34715:198:0;;;;;:::i;:::-;;:::i;35992:135::-;;;;;;;;;;-1:-1:-1;35992:135:0;;;;;:::i;:::-;;:::i;16486:38::-;;;;;;;;;;;;;;;;16077:56;;;;;;;;;;;;;;;;35788:188;;;;;;;;;;-1:-1:-1;35788:188:0;;;;;:::i;:::-;;:::i;16342:37::-;;;;;;;;;;;;;;;;21290:120;;;;;;;;;;-1:-1:-1;21290:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;21382:20:0;21358:4;21382:20;;;:11;:20;;;;;;;;;21290:120;5917:79;;;;;;;;;;-1:-1:-1;5955:7:0;5982:6;-1:-1:-1;;;;;5982:6:0;5917:79;;36624:178;;;;;;;;;;-1:-1:-1;36624:178:0;;;;;:::i;:::-;;:::i;19476:87::-;;;;;;;;;;;;;:::i;36810:496::-;;;;;;;;;;-1:-1:-1;36810:496:0;;;;;:::i;:::-;;:::i;37314:681::-;;;;;;;;;;-1:-1:-1;37314:681:0;;;;;:::i;:::-;;:::i;21013:269::-;;;;;;;;;;-1:-1:-1;21013:269:0;;;;;:::i;:::-;;:::i;19971:167::-;;;;;;;;;;-1:-1:-1;19971:167:0;;;;;:::i;:::-;;:::i;38004:94::-;;;;;;;;;;-1:-1:-1;38004:94:0;;;;;:::i;:::-;;:::i;15259:29::-;;;;;;;;;;;;;;;;16240:36;;;;;;;;;;;;;;;;16391:37;;;;;;;;;;;;;;;;16441:31;;;;;;;;;;;;;;;;35053:190;;;;;;;;;;-1:-1:-1;35053:190:0;;;;;:::i;:::-;;:::i;16147:36::-;;;;;;;;;;;;;;;;20146:143;;;;;;;;;;-1:-1:-1;20146:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;20254:18:0;;;20227:7;20254:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;20146:143;34931:110;;;;;;;;;;-1:-1:-1;34931:110:0;;;;;:::i;:::-;;:::i;18854:523::-;;;;;;;;;;-1:-1:-1;18854:523:0;;;;;:::i;:::-;;:::i;38106:97::-;;;;;;;;;;-1:-1:-1;38106:97:0;;;;;:::i;:::-;;:::i;34595:112::-;;;;;;;;;;-1:-1:-1;34595:112:0;;;;;:::i;:::-;;:::i;6298:244::-;;;;;;;;;;-1:-1:-1;6298:244:0;;;;;:::i;:::-;;:::i;15223:29::-;;;;;;;;;;;;;;;;17170:31;;;;;;;;;;-1:-1:-1;17170:31:0;;;;-1:-1:-1;;;17170:31:0;;;;;;19385:83;19422:13;19455:5;19448:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19385:83;:::o;36320:175::-;6051:6;;-1:-1:-1;;;;;6051:6:0;301:10;6051:22;6043:67;;;;-1:-1:-1;;;6043:67:0;;;;;;;:::i;:::-;;;;;;;;;36441:46:::1;36463:23;36441:17;36453:4;36441:7;;:11;;:17;;;;:::i;:::-;:21:::0;::::1;:46::i;:::-;36423:15;:64:::0;-1:-1:-1;36320:175:0:o;20297:161::-;20372:4;20389:39;301:10;20412:7;20421:6;20389:8;:39::i;:::-;-1:-1:-1;20446:4:0;20297:161;;;;;:::o;20466:313::-;20564:4;20581:36;20591:6;20599:9;20610:6;20581:9;:36::i;:::-;20628:121;20637:6;301:10;20659:89;20697:6;20659:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20659:19:0;;;;;;:11;:19;;;;;;;;301:10;20659:33;;;;;;;;;;:37;:89::i;:::-;20628:8;:121::i;:::-;-1:-1:-1;20767:4:0;20466:313;;;;;:::o;36135:177::-;6051:6;;-1:-1:-1;;;;;6051:6:0;301:10;6051:22;6043:67;;;;-1:-1:-1;;;6043:67:0;;;;;;;:::i;:::-;36236:30:::1;::::0;-1:-1:-1;;;36236:30:0;;36260:4:::1;36236:30;::::0;::::1;8175:51:1::0;36218:15:0::1;::::0;-1:-1:-1;;;;;36236:15:0;::::1;::::0;::::1;::::0;8148:18:1;;36236:30:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36277:27;::::0;-1:-1:-1;;;36277:27:0;;-1:-1:-1;;;;;8738:32:1;;;36277:27:0::1;::::0;::::1;8720:51:1::0;8787:18;;;8780:34;;;36218:48:0;;-1:-1:-1;36277:14:0;;::::1;::::0;::::1;::::0;8693:18:1;;36277:27:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;6121:1;36135:177:::0;;:::o;18389:337::-;6051:6;;-1:-1:-1;;;;;6051:6:0;301:10;6051:22;6043:67;;;;-1:-1:-1;;;6043:67:0;;;;;;;:::i;:::-;18476:11:::1;:21:::0;;-1:-1:-1;;;;18476:21:0::1;-1:-1:-1::0;;;18476:21:0;::::1;;;;::::0;;18508:32:::1;18534:4;18508:17;:32::i;:::-;18569:13;::::0;18551:32:::1;::::0;-1:-1:-1;;;;;18569:13:0::1;18551:17;:32::i;:::-;18597:11;::::0;-1:-1:-1;;;18597:11:0;::::1;;;:30:::0;::::1;;;-1:-1:-1::0;18612:10:0::1;::::0;:15;18597:30:::1;18594:125;;;18656:12;18643:10;:25:::0;18683:10:::1;:24:::0;;;18594:125:::1;18389:337:::0;;:::o;22350:253::-;22416:7;22455;;22444;:18;;22436:73;;;;-1:-1:-1;;;22436:73:0;;11078:2:1;22436:73:0;;;11060:21:1;11117:2;11097:18;;;11090:30;11156:34;11136:18;;;11129:62;-1:-1:-1;;;11207:18:1;;;11200:40;11257:19;;22436:73:0;11050:232:1;22436:73:0;22520:19;22543:10;:8;:10::i;:::-;22520:33;-1:-1:-1;22571:24:0;:7;22520:33;22571:11;:24::i;:::-;22564:31;22350:253;-1:-1:-1;;;22350:253:0:o;36503:113::-;6051:6;;-1:-1:-1;;;;;6051:6:0;301:10;6051:22;6043:67;;;;-1:-1:-1;;;6043:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36576:25:0::1;;::::0;;;:18:::1;:25;::::0;;;;:32;;-1:-1:-1;;36576:32:0::1;36604:4;36576:32;::::0;;36503:113::o;22882:479::-;6051:6;;-1:-1:-1;;;;;6051:6:0;301:10;6051:22;6043:67;;;;-1:-1:-1;;;6043:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22964:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;22956:60;;;::::0;-1:-1:-1;;;22956:60:0;;12655:2:1;22956:60:0::1;::::0;::::1;12637:21:1::0;12694:2;12674:18;;;12667:30;12733:29;12713:18;;;12706:57;12780:18;;22956:60:0::1;12627:177:1::0;22956:60:0::1;23032:9;23027:327;23051:9;:16:::0;23047:20;::::1;23027:327;;;23109:7;-1:-1:-1::0;;;;;23093:23:0::1;:9;23103:1;23093:12;;;;;;-1:-1:-1::0;;;23093:12:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;23093:12:0::1;:23;23089:254;;;23152:9;23162:16:::0;;:20:::1;::::0;23181:1:::1;::::0;23162:20:::1;:::i;:::-;23152:31;;;;;;-1:-1:-1::0;;;23152:31:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;23137:9:::1;:12:::0;;-1:-1:-1;;;;;23152:31:0;;::::1;::::0;23147:1;;23137:12;::::1;;;-1:-1:-1::0;;;23137:12:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;23137:46:0::1;-1:-1:-1::0;;;;;23137:46:0;;::::1;;::::0;;23202:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;23241:11:::1;:20:::0;;;;:28;;-1:-1:-1;;23241:28:0::1;::::0;;23288:9:::1;:15:::0;;;::::1;;-1:-1:-1::0;;;23288:15:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;23288:15:0;;;;;-1:-1:-1;;;;;;23288:15:0::1;::::0;;;;;18389:337;;:::o;23089:254::-:1;23069:3:::0;::::1;::::0;::::1;:::i;:::-;;;;23027:327;;20787:218:::0;301:10;20875:4;20924:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;20924:34:0;;;;;;;;;;20875:4;;20892:83;;20915:7;;20924:50;;20963:10;20924:38;:50::i;21517:377::-;301:10;21569:14;21618:19;;;:11;:19;;;;;;;;21617:20;21609:77;;;;-1:-1:-1;;;21609:77:0;;17582:2:1;21609:77:0;;;17564:21:1;17621:2;17601:18;;;17594:30;17660:34;17640:18;;;17633:62;-1:-1:-1;;;17711:18:1;;;17704:42;17763:19;;21609:77:0;17554:234:1;21609:77:0;21698:15;21722:19;21733:7;21722:10;:19::i;:::-;-1:-1:-1;;;;;;;;;21770:15:0;;;;;;:7;:15;;;;;;21697:44;;-1:-1:-1;21770:28:0;;:15;-1:-1:-1;21697:44:0;21770:19;:28::i;:::-;-1:-1:-1;;;;;21752:15:0;;;;;;:7;:15;;;;;:46;21819:7;;:20;;21831:7;21819:11;:20::i;:::-;21809:7;:30;21863:10;;:23;;21878:7;21863:14;:23::i;:::-;21850:10;:36;-1:-1:-1;;;21517:377:0:o;21906:436::-;21996:7;22035;;22024;:18;;22016:62;;;;-1:-1:-1;;;22016:62:0;;14071:2:1;22016:62:0;;;14053:21:1;14110:2;14090:18;;;14083:30;14149:33;14129:18;;;14122:61;14200:18;;22016:62:0;14043:181:1;22016:62:0;22094:17;22089:246;;22129:15;22153:19;22164:7;22153:10;:19::i;:::-;-1:-1:-1;22128:44:0;;-1:-1:-1;22187:14:0;;-1:-1:-1;;;;;22187:14:0;22089:246;22236:23;22267:19;22278:7;22267:10;:19::i;:::-;-1:-1:-1;22234:52:0;;-1:-1:-1;22301:22:0;;-1:-1:-1;;;;;22301:22:0;18740:102;6051:6;;-1:-1:-1;;;;;6051:6:0;301:10;6051:22;6043:67;;;;-1:-1:-1;;;6043:67:0;;;;;;;:::i;:::-;18812:14:::1;:22:::0;;;::::1;;-1:-1:-1::0;;;18812:22:0::1;-1:-1:-1::0;;;;18812:22:0;;::::1;::::0;;;::::1;::::0;;18740:102::o;22611:263::-;6051:6;;-1:-1:-1;;;;;6051:6:0;301:10;6051:22;6043:67;;;;-1:-1:-1;;;6043:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22690:16:0;::::1;22709:1;22690:16:::0;;;:7:::1;:16;::::0;;;;;:20;22687:108:::1;;-1:-1:-1::0;;;;;22766:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;22746:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;22727:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;22687:108:::1;-1:-1:-1::0;;;;;22805:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;22805:27:0::1;22828:4;22805:27:::0;;::::1;::::0;;;22843:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;22843:23:0::1;::::0;;::::1;::::0;;22611:263::o;35509:267::-;6051:6;;-1:-1:-1;;;;;6051:6:0;301:10;6051:22;6043:67;;;;-1:-1:-1;;;6043:67:0;;;;;;;:::i;:::-;35609:9:::1;35604:165;35620:20:::0;;::::1;35604:165;;;35666:10;:24;35677:9;;35687:1;35677:12;;;;;-1:-1:-1::0;;;35677:12:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;35666:24:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;35666:24:0;;::::1;;35662:96;;35736:6;35710:9;:23;35720:9;;35730:1;35720:12;;;;;-1:-1:-1::0;;;35720:12:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;35710:23:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;35710:23:0;:32;;-1:-1:-1;;35710:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;35662:96:::1;35642:3;::::0;::::1;:::i;:::-;;;35604:165;;38211:454:::0;6051:6;;-1:-1:-1;;;;;6051:6:0;301:10;6051:22;6043:67;;;;-1:-1:-1;;;6043:67:0;;;;;;;:::i;:::-;38348:17:::1;:33:::0;;;38392:17:::1;:33:::0;;;38436:11:::1;:21:::0;;;38468:18:::1;:34:::0;;;38607:12:::1;::::0;38624:3:::1;::::0;38521:99:::1;::::0;:81:::1;38488:14:::0;38521:81;38450:7;38521:81;38368:13;38412;38521:21:::1;:40::i;:::-;:44:::0;::::1;:57::i;:99::-;:106;;38513:144;;;::::0;-1:-1:-1;;;38513:144:0;;13011:2:1;38513:144:0::1;::::0;::::1;12993:21:1::0;13050:2;13030:18;;;13023:30;-1:-1:-1;;;13069:18:1;;;13062:55;13134:18;;38513:144:0::1;12983:175:1::0;19765:198:0;-1:-1:-1;;;;;19855:20:0;;19831:7;19855:20;;;:11;:20;;;;;;;;19851:49;;;-1:-1:-1;;;;;;19884:16:0;;;;;:7;:16;;;;;;;19765:198::o;19851:49::-;-1:-1:-1;;;;;19938:16:0;;;;;;:7;:16;;;;;;19918:37;;:19;:37::i;6142:148::-;6051:6;;-1:-1:-1;;;;;6051:6:0;301:10;6051:22;6043:67;;;;-1:-1:-1;;;6043:67:0;;;;;;;:::i;:::-;6249:1:::1;6233:6:::0;;6212:40:::1;::::0;-1:-1:-1;;;;;6233:6:0;;::::1;::::0;6212:40:::1;::::0;6249:1;;6212:40:::1;6280:1;6263:19:::0;;-1:-1:-1;;;;;;6263:19:0::1;::::0;;6142:148::o;34715:198::-;6051:6;;-1:-1:-1;;;;;6051:6:0;301:10;6051:22;6043:67;;;;-1:-1:-1;;;6043:67:0;;;;;;;:::i;:::-;34802:9:::1;34797:109;34813:20:::0;;::::1;34797:109;;;34890:4;34855:18;:32;34874:9;;34884:1;34874:12;;;;;-1:-1:-1::0;;;34874:12:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;34855:32:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;34855:32:0;:39;;-1:-1:-1;;34855:39:0::1;::::0;::::1;;::::0;;;::::1;::::0;;34835:3:::1;::::0;::::1;:::i;:::-;;;34797:109;;;;34715:198:::0;;:::o;35992:135::-;6051:6;;-1:-1:-1;;;;;6051:6:0;301:10;6051:22;6043:67;;;;-1:-1:-1;;;6043:67:0;;;;;;;:::i;:::-;36077:42:::1;::::0;-1:-1:-1;;;;;36077:19:0;::::1;::::0;36097:21:::1;36077:42:::0;::::1;;;::::0;::::1;::::0;;;36097:21;36077:19;:42;::::1;;;;;;;;;;;;;::::0;::::1;;;;35788:188:::0;6051:6;;-1:-1:-1;;;;;6051:6:0;301:10;6051:22;6043:67;;;;-1:-1:-1;;;6043:67:0;;;;;;;:::i;:::-;35875:9:::1;35870:99;35886:20:::0;;::::1;35870:99;;;35953:4;35928:10;:24;35939:9;;35949:1;35939:12;;;;;-1:-1:-1::0;;;35939:12:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;35928:24:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;35928:24:0;:29;;-1:-1:-1;;35928:29:0::1;::::0;::::1;;::::0;;;::::1;::::0;;35908:3:::1;::::0;::::1;:::i;:::-;;;35870:99;;36624:178:::0;6051:6;;-1:-1:-1;;;;;6051:6:0;301:10;6051:22;6043:67;;;;-1:-1:-1;;;6043:67:0;;;;;;;:::i;:::-;36778:16:::1;36758;36748:7;;:26;;;;:::i;:::-;36747:47;;;;:::i;:::-;36731:13;:63:::0;-1:-1:-1;;36624:178:0:o;19476:87::-;19515:13;19548:7;19541:14;;;;;:::i;36810:496::-;6051:6;;-1:-1:-1;;;;;6051:6:0;301:10;6051:22;6043:67;;;;-1:-1:-1;;;6043:67:0;;;;;;;:::i;:::-;36946:4:::1;36927:23:::0;::::1;36919:81;;;::::0;-1:-1:-1;;;36919:81:0;;14780:2:1;36919:81:0::1;::::0;::::1;14762:21:1::0;14819:2;14799:18;;;14792:30;14858:34;14838:18;;;14831:62;-1:-1:-1;;;14909:18:1;;;14902:44;14963:19;;36919:81:0::1;14752:236:1::0;36919:81:0::1;37063:9;::::0;37036:12:::1;::::0;37075:9;;37059:13:::1;::::0;-1:-1:-1;;;37063:9:0;::::1;;;37059:2;:13;:::i;:::-;37051:21;::::0;:6;:21:::1;:::i;:::-;:40;;;;:::i;:::-;37036:55;;37131:4;37112:15;37122:4;37112:9;:15::i;:::-;:23;;37104:63;;;::::0;-1:-1:-1;;;37104:63:0;;13715:2:1;37104:63:0::1;::::0;::::1;13697:21:1::0;13754:2;13734:18;;;13727:30;13793:29;13773:18;;;13766:57;13840:18;;37104:63:0::1;13687:177:1::0;37104:63:0::1;37184:6;37180:119;37194:20:::0;;::::1;37180:119;;;37235:52;37245:4;37250:9;;37260:1;37250:12;;;;;-1:-1:-1::0;;;37250:12:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37276:9;::::0;37272:13:::1;::::0;-1:-1:-1;;;37276:9:0;::::1;;;37272:2;:13;:::i;:::-;37264:21;::::0;:6;:21:::1;:::i;:::-;37235:9;:52::i;:::-;37216:3:::0;::::1;::::0;::::1;:::i;:::-;;;;37180:119;;;;6121:1;36810:496:::0;;;;:::o;37314:681::-;6051:6;;-1:-1:-1;;;;;6051:6:0;301:10;6051:22;6043:67;;;;-1:-1:-1;;;6043:67:0;;;;;;;:::i;:::-;37482:16:::1;:32:::0;;;37525:16:::1;:32:::0;;;37568:10:::1;:20:::0;;;37599:17:::1;:33:::0;;;37645:13:::1;:29:::0;;;37685:12:::1;:28:::0;;;37724:6:::1;:16:::0;;;37751:12:::1;:28:::0;;;37790:12:::1;:28:::0;;;37840:60:::1;37805:13:::0;37840:42:::1;37581:7:::0;37840:42;37501:13;37544;37840:16:::1;:30::i;:60::-;37829:8;:71:::0;;;37932:17:::1;::::0;37954:3:::1;::::0;37919:31:::1;::::0;:12:::1;:31::i;:::-;:38;;37911:76;;;::::0;-1:-1:-1;;;37911:76:0;;13011:2:1;37911:76:0::1;::::0;::::1;12993:21:1::0;13050:2;13030:18;;;13023:30;-1:-1:-1;;;13069:18:1;;;13062:55;13134:18;;37911:76:0::1;12983:175:1::0;37911:76:0::1;37314:681:::0;;;;;:::o;21013:269::-;21106:4;21123:129;301:10;21146:7;21155:96;21194:15;21155:96;;;;;;;;;;;;;;;;;301:10;21155:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;21155:34:0;;;;;;;;;;;;:38;:96::i;19971:167::-;20049:4;20066:42;301:10;20090:9;20101:6;20066:9;:42::i;38004:94::-;6051:6;;-1:-1:-1;;;;;6051:6:0;301:10;6051:22;6043:67;;;;-1:-1:-1;;;6043:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38064:19:0::1;;::::0;;;:14:::1;:19;::::0;;;;:26;;-1:-1:-1;;38064:26:0::1;38086:4;38064:26;::::0;;38004:94::o;35053:190::-;6051:6;;-1:-1:-1;;;;;6051:6:0;301:10;6051:22;6043:67;;;;-1:-1:-1;;;6043:67:0;;;;;;;:::i;:::-;35150:15:::1;:43:::0;;-1:-1:-1;;;;;35150:43:0;;::::1;-1:-1:-1::0;;;;;;35150:43:0;;::::1;;::::0;;;35204:9:::1;:31:::0;;;;;::::1;::::0;::::1;;::::0;;35053:190::o;34931:110::-;6051:6;;-1:-1:-1;;;;;6051:6:0;301:10;6051:22;6043:67;;;;-1:-1:-1;;;6043:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34998:27:0::1;35028:5;34998:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;34998:35:0::1;::::0;;34931:110::o;18854:523::-;6051:6;;-1:-1:-1;;;;;6051:6:0;301:10;6051:22;6043:67;;;;-1:-1:-1;;;6043:67:0;;;;;;;:::i;:::-;18927:29:::1;18978:9;18927:61;;18999:16;19036:10;-1:-1:-1::0;;;;;19036:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19018:47:0::1;;19074:4;19081:10;-1:-1:-1::0;;;;;19081:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19018:81;::::0;-1:-1:-1;;;;;;19018:81:0::1;::::0;;;;;;-1:-1:-1;;;;;8467:15:1;;;19018:81:0::1;::::0;::::1;8449:34:1::0;8519:15;;8499:18;;;8492:43;8384:18;;19018:81:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18999:100:::0;-1:-1:-1;;;;;;19114:22:0;::::1;19110:221;;19187:10;-1:-1:-1::0;;;;;19187:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19169:50:0::1;;19228:4;19235:10;-1:-1:-1::0;;;;;19235:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19169:84;::::0;-1:-1:-1;;;;;;19169:84:0::1;::::0;;;;;;-1:-1:-1;;;;;8467:15:1;;;19169:84:0::1;::::0;::::1;8449:34:1::0;8519:15;;8499:18;;;8492:43;8384:18;;19169:84:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19153:13;:100:::0;;-1:-1:-1;;;;;;19153:100:0::1;-1:-1:-1::0;;;;;19153:100:0;;;::::1;::::0;;;::::1;::::0;;19110:221:::1;;;19295:13;:24:::0;;-1:-1:-1;;;;;;19295:24:0::1;-1:-1:-1::0;;;;;19295:24:0;::::1;;::::0;;19110:221:::1;-1:-1:-1::0;19341:15:0::1;:28:::0;;-1:-1:-1;;;;;;19341:28:0::1;-1:-1:-1::0;;;;;19341:28:0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;18854:523:0:o;38106:97::-;6051:6;;-1:-1:-1;;;;;6051:6:0;301:10;6051:22;6043:67;;;;-1:-1:-1;;;6043:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38168:19:0::1;38190:5;38168:19:::0;;;:14:::1;:19;::::0;;;;:27;;-1:-1:-1;;38168:27:0::1;::::0;;38106:97::o;34595:112::-;6051:6;;-1:-1:-1;;;;;6051:6:0;301:10;6051:22;6043:67;;;;-1:-1:-1;;;6043:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34665:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;34665:34:0::1;34695:4;34665:34;::::0;;34595:112::o;6298:244::-;6051:6;;-1:-1:-1;;;;;6051:6:0;301:10;6051:22;6043:67;;;;-1:-1:-1;;;6043:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6387:22:0;::::1;6379:73;;;::::0;-1:-1:-1;;;6379:73:0;;11489:2:1;6379:73:0::1;::::0;::::1;11471:21:1::0;11528:2;11508:18;;;11501:30;11567:34;11547:18;;;11540:62;-1:-1:-1;;;11618:18:1;;;11611:36;11664:19;;6379:73:0::1;11461:228:1::0;6379:73:0::1;6489:6;::::0;;6468:38:::1;::::0;-1:-1:-1;;;;;6468:38:0;;::::1;::::0;6489:6;::::1;::::0;6468:38:::1;::::0;::::1;6517:6;:17:::0;;-1:-1:-1;;;;;;6517:17:0::1;-1:-1:-1::0;;;;;6517:17:0;;;::::1;::::0;;;::::1;::::0;;6298:244::o;2076:132::-;2134:7;2161:39;2165:1;2168;2161:39;;;;;;;;;;;;;;;;;:3;:39::i;1816:250::-;1874:7;1898:6;1894:47;;-1:-1:-1;1928:1:0;1921:8;;1894:47;1953:9;1965:5;1969:1;1965;:5;:::i;:::-;1953:17;-1:-1:-1;1998:1:0;1989:5;1993:1;1953:17;1989:5;:::i;:::-;:10;1981:56;;;;-1:-1:-1;;;1981:56:0;;15195:2:1;1981:56:0;;;15177:21:1;15234:2;15214:18;;;15207:30;15273:34;15253:18;;;15246:62;-1:-1:-1;;;15324:18:1;;;15317:31;15365:19;;1981:56:0;15167:223:1;1283:181:0;1341:7;;1373:5;1377:1;1373;:5;:::i;:::-;1361:17;;1402:1;1397;:6;;1389:46;;;;-1:-1:-1;;;1389:46:0;;12299:2:1;1389:46:0;;;12281:21:1;12338:2;12318:18;;;12311:30;12377:29;12357:18;;;12350:57;12424:18;;1389:46:0;12271:177:1;23369:337:0;-1:-1:-1;;;;;23462:19:0;;23454:68;;;;-1:-1:-1;;;23454:68:0;;17177:2:1;23454:68:0;;;17159:21:1;17216:2;17196:18;;;17189:30;17255:34;17235:18;;;17228:62;-1:-1:-1;;;17306:18:1;;;17299:34;17350:19;;23454:68:0;17149:226:1;23454:68:0;-1:-1:-1;;;;;23541:21:0;;23533:68;;;;-1:-1:-1;;;23533:68:0;;11896:2:1;23533:68:0;;;11878:21:1;11935:2;11915:18;;;11908:30;11974:34;11954:18;;;11947:62;-1:-1:-1;;;12025:18:1;;;12018:32;12067:19;;23533:68:0;11868:224:1;23533:68:0;-1:-1:-1;;;;;23614:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;23666:32;;17939:25:1;;;23666:32:0;;17912:18:1;23666:32:0;;;;;;;23369:337;;;:::o;23714:2059::-;-1:-1:-1;;;;;23836:18:0;;23828:68;;;;-1:-1:-1;;;23828:68:0;;16368:2:1;23828:68:0;;;16350:21:1;16407:2;16387:18;;;16380:30;16446:34;16426:18;;;16419:62;-1:-1:-1;;;16497:18:1;;;16490:35;16542:19;;23828:68:0;16340:227:1;23828:68:0;-1:-1:-1;;;;;23915:16:0;;23907:64;;;;-1:-1:-1;;;23907:64:0;;10674:2:1;23907:64:0;;;10656:21:1;10713:2;10693:18;;;10686:30;10752:34;10732:18;;;10725:62;-1:-1:-1;;;10803:18:1;;;10796:33;10846:19;;23907:64:0;10646:225:1;23907:64:0;23999:1;23990:6;:10;23982:64;;;;-1:-1:-1;;;23982:64:0;;15958:2:1;23982:64:0;;;15940:21:1;15997:2;15977:18;;;15970:30;16036:34;16016:18;;;16009:62;-1:-1:-1;;;16087:18:1;;;16080:39;16136:19;;23982:64:0;15930:231:1;23982:64:0;-1:-1:-1;;;;;24066:13:0;;;;;;:9;:13;;;;;;;;24065:14;24057:48;;;;-1:-1:-1;;;24057:48:0;;13365:2:1;24057:48:0;;;13347:21:1;13404:2;13384:18;;;13377:30;-1:-1:-1;;;13423:18:1;;;13416:51;13484:18;;24057:48:0;13337:171:1;24057:48:0;-1:-1:-1;;;;;24125:15:0;;;;;;:9;:15;;;;;;;;24124:16;24116:50;;;;-1:-1:-1;;;24116:50:0;;13365:2:1;24116:50:0;;;13347:21:1;13404:2;13384:18;;;13377:30;-1:-1:-1;;;13423:18:1;;;13416:51;13484:18;;24116:50:0;13337:171:1;24116:50:0;-1:-1:-1;;;;;24191:20:0;;;;;;:14;:20;;;;;;;;24187:95;;24235:11;;-1:-1:-1;;;24235:11:0;;;;24227:43;;;;-1:-1:-1;;;24227:43:0;;14431:2:1;24227:43:0;;;14413:21:1;14470:2;14450:18;;;14443:30;-1:-1:-1;;;14489:18:1;;;14482:50;14549:18;;24227:43:0;14403:170:1;24227:43:0;24372:13;;24295:12;;-1:-1:-1;;;;;24366:19:0;;;24372:13;;24366:19;;:40;;-1:-1:-1;24393:13:0;;-1:-1:-1;;;;;24389:17:0;;;24393:13;;24389:17;24366:40;24365:99;;;;-1:-1:-1;;;;;;24413:24:0;;;;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;24441:22:0;;;;;;:18;:22;;;;;;;;24413:50;24411:53;24365:99;24360:148;;;-1:-1:-1;24492:4:0;24360:148;24534:1;24523:10;;:12;:66;;;;-1:-1:-1;;;;;;24541:22:0;;;;;;:18;:22;;;;;;;;24540:23;:48;;;;-1:-1:-1;;;;;;24568:20:0;;;;;;:14;:20;;;;;;;;24567:21;24540:48;24520:207;;;24640:15;;24625:13;24635:2;24625:9;:13::i;:::-;24617:21;;:6;:21;:::i;:::-;:38;;24609:106;;;;-1:-1:-1;;;24609:106:0;;16774:2:1;24609:106:0;;;16756:21:1;16813:2;16793:18;;;16786:30;16852:34;16832:18;;;16825:62;-1:-1:-1;;;16903:18:1;;;16896:32;16945:19;;24609:106:0;16746:224:1;24609:106:0;24755:8;;24739:15;:24;24788:17;;24774:13;:31;24821:11;;-1:-1:-1;;;24821:11:0;;;;:34;;;;-1:-1:-1;24842:13:0;;-1:-1:-1;;;;;24836:19:0;;;24842:13;;24836:19;24821:34;24818:194;;;24896:57;24941:11;;24896:40;24918:17;;24896;;:21;;:40;;;;:::i;:57::-;24879:15;:74;24982:18;;24968:13;:32;24818:194;25082:1;25071:10;;:12;:56;;;;;25115:12;25101:10;;25088;;:23;;;;:::i;:::-;25087:40;25071:56;25068:109;;;-1:-1:-1;;;;;25147:13:0;;;;;;:9;:13;;;;;:18;;-1:-1:-1;;25147:18:0;25161:4;25147:18;;;25068:109;25192:14;;-1:-1:-1;;;25192:14:0;;;;25189:150;;;25226:11;;-1:-1:-1;;;25226:11:0;;;;:36;;;;-1:-1:-1;25249:13:0;;-1:-1:-1;;;;;25241:21:0;;;25249:13;;25241:21;25226:36;25223:105;;;25310:1;25294:15;:17;25223:105;25372:6;;-1:-1:-1;;;25372:6:0;;;;25371:7;:22;;;;-1:-1:-1;25382:11:0;;-1:-1:-1;;;25382:11:0;;;;25371:22;:45;;;;-1:-1:-1;25403:13:0;;-1:-1:-1;;;;;25397:19:0;;;25403:13;;25397:19;25371:45;25367:350;;;25441:28;25472:24;25490:4;25472:9;:24::i;:::-;25441:55;;25550:13;;25528:20;:35;25525:169;;-1:-1:-1;25610:13:0;;25646:32;25610:13;25646:10;:32::i;:::-;25367:350;;25727:38;25742:4;25747:2;25750:6;25757:7;25727:14;:38::i;1616:192::-;1702:7;1738:12;1730:6;;;;1722:29;;;;-1:-1:-1;;;1722:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1762:9:0;1774:5;1778:1;1774;:5;:::i;:::-;1762:17;1616:192;-1:-1:-1;;;;;1616:192:0:o;33132:163::-;33173:7;33194:15;33211;33230:19;:17;:19::i;:::-;33193:56;;-1:-1:-1;33193:56:0;-1:-1:-1;33267:20:0;33193:56;;33267:11;:20::i;:::-;33260:27;;;;33132:163;:::o;31930:419::-;31989:7;31998;32007;32016;32025;32034;32055:23;32080:12;32094:18;32116:20;32128:7;32116:11;:20::i;:::-;32054:82;;;;;;32148:15;32165:23;32190:12;32206:50;32218:7;32227:4;32233:10;32245;:8;:10::i;:::-;32206:11;:50::i;:::-;32147:109;;;;-1:-1:-1;32147:109:0;;-1:-1:-1;32307:15:0;;-1:-1:-1;32324:4:0;;-1:-1:-1;32330:10:0;;-1:-1:-1;31930:419:0;;-1:-1:-1;;;;;31930:419:0:o;1472:136::-;1530:7;1557:43;1561:1;1564;1557:43;;;;;;;;;;;;;;;;;:3;:43::i;2216:278::-;2302:7;2337:12;2330:5;2322:28;;;;-1:-1:-1;;;2322:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2361:9:0;2373:5;2377:1;2373;:5;:::i;25781:1372::-;17475:6;:13;;-1:-1:-1;;;;17475:13:0;-1:-1:-1;;;17475:13:0;;;25979:8:::1;::::0;25947:12:::1;::::0;17475:13;;25908:101:::1;::::0;26007:1:::1;::::0;25908:80:::1;::::0;;;:20;;:38:::1;:52::i;:::-;:70:::0;::::1;:80::i;:101::-;25882:127:::0;-1:-1:-1;26022:20:0::1;26045:41;:20:::0;25882:127;26045:24:::1;:41::i;:::-;26022:64;;26107:30;26124:12;26107:16;:30::i;:::-;26239:12;::::0;26170:21:::1;::::0;26150:17:::1;::::0;26226:33:::1;::::0;26239:19:::1;::::0;26256:1:::1;26239:16;:19::i;:::-;26226:8;::::0;;:12:::1;:33::i;:::-;26204:55;;26272:26;26301:93;26392:1;26301:72;26361:11;26301:41;26329:12;;26301:9;:27;;:41;;;;:::i;:93::-;26272:122;;26415:20;26438:38;26464:11;26438:21;26452:6;;26438:9;:13;;:21;;;;:::i;:38::-;26415:61;;26487:26;26516:68;26562:11;26516:27;26530:12;;26516:9;:13;;:27;;;;:::i;:68::-;26487:97;;26596:26;26625:68;26671:11;26625:27;26639:12;;26625:9;:13;;:27;;;;:::i;:68::-;26596:97:::0;-1:-1:-1;26784:21:0::1;26819:22:::0;;26816:216:::1;;26890:15;::::0;26858:48:::1;::::0;26871:18;;-1:-1:-1;;;;;26890:15:0::1;26858:12;:48::i;:::-;26953:15;::::0;26921:48:::1;::::0;26934:18;;-1:-1:-1;;;;;26953:15:0::1;26921:12;:48::i;:::-;27010:9;::::0;26984:36:::1;::::0;26997:12;;-1:-1:-1;;;;;27010:9:0::1;26984:12;:36::i;:::-;27046:19:::0;;27042:104:::1;;27086:48;27099:15;27115:18;27086:12;:48::i;:::-;-1:-1:-1::0;;17511:6:0;:14;;-1:-1:-1;;;;17511:14:0;;;-1:-1:-1;;;;;;;;25781:1372:0:o;28496:943::-;28636:13;;28686:15;;28716:7;28712:88;;28755:1;28739:13;:17;;;28771:15;:17;28712:88;-1:-1:-1;;;;;28824:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;28848:22:0;;;;;;:11;:22;;;;;;;;28847:23;28824:46;28820:467;;;28887:48;28909:6;28917:9;28928:6;28887:21;:48::i;:::-;28820:467;;;-1:-1:-1;;;;;28958:19:0;;;;;;:11;:19;;;;;;;;28957:20;:46;;;;-1:-1:-1;;;;;;28981:22:0;;;;;;:11;:22;;;;;;;;28957:46;28953:334;;;29020:46;29040:6;29048:9;29059:6;29020:19;:46::i;28953:334::-;-1:-1:-1;;;;;29088:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;29111:22:0;;;;;;:11;:22;;;;;;;;29088:45;29084:203;;;29150:48;29172:6;29180:9;29191:6;29150:21;:48::i;29084:203::-;29231:44;29249:6;29257:9;29268:6;29231:17;:44::i;:::-;29311:7;29307:125;;29334:13;:38;;;;29387:15;:33;-1:-1:-1;;;;28496:943:0:o;33303:561::-;33400:7;;33436;;33353;;;;;33460:289;33484:9;:16;33480:20;;33460:289;;;33550:7;33526;:21;33534:9;33544:1;33534:12;;;;;;-1:-1:-1;;;33534:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33534:12:0;33526:21;;;;;;;;;;;;;:31;;:66;;;33585:7;33561;:21;33569:9;33579:1;33569:12;;;;;;-1:-1:-1;;;33569:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33569:12:0;33561:21;;;;;;;;;;;;;:31;33526:66;33522:97;;;33602:7;;33611;;33594:25;;;;;;;33303:561;;:::o;33522:97::-;33644:34;33656:7;:21;33664:9;33674:1;33664:12;;;;;;-1:-1:-1;;;33664:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33664:12:0;33656:21;;;;;;;;;;;;;33644:7;;:11;:34::i;:::-;33634:44;;33703:34;33715:7;:21;33723:9;33733:1;33723:12;;;;;;-1:-1:-1;;;33723:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33723:12:0;33715:21;;;;;;;;;;;;;33703:7;;:11;:34::i;:::-;33693:44;-1:-1:-1;33502:3:0;;;;:::i;:::-;;;;33460:289;;;-1:-1:-1;33785:7:0;;33773;;:20;;:11;:20::i;:::-;33763:7;:30;33759:61;;;33803:7;;33812;;33795:25;;;;;;33303:561;;:::o;33759:61::-;33839:7;;33848;;-1:-1:-1;33303:561:0;-1:-1:-1;33303:561:0:o;32357:330::-;32417:7;32426;32435;32455:12;32470:24;32486:7;32470:15;:24::i;:::-;32455:39;;32505:18;32526:30;32548:7;32526:21;:30::i;:::-;32505:51;-1:-1:-1;32567:23:0;32593:33;32505:51;32593:17;:7;32605:4;32593:11;:17::i;:::-;:21;;:33::i;:::-;32567:59;32662:4;;-1:-1:-1;32668:10:0;;-1:-1:-1;32357:330:0;;-1:-1:-1;;;32357:330:0:o;32695:429::-;32810:7;;;;32866:24;:7;32878:11;32866;:24::i;:::-;32848:42;-1:-1:-1;32901:12:0;32916:21;:4;32925:11;32916:8;:21::i;:::-;32901:36;-1:-1:-1;32948:18:0;32969:27;:10;32984:11;32969:14;:27::i;:::-;32948:48;-1:-1:-1;33007:23:0;33033:33;32948:48;33033:17;:7;33045:4;33033:11;:17::i;:33::-;33085:7;;;;-1:-1:-1;33111:4:0;;-1:-1:-1;32695:429:0;;-1:-1:-1;;;;;;;32695:429:0:o;27295:666::-;27445:16;;;27459:1;27445:16;;;;;;;;27421:21;;27445:16;;;;;;;;;;-1:-1:-1;27445:16:0;27421:40;;27490:4;27472;27477:1;27472:7;;;;;;-1:-1:-1;;;27472:7:0;;;;;;;;;-1:-1:-1;;;;;27472:23:0;;;:7;;;;;;;;;;:23;;;;27516:15;;:22;;;-1:-1:-1;;;27516:22:0;;;;:15;;;;;:20;;:22;;;;;27472:7;;27516:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27506:4;27511:1;27506:7;;;;;;-1:-1:-1;;;27506:7:0;;;;;;;;;-1:-1:-1;;;;;27506:32:0;;;:7;;;;;;;;;:32;27583:15;;27551:62;;27568:4;;27583:15;27601:11;27551:8;:62::i;:::-;27652:15;;:240;;-1:-1:-1;;;27652:240:0;;-1:-1:-1;;;;;27652:15:0;;;;:66;;:240;;27733:11;;27652:15;;27803:4;;27830;;27866:15;;27652:240;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27918:35;27935:11;27948:4;27918:35;;;;;;;:::i;:::-;;;;;;;;27295:666;;:::o;27165:111::-;27245:23;;-1:-1:-1;;;;;27245:15:0;;;:23;;;;;27261:6;;27245:23;;;;27261:6;27245:15;:23;;;;;;;;;;;;;;;;;;;27975:513;28155:15;;28123:62;;28140:4;;-1:-1:-1;;;;;28155:15:0;28173:11;28123:8;:62::i;:::-;28228:15;;-1:-1:-1;;;;;28228:15:0;:31;28267:9;28300:4;28320:11;28228:15;;28432:7;5955;5982:6;-1:-1:-1;;;;;5982:6:0;;5917:79;28432:7;28228:252;;;;;;-1:-1:-1;;;;;;28228:252:0;;;-1:-1:-1;;;;;9184:15:1;;;28228:252:0;;;9166:34:1;9216:18;;;9209:34;;;;9259:18;;;9252:34;;;;9302:18;;;9295:34;9366:15;;;9345:19;;;9338:44;28454:15:0;9398:19:1;;;9391:35;9100:19;;28228:252:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;30551:566::-;30654:15;30671:23;30696:12;30710:23;30735:12;30749:18;30771:19;30782:7;30771:10;:19::i;:::-;-1:-1:-1;;;;;30819:15:0;;;;;;:7;:15;;;;;;30653:137;;-1:-1:-1;30653:137:0;;-1:-1:-1;30653:137:0;;-1:-1:-1;30653:137:0;-1:-1:-1;30653:137:0;-1:-1:-1;30653:137:0;-1:-1:-1;30819:28:0;;30839:7;30819:19;:28::i;:::-;-1:-1:-1;;;;;30801:15:0;;;;;;:7;:15;;;;;;;;:46;;;;30876:7;:15;;;;:28;;30896:7;30876:19;:28::i;:::-;-1:-1:-1;;;;;30858:15:0;;;;;;;:7;:15;;;;;;:46;;;;30936:18;;;;;;;:39;;30959:15;30936:22;:39::i;:::-;-1:-1:-1;;;;;30915:18:0;;;;;;:7;:18;;;;;:60;30989:26;31004:10;30989:14;:26::i;:::-;31026:23;31038:4;31044;31026:11;:23::i;:::-;31082:9;-1:-1:-1;;;;;31065:44:0;31074:6;-1:-1:-1;;;;;31065:44:0;;31093:15;31065:44;;;;17939:25:1;;17927:2;17912:18;;17894:76;31065:44:0;;;;;;;;30551:566;;;;;;;;;:::o;29957:586::-;30058:15;30075:23;30100:12;30114:23;30139:12;30153:18;30175:19;30186:7;30175:10;:19::i;:::-;-1:-1:-1;;;;;30223:15:0;;;;;;:7;:15;;;;;;30057:137;;-1:-1:-1;30057:137:0;;-1:-1:-1;30057:137:0;;-1:-1:-1;30057:137:0;-1:-1:-1;30057:137:0;-1:-1:-1;30057:137:0;-1:-1:-1;30223:28:0;;30057:137;30223:19;:28::i;:::-;-1:-1:-1;;;;;30205:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;30283:18;;;;;:7;:18;;;;;:39;;30306:15;30283:22;:39::i;:::-;-1:-1:-1;;;;;30262:18:0;;;;;;:7;:18;;;;;;;;:60;;;;30354:7;:18;;;;:39;;30377:15;30354:22;:39::i;31125:642::-;31228:15;31245:23;31270:12;31284:23;31309:12;31323:18;31345:19;31356:7;31345:10;:19::i;:::-;-1:-1:-1;;;;;31393:15:0;;;;;;:7;:15;;;;;;31227:137;;-1:-1:-1;31227:137:0;;-1:-1:-1;31227:137:0;;-1:-1:-1;31227:137:0;-1:-1:-1;31227:137:0;-1:-1:-1;31227:137:0;-1:-1:-1;31393:28:0;;31413:7;31393:19;:28::i;:::-;-1:-1:-1;;;;;31375:15:0;;;;;;:7;:15;;;;;;;;:46;;;;31450:7;:15;;;;:28;;31470:7;31450:19;:28::i;29447:502::-;29546:15;29563:23;29588:12;29602:23;29627:12;29641:18;29663:19;29674:7;29663:10;:19::i;:::-;-1:-1:-1;;;;;29711:15:0;;;;;;:7;:15;;;;;;29545:137;;-1:-1:-1;29545:137:0;;-1:-1:-1;29545:137:0;;-1:-1:-1;29545:137:0;-1:-1:-1;29545:137:0;-1:-1:-1;29545:137:0;-1:-1:-1;29711:28:0;;29545:137;29711:19;:28::i;34243:160::-;34307:7;34334:61;34379:5;34334:26;34346:13;;34334:7;:11;;:26;;;;:::i;34415:168::-;34485:7;34512:63;34559:5;34512:28;34524:15;;34512:7;:11;;:28;;;;:::i;33876:355::-;33939:19;33962:10;:8;:10::i;:::-;33939:33;-1:-1:-1;33983:18:0;34004:27;:10;33939:33;34004:14;:27::i;:::-;34083:4;34067:22;;;;:7;:22;;;;;;33983:48;;-1:-1:-1;34067:38:0;;33983:48;34067:26;:38::i;:::-;34058:4;34042:22;;;;:7;:22;;;;;;;;:63;;;;34119:11;:26;;;;;;34116:107;;;34201:4;34185:22;;;;:7;:22;;;;;;:38;;34212:10;34185:26;:38::i;:::-;34176:4;34160:22;;;;:7;:22;;;;;:63;33876:355;;;:::o;31775:147::-;31853:7;;:17;;31865:4;31853:11;:17::i;:::-;31843:7;:27;31894:10;;:20;;31909:4;31894:14;:20::i;:::-;31881:10;:33;-1:-1:-1;;31775:147:0:o;14:395:1:-;77:8;87:6;141:3;134:4;126:6;122:17;118:27;108:2;;166:8;156;149:26;108:2;-1:-1:-1;196:20:1;;239:18;228:30;;225:2;;;278:8;268;261:26;225:2;322:4;314:6;310:17;298:29;;382:3;375:4;365:6;362:1;358:14;350:6;346:27;342:38;339:47;336:2;;;399:1;396;389:12;336:2;98:311;;;;;:::o;414:257::-;473:6;526:2;514:9;505:7;501:23;497:32;494:2;;;547:6;539;532:22;494:2;591:9;578:23;610:31;635:5;610:31;:::i;676:261::-;746:6;799:2;787:9;778:7;774:23;770:32;767:2;;;820:6;812;805:22;767:2;857:9;851:16;876:31;901:5;876:31;:::i;1212:398::-;1280:6;1288;1341:2;1329:9;1320:7;1316:23;1312:32;1309:2;;;1362:6;1354;1347:22;1309:2;1406:9;1393:23;1425:31;1450:5;1425:31;:::i;:::-;1475:5;-1:-1:-1;1532:2:1;1517:18;;1504:32;1545:33;1504:32;1545:33;:::i;:::-;1597:7;1587:17;;;1299:311;;;;;:::o;1615:466::-;1692:6;1700;1708;1761:2;1749:9;1740:7;1736:23;1732:32;1729:2;;;1782:6;1774;1767:22;1729:2;1826:9;1813:23;1845:31;1870:5;1845:31;:::i;:::-;1895:5;-1:-1:-1;1952:2:1;1937:18;;1924:32;1965:33;1924:32;1965:33;:::i;:::-;1719:362;;2017:7;;-1:-1:-1;;;2071:2:1;2056:18;;;;2043:32;;1719:362::o;2086:660::-;2190:6;2198;2206;2214;2267:2;2255:9;2246:7;2242:23;2238:32;2235:2;;;2288:6;2280;2273:22;2235:2;2332:9;2319:23;2351:31;2376:5;2351:31;:::i;:::-;2401:5;-1:-1:-1;2457:2:1;2442:18;;2429:32;2484:18;2473:30;;2470:2;;;2521:6;2513;2506:22;2470:2;2565:70;2627:7;2618:6;2607:9;2603:22;2565:70;:::i;:::-;2225:521;;2654:8;;-1:-1:-1;2539:96:1;;2736:2;2721:18;2708:32;;2225:521;-1:-1:-1;;;;2225:521:1:o;2751:325::-;2819:6;2827;2880:2;2868:9;2859:7;2855:23;2851:32;2848:2;;;2901:6;2893;2886:22;2848:2;2945:9;2932:23;2964:31;2989:5;2964:31;:::i;:::-;3014:5;3066:2;3051:18;;;;3038:32;;-1:-1:-1;;;2838:238:1:o;3081:457::-;3167:6;3175;3228:2;3216:9;3207:7;3203:23;3199:32;3196:2;;;3249:6;3241;3234:22;3196:2;3294:9;3281:23;3327:18;3319:6;3316:30;3313:2;;;3364:6;3356;3349:22;3313:2;3408:70;3470:7;3461:6;3450:9;3446:22;3408:70;:::i;:::-;3497:8;;3382:96;;-1:-1:-1;3186:352:1;-1:-1:-1;;;;3186:352:1:o;3543:586::-;3635:6;3643;3651;3704:2;3692:9;3683:7;3679:23;3675:32;3672:2;;;3725:6;3717;3710:22;3672:2;3770:9;3757:23;3803:18;3795:6;3792:30;3789:2;;;3840:6;3832;3825:22;3789:2;3884:70;3946:7;3937:6;3926:9;3922:22;3884:70;:::i;:::-;3973:8;;-1:-1:-1;3858:96:1;-1:-1:-1;;4058:2:1;4043:18;;4030:32;4071:28;4030:32;4071:28;:::i;:::-;4118:5;4108:15;;;3662:467;;;;;:::o;4134:251::-;4190:6;4243:2;4231:9;4222:7;4218:23;4214:32;4211:2;;;4264:6;4256;4249:22;4211:2;4308:9;4295:23;4327:28;4349:5;4327:28;:::i;4390:255::-;4457:6;4510:2;4498:9;4489:7;4485:23;4481:32;4478:2;;;4531:6;4523;4516:22;4478:2;4568:9;4562:16;4587:28;4609:5;4587:28;:::i;4650:319::-;4715:6;4723;4776:2;4764:9;4755:7;4751:23;4747:32;4744:2;;;4797:6;4789;4782:22;4744:2;4841:9;4828:23;4860:28;4882:5;4860:28;:::i;4974:411::-;5055:6;5063;5116:2;5104:9;5095:7;5091:23;5087:32;5084:2;;;5137:6;5129;5122:22;5390:190;5449:6;5502:2;5490:9;5481:7;5477:23;5473:32;5470:2;;;5523:6;5515;5508:22;5470:2;-1:-1:-1;5551:23:1;;5460:120;-1:-1:-1;5460:120:1:o;5585:194::-;5655:6;5708:2;5696:9;5687:7;5683:23;5679:32;5676:2;;;5729:6;5721;5714:22;5676:2;-1:-1:-1;5757:16:1;;5666:113;-1:-1:-1;5666:113:1:o;5784:319::-;5849:6;5857;5910:2;5898:9;5889:7;5885:23;5881:32;5878:2;;;5931:6;5923;5916:22;5878:2;5972:9;5959:23;5949:33;;6032:2;6021:9;6017:18;6004:32;6045:28;6067:5;6045:28;:::i;6108:258::-;6176:6;6184;6237:2;6225:9;6216:7;6212:23;6208:32;6205:2;;;6258:6;6250;6243:22;6205:2;-1:-1:-1;;6286:23:1;;;6356:2;6341:18;;;6328:32;;-1:-1:-1;6195:171:1:o;6371:316::-;6459:6;6467;6475;6528:2;6516:9;6507:7;6503:23;6499:32;6496:2;;;6549:6;6541;6534:22;6496:2;6583:9;6577:16;6567:26;;6633:2;6622:9;6618:18;6612:25;6602:35;;6677:2;6666:9;6662:18;6656:25;6646:35;;6486:201;;;;;:::o;6692:395::-;6778:6;6786;6794;6802;6855:3;6843:9;6834:7;6830:23;6826:33;6823:2;;;6877:6;6869;6862:22;6823:2;-1:-1:-1;;6905:23:1;;;6975:2;6960:18;;6947:32;;-1:-1:-1;7026:2:1;7011:18;;6998:32;;7077:2;7062:18;7049:32;;-1:-1:-1;6813:274:1;-1:-1:-1;6813:274:1:o;7092:464::-;7187:6;7195;7203;7211;7219;7272:3;7260:9;7251:7;7247:23;7243:33;7240:2;;;7294:6;7286;7279:22;7240:2;-1:-1:-1;;7322:23:1;;;7392:2;7377:18;;7364:32;;-1:-1:-1;7443:2:1;7428:18;;7415:32;;7494:2;7479:18;;7466:32;;-1:-1:-1;7545:3:1;7530:19;7517:33;;-1:-1:-1;7230:326:1;-1:-1:-1;7230:326:1:o;7561:463::-;7614:3;7652:5;7646:12;7679:6;7674:3;7667:19;7705:4;7734:2;7729:3;7725:12;7718:19;;7771:2;7764:5;7760:14;7792:3;7804:195;7818:6;7815:1;7812:13;7804:195;;;7883:13;;-1:-1:-1;;;;;7879:39:1;7867:52;;7939:12;;;;7974:15;;;;7915:1;7833:9;7804:195;;;-1:-1:-1;8015:3:1;;7622:402;-1:-1:-1;;;;;7622:402:1:o;9864:603::-;9976:4;10005:2;10034;10023:9;10016:21;10066:6;10060:13;10109:6;10104:2;10093:9;10089:18;10082:34;10134:4;10147:140;10161:6;10158:1;10155:13;10147:140;;;10256:14;;;10252:23;;10246:30;10222:17;;;10241:2;10218:26;10211:66;10176:10;;10147:140;;;10305:6;10302:1;10299:13;10296:2;;;10375:4;10370:2;10361:6;10350:9;10346:22;10342:31;10335:45;10296:2;-1:-1:-1;10451:2:1;10430:15;-1:-1:-1;;10426:29:1;10411:45;;;;10458:2;10407:54;;9985:482;-1:-1:-1;;;9985:482:1:o;15395:356::-;15597:2;15579:21;;;15616:18;;;15609:30;15675:34;15670:2;15655:18;;15648:62;15742:2;15727:18;;15569:182::o;17975:332::-;18182:6;18171:9;18164:25;18225:2;18220;18209:9;18205:18;18198:30;18145:4;18245:56;18297:2;18286:9;18282:18;18274:6;18245:56;:::i;:::-;18237:64;18154:153;-1:-1:-1;;;;18154:153:1:o;18312:582::-;18611:6;18600:9;18593:25;18654:6;18649:2;18638:9;18634:18;18627:34;18697:3;18692:2;18681:9;18677:18;18670:31;18574:4;18718:57;18770:3;18759:9;18755:19;18747:6;18718:57;:::i;:::-;-1:-1:-1;;;;;18811:32:1;;;;18806:2;18791:18;;18784:60;-1:-1:-1;18875:3:1;18860:19;18853:35;18710:65;18583:311;-1:-1:-1;;;18583:311:1:o;19088:128::-;19128:3;19159:1;19155:6;19152:1;19149:13;19146:2;;;19165:18;;:::i;:::-;-1:-1:-1;19201:9:1;;19136:80::o;19221:217::-;19261:1;19287;19277:2;;-1:-1:-1;;;19312:31:1;;19366:4;19363:1;19356:15;19394:4;19319:1;19384:15;19277:2;-1:-1:-1;19423:9:1;;19267:171::o;19443:422::-;19532:1;19575:5;19532:1;19589:270;19610:7;19600:8;19597:21;19589:270;;;19669:4;19665:1;19661:6;19657:17;19651:4;19648:27;19645:2;;;19678:18;;:::i;:::-;19728:7;19718:8;19714:22;19711:2;;;19748:16;;;;19711:2;19827:22;;;;19787:15;;;;19589:270;;;19593:3;19507:358;;;;;:::o;19870:140::-;19928:5;19957:47;19998:4;19988:8;19984:19;19978:4;20064:5;20094:8;20084:2;;-1:-1:-1;20135:1:1;20149:5;;20084:2;20183:4;20173:2;;-1:-1:-1;20220:1:1;20234:5;;20173:2;20265:4;20283:1;20278:59;;;;20351:1;20346:130;;;;20258:218;;20278:59;20308:1;20299:10;;20322:5;;;20346:130;20383:3;20373:8;20370:17;20367:2;;;20390:18;;:::i;:::-;-1:-1:-1;;20446:1:1;20432:16;;20461:5;;20258:218;;20560:2;20550:8;20547:16;20541:3;20535:4;20532:13;20528:36;20522:2;20512:8;20509:16;20504:2;20498:4;20495:12;20491:35;20488:77;20485:2;;;-1:-1:-1;20597:19:1;;;20629:5;;20485:2;20676:34;20701:8;20695:4;20676:34;:::i;:::-;20746:6;20742:1;20738:6;20734:19;20725:7;20722:32;20719:2;;;20757:18;;:::i;:::-;20795:20;;20074:747;-1:-1:-1;;;20074:747:1:o;20826:168::-;20866:7;20932:1;20928;20924:6;20920:14;20917:1;20914:21;20909:1;20902:9;20895:17;20891:45;20888:2;;;20939:18;;:::i;:::-;-1:-1:-1;20979:9:1;;20878:116::o;20999:125::-;21039:4;21067:1;21064;21061:8;21058:2;;;21072:18;;:::i;:::-;-1:-1:-1;21109:9:1;;21048:76::o;21129:380::-;21208:1;21204:12;;;;21251;;;21272:2;;21326:4;21318:6;21314:17;21304:27;;21272:2;21379;21371:6;21368:14;21348:18;21345:38;21342:2;;;21425:10;21420:3;21416:20;21413:1;21406:31;21460:4;21457:1;21450:15;21488:4;21485:1;21478:15;21342:2;;21184:325;;;:::o;21514:135::-;21553:3;-1:-1:-1;;21574:17:1;;21571:2;;;21594:18;;:::i;:::-;-1:-1:-1;21641:1:1;21630:13;;21561:88::o;21654:127::-;21715:10;21710:3;21706:20;21703:1;21696:31;21746:4;21743:1;21736:15;21770:4;21767:1;21760:15;21786:131;-1:-1:-1;;;;;21861:31:1;;21851:42;;21841:2;;21907:1;21904;21897:12;21841:2;21831:86;:::o;21922:118::-;22008:5;22001:13;21994:21;21987:5;21984:32;21974:2;;22030:1;22027;22020:12

Swarm Source

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