ETH Price: $3,000.43 (+5.24%)
Gas: 2 Gwei

Token

SHAMU (MU)
 

Overview

Max Total Supply

100,000,000,000,000 MU

Holders

140

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
408,556,243.965547074 MU

Value
$0.00
0x641EFb3622d0F09CdAA08b066dde6612829EcA77
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:
MU

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 9999 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// TELEGRAM : t.me/ShamuETH

// SPDX-License-Identifier: MIT

pragma solidity 0.8.7;

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
    function _msgData() internal view virtual returns (bytes calldata) {
        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 Address {

    function isContract(address account) internal view returns (bool) {

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

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

        (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");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

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

    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

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

    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

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

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

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

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

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

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

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

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

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

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

abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        _setOwner(_msgSender());
    }

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

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

    function renounceOwnership() public virtual onlyOwner {
        _setOwner(address(0));
    }

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

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

contract MU is Context, IERC20, Ownable {

    using Address for address payable;

    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private _isExcluded;
    mapping (address => bool) private _isExcludedFromMaxWallet;

    mapping (address => bool) public isBot;

    address[] private _excluded;

    uint8 private constant _decimals = 9;
    uint256 private constant MAX = ~uint256(0);

    uint256 private _tTotal = 100_000_000_000_000 * 10**_decimals;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));

    uint256 public maxTxAmountBuy = _tTotal/200; 
    uint256 public maxTxAmountSell = maxTxAmountBuy;
    uint256 public maxWalletAmount = _tTotal/100; 
    
    //antisnipers
    uint256 public liqAddedBlockNumber;
    uint256 private blocksToWait = 2;

    address payable marketingAddress;
    address payable charityAddress;
    
    uint256 private marketingRatio = 700; 
    uint256 private charityRatio = 300;
    uint256 constant private totalRatio = 1000;


    mapping (address => bool) public isAutomatedMarketMakerPair;

    string private constant _name = "SHAMU";
    string private constant _symbol = "MU";

    bool private inSwapAndLiquify;

    IUniswapV2Router02 public UniswapV2Router;
    address public uniswapPair;
    bool public swapAndLiquifyEnabled = true;
    uint256 public numTokensSellToAddToLiquidity = _tTotal * 5 / 10_000;

    struct feeRatesStruct {
      uint8 rfi;
      uint8 ProjectFunds;
      uint8 autolp;
      uint8 toSwap;
    }

    feeRatesStruct public buyRates = feeRatesStruct(
     {
      rfi: 2,    
      ProjectFunds: 10, 
      autolp: 2, 
      toSwap: 12 
    });

    feeRatesStruct public sellRates = feeRatesStruct(
    {
      rfi: 2,   
      ProjectFunds: 10,
      autolp: 2, 
      toSwap: 12 
    });

    feeRatesStruct private appliedRates = buyRates;

    struct TotFeesPaidStruct{
        uint256 rfi;
        uint256 toSwap;
    }
    TotFeesPaidStruct public totFeesPaid;

    struct valuesFromGetValues{
      uint256 rAmount;
      uint256 rTransferAmount;
      uint256 rRfi;
      uint256 rToSwap;
      uint256 tTransferAmount;
      uint256 tRfi;
      uint256 tToSwap;
    }

    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(uint256 tokensSwapped, uint256 ETHReceived, uint256 tokensIntotoSwap);
    event LiquidityAdded(uint256 tokenAmount, uint256 ETHAmount);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event BlacklistedUser(address botAddress, bool indexed value);
    event MaxWalletAmountUpdated(uint256 amount);
    event ExcludeFromMaxWallet(address account, bool indexed isExcluded);

    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    constructor () {
        
        IUniswapV2Router02 _UniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapPair = IUniswapV2Factory(_UniswapV2Router.factory())
                            .createPair(address(this), _UniswapV2Router.WETH());
        isAutomatedMarketMakerPair[uniswapPair] = true;
        emit SetAutomatedMarketMakerPair(uniswapPair, true);
        UniswapV2Router = _UniswapV2Router;

        _rOwned[owner()] = _rTotal;

        marketingAddress= payable(0xBEB6bF14610a5f2758d7230D381C40F14A66Ac03);
        charityAddress= payable(0xd6bEd4557Fb6D982D9159e41AFEF26db41361fA9);

        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[marketingAddress]=true;
        _isExcludedFromFee[address(this)]=true;
        
        _isExcludedFromMaxWallet[owner()] = true;
        _isExcludedFromMaxWallet[address(this)]=true;
        _isExcludedFromMaxWallet[uniswapPair] = true;
        _isExcludedFromMaxWallet[0x000000000000000000000000000000000000dEaD] = true;

        

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

    //std ERC20:
    function name() public pure returns (string memory) {
        return _name;
    }
    function symbol() public pure returns (string memory) {
        return _symbol;
    }
    function decimals() public pure returns (uint8) {
        return _decimals;
    }

    //override ERC20:
    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);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

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

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


    function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        uint256 currentRate =  _getRate();
        return rAmount/currentRate;
    }

    //@dev kept original RFI naming -> "reward" as in reflection
    function excludeFromReward(address account) external onlyOwner() {
        require(!_isExcluded[account], "Account is already excluded");
        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 not 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 excludeFromFee(address account) external onlyOwner {
        _isExcludedFromFee[account] = true;
    }
    
    function excludeMultipleAccountsFromMaxWallet(address[] calldata accounts, bool excluded) public onlyOwner {
        for(uint256 i = 0; i < accounts.length; i++) {
            require(_isExcludedFromMaxWallet[accounts[i]] != excluded, "_isExcludedFromMaxWallet already set to that value for one wallet");
            _isExcludedFromMaxWallet[accounts[i]] = excluded;
            emit ExcludeFromMaxWallet(accounts[i], excluded);
        }
    }

    function includeInFee(address account) external onlyOwner {
        _isExcludedFromFee[account] = false;
    }

    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }
    function isExcludedFromMaxWallet(address account) public view returns(bool) {
        return _isExcludedFromMaxWallet[account];
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
      swapAndLiquifyEnabled = _enabled;
      emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

    //  @dev receive ETH from UniswapV2Router when swapping
    receive() external payable {}

    function _reflectRfi(uint256 rRfi, uint256 tRfi) private {
        _rTotal -= rRfi;
        totFeesPaid.rfi += tRfi;
    }

    function _takeToSwap(uint256 rToSwap,uint256 tToSwap) private {
        _rOwned[address(this)] +=rToSwap;
        if(_isExcluded[address(this)])
            _tOwned[address(this)] += tToSwap;
        totFeesPaid.toSwap+=tToSwap;
        
    }

    function _getValues(uint256 tAmount, bool takeFee) private view returns (valuesFromGetValues memory to_return) {
        to_return = _getTValues(tAmount, takeFee);
        (to_return.rAmount, to_return.rTransferAmount, to_return.rRfi, to_return.rToSwap) = _getRValues(to_return, tAmount, takeFee, _getRate());
        return to_return;
    }

    function _getTValues(uint256 tAmount, bool takeFee) private view returns (valuesFromGetValues memory s) {

        if(!takeFee) {
          s.tTransferAmount = tAmount;
          return s;
        }
        s.tRfi = tAmount*appliedRates.rfi/100;
        s.tToSwap = tAmount*appliedRates.toSwap/100;
        s.tTransferAmount = tAmount-s.tRfi-s.tToSwap;
        return s;
    }

    function _getRValues(valuesFromGetValues memory s, uint256 tAmount, bool takeFee, uint256 currentRate) private pure returns (uint256 rAmount, uint256 rTransferAmount, uint256 rRfi, uint256 rToSwap) {
        rAmount = tAmount*currentRate;

        if(!takeFee) {
          return(rAmount, rAmount,0,0);
        }

        rRfi = s.tRfi*currentRate;
        rToSwap = s.tToSwap*currentRate;
        rTransferAmount =  rAmount-rRfi-rToSwap;
        return (rAmount, rTransferAmount, rRfi,rToSwap);
    }

    function _getRate() private view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply/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 -=_rOwned[_excluded[i]];
            tSupply -=_tOwned[_excluded[i]];
        }
        if (rSupply < _rTotal/_tTotal) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }


    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 {
        if(liqAddedBlockNumber==0 && isAutomatedMarketMakerPair[to] )
        {liqAddedBlockNumber = block.number;
        }

        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(!isBot[from], "ERC20: address blacklisted (bot)");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(amount <= balanceOf(from),"You are trying to transfer more than your balance");
        bool takeFee = !(_isExcludedFromFee[from] || _isExcludedFromFee[to]);

        if(takeFee)
        {

            if(from != owner() && isAutomatedMarketMakerPair[from])
            {
                if(block.number<liqAddedBlockNumber+blocksToWait)
                {
                isBot[to] = true;
                emit BlacklistedUser(to,true);
                }

                appliedRates = buyRates;
                require(amount<=maxTxAmountBuy, "amount must be <= maxTxAmountBuy");
            }
            else
            {
                appliedRates = sellRates;
                require(amount<=maxTxAmountSell, "amount must be <= maxTxAmountSell");
            }
        }

        if (balanceOf(address(this)) >= numTokensSellToAddToLiquidity  && !inSwapAndLiquify && !isAutomatedMarketMakerPair[from] && swapAndLiquifyEnabled) {
            //add liquidity
            swapAndLiquify(numTokensSellToAddToLiquidity);
        }

        _tokenTransfer(from, to, amount, takeFee);
    }

    //this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(address sender, address recipient, uint256 tAmount, bool takeFee) private {
        
        valuesFromGetValues memory s = _getValues(tAmount, takeFee);

        if (_isExcluded[sender]) {
                _tOwned[sender] -= tAmount;
        } 
        if (_isExcluded[recipient]) {
                _tOwned[recipient] += s.tTransferAmount;
        }

        _rOwned[sender] -= s.rAmount;
        _rOwned[recipient] += s.rTransferAmount;
        if(takeFee)
        {
        _reflectRfi(s.rRfi, s.tRfi);
        _takeToSwap(s.rToSwap,s.tToSwap);
        emit Transfer(sender, address(this), s.tToSwap);
        }
        require(_isExcludedFromMaxWallet[recipient] || balanceOf(recipient)<= maxWalletAmount, "Recipient cannot hold more than maxWalletAmount");
        emit Transfer(sender, recipient, s.tTransferAmount);
    }

    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {

        uint256 denominator = appliedRates.toSwap*2;
        uint256 tokensToAddLiquidityWith = contractTokenBalance*appliedRates.autolp/denominator;
        uint256 toSwap = contractTokenBalance-tokensToAddLiquidityWith;

        uint256 initialBalance = address(this).balance;

        // swap tokens for ETH
        swapTokensForETH(toSwap);

        uint256 deltaBalance = address(this).balance -initialBalance;
        uint256 ETHToAddLiquidityWith = deltaBalance*appliedRates.autolp/ (denominator- appliedRates.autolp);
        
        // add liquidity to  Uniswap
        addLiquidity(tokensToAddLiquidityWith, ETHToAddLiquidityWith);

        // send ETH to taxReceivers
        marketingAddress.transfer((address(this).balance * marketingRatio) / totalRatio);
        charityAddress.transfer(address(this).balance);

    }

    function swapTokensForETH(uint256 tokenAmount) private {

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = UniswapV2Router.WETH();

        if(allowance(address(this), address(UniswapV2Router)) < tokenAmount) {
          _approve(address(this), address(UniswapV2Router), ~uint256(0));
        }

        UniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, 
            path,
            address(this),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ETHAmount) private {
        UniswapV2Router.addLiquidityETH{value: ETHAmount}(
            address(this),
            tokenAmount,
            0, 
            0, 
            owner(),
            block.timestamp
        );
    }

    function setAutomatedMarketMakerPair(address _pair, bool value) external onlyOwner{
        require(isAutomatedMarketMakerPair[_pair] != value, "Automated market maker pair is already set to that value");
        isAutomatedMarketMakerPair[_pair] = value;
        if(value)
        {
        _isExcludedFromMaxWallet[_pair] = true;

        }
    }

    function setBuyFees(uint8 _rfi,uint8 _ProjectFunds, uint8 _autolp) external onlyOwner
    {
     buyRates.rfi=_rfi;
     buyRates.ProjectFunds=_ProjectFunds;
     buyRates.autolp=_autolp;
     buyRates.toSwap= _ProjectFunds+_autolp;
    }

    function setSellFees(uint8 _rfi,uint8 _ProjectFunds, uint8 _autolp) external onlyOwner
    {
     sellRates.rfi=_rfi;
     sellRates.ProjectFunds=_ProjectFunds;
     sellRates.autolp=_autolp;
     sellRates.toSwap= _ProjectFunds+_autolp;
    }

    function setMaxTransactionAmountsPerK(uint256 _maxBuy, uint256 _maxSell) external onlyOwner
    {
     maxTxAmountBuy = _maxBuy * 10**_decimals;
     maxTxAmountSell = _maxSell * 10**_decimals;
    }
    
    function setNumTokensSellToAddToLiq(uint256 amountTokens) external onlyOwner
    {
     numTokensSellToAddToLiquidity = amountTokens*10**_decimals;
    }

    function setMarketingAddress(address payable _marketingAddress, address payable _charityAddress) external onlyOwner
    {
        marketingAddress = _marketingAddress;
        charityAddress = _charityAddress;
    }

    function setFundRatios(uint256 _marketingRatio, uint256 _charityRatio) external onlyOwner
    {
        require((_marketingRatio + _charityRatio) ==1000);
        marketingRatio = _marketingRatio;
        charityRatio = _charityRatio;
    }

    function manualSwap() external onlyOwner
    {
        swapAndLiquify(balanceOf(address(this)));
    }
    
    function unblacklistSniper(address botAddress) external onlyOwner
    {   require(!isBot[botAddress] ,"address provided is already not blacklisted");
        isBot[botAddress] = false;
    }

    function setMaxWalletAmount(uint256 _maxHoldings) external onlyOwner {
        maxWalletAmount = _maxHoldings * 10 ** _decimals;
    }

    function excludeFromMaxWallet(address account, bool excluded) external onlyOwner {
        require(_isExcludedFromMaxWallet[account] != excluded, "_isExcludedFromMaxWallet already set to that value");
        _isExcludedFromMaxWallet[account] = excluded;
    }

}

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":false,"internalType":"address","name":"botAddress","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"BlacklistedUser","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromMaxWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ETHAmount","type":"uint256"}],"name":"LiquidityAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"MaxWalletAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ETHReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntotoSwap","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"UniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyRates","outputs":[{"internalType":"uint8","name":"rfi","type":"uint8"},{"internalType":"uint8","name":"ProjectFunds","type":"uint8"},{"internalType":"uint8","name":"autolp","type":"uint8"},{"internalType":"uint8","name":"toSwap","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeMultipleAccountsFromMaxWallet","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":"","type":"address"}],"name":"isAutomatedMarketMakerPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liqAddedBlockNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxTxAmountBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmountSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"numTokensSellToAddToLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"deductTransferRfi","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellRates","outputs":[{"internalType":"uint8","name":"rfi","type":"uint8"},{"internalType":"uint8","name":"ProjectFunds","type":"uint8"},{"internalType":"uint8","name":"autolp","type":"uint8"},{"internalType":"uint8","name":"toSwap","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_rfi","type":"uint8"},{"internalType":"uint8","name":"_ProjectFunds","type":"uint8"},{"internalType":"uint8","name":"_autolp","type":"uint8"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingRatio","type":"uint256"},{"internalType":"uint256","name":"_charityRatio","type":"uint256"}],"name":"setFundRatios","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_marketingAddress","type":"address"},{"internalType":"address payable","name":"_charityAddress","type":"address"}],"name":"setMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxBuy","type":"uint256"},{"internalType":"uint256","name":"_maxSell","type":"uint256"}],"name":"setMaxTransactionAmountsPerK","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxHoldings","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountTokens","type":"uint256"}],"name":"setNumTokensSellToAddToLiq","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_rfi","type":"uint8"},{"internalType":"uint8","name":"_ProjectFunds","type":"uint8"},{"internalType":"uint8","name":"_autolp","type":"uint8"}],"name":"setSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totFeesPaid","outputs":[{"internalType":"uint256","name":"rfi","type":"uint256"},{"internalType":"uint256","name":"toSwap","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"botAddress","type":"address"}],"name":"unblacklistSniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052620000126009600a62000688565b6200002490655af3107a400062000749565b6009819055620000379060001962000785565b62000045906000196200076b565b600a5560c860095462000059919062000628565b600b55600b54600c55606460095462000073919062000628565b600d556002600f556102bc60125561012c6013556016805460ff60a01b1916600160a01b17905560095461271090620000ae90600562000749565b620000ba919062000628565b60175560408051608080820183526002808352600a6020808501829052848601839052600c60609586018190526018805463ffffffff19908116630c020a029081179283905589519788018a52868852938701949094529685018490529390940192909252601980549092169092179055601a805461ffff191661010080850460ff9081169091029190911790921763ffff0000191663ff00000019620100008086048516021617630100000093849004929092169092021790553480156200018257600080fd5b506200018e33620005a6565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620001e157600080fd5b505afa158015620001f6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200021c9190620005f6565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200026557600080fd5b505afa1580156200027a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a09190620005f6565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015620002e957600080fd5b505af1158015620002fe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003249190620005f6565b601680546001600160a01b0319166001600160a01b039283169081178255600090815260146020526040808220805460ff1916600190811790915592549051929316917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab9190a360158054610100600160a81b0319166101006001600160a01b03841602179055600a5460016000620003c56000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600090812091909155601080546001600160a01b031990811673beb6bf14610a5f2758d7230d381c40f14a66ac03179091556011805490911673d6bed4557fb6d982d9159e41afef26db41361fa9179055600190600490620004456000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790556010549091168152600490925280822080548416600190811790915530835290822080549093168117909255600690620004b56000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905530815260069093528183208054851660019081179091556016549091168352908220805484168217905561dead9091527f1aecba4ebe7a4e0673e4891b2b092b2228e4322380b579fb494fad3da8586e2280549092161790556200054f6000546001600160a01b031690565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6009546040516200059791815260200190565b60405180910390a350620007c8565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156200060957600080fd5b81516001600160a01b03811681146200062157600080fd5b9392505050565b6000826200063a576200063a620007b2565b500490565b600181815b80851115620006805781600019048211156200066457620006646200079c565b808516156200067257918102915b93841c939080029062000644565b509250929050565b60006200062160ff841683600082620006a45750600162000743565b81620006b35750600062000743565b8160018114620006cc5760028114620006d757620006f7565b600191505062000743565b60ff841115620006eb57620006eb6200079c565b50506001821b62000743565b5060208310610133831016604e8410600b84101617156200071c575081810a62000743565b6200072883836200063f565b80600019048211156200073f576200073f6200079c565b0290505b92915050565b60008160001904831182151516156200076657620007666200079c565b500290565b6000828210156200078057620007806200079c565b500390565b600082620007975762000797620007b2565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b61380f80620007d86000396000f3fe6080604052600436106103225760003560e01c8063713898cd116101a5578063a9059cbb116100ec578063d2fcc00111610095578063dd62ed3e1161006f578063dd62ed3e146109ee578063e22b62de14610a34578063ea2f0b3714610a54578063f2fde38b14610a7457600080fd5b8063d2fcc001146109a2578063d44e586e146109c2578063d6c180bf146109d857600080fd5b8063c49b9a80116100c6578063c49b9a801461094c578063c816841b1461096c578063d12a76881461098c57600080fd5b8063a9059cbb146108f6578063aa4bde2814610916578063bd94545b1461092c57600080fd5b80638a0eef5a1161014e5780639a7a23d6116101285780639a7a23d6146108865780639ba5e4d5146108a6578063a457c2d7146108d657600080fd5b80638a0eef5a1461080c5780638da5cb5b1461082257806395d89b411461084057600080fd5b80637949a4031161017f5780637949a4031461078357806379eb8d1d146107b357806388f82020146107d357600080fd5b8063713898cd146106d5578063715018a61461073857806373cafdc21461074d57600080fd5b8063395093511161026957806351bc3c85116102125780636b001127116101ec5780636b0011271461065c5780636dd3d39f1461067c57806370a08231146106b557600080fd5b806351bc3c85146105ee57806352390c02146106035780635342acb41461062357600080fd5b80634549b039116102435780634549b0391461057c5780634a74bb021461059c57806350be7cdb146105ce57600080fd5b8063395093511461050c5780633bbac5791461052c578063437823ec1461055c57600080fd5b8063195af330116102cb5780632d838119116102a55780632d838119146104b0578063313ce567146104d05780633685d419146104ec57600080fd5b8063195af3301461045057806323b872dd1461047057806327a14fc21461049057600080fd5b8063095ea7b3116102fc578063095ea7b3146103e157806315952f541461041157806318160ddd1461043157600080fd5b8063046797801461032e578063055add0d1461035057806306fdde031461039257600080fd5b3661032957005b600080fd5b34801561033a57600080fd5b5061034e6103493660046133b5565b610a94565b005b34801561035c57600080fd5b506015546103759061010090046001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561039e57600080fd5b5060408051808201909152600581527f5348414d5500000000000000000000000000000000000000000000000000000060208201525b604051610389919061347b565b3480156103ed57600080fd5b506104016103fc3660046132ea565b610b0f565b6040519015158152602001610389565b34801561041d57600080fd5b5061034e61042c366004613201565b610b26565b34801561043d57600080fd5b506009545b604051908152602001610389565b34801561045c57600080fd5b5061034e61046b36600461323b565b610c30565b34801561047c57600080fd5b5061040161048b366004613274565b610cd0565b34801561049c57600080fd5b5061034e6104ab3660046133b5565b610d8f565b3480156104bc57600080fd5b506104426104cb3660046133b5565b610e05565b3480156104dc57600080fd5b5060405160098152602001610389565b3480156104f857600080fd5b5061034e610507366004613201565b610e9c565b34801561051857600080fd5b506104016105273660046132ea565b6110b3565b34801561053857600080fd5b50610401610547366004613201565b60076020526000908152604090205460ff1681565b34801561056857600080fd5b5061034e610577366004613201565b6110ef565b34801561058857600080fd5b506104426105973660046133ce565b61116d565b3480156105a857600080fd5b506016546104019074010000000000000000000000000000000000000000900460ff1681565b3480156105da57600080fd5b5061034e6105e9366004613441565b6111f7565b3480156105fa57600080fd5b5061034e611303565b34801561060f57600080fd5b5061034e61061e366004613201565b611370565b34801561062f57600080fd5b5061040161063e366004613201565b6001600160a01b031660009081526004602052604090205460ff1690565b34801561066857600080fd5b5061034e6106773660046133f1565b61150b565b34801561068857600080fd5b50610401610697366004613201565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156106c157600080fd5b506104426106d0366004613201565b611587565b3480156106e157600080fd5b5060195461070b9060ff808216916101008104821691620100008204811691630100000090041684565b6040805160ff95861681529385166020850152918416918301919091529091166060820152608001610389565b34801561074457600080fd5b5061034e6115e6565b34801561075957600080fd5b5060185461070b9060ff808216916101008104821691620100008204811691630100000090041684565b34801561078f57600080fd5b5061040161079e366004613201565b60146020526000908152604090205460ff1681565b3480156107bf57600080fd5b5061034e6107ce3660046133f1565b61164a565b3480156107df57600080fd5b506104016107ee366004613201565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561081857600080fd5b50610442600e5481565b34801561082e57600080fd5b506000546001600160a01b0316610375565b34801561084c57600080fd5b5060408051808201909152600281527f4d5500000000000000000000000000000000000000000000000000000000000060208201526103d4565b34801561089257600080fd5b5061034e6108a13660046132b5565b6116da565b3480156108b257600080fd5b50601b54601c546108c1919082565b60408051928352602083019190915201610389565b3480156108e257600080fd5b506104016108f13660046132ea565b61181d565b34801561090257600080fd5b506104016109113660046132ea565b6118ce565b34801561092257600080fd5b50610442600d5481565b34801561093857600080fd5b5061034e610947366004613316565b6118db565b34801561095857600080fd5b5061034e61096736600461339a565b611af9565b34801561097857600080fd5b50601654610375906001600160a01b031681565b34801561099857600080fd5b5061044260175481565b3480156109ae57600080fd5b5061034e6109bd3660046132b5565b611bd7565b3480156109ce57600080fd5b50610442600c5481565b3480156109e457600080fd5b50610442600b5481565b3480156109fa57600080fd5b50610442610a0936600461323b565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610a4057600080fd5b5061034e610a4f366004613441565b611cf1565b348015610a6057600080fd5b5061034e610a6f366004613201565b611dfd565b348015610a8057600080fd5b5061034e610a8f366004613201565b611e78565b6000546001600160a01b03163314610af35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b610aff6009600a61361a565b610b0990826136c5565b60175550565b6000610b1c338484611f5a565b5060015b92915050565b6000546001600160a01b03163314610b805760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610aea565b6001600160a01b03811660009081526007602052604090205460ff1615610c0f5760405162461bcd60e51b815260206004820152602b60248201527f616464726573732070726f766964656420697320616c7265616479206e6f742060448201527f626c61636b6c69737465640000000000000000000000000000000000000000006064820152608401610aea565b6001600160a01b03166000908152600760205260409020805460ff19169055565b6000546001600160a01b03163314610c8a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610aea565b601080546001600160a01b039384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560118054929093169116179055565b6000610cdd8484846120b2565b6001600160a01b038416600090815260036020908152604080832033845290915290205482811015610d775760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e63650000000000000000000000000000000000000000000000006064820152608401610aea565b610d848533858403611f5a565b506001949350505050565b6000546001600160a01b03163314610de95760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610aea565b610df56009600a61361a565b610dff90826136c5565b600d5550565b6000600a54821115610e7f5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201527f65666c656374696f6e73000000000000000000000000000000000000000000006064820152608401610aea565b6000610e896126c9565b9050610e95818461359c565b9392505050565b6000546001600160a01b03163314610ef65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610aea565b6001600160a01b03811660009081526005602052604090205460ff16610f5e5760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610aea565b60005b6008548110156110af57816001600160a01b031660088281548110610f8857610f88613795565b6000918252602090912001546001600160a01b0316141561109d5760088054610fb390600190613705565b81548110610fc357610fc3613795565b600091825260209091200154600880546001600160a01b039092169183908110610fef57610fef613795565b600091825260208083209190910180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff19169055600880548061105f5761105f613766565b600082815260209020810160001990810180547fffffffffffffffffffffffff00000000000000000000000000000000000000001690550190555050565b806110a78161371c565b915050610f61565b5050565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610b1c9185906110ea90869061355f565b611f5a565b6000546001600160a01b031633146111495760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610aea565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b60006009548311156111c15760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610aea565b816111dd5760006111d38460016126ec565b519150610b209050565b60006111ea8460016126ec565b602001519150610b209050565b6000546001600160a01b031633146112515760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610aea565b6018805460ff83811662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff868316610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00009094169288169290921792909217161790556112c48183613577565b6018805460ff929092166301000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff909216919091179055505050565b6000546001600160a01b0316331461135d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610aea565b61136e61136930611587565b612762565b565b6000546001600160a01b031633146113ca5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610aea565b6001600160a01b03811660009081526005602052604090205460ff16156114335760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610aea565b6001600160a01b0381166000908152600160205260409020541561148d576001600160a01b03811660009081526001602052604090205461147390610e05565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169091179055565b6000546001600160a01b031633146115655760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610aea565b61156f818361355f565b6103e81461157c57600080fd5b601291909155601355565b6001600160a01b03811660009081526005602052604081205460ff16156115c457506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610b2090610e05565b6000546001600160a01b031633146116405760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610aea565b61136e60006128c7565b6000546001600160a01b031633146116a45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610aea565b6116b06009600a61361a565b6116ba90836136c5565b600b556116c96009600a61361a565b6116d390826136c5565b600c555050565b6000546001600160a01b031633146117345760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610aea565b6001600160a01b03821660009081526014602052604090205460ff16151581151514156117c95760405162461bcd60e51b815260206004820152603860248201527f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160448201527f6c72656164792073657420746f20746861742076616c756500000000000000006064820152608401610aea565b6001600160a01b0382166000908152601460205260409020805460ff191682158015919091179091556110af576001600160a01b0382166000908152600660205260409020805460ff191660011790555050565b3360009081526003602090815260408083206001600160a01b0386168452909152812054828110156118b75760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610aea565b6118c43385858403611f5a565b5060019392505050565b6000610b1c3384846120b2565b6000546001600160a01b031633146119355760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610aea565b60005b82811015611af3578115156006600086868581811061195957611959613795565b905060200201602081019061196e9190613201565b6001600160a01b0316815260208101919091526040016000205460ff1615151415611a275760405162461bcd60e51b815260206004820152604160248201527f5f69734578636c7564656446726f6d4d617857616c6c657420616c726561647960448201527f2073657420746f20746861742076616c756520666f72206f6e652077616c6c6560648201527f7400000000000000000000000000000000000000000000000000000000000000608482015260a401610aea565b8160066000868685818110611a3e57611a3e613795565b9050602002016020810190611a539190613201565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558115157f4a8452f723db48bf05f301f94d62a2cf7a72976cde77d83e3646584858b8f4b2858584818110611ab157611ab1613795565b9050602002016020810190611ac69190613201565b6040516001600160a01b03909116815260200160405180910390a280611aeb8161371c565b915050611938565b50505050565b6000546001600160a01b03163314611b535760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610aea565b6016805482151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff9091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990611bcc90831515815260200190565b60405180910390a150565b6000546001600160a01b03163314611c315760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610aea565b6001600160a01b03821660009081526006602052604090205460ff1615158115151415611cc65760405162461bcd60e51b815260206004820152603260248201527f5f69734578636c7564656446726f6d4d617857616c6c657420616c726561647960448201527f2073657420746f20746861742076616c756500000000000000000000000000006064820152608401610aea565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611d4b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610aea565b6019805460ff83811662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff868316610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000909416928816929092179290921716179055611dbe8183613577565b6019805460ff929092166301000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff909216919091179055505050565b6000546001600160a01b03163314611e575760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610aea565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b03163314611ed25760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610aea565b6001600160a01b038116611f4e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610aea565b611f57816128c7565b50565b6001600160a01b038316611fd55760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610aea565b6001600160a01b0382166120515760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610aea565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600e541580156120da57506001600160a01b03821660009081526014602052604090205460ff165b156120e45743600e555b6001600160a01b0383166121605760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610aea565b6001600160a01b0382166121dc5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610aea565b6001600160a01b03831660009081526007602052604090205460ff16156122455760405162461bcd60e51b815260206004820181905260248201527f45524332303a206164647265737320626c61636b6c69737465642028626f74296044820152606401610aea565b600081116122bb5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610aea565b6122c483611587565b8111156123395760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f72652060448201527f7468616e20796f75722062616c616e63650000000000000000000000000000006064820152608401610aea565b6001600160a01b03831660009081526004602052604081205460ff168061237857506001600160a01b03831660009081526004602052604090205460ff165b1590508015612645576000546001600160a01b038581169116148015906123b757506001600160a01b03841660009081526014602052604090205460ff165b1561252a57600f54600e546123cc919061355f565b431015612430576001600160a01b038316600081815260076020908152604091829020805460ff19166001908117909155915192835290917f3159dadbd8e2d720a851b412e3358e7e44bb11734c9bfd5715340e21798e8b25910160405180910390a25b601854601a805460ff8084167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000090921691909117610100808504831602177fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff16620100008085048316027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff161763010000009384900491909116909202919091179055600b548211156125255760405162461bcd60e51b815260206004820181905260248201527f616d6f756e74206d757374206265203c3d206d61785478416d6f756e744275796044820152606401610aea565b612645565b601954601a805460ff8084167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000090921691909117610100808504831602177fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff16620100008085048316027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff161763010000009384900491909116909202919091179055600c548211156126455760405162461bcd60e51b815260206004820152602160248201527f616d6f756e74206d757374206265203c3d206d61785478416d6f756e7453656c60448201527f6c000000000000000000000000000000000000000000000000000000000000006064820152608401610aea565b60175461265130611587565b10158015612662575060155460ff16155b801561268757506001600160a01b03841660009081526014602052604090205460ff16155b80156126ad575060165474010000000000000000000000000000000000000000900460ff165b156126bd576126bd601754612762565b611af38484848461292f565b60008060006126d6612bbb565b90925090506126e5818361359c565b9250505090565b61272c6040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6127368383612d3e565b905061274b8184846127466126c9565b612e00565b606085015260408401526020830152815292915050565b6015805460ff19166001179055601a5460009061278a906301000000900460ff1660026136e4565b601a5460ff918216925060009183916127ab916201000090910416856136c5565b6127b5919061359c565b905060006127c38285613705565b9050476127cf82612e6b565b60006127db8247613705565b601a549091506000906127f79062010000900460ff1687613705565b601a5461280d9062010000900460ff16846136c5565b612817919061359c565b90506128238582613046565b6010546012546001600160a01b03909116906108fc906103e89061284790476136c5565b612851919061359c565b6040518115909202916000818181858888f19350505050158015612879573d6000803e3d6000fd5b506011546040516001600160a01b03909116904780156108fc02916000818181858888f193505050501580156128b3573d6000803e3d6000fd5b50506015805460ff19169055505050505050565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600061293b83836126ec565b6001600160a01b03861660009081526005602052604090205490915060ff161561298d576001600160a01b03851660009081526002602052604081208054859290612987908490613705565b90915550505b6001600160a01b03841660009081526005602052604090205460ff16156129e15760808101516001600160a01b038516600090815260026020526040812080549091906129db90849061355f565b90915550505b80516001600160a01b03861660009081526001602052604081208054909190612a0b908490613705565b90915550506020808201516001600160a01b0386166000908152600190925260408220805491929091612a3f90849061355f565b90915550508115612ac057612a5c81604001518260a00151613130565b612a6e81606001518260c00151613165565b306001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360c00151604051612ab791815260200190565b60405180910390a35b6001600160a01b03841660009081526006602052604090205460ff1680612af15750600d54612aee85611587565b11155b612b635760405162461bcd60e51b815260206004820152602f60248201527f526563697069656e742063616e6e6f7420686f6c64206d6f7265207468616e2060448201527f6d617857616c6c6574416d6f756e7400000000000000000000000000000000006064820152608401610aea565b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360800151604051612bac91815260200190565b60405180910390a35050505050565b600a546009546000918291825b600854811015612d0d57826001600060088481548110612bea57612bea613795565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612c555750816002600060088481548110612c2e57612c2e613795565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612c6b57600a54600954945094505050509091565b6001600060088381548110612c8257612c82613795565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612cb19084613705565b92506002600060088381548110612cca57612cca613795565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612cf99083613705565b915080612d058161371c565b915050612bc8565b50600954600a54612d1e919061359c565b821015612d3557600a546009549350935050509091565b90939092509050565b612d7e6040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b81612d8f5760808101839052610b20565b601a54606490612da29060ff16856136c5565b612dac919061359c565b60a0820152601a54606490612dcb906301000000900460ff16856136c5565b612dd5919061359c565b60c0820181905260a0820151612deb9085613705565b612df59190613705565b608082015292915050565b6000808080612e0f85886136c5565b935085612e2457508291506000905080612e60565b848860a00151612e3491906136c5565b9150848860c00151612e4691906136c5565b905080612e538386613705565b612e5d9190613705565b92505b945094509450949050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612ea057612ea0613795565b60200260200101906001600160a01b031690816001600160a01b031681525050601560019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612f0e57600080fd5b505afa158015612f22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f46919061321e565b81600181518110612f5957612f59613795565b6001600160a01b03928316602091820292909201810191909152601554306000908152600383526040808220610100909304909416815291522054821115612fba57601554612fba90309061010090046001600160a01b0316600019611f5a565b6015546040517f791ac9470000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b03169063791ac947906130109085906000908690309042906004016134ee565b600060405180830381600087803b15801561302a57600080fd5b505af115801561303e573d6000803e3d6000fd5b505050505050565b6015546001600160a01b036101009091041663f305d7198230856000806130756000546001600160a01b031690565b60405160e088901b7fffffffff000000000000000000000000000000000000000000000000000000001681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b1580156130f057600080fd5b505af1158015613104573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906131299190613413565b5050505050565b81600a60008282546131429190613705565b9091555050601b805482919060009061315c90849061355f565b90915550505050565b306000908152600160205260408120805484929061318490849061355f565b90915550503060009081526005602052604090205460ff16156131c65730600090815260026020526040812080548392906131c090849061355f565b90915550505b80601b600101600082825461315c919061355f565b803580151581146131eb57600080fd5b919050565b803560ff811681146131eb57600080fd5b60006020828403121561321357600080fd5b8135610e95816137c4565b60006020828403121561323057600080fd5b8151610e95816137c4565b6000806040838503121561324e57600080fd5b8235613259816137c4565b91506020830135613269816137c4565b809150509250929050565b60008060006060848603121561328957600080fd5b8335613294816137c4565b925060208401356132a4816137c4565b929592945050506040919091013590565b600080604083850312156132c857600080fd5b82356132d3816137c4565b91506132e1602084016131db565b90509250929050565b600080604083850312156132fd57600080fd5b8235613308816137c4565b946020939093013593505050565b60008060006040848603121561332b57600080fd5b833567ffffffffffffffff8082111561334357600080fd5b818601915086601f83011261335757600080fd5b81358181111561336657600080fd5b8760208260051b850101111561337b57600080fd5b60209283019550935061339191860190506131db565b90509250925092565b6000602082840312156133ac57600080fd5b610e95826131db565b6000602082840312156133c757600080fd5b5035919050565b600080604083850312156133e157600080fd5b823591506132e1602084016131db565b6000806040838503121561340457600080fd5b50508035926020909101359150565b60008060006060848603121561342857600080fd5b8351925060208401519150604084015190509250925092565b60008060006060848603121561345657600080fd5b61345f846131f0565b925061346d602085016131f0565b9150613391604085016131f0565b600060208083528351808285015260005b818110156134a85785810183015185820160400152820161348c565b818111156134ba576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561353e5784516001600160a01b031683529383019391830191600101613519565b50506001600160a01b03969096166060850152505050608001529392505050565b6000821982111561357257613572613737565b500190565b600060ff821660ff84168060ff0382111561359457613594613737565b019392505050565b6000826135d2577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600181815b808511156136125781600019048211156135f8576135f8613737565b8085161561360557918102915b93841c93908002906135dc565b509250929050565b6000610e9560ff84168360008261363357506001610b20565b8161364057506000610b20565b816001811461365657600281146136605761367c565b6001915050610b20565b60ff84111561367157613671613737565b50506001821b610b20565b5060208310610133831016604e8410600b841016171561369f575081810a610b20565b6136a983836135d7565b80600019048211156136bd576136bd613737565b029392505050565b60008160001904831182151516156136df576136df613737565b500290565b600060ff821660ff84168160ff04811182151516156136bd576136bd613737565b60008282101561371757613717613737565b500390565b600060001982141561373057613730613737565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6001600160a01b0381168114611f5757600080fdfea2646970667358221220a59656086f2a75f83ce76f9c332e72e7e6fddfc1a8452a46273fa343673806bc64736f6c63430008070033

Deployed Bytecode

0x6080604052600436106103225760003560e01c8063713898cd116101a5578063a9059cbb116100ec578063d2fcc00111610095578063dd62ed3e1161006f578063dd62ed3e146109ee578063e22b62de14610a34578063ea2f0b3714610a54578063f2fde38b14610a7457600080fd5b8063d2fcc001146109a2578063d44e586e146109c2578063d6c180bf146109d857600080fd5b8063c49b9a80116100c6578063c49b9a801461094c578063c816841b1461096c578063d12a76881461098c57600080fd5b8063a9059cbb146108f6578063aa4bde2814610916578063bd94545b1461092c57600080fd5b80638a0eef5a1161014e5780639a7a23d6116101285780639a7a23d6146108865780639ba5e4d5146108a6578063a457c2d7146108d657600080fd5b80638a0eef5a1461080c5780638da5cb5b1461082257806395d89b411461084057600080fd5b80637949a4031161017f5780637949a4031461078357806379eb8d1d146107b357806388f82020146107d357600080fd5b8063713898cd146106d5578063715018a61461073857806373cafdc21461074d57600080fd5b8063395093511161026957806351bc3c85116102125780636b001127116101ec5780636b0011271461065c5780636dd3d39f1461067c57806370a08231146106b557600080fd5b806351bc3c85146105ee57806352390c02146106035780635342acb41461062357600080fd5b80634549b039116102435780634549b0391461057c5780634a74bb021461059c57806350be7cdb146105ce57600080fd5b8063395093511461050c5780633bbac5791461052c578063437823ec1461055c57600080fd5b8063195af330116102cb5780632d838119116102a55780632d838119146104b0578063313ce567146104d05780633685d419146104ec57600080fd5b8063195af3301461045057806323b872dd1461047057806327a14fc21461049057600080fd5b8063095ea7b3116102fc578063095ea7b3146103e157806315952f541461041157806318160ddd1461043157600080fd5b8063046797801461032e578063055add0d1461035057806306fdde031461039257600080fd5b3661032957005b600080fd5b34801561033a57600080fd5b5061034e6103493660046133b5565b610a94565b005b34801561035c57600080fd5b506015546103759061010090046001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561039e57600080fd5b5060408051808201909152600581527f5348414d5500000000000000000000000000000000000000000000000000000060208201525b604051610389919061347b565b3480156103ed57600080fd5b506104016103fc3660046132ea565b610b0f565b6040519015158152602001610389565b34801561041d57600080fd5b5061034e61042c366004613201565b610b26565b34801561043d57600080fd5b506009545b604051908152602001610389565b34801561045c57600080fd5b5061034e61046b36600461323b565b610c30565b34801561047c57600080fd5b5061040161048b366004613274565b610cd0565b34801561049c57600080fd5b5061034e6104ab3660046133b5565b610d8f565b3480156104bc57600080fd5b506104426104cb3660046133b5565b610e05565b3480156104dc57600080fd5b5060405160098152602001610389565b3480156104f857600080fd5b5061034e610507366004613201565b610e9c565b34801561051857600080fd5b506104016105273660046132ea565b6110b3565b34801561053857600080fd5b50610401610547366004613201565b60076020526000908152604090205460ff1681565b34801561056857600080fd5b5061034e610577366004613201565b6110ef565b34801561058857600080fd5b506104426105973660046133ce565b61116d565b3480156105a857600080fd5b506016546104019074010000000000000000000000000000000000000000900460ff1681565b3480156105da57600080fd5b5061034e6105e9366004613441565b6111f7565b3480156105fa57600080fd5b5061034e611303565b34801561060f57600080fd5b5061034e61061e366004613201565b611370565b34801561062f57600080fd5b5061040161063e366004613201565b6001600160a01b031660009081526004602052604090205460ff1690565b34801561066857600080fd5b5061034e6106773660046133f1565b61150b565b34801561068857600080fd5b50610401610697366004613201565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156106c157600080fd5b506104426106d0366004613201565b611587565b3480156106e157600080fd5b5060195461070b9060ff808216916101008104821691620100008204811691630100000090041684565b6040805160ff95861681529385166020850152918416918301919091529091166060820152608001610389565b34801561074457600080fd5b5061034e6115e6565b34801561075957600080fd5b5060185461070b9060ff808216916101008104821691620100008204811691630100000090041684565b34801561078f57600080fd5b5061040161079e366004613201565b60146020526000908152604090205460ff1681565b3480156107bf57600080fd5b5061034e6107ce3660046133f1565b61164a565b3480156107df57600080fd5b506104016107ee366004613201565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561081857600080fd5b50610442600e5481565b34801561082e57600080fd5b506000546001600160a01b0316610375565b34801561084c57600080fd5b5060408051808201909152600281527f4d5500000000000000000000000000000000000000000000000000000000000060208201526103d4565b34801561089257600080fd5b5061034e6108a13660046132b5565b6116da565b3480156108b257600080fd5b50601b54601c546108c1919082565b60408051928352602083019190915201610389565b3480156108e257600080fd5b506104016108f13660046132ea565b61181d565b34801561090257600080fd5b506104016109113660046132ea565b6118ce565b34801561092257600080fd5b50610442600d5481565b34801561093857600080fd5b5061034e610947366004613316565b6118db565b34801561095857600080fd5b5061034e61096736600461339a565b611af9565b34801561097857600080fd5b50601654610375906001600160a01b031681565b34801561099857600080fd5b5061044260175481565b3480156109ae57600080fd5b5061034e6109bd3660046132b5565b611bd7565b3480156109ce57600080fd5b50610442600c5481565b3480156109e457600080fd5b50610442600b5481565b3480156109fa57600080fd5b50610442610a0936600461323b565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610a4057600080fd5b5061034e610a4f366004613441565b611cf1565b348015610a6057600080fd5b5061034e610a6f366004613201565b611dfd565b348015610a8057600080fd5b5061034e610a8f366004613201565b611e78565b6000546001600160a01b03163314610af35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b610aff6009600a61361a565b610b0990826136c5565b60175550565b6000610b1c338484611f5a565b5060015b92915050565b6000546001600160a01b03163314610b805760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610aea565b6001600160a01b03811660009081526007602052604090205460ff1615610c0f5760405162461bcd60e51b815260206004820152602b60248201527f616464726573732070726f766964656420697320616c7265616479206e6f742060448201527f626c61636b6c69737465640000000000000000000000000000000000000000006064820152608401610aea565b6001600160a01b03166000908152600760205260409020805460ff19169055565b6000546001600160a01b03163314610c8a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610aea565b601080546001600160a01b039384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560118054929093169116179055565b6000610cdd8484846120b2565b6001600160a01b038416600090815260036020908152604080832033845290915290205482811015610d775760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e63650000000000000000000000000000000000000000000000006064820152608401610aea565b610d848533858403611f5a565b506001949350505050565b6000546001600160a01b03163314610de95760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610aea565b610df56009600a61361a565b610dff90826136c5565b600d5550565b6000600a54821115610e7f5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201527f65666c656374696f6e73000000000000000000000000000000000000000000006064820152608401610aea565b6000610e896126c9565b9050610e95818461359c565b9392505050565b6000546001600160a01b03163314610ef65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610aea565b6001600160a01b03811660009081526005602052604090205460ff16610f5e5760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610aea565b60005b6008548110156110af57816001600160a01b031660088281548110610f8857610f88613795565b6000918252602090912001546001600160a01b0316141561109d5760088054610fb390600190613705565b81548110610fc357610fc3613795565b600091825260209091200154600880546001600160a01b039092169183908110610fef57610fef613795565b600091825260208083209190910180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff19169055600880548061105f5761105f613766565b600082815260209020810160001990810180547fffffffffffffffffffffffff00000000000000000000000000000000000000001690550190555050565b806110a78161371c565b915050610f61565b5050565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610b1c9185906110ea90869061355f565b611f5a565b6000546001600160a01b031633146111495760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610aea565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b60006009548311156111c15760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610aea565b816111dd5760006111d38460016126ec565b519150610b209050565b60006111ea8460016126ec565b602001519150610b209050565b6000546001600160a01b031633146112515760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610aea565b6018805460ff83811662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff868316610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00009094169288169290921792909217161790556112c48183613577565b6018805460ff929092166301000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff909216919091179055505050565b6000546001600160a01b0316331461135d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610aea565b61136e61136930611587565b612762565b565b6000546001600160a01b031633146113ca5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610aea565b6001600160a01b03811660009081526005602052604090205460ff16156114335760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610aea565b6001600160a01b0381166000908152600160205260409020541561148d576001600160a01b03811660009081526001602052604090205461147390610e05565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169091179055565b6000546001600160a01b031633146115655760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610aea565b61156f818361355f565b6103e81461157c57600080fd5b601291909155601355565b6001600160a01b03811660009081526005602052604081205460ff16156115c457506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610b2090610e05565b6000546001600160a01b031633146116405760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610aea565b61136e60006128c7565b6000546001600160a01b031633146116a45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610aea565b6116b06009600a61361a565b6116ba90836136c5565b600b556116c96009600a61361a565b6116d390826136c5565b600c555050565b6000546001600160a01b031633146117345760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610aea565b6001600160a01b03821660009081526014602052604090205460ff16151581151514156117c95760405162461bcd60e51b815260206004820152603860248201527f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160448201527f6c72656164792073657420746f20746861742076616c756500000000000000006064820152608401610aea565b6001600160a01b0382166000908152601460205260409020805460ff191682158015919091179091556110af576001600160a01b0382166000908152600660205260409020805460ff191660011790555050565b3360009081526003602090815260408083206001600160a01b0386168452909152812054828110156118b75760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610aea565b6118c43385858403611f5a565b5060019392505050565b6000610b1c3384846120b2565b6000546001600160a01b031633146119355760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610aea565b60005b82811015611af3578115156006600086868581811061195957611959613795565b905060200201602081019061196e9190613201565b6001600160a01b0316815260208101919091526040016000205460ff1615151415611a275760405162461bcd60e51b815260206004820152604160248201527f5f69734578636c7564656446726f6d4d617857616c6c657420616c726561647960448201527f2073657420746f20746861742076616c756520666f72206f6e652077616c6c6560648201527f7400000000000000000000000000000000000000000000000000000000000000608482015260a401610aea565b8160066000868685818110611a3e57611a3e613795565b9050602002016020810190611a539190613201565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558115157f4a8452f723db48bf05f301f94d62a2cf7a72976cde77d83e3646584858b8f4b2858584818110611ab157611ab1613795565b9050602002016020810190611ac69190613201565b6040516001600160a01b03909116815260200160405180910390a280611aeb8161371c565b915050611938565b50505050565b6000546001600160a01b03163314611b535760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610aea565b6016805482151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff9091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990611bcc90831515815260200190565b60405180910390a150565b6000546001600160a01b03163314611c315760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610aea565b6001600160a01b03821660009081526006602052604090205460ff1615158115151415611cc65760405162461bcd60e51b815260206004820152603260248201527f5f69734578636c7564656446726f6d4d617857616c6c657420616c726561647960448201527f2073657420746f20746861742076616c756500000000000000000000000000006064820152608401610aea565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611d4b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610aea565b6019805460ff83811662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff868316610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000909416928816929092179290921716179055611dbe8183613577565b6019805460ff929092166301000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff909216919091179055505050565b6000546001600160a01b03163314611e575760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610aea565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b03163314611ed25760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610aea565b6001600160a01b038116611f4e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610aea565b611f57816128c7565b50565b6001600160a01b038316611fd55760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610aea565b6001600160a01b0382166120515760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610aea565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600e541580156120da57506001600160a01b03821660009081526014602052604090205460ff165b156120e45743600e555b6001600160a01b0383166121605760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610aea565b6001600160a01b0382166121dc5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610aea565b6001600160a01b03831660009081526007602052604090205460ff16156122455760405162461bcd60e51b815260206004820181905260248201527f45524332303a206164647265737320626c61636b6c69737465642028626f74296044820152606401610aea565b600081116122bb5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610aea565b6122c483611587565b8111156123395760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f72652060448201527f7468616e20796f75722062616c616e63650000000000000000000000000000006064820152608401610aea565b6001600160a01b03831660009081526004602052604081205460ff168061237857506001600160a01b03831660009081526004602052604090205460ff165b1590508015612645576000546001600160a01b038581169116148015906123b757506001600160a01b03841660009081526014602052604090205460ff165b1561252a57600f54600e546123cc919061355f565b431015612430576001600160a01b038316600081815260076020908152604091829020805460ff19166001908117909155915192835290917f3159dadbd8e2d720a851b412e3358e7e44bb11734c9bfd5715340e21798e8b25910160405180910390a25b601854601a805460ff8084167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000090921691909117610100808504831602177fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff16620100008085048316027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff161763010000009384900491909116909202919091179055600b548211156125255760405162461bcd60e51b815260206004820181905260248201527f616d6f756e74206d757374206265203c3d206d61785478416d6f756e744275796044820152606401610aea565b612645565b601954601a805460ff8084167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000090921691909117610100808504831602177fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff16620100008085048316027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff161763010000009384900491909116909202919091179055600c548211156126455760405162461bcd60e51b815260206004820152602160248201527f616d6f756e74206d757374206265203c3d206d61785478416d6f756e7453656c60448201527f6c000000000000000000000000000000000000000000000000000000000000006064820152608401610aea565b60175461265130611587565b10158015612662575060155460ff16155b801561268757506001600160a01b03841660009081526014602052604090205460ff16155b80156126ad575060165474010000000000000000000000000000000000000000900460ff165b156126bd576126bd601754612762565b611af38484848461292f565b60008060006126d6612bbb565b90925090506126e5818361359c565b9250505090565b61272c6040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6127368383612d3e565b905061274b8184846127466126c9565b612e00565b606085015260408401526020830152815292915050565b6015805460ff19166001179055601a5460009061278a906301000000900460ff1660026136e4565b601a5460ff918216925060009183916127ab916201000090910416856136c5565b6127b5919061359c565b905060006127c38285613705565b9050476127cf82612e6b565b60006127db8247613705565b601a549091506000906127f79062010000900460ff1687613705565b601a5461280d9062010000900460ff16846136c5565b612817919061359c565b90506128238582613046565b6010546012546001600160a01b03909116906108fc906103e89061284790476136c5565b612851919061359c565b6040518115909202916000818181858888f19350505050158015612879573d6000803e3d6000fd5b506011546040516001600160a01b03909116904780156108fc02916000818181858888f193505050501580156128b3573d6000803e3d6000fd5b50506015805460ff19169055505050505050565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600061293b83836126ec565b6001600160a01b03861660009081526005602052604090205490915060ff161561298d576001600160a01b03851660009081526002602052604081208054859290612987908490613705565b90915550505b6001600160a01b03841660009081526005602052604090205460ff16156129e15760808101516001600160a01b038516600090815260026020526040812080549091906129db90849061355f565b90915550505b80516001600160a01b03861660009081526001602052604081208054909190612a0b908490613705565b90915550506020808201516001600160a01b0386166000908152600190925260408220805491929091612a3f90849061355f565b90915550508115612ac057612a5c81604001518260a00151613130565b612a6e81606001518260c00151613165565b306001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360c00151604051612ab791815260200190565b60405180910390a35b6001600160a01b03841660009081526006602052604090205460ff1680612af15750600d54612aee85611587565b11155b612b635760405162461bcd60e51b815260206004820152602f60248201527f526563697069656e742063616e6e6f7420686f6c64206d6f7265207468616e2060448201527f6d617857616c6c6574416d6f756e7400000000000000000000000000000000006064820152608401610aea565b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360800151604051612bac91815260200190565b60405180910390a35050505050565b600a546009546000918291825b600854811015612d0d57826001600060088481548110612bea57612bea613795565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612c555750816002600060088481548110612c2e57612c2e613795565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612c6b57600a54600954945094505050509091565b6001600060088381548110612c8257612c82613795565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612cb19084613705565b92506002600060088381548110612cca57612cca613795565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612cf99083613705565b915080612d058161371c565b915050612bc8565b50600954600a54612d1e919061359c565b821015612d3557600a546009549350935050509091565b90939092509050565b612d7e6040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b81612d8f5760808101839052610b20565b601a54606490612da29060ff16856136c5565b612dac919061359c565b60a0820152601a54606490612dcb906301000000900460ff16856136c5565b612dd5919061359c565b60c0820181905260a0820151612deb9085613705565b612df59190613705565b608082015292915050565b6000808080612e0f85886136c5565b935085612e2457508291506000905080612e60565b848860a00151612e3491906136c5565b9150848860c00151612e4691906136c5565b905080612e538386613705565b612e5d9190613705565b92505b945094509450949050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612ea057612ea0613795565b60200260200101906001600160a01b031690816001600160a01b031681525050601560019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612f0e57600080fd5b505afa158015612f22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f46919061321e565b81600181518110612f5957612f59613795565b6001600160a01b03928316602091820292909201810191909152601554306000908152600383526040808220610100909304909416815291522054821115612fba57601554612fba90309061010090046001600160a01b0316600019611f5a565b6015546040517f791ac9470000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b03169063791ac947906130109085906000908690309042906004016134ee565b600060405180830381600087803b15801561302a57600080fd5b505af115801561303e573d6000803e3d6000fd5b505050505050565b6015546001600160a01b036101009091041663f305d7198230856000806130756000546001600160a01b031690565b60405160e088901b7fffffffff000000000000000000000000000000000000000000000000000000001681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b1580156130f057600080fd5b505af1158015613104573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906131299190613413565b5050505050565b81600a60008282546131429190613705565b9091555050601b805482919060009061315c90849061355f565b90915550505050565b306000908152600160205260408120805484929061318490849061355f565b90915550503060009081526005602052604090205460ff16156131c65730600090815260026020526040812080548392906131c090849061355f565b90915550505b80601b600101600082825461315c919061355f565b803580151581146131eb57600080fd5b919050565b803560ff811681146131eb57600080fd5b60006020828403121561321357600080fd5b8135610e95816137c4565b60006020828403121561323057600080fd5b8151610e95816137c4565b6000806040838503121561324e57600080fd5b8235613259816137c4565b91506020830135613269816137c4565b809150509250929050565b60008060006060848603121561328957600080fd5b8335613294816137c4565b925060208401356132a4816137c4565b929592945050506040919091013590565b600080604083850312156132c857600080fd5b82356132d3816137c4565b91506132e1602084016131db565b90509250929050565b600080604083850312156132fd57600080fd5b8235613308816137c4565b946020939093013593505050565b60008060006040848603121561332b57600080fd5b833567ffffffffffffffff8082111561334357600080fd5b818601915086601f83011261335757600080fd5b81358181111561336657600080fd5b8760208260051b850101111561337b57600080fd5b60209283019550935061339191860190506131db565b90509250925092565b6000602082840312156133ac57600080fd5b610e95826131db565b6000602082840312156133c757600080fd5b5035919050565b600080604083850312156133e157600080fd5b823591506132e1602084016131db565b6000806040838503121561340457600080fd5b50508035926020909101359150565b60008060006060848603121561342857600080fd5b8351925060208401519150604084015190509250925092565b60008060006060848603121561345657600080fd5b61345f846131f0565b925061346d602085016131f0565b9150613391604085016131f0565b600060208083528351808285015260005b818110156134a85785810183015185820160400152820161348c565b818111156134ba576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561353e5784516001600160a01b031683529383019391830191600101613519565b50506001600160a01b03969096166060850152505050608001529392505050565b6000821982111561357257613572613737565b500190565b600060ff821660ff84168060ff0382111561359457613594613737565b019392505050565b6000826135d2577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600181815b808511156136125781600019048211156135f8576135f8613737565b8085161561360557918102915b93841c93908002906135dc565b509250929050565b6000610e9560ff84168360008261363357506001610b20565b8161364057506000610b20565b816001811461365657600281146136605761367c565b6001915050610b20565b60ff84111561367157613671613737565b50506001821b610b20565b5060208310610133831016604e8410600b841016171561369f575081810a610b20565b6136a983836135d7565b80600019048211156136bd576136bd613737565b029392505050565b60008160001904831182151516156136df576136df613737565b500290565b600060ff821660ff84168160ff04811182151516156136bd576136bd613737565b60008282101561371757613717613737565b500390565b600060001982141561373057613730613737565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6001600160a01b0381168114611f5757600080fdfea2646970667358221220a59656086f2a75f83ce76f9c332e72e7e6fddfc1a8452a46273fa343673806bc64736f6c63430008070033

Deployed Bytecode Sourcemap

11206:19013:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28845:156;;;;;;;;;;-1:-1:-1;28845:156:0;;;;;:::i;:::-;;:::i;:::-;;12639:41;;;;;;;;;;-1:-1:-1;12639:41:0;;;;;;;-1:-1:-1;;;;;12639:41:0;;;;;;-1:-1:-1;;;;;5123:55:1;;;5105:74;;5093:2;5078:18;12639:41:0;;;;;;;;15455:83;;;;;;;;;;-1:-1:-1;15525:5:0;;;;;;;;;;;;;;;;;15455:83;;;;;;;:::i;16386:161::-;;;;;;;;;;-1:-1:-1;16386:161:0;;;;;:::i;:::-;;:::i;:::-;;;5990:14:1;;5983:22;5965:41;;5953:2;5938:18;16386:161:0;5825:187:1;29606:193:0;;;;;;;;;;-1:-1:-1;29606:193:0;;;;;:::i;:::-;;:::i;15751:95::-;;;;;;;;;;-1:-1:-1;15831:7:0;;15751:95;;;15859:25:1;;;15847:2;15832:18;15751:95:0;15713:177:1;29009:219:0;;;;;;;;;;-1:-1:-1;29009:219:0;;;;;:::i;:::-;;:::i;16555:450::-;;;;;;;;;;-1:-1:-1;16555:450:0;;;;;:::i;:::-;;:::i;29807:136::-;;;;;;;;;;-1:-1:-1;29807:136:0;;;;;:::i;:::-;;:::i;18249:248::-;;;;;;;;;;-1:-1:-1;18249:248:0;;;;;:::i;:::-;;:::i;15637:83::-;;;;;;;;;;-1:-1:-1;15637:83:0;;11771:1;17321:36:1;;17309:2;17294:18;15637:83:0;17179:184:1;18914:475:0;;;;;;;;;;-1:-1:-1;18914:475:0;;;;;:::i;:::-;;:::i;17013:213::-;;;;;;;;;;-1:-1:-1;17013:213:0;;;;;:::i;:::-;;:::i;11653:38::-;;;;;;;;;;-1:-1:-1;11653:38:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;19397:113;;;;;;;;;;-1:-1:-1;19397:113:0;;;;;:::i;:::-;;:::i;17783:456::-;;;;;;;;;;-1:-1:-1;17783:456:0;;;;;:::i;:::-;;:::i;12720:40::-;;;;;;;;;;-1:-1:-1;12720:40:0;;;;;;;;;;;28121:244;;;;;;;;;;-1:-1:-1;28121:244:0;;;;;:::i;:::-;;:::i;29489:105::-;;;;;;;;;;;;;:::i;18571:335::-;;;;;;;;;;-1:-1:-1;18571:335:0;;;;;:::i;:::-;;:::i;20100:123::-;;;;;;;;;;-1:-1:-1;20100:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;20188:27:0;20164:4;20188:27;;;:18;:27;;;;;;;;;20100:123;29236:245;;;;;;;;;;-1:-1:-1;29236:245:0;;;;;:::i;:::-;;:::i;20229:135::-;;;;;;;;;;-1:-1:-1;20229:135:0;;;;;:::i;:::-;-1:-1:-1;;;;;20323:33:0;20299:4;20323:33;;;:24;:33;;;;;;;;;20229:135;15854:198;;;;;;;;;;-1:-1:-1;15854:198:0;;;;;:::i;:::-;;:::i;13124:145::-;;;;;;;;;;-1:-1:-1;13124:145:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17613:4:1;17601:17;;;17583:36;;17655:17;;;17650:2;17635:18;;17628:45;17709:17;;;17689:18;;;17682:45;;;;17763:17;;;17758:2;17743:18;;17736:45;17570:3;17555:19;13124:145:0;17368:419:1;10724:94:0;;;;;;;;;;;;;:::i;12968:147::-;;;;;;;;;;-1:-1:-1;12968:147:0;;;;;;;;;;;;;;;;;;;;;;;;;;;12440:59;;;;;;;;;;-1:-1:-1;12440:59:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;28630:203;;;;;;;;;;-1:-1:-1;28630:203:0;;;;;:::i;:::-;;:::i;17655:120::-;;;;;;;;;;-1:-1:-1;17655:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;17747:20:0;17723:4;17747:20;;;:11;:20;;;;;;;;;17655:120;12138:34;;;;;;;;;;;;;;;;10501:87;;;;;;;;;;-1:-1:-1;10547:7:0;10574:6;-1:-1:-1;;;;;10574:6:0;10501:87;;15544;;;;;;;;;;-1:-1:-1;15616:7:0;;;;;;;;;;;;;;;;;15544:87;;27757:356;;;;;;;;;;-1:-1:-1;27757:356:0;;;;;:::i;:::-;;:::i;13418:36::-;;;;;;;;;;-1:-1:-1;13418:36:0;;;;;;;;;;;;;17100:25:1;;;17156:2;17141:18;;17134:34;;;;17073:18;13418:36:0;16926:248:1;17234:413:0;;;;;;;;;;-1:-1:-1;17234:413:0;;;;;:::i;:::-;;:::i;16060:167::-;;;;;;;;;;-1:-1:-1;16060:167:0;;;;;:::i;:::-;;:::i;12061:44::-;;;;;;;;;;;;;;;;19522:450;;;;;;;;;;-1:-1:-1;19522:450:0;;;;;:::i;:::-;;:::i;20372:167::-;;;;;;;;;;-1:-1:-1;20372:167:0;;;;;:::i;:::-;;:::i;12687:26::-;;;;;;;;;;-1:-1:-1;12687:26:0;;;;-1:-1:-1;;;;;12687:26:0;;;12767:67;;;;;;;;;;;;;;;;29951:263;;;;;;;;;;-1:-1:-1;29951:263:0;;;;;:::i;:::-;;:::i;12007:47::-;;;;;;;;;;;;;;;;11956:43;;;;;;;;;;;;;;;;16235:143;;;;;;;;;;-1:-1:-1;16235:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;16343:18:0;;;16316:7;16343:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;16235:143;28373:249;;;;;;;;;;-1:-1:-1;28373:249:0;;;;;:::i;:::-;;:::i;19980:112::-;;;;;;;;;;-1:-1:-1;19980:112:0;;;;;:::i;:::-;;:::i;10826:192::-;;;;;;;;;;-1:-1:-1;10826:192:0;;;;;:::i;:::-;;:::i;28845:156::-;10547:7;10574:6;-1:-1:-1;;;;;10574:6:0;205:10;10636:23;10628:68;;;;-1:-1:-1;;;10628:68:0;;13511:2:1;10628:68:0;;;13493:21:1;;;13530:18;;;13523:30;13589:34;13569:18;;;13562:62;13641:18;;10628:68:0;;;;;;;;;28980:13:::1;11771:1;28980:2;:13;:::i;:::-;28967:26;::::0;:12;:26:::1;:::i;:::-;28935:29;:58:::0;-1:-1:-1;28845:156:0:o;16386:161::-;16461:4;16478:39;205:10;16501:7;16510:6;16478:8;:39::i;:::-;-1:-1:-1;16535:4:0;16386:161;;;;;:::o;29606:193::-;10547:7;10574:6;-1:-1:-1;;;;;10574:6:0;205:10;10636:23;10628:68;;;;-1:-1:-1;;;10628:68:0;;13511:2:1;10628:68:0;;;13493:21:1;;;13530:18;;;13523:30;13589:34;13569:18;;;13562:62;13641:18;;10628:68:0;13309:356:1;10628:68:0;-1:-1:-1;;;;;29690:17:0;::::1;;::::0;;;:5:::1;:17;::::0;;;;;::::1;;29689:18;29681:74;;;::::0;-1:-1:-1;;;29681:74:0;;12330:2:1;29681:74:0::1;::::0;::::1;12312:21:1::0;12369:2;12349:18;;;12342:30;12408:34;12388:18;;;12381:62;12479:13;12459:18;;;12452:41;12510:19;;29681:74:0::1;12128:407:1::0;29681:74:0::1;-1:-1:-1::0;;;;;29766:17:0::1;29786:5;29766:17:::0;;;:5:::1;:17;::::0;;;;:25;;-1:-1:-1;;29766:25:0::1;::::0;;29606:193::o;29009:219::-;10547:7;10574:6;-1:-1:-1;;;;;10574:6:0;205:10;10636:23;10628:68;;;;-1:-1:-1;;;10628:68:0;;13511:2:1;10628:68:0;;;13493:21:1;;;13530:18;;;13523:30;13589:34;13569:18;;;13562:62;13641:18;;10628:68:0;13309:356:1;10628:68:0;29141:16:::1;:36:::0;;-1:-1:-1;;;;;29141:36:0;;::::1;::::0;;;::::1;;::::0;;;29188:14:::1;:32:::0;;;;;::::1;::::0;::::1;;::::0;;29009:219::o;16555:450::-;16653:4;16670:36;16680:6;16688:9;16699:6;16670:9;:36::i;:::-;-1:-1:-1;;;;;16746:19:0;;16719:24;16746:19;;;:11;:19;;;;;;;;205:10;16746:33;;;;;;;;16798:26;;;;16790:79;;;;-1:-1:-1;;;16790:79:0;;13102:2:1;16790:79:0;;;13084:21:1;13141:2;13121:18;;;13114:30;13180:34;13160:18;;;13153:62;13251:10;13231:18;;;13224:38;13279:19;;16790:79:0;12900:404:1;16790:79:0;16905:57;16914:6;205:10;16955:6;16936:16;:25;16905:8;:57::i;:::-;-1:-1:-1;16993:4:0;;16555:450;-1:-1:-1;;;;16555:450:0:o;29807:136::-;10547:7;10574:6;-1:-1:-1;;;;;10574:6:0;205:10;10636:23;10628:68;;;;-1:-1:-1;;;10628:68:0;;13511:2:1;10628:68:0;;;13493:21:1;;;13530:18;;;13523:30;13589:34;13569:18;;;13562:62;13641:18;;10628:68:0;13309:356:1;10628:68:0;29920:15:::1;11771:1;29920:2;:15;:::i;:::-;29905:30;::::0;:12;:30:::1;:::i;:::-;29887:15;:48:::0;-1:-1:-1;29807:136:0:o;18249:248::-;18315:7;18354;;18343;:18;;18335:73;;;;-1:-1:-1;;;18335:73:0;;8433:2:1;18335:73:0;;;8415:21:1;8472:2;8452:18;;;8445:30;8511:34;8491:18;;;8484:62;8582:12;8562:18;;;8555:40;8612:19;;18335:73:0;8231:406:1;18335:73:0;18419:19;18442:10;:8;:10::i;:::-;18419:33;-1:-1:-1;18470:19:0;18419:33;18470:7;:19;:::i;:::-;18463:26;18249:248;-1:-1:-1;;;18249:248:0:o;18914:475::-;10547:7;10574:6;-1:-1:-1;;;;;10574:6:0;205:10;10636:23;10628:68;;;;-1:-1:-1;;;10628:68:0;;13511:2:1;10628:68:0;;;13493:21:1;;;13530:18;;;13523:30;13589:34;13569:18;;;13562:62;13641:18;;10628:68:0;13309:356:1;10628:68:0;-1:-1:-1;;;;;18996:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;18988:56;;;::::0;-1:-1:-1;;;18988:56:0;;11617:2:1;18988:56:0::1;::::0;::::1;11599:21:1::0;11656:2;11636:18;;;11629:30;11695:25;11675:18;;;11668:53;11738:18;;18988:56:0::1;11415:347:1::0;18988:56:0::1;19060:9;19055:327;19079:9;:16:::0;19075:20;::::1;19055:327;;;19137:7;-1:-1:-1::0;;;;;19121:23:0::1;:9;19131:1;19121:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;19121:12:0::1;:23;19117:254;;;19180:9;19190:16:::0;;:20:::1;::::0;19209:1:::1;::::0;19190:20:::1;:::i;:::-;19180:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;19165:9:::1;:12:::0;;-1:-1:-1;;;;;19180:31:0;;::::1;::::0;19175:1;;19165:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;;::::1;-1:-1:-1::0;;;;;19165:46:0;;::::1;;::::0;;19230:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;19269:11:::1;:20:::0;;;;:28;;-1:-1:-1;;19269:28:0::1;::::0;;19316:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;19316:15:0;;;;;;::::1;::::0;;;;;19055:327:::1;18914:475:::0;:::o;19117:254::-:1;19097:3:::0;::::1;::::0;::::1;:::i;:::-;;;;19055:327;;;;18914:475:::0;:::o;17013:213::-;205:10;17101:4;17150:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;17150:34:0;;;;;;;;;;17101:4;;17118:78;;17141:7;;17150:45;;17185:10;;17150:45;:::i;:::-;17118:8;:78::i;19397:113::-;10547:7;10574:6;-1:-1:-1;;;;;10574:6:0;205:10;10636:23;10628:68;;;;-1:-1:-1;;;10628:68:0;;13511:2:1;10628:68:0;;;13493:21:1;;;13530:18;;;13523:30;13589:34;13569:18;;;13562:62;13641:18;;10628:68:0;13309:356:1;10628:68:0;-1:-1:-1;;;;;19468:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;19468:34:0::1;19498:4;19468:34;::::0;;19397:113::o;17783:456::-;17873:7;17912;;17901;:18;;17893:62;;;;-1:-1:-1;;;17893:62:0;;12742:2:1;17893:62:0;;;12724:21:1;12781:2;12761:18;;;12754:30;12820:33;12800:18;;;12793:61;12871:18;;17893:62:0;12540:355:1;17893:62:0;17971:17;17966:266;;18005:28;18036:25;18047:7;18056:4;18036:10;:25::i;:::-;18083:9;;-1:-1:-1;18076:16:0;;-1:-1:-1;18076:16:0;17966:266;18125:28;18156:25;18167:7;18176:4;18156:10;:25::i;:::-;18203:17;;;;-1:-1:-1;18196:24:0;;-1:-1:-1;18196:24:0;28121:244;10547:7;10574:6;-1:-1:-1;;;;;10574:6:0;205:10;10636:23;10628:68;;;;-1:-1:-1;;;10628:68:0;;13511:2:1;10628:68:0;;;13493:21:1;;;13530:18;;;13523:30;13589:34;13569:18;;;13562:62;13641:18;;10628:68:0;13309:356:1;10628:68:0;28220:8:::1;:17:::0;;::::1;28288:23:::0;;::::1;::::0;::::1;::::0;28245:35;;::::1;28220:17;28245:35;::::0;;;;28220:17;;::::1;28245:35:::0;;;;;;;::::1;28288:23;;::::0;;28336:21:::1;28304:7:::0;28267:13;28336:21:::1;:::i;:::-;28319:8;:38:::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;28121:244:0:o;29489:105::-;10547:7;10574:6;-1:-1:-1;;;;;10574:6:0;205:10;10636:23;10628:68;;;;-1:-1:-1;;;10628:68:0;;13511:2:1;10628:68:0;;;13493:21:1;;;13530:18;;;13523:30;13589:34;13569:18;;;13562:62;13641:18;;10628:68:0;13309:356:1;10628:68:0;29546:40:::1;29561:24;29579:4;29561:9;:24::i;:::-;29546:14;:40::i;:::-;29489:105::o:0;18571:335::-;10547:7;10574:6;-1:-1:-1;;;;;10574:6:0;205:10;10636:23;10628:68;;;;-1:-1:-1;;;10628:68:0;;13511:2:1;10628:68:0;;;13493:21:1;;;13530:18;;;13523:30;13589:34;13569:18;;;13562:62;13641:18;;10628:68:0;13309:356:1;10628:68:0;-1:-1:-1;;;;;18656:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;18655:21;18647:61;;;::::0;-1:-1:-1;;;18647:61:0;;10842:2:1;18647:61:0::1;::::0;::::1;10824:21:1::0;10881:2;10861:18;;;10854:30;10920:29;10900:18;;;10893:57;10967:18;;18647:61:0::1;10640:351:1::0;18647:61:0::1;-1:-1:-1::0;;;;;18722:16:0;::::1;18741:1;18722:16:::0;;;:7:::1;:16;::::0;;;;;:20;18719:108:::1;;-1:-1:-1::0;;;;;18798:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;18778:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;18759:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;18719:108:::1;-1:-1:-1::0;;;;;18837:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;18837:27:0::1;18860:4;18837:27:::0;;::::1;::::0;;;18875:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;;::::1;::::0;;::::1;::::0;;18571:335::o;29236:245::-;10547:7;10574:6;-1:-1:-1;;;;;10574:6:0;205:10;10636:23;10628:68;;;;-1:-1:-1;;;10628:68:0;;13511:2:1;10628:68:0;;;13493:21:1;;;13530:18;;;13523:30;13589:34;13569:18;;;13562:62;13641:18;;10628:68:0;13309:356:1;10628:68:0;29351:31:::1;29369:13:::0;29351:15;:31:::1;:::i;:::-;29386:4;29350:40;29342:49;;;::::0;::::1;;29402:14;:32:::0;;;;29445:12:::1;:28:::0;29236:245::o;15854:198::-;-1:-1:-1;;;;;15944:20:0;;15920:7;15944:20;;;:11;:20;;;;;;;;15940:49;;;-1:-1:-1;;;;;;15973:16:0;;;;;:7;:16;;;;;;;15854:198::o;15940:49::-;-1:-1:-1;;;;;16027:16:0;;;;;;:7;:16;;;;;;16007:37;;:19;:37::i;10724:94::-;10547:7;10574:6;-1:-1:-1;;;;;10574:6:0;205:10;10636:23;10628:68;;;;-1:-1:-1;;;10628:68:0;;13511:2:1;10628:68:0;;;13493:21:1;;;13530:18;;;13523:30;13589:34;13569:18;;;13562:62;13641:18;;10628:68:0;13309:356:1;10628:68:0;10789:21:::1;10807:1;10789:9;:21::i;28630:203::-:0;10547:7;10574:6;-1:-1:-1;;;;;10574:6:0;205:10;10636:23;10628:68;;;;-1:-1:-1;;;10628:68:0;;13511:2:1;10628:68:0;;;13493:21:1;;;13530:18;;;13523:30;13589:34;13569:18;;;13562:62;13641:18;;10628:68:0;13309:356:1;10628:68:0;28762:13:::1;11771:1;28762:2;:13;:::i;:::-;28752:23;::::0;:7;:23:::1;:::i;:::-;28735:14;:40:::0;28812:13:::1;11771:1;28812:2;:13;:::i;:::-;28801:24;::::0;:8;:24:::1;:::i;:::-;28783:15;:42:::0;-1:-1:-1;;28630:203:0:o;27757:356::-;10547:7;10574:6;-1:-1:-1;;;;;10574:6:0;205:10;10636:23;10628:68;;;;-1:-1:-1;;;10628:68:0;;13511:2:1;10628:68:0;;;13493:21:1;;;13530:18;;;13523:30;13589:34;13569:18;;;13562:62;13641:18;;10628:68:0;13309:356:1;10628:68:0;-1:-1:-1;;;;;27858:33:0;::::1;;::::0;;;:26:::1;:33;::::0;;;;;::::1;;:42;;::::0;::::1;;;;27850:111;;;::::0;-1:-1:-1;;;27850:111:0;;9654:2:1;27850:111:0::1;::::0;::::1;9636:21:1::0;9693:2;9673:18;;;9666:30;9732:34;9712:18;;;9705:62;9803:26;9783:18;;;9776:54;9847:19;;27850:111:0::1;9452:420:1::0;27850:111:0::1;-1:-1:-1::0;;;;;27972:33:0;::::1;;::::0;;;:26:::1;:33;::::0;;;;:41;;-1:-1:-1;;27972:41:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;28024:82:::1;;-1:-1:-1::0;;;;;28054:31:0;::::1;;::::0;;;:24:::1;:31;::::0;;;;:38;;-1:-1:-1;;28054:38:0::1;28088:4;28054:38;::::0;;27757:356;;:::o;17234:413::-;205:10;17327:4;17371:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;17371:34:0;;;;;;;;;;17424:35;;;;17416:85;;;;-1:-1:-1;;;17416:85:0;;15509:2:1;17416:85:0;;;15491:21:1;15548:2;15528:18;;;15521:30;15587:34;15567:18;;;15560:62;15658:7;15638:18;;;15631:35;15683:19;;17416:85:0;15307:401:1;17416:85:0;17537:67;205:10;17560:7;17588:15;17569:16;:34;17537:8;:67::i;:::-;-1:-1:-1;17635:4:0;;17234:413;-1:-1:-1;;;17234:413:0:o;16060:167::-;16138:4;16155:42;205:10;16179:9;16190:6;16155:9;:42::i;19522:450::-;10547:7;10574:6;-1:-1:-1;;;;;10574:6:0;205:10;10636:23;10628:68;;;;-1:-1:-1;;;10628:68:0;;13511:2:1;10628:68:0;;;13493:21:1;;;13530:18;;;13523:30;13589:34;13569:18;;;13562:62;13641:18;;10628:68:0;13309:356:1;10628:68:0;19644:9:::1;19640:325;19659:19:::0;;::::1;19640:325;;;19749:8;19708:49;;:24;:37;19733:8;;19742:1;19733:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19708:37:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;19708:37:0;;::::1;;:49;;;;19700:127;;;::::0;-1:-1:-1;;;19700:127:0;;7541:2:1;19700:127:0::1;::::0;::::1;7523:21:1::0;7580:2;7560:18;;;7553:30;7619:34;7599:18;;;7592:62;7690:34;7670:18;;;7663:62;7762:3;7741:19;;;7734:32;7783:19;;19700:127:0::1;7339:469:1::0;19700:127:0::1;19882:8;19842:24;:37;19867:8;;19876:1;19867:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19842:37:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;19842:37:0;:48;;-1:-1:-1;;19842:48:0::1;::::0;::::1;;::::0;;;::::1;::::0;;19910:43;::::1;;;19931:8:::0;;19940:1;19931:11;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;19910:43;::::0;-1:-1:-1;;;;;5123:55:1;;;5105:74;;5093:2;5078:18;19910:43:0::1;;;;;;;19680:3:::0;::::1;::::0;::::1;:::i;:::-;;;;19640:325;;;;19522:450:::0;;;:::o;20372:167::-;10547:7;10574:6;-1:-1:-1;;;;;10574:6:0;205:10;10636:23;10628:68;;;;-1:-1:-1;;;10628:68:0;;13511:2:1;10628:68:0;;;13493:21:1;;;13530:18;;;13523:30;13589:34;13569:18;;;13562:62;13641:18;;10628:68:0;13309:356:1;10628:68:0;20447:21:::1;:32:::0;;;::::1;;::::0;::::1;::::0;;;::::1;;::::0;;20493:38:::1;::::0;::::1;::::0;::::1;::::0;20471:8;5990:14:1;5983:22;5965:41;;5953:2;5938:18;;5825:187;20493:38:0::1;;;;;;;;20372:167:::0;:::o;29951:263::-;10547:7;10574:6;-1:-1:-1;;;;;10574:6:0;205:10;10636:23;10628:68;;;;-1:-1:-1;;;10628:68:0;;13511:2:1;10628:68:0;;;13493:21:1;;;13530:18;;;13523:30;13589:34;13569:18;;;13562:62;13641:18;;10628:68:0;13309:356:1;10628:68:0;-1:-1:-1;;;;;30051:33:0;::::1;;::::0;;;:24:::1;:33;::::0;;;;;::::1;;:45;;::::0;::::1;;;;30043:108;;;::::0;-1:-1:-1;;;30043:108:0;;11198:2:1;30043:108:0::1;::::0;::::1;11180:21:1::0;11237:2;11217:18;;;11210:30;11276:34;11256:18;;;11249:62;11347:20;11327:18;;;11320:48;11385:19;;30043:108:0::1;10996:414:1::0;30043:108:0::1;-1:-1:-1::0;;;;;30162:33:0;;;::::1;;::::0;;;:24:::1;:33;::::0;;;;:44;;-1:-1:-1;;30162:44:0::1;::::0;::::1;;::::0;;;::::1;::::0;;29951:263::o;28373:249::-;10547:7;10574:6;-1:-1:-1;;;;;10574:6:0;205:10;10636:23;10628:68;;;;-1:-1:-1;;;10628:68:0;;13511:2:1;10628:68:0;;;13493:21:1;;;13530:18;;;13523:30;13589:34;13569:18;;;13562:62;13641:18;;10628:68:0;13309:356:1;10628:68:0;28473:9:::1;:18:::0;;::::1;28543:24:::0;;::::1;::::0;::::1;::::0;28499:36;;::::1;28473:18;28499:36;::::0;;;;28473:18;;::::1;28499:36:::0;;;;;;;::::1;28543:24;;::::0;;28593:21:::1;28560:7:::0;28522:13;28593:21:::1;:::i;:::-;28575:9;:39:::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;28373:249:0:o;19980:112::-;10547:7;10574:6;-1:-1:-1;;;;;10574:6:0;205:10;10636:23;10628:68;;;;-1:-1:-1;;;10628:68:0;;13511:2:1;10628:68:0;;;13493:21:1;;;13530:18;;;13523:30;13589:34;13569:18;;;13562:62;13641:18;;10628:68:0;13309:356:1;10628:68:0;-1:-1:-1;;;;;20049:27:0::1;20079:5;20049:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;20049:35:0::1;::::0;;19980:112::o;10826:192::-;10547:7;10574:6;-1:-1:-1;;;;;10574:6:0;205:10;10636:23;10628:68;;;;-1:-1:-1;;;10628:68:0;;13511:2:1;10628:68:0;;;13493:21:1;;;13530:18;;;13523:30;13589:34;13569:18;;;13562:62;13641:18;;10628:68:0;13309:356:1;10628:68:0;-1:-1:-1;;;;;10915:22:0;::::1;10907:73;;;::::0;-1:-1:-1;;;10907:73:0;;8844:2:1;10907:73:0::1;::::0;::::1;8826:21:1::0;8883:2;8863:18;;;8856:30;8922:34;8902:18;;;8895:62;8993:8;8973:18;;;8966:36;9019:19;;10907:73:0::1;8642:402:1::0;10907:73:0::1;10991:19;11001:8;10991:9;:19::i;:::-;10826:192:::0;:::o;23002:335::-;-1:-1:-1;;;;;23095:19:0;;23087:68;;;;-1:-1:-1;;;23087:68:0;;15104:2:1;23087:68:0;;;15086:21:1;15143:2;15123:18;;;15116:30;15182:34;15162:18;;;15155:62;15253:6;15233:18;;;15226:34;15277:19;;23087:68:0;14902:400:1;23087:68:0;-1:-1:-1;;;;;23174:21:0;;23166:68;;;;-1:-1:-1;;;23166:68:0;;9251:2:1;23166:68:0;;;9233:21:1;9290:2;9270:18;;;9263:30;9329:34;9309:18;;;9302:62;9400:4;9380:18;;;9373:32;9422:19;;23166:68:0;9049:398:1;23166:68:0;-1:-1:-1;;;;;23245:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;23297:32;;15859:25:1;;;23297:32:0;;15832:18:1;23297:32:0;;;;;;;23002:335;;;:::o;23345:1637::-;23428:19;;:22;:56;;;;-1:-1:-1;;;;;;23454:30:0;;;;;;:26;:30;;;;;;;;23428:56;23425:118;;;23519:12;23497:19;:34;23425:118;-1:-1:-1;;;;;23563:18:0;;23555:68;;;;-1:-1:-1;;;23555:68:0;;14698:2:1;23555:68:0;;;14680:21:1;14737:2;14717:18;;;14710:30;14776:34;14756:18;;;14749:62;14847:7;14827:18;;;14820:35;14872:19;;23555:68:0;14496:401:1;23555:68:0;-1:-1:-1;;;;;23642:16:0;;23634:64;;;;-1:-1:-1;;;23634:64:0;;7137:2:1;23634:64:0;;;7119:21:1;7176:2;7156:18;;;7149:30;7215:34;7195:18;;;7188:62;7286:5;7266:18;;;7259:33;7309:19;;23634:64:0;6935:399:1;23634:64:0;-1:-1:-1;;;;;23718:11:0;;;;;;:5;:11;;;;;;;;23717:12;23709:57;;;;-1:-1:-1;;;23709:57:0;;11969:2:1;23709:57:0;;;11951:21:1;;;11988:18;;;11981:30;12047:34;12027:18;;;12020:62;12099:18;;23709:57:0;11767:356:1;23709:57:0;23794:1;23785:6;:10;23777:64;;;;-1:-1:-1;;;23777:64:0;;13872:2:1;23777:64:0;;;13854:21:1;13911:2;13891:18;;;13884:30;13950:34;13930:18;;;13923:62;14021:11;14001:18;;;13994:39;14050:19;;23777:64:0;13670:405:1;23777:64:0;23870:15;23880:4;23870:9;:15::i;:::-;23860:6;:25;;23852:86;;;;-1:-1:-1;;;23852:86:0;;8015:2:1;23852:86:0;;;7997:21:1;8054:2;8034:18;;;8027:30;8093:34;8073:18;;;8066:62;8164:19;8144:18;;;8137:47;8201:19;;23852:86:0;7813:413:1;23852:86:0;-1:-1:-1;;;;;23966:24:0;;23949:12;23966:24;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;23994:22:0;;;;;;:18;:22;;;;;;;;23966:50;23964:53;23949:68;;24033:7;24030:631;;;10547:7;10574:6;-1:-1:-1;;;;;24071:15:0;;;10574:6;;24071:15;;;;:51;;-1:-1:-1;;;;;;24090:32:0;;;;;;:26;:32;;;;;;;;24071:51;24068:582;;;24192:12;;24172:19;;:32;;;;:::i;:::-;24159:12;:45;24156:170;;;-1:-1:-1;;;;;24242:9:0;;;;;;:5;:9;;;;;;;;;:16;;-1:-1:-1;;24242:16:0;24254:4;24242:16;;;;;;24282:24;;5105:74:1;;;24254:4:0;;24282:24;;5078:18:1;24282:24:0;;;;;;;24156:170;24361:8;24346:23;:12;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24404:14;;24396:22;;;24388:67;;;;-1:-1:-1;;;24388:67:0;;10481:2:1;24388:67:0;;;10463:21:1;;;10500:18;;;10493:30;10559:34;10539:18;;;10532:62;10611:18;;24388:67:0;10279:356:1;24388:67:0;24068:582;;;24537:9;24522:24;:12;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24581:15;;24573:23;;;24565:69;;;;-1:-1:-1;;;24565:69:0;;10079:2:1;24565:69:0;;;10061:21:1;10118:2;10098:18;;;10091:30;10157:34;10137:18;;;10130:62;10228:3;10208:18;;;10201:31;10249:19;;24565:69:0;9877:397:1;24565:69:0;24705:29;;24677:24;24695:4;24677:9;:24::i;:::-;:57;;:79;;;;-1:-1:-1;24740:16:0;;;;24739:17;24677:79;:116;;;;-1:-1:-1;;;;;;24761:32:0;;;;;;:26;:32;;;;;;;;24760:33;24677:116;:141;;;;-1:-1:-1;24797:21:0;;;;;;;24677:141;24673:248;;;24864:45;24879:29;;24864:14;:45::i;:::-;24933:41;24948:4;24954:2;24958:6;24966:7;24933:14;:41::i;22302:158::-;22343:7;22364:15;22381;22400:19;:17;:19::i;:::-;22363:56;;-1:-1:-1;22363:56:0;-1:-1:-1;22437:15:0;22363:56;;22437:15;:::i;:::-;22430:22;;;;22302:158;:::o;21035:345::-;21108:36;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21108:36:0;21169:29;21181:7;21190;21169:11;:29::i;:::-;21157:41;;21293:52;21305:9;21316:7;21325;21334:10;:8;:10::i;:::-;21293:11;:52::i;:::-;21272:17;;;21209:136;21256:14;;;21209:136;21229:25;;;21209:136;;;21035:345;;;;:::o;25943:930::-;14212:16;:23;;-1:-1:-1;;14212:23:0;14231:4;14212:23;;;26052:12:::1;:19:::0;14212:16;;26052:21:::1;::::0;:19;;::::1;14212:23:::0;26052:19:::1;26072:1;26052:21;:::i;:::-;26140:12;:19:::0;26030:43:::1;::::0;;::::1;::::0;-1:-1:-1;26084:32:0::1;::::0;26030:43;;26119:40:::1;::::0;26140:19;;;::::1;;26119:20:::0;:40:::1;:::i;:::-;:52;;;;:::i;:::-;26084:87:::0;-1:-1:-1;26182:14:0::1;26199:45;26084:87:::0;26199:20;:45:::1;:::i;:::-;26182:62:::0;-1:-1:-1;26282:21:0::1;26348:24;26182:62:::0;26348:16:::1;:24::i;:::-;26385:20;26408:37;26431:14:::0;26408:21:::1;:37;:::i;:::-;26536:12;:19:::0;26385:60;;-1:-1:-1;26456:29:0::1;::::0;26523:32:::1;::::0;26536:19;;::::1;;;26523:11:::0;:32:::1;:::i;:::-;26501:12;:19:::0;26488:32:::1;::::0;26501:19;;::::1;;;26488:12:::0;:32:::1;:::i;:::-;:68;;;;:::i;:::-;26456:100;;26615:61;26628:24;26654:21;26615:12;:61::i;:::-;26726:16;::::0;26777:14:::1;::::0;-1:-1:-1;;;;;26726:16:0;;::::1;::::0;:80:::1;::::0;12425:4:::1;::::0;26753:38:::1;::::0;:21:::1;:38;:::i;:::-;26752:53;;;;:::i;:::-;26726:80;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;26817:14:0::1;::::0;:46:::1;::::0;-1:-1:-1;;;;;26817:14:0;;::::1;::::0;26841:21:::1;26817:46:::0;::::1;;;::::0;:14:::1;:46:::0;:14;:46;26841:21;26817:14;:46;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;14258:16:0;:24;;-1:-1:-1;;14258:24:0;;;-1:-1:-1;;;;;;25943:930:0:o;11026:173::-;11082:16;11101:6;;-1:-1:-1;;;;;11118:17:0;;;;;;;;;;11151:40;;11101:6;;;;;;;11151:40;;11082:16;11151:40;11071:128;11026:173;:::o;25063:872::-;25182:28;25213;25224:7;25233;25213:10;:28::i;:::-;-1:-1:-1;;;;;25258:19:0;;;;;;:11;:19;;;;;;25182:59;;-1:-1:-1;25258:19:0;;25254:82;;;-1:-1:-1;;;;;25298:15:0;;;;;;:7;:15;;;;;:26;;25317:7;;25298:15;:26;;25317:7;;25298:26;:::i;:::-;;;;-1:-1:-1;;25254:82:0;-1:-1:-1;;;;;25351:22:0;;;;;;:11;:22;;;;;;;;25347:98;;;25416:17;;;;-1:-1:-1;;;;;25394:18:0;;;;;;:7;:18;;;;;:39;;:18;;;:39;;25416:17;;25394:39;:::i;:::-;;;;-1:-1:-1;;25347:98:0;25476:9;;-1:-1:-1;;;;;25457:15:0;;25476:9;25457:15;;;:7;:15;;;;;:28;;:15;;25476:9;25457:28;;25476:9;;25457:28;:::i;:::-;;;;-1:-1:-1;;25518:17:0;;;;;-1:-1:-1;;;;;25496:18:0;;;;;;:7;:18;;;;;;:39;;25518:17;;25496:18;;:39;;25518:17;;25496:39;:::i;:::-;;;;-1:-1:-1;;25546:172:0;;;;25578:27;25590:1;:6;;;25598:1;:6;;;25578:11;:27::i;:::-;25616:32;25628:1;:9;;;25638:1;:9;;;25616:11;:32::i;:::-;25689:4;-1:-1:-1;;;;;25664:42:0;25673:6;-1:-1:-1;;;;;25664:42:0;;25696:1;:9;;;25664:42;;;;15859:25:1;;15847:2;15832:18;;15713:177;25664:42:0;;;;;;;;25546:172;-1:-1:-1;;;;;25736:35:0;;;;;;:24;:35;;;;;;;;;:77;;;25798:15;;25775:20;25785:9;25775;:20::i;:::-;:38;;25736:77;25728:137;;;;-1:-1:-1;;;25728:137:0;;14282:2:1;25728:137:0;;;14264:21:1;14321:2;14301:18;;;14294:30;14360:34;14340:18;;;14333:62;14431:17;14411:18;;;14404:45;14466:19;;25728:137:0;14080:411:1;25728:137:0;25898:9;-1:-1:-1;;;;;25881:46:0;25890:6;-1:-1:-1;;;;;25881:46:0;;25909:1;:17;;;25881:46;;;;15859:25:1;;15847:2;15832:18;;15713:177;25881:46:0;;;;;;;;25161:774;25063:872;;;;:::o;22468:524::-;22565:7;;22601;;22518;;;;;22619:263;22643:9;:16;22639:20;;22619:263;;;22709:7;22685;:21;22693:9;22703:1;22693:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;22693:12:0;22685:21;;;;;;;;;;;;;:31;;:66;;;22744:7;22720;:21;22728:9;22738:1;22728:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;22728:12:0;22720:21;;;;;;;;;;;;;:31;22685:66;22681:97;;;22761:7;;22770;;22753:25;;;;;;;22468:524;;:::o;22681:97::-;22803:7;:21;22811:9;22821:1;22811:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;22811:12:0;22803:21;;;;;;;;;;;;;22793:31;;;;:::i;:::-;;;22849:7;:21;22857:9;22867:1;22857:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;22857:12:0;22849:21;;;;;;;;;;;;;22839:31;;;;:::i;:::-;;-1:-1:-1;22661:3:0;;;;:::i;:::-;;;;22619:263;;;;22914:7;;22906;;:15;;;;:::i;:::-;22896:7;:25;22892:56;;;22931:7;;22940;;22923:25;;;;;;22468:524;;:::o;22892:56::-;22967:7;;22976;;-1:-1:-1;22468:524:0;-1:-1:-1;22468:524:0:o;21388:386::-;21462:28;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21462:28:0;21509:7;21505:86;;21531:17;;;:27;;;21571:8;;21505:86;21618:12;:16;21635:3;;21610:24;;21618:16;;21610:7;:24;:::i;:::-;:28;;;;:::i;:::-;21601:6;;;:37;21669:12;:19;21689:3;;21661:27;;21669:19;;;;;21661:7;:27;:::i;:::-;:31;;;;:::i;:::-;21649:9;;;:43;;;21731:6;;;;21723:14;;:7;:14;:::i;:::-;:24;;;;:::i;:::-;21703:17;;;:44;21388:386;;;;:::o;21782:512::-;21907:15;;;;22001:19;22009:11;22001:7;:19;:::i;:::-;21991:29;;22037:7;22033:66;;-1:-1:-1;22066:7:0;;-1:-1:-1;22083:1:0;;-1:-1:-1;22083:1:0;22059:28;;22033:66;22125:11;22118:1;:6;;;:18;;;;:::i;:::-;22111:25;;22167:11;22157:1;:9;;;:21;;;;:::i;:::-;22147:31;-1:-1:-1;22147:31:0;22208:12;22216:4;22208:7;:12;:::i;:::-;:20;;;;:::i;:::-;22189:39;;21782:512;;;;;;;;;;:::o;26881:571::-;26973:16;;;26987:1;26973:16;;;;;;;;26949:21;;26973:16;;;;;;;;;;-1:-1:-1;26973:16:0;26949:40;;27018:4;27000;27005:1;27000:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;27000:23:0;;;-1:-1:-1;;;;;27000:23:0;;;;;27044:15;;;;;;;;;-1:-1:-1;;;;;27044:15:0;-1:-1:-1;;;;;27044:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27034:4;27039:1;27034:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27034:32:0;;;:7;;;;;;;;;;:32;;;;27115:15;;27100:4;16316:7;16343:18;;;:11;:18;;;;;;27115:15;;;;;;;16343:27;;;;;;27135:11;-1:-1:-1;27079:156:0;;;27193:15;;27161:62;;27178:4;;27193:15;;;-1:-1:-1;;;;;27193:15:0;-1:-1:-1;;27161:8:0;:62::i;:::-;27247:15;;:197;;;;;:15;;;;-1:-1:-1;;;;;27247:15:0;;:66;;:197;;27328:11;;27354:1;;27371:4;;27398;;27418:15;;27247:197;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26936:516;26881:571;:::o;27460:289::-;27541:15;;-1:-1:-1;;;;;27541:15:0;;;;;:31;27580:9;27613:4;27633:11;27659:1;;27693:7;10547;10574:6;-1:-1:-1;;;;;10574:6:0;;10501:87;27693:7;27541:200;;;;;;;;;;-1:-1:-1;;;;;5572:15:1;;;27541:200:0;;;5554:34:1;5604:18;;;5597:34;;;;5647:18;;;5640:34;;;;5690:18;;;5683:34;5754:15;;;5733:19;;;5726:44;27715:15:0;5786:19:1;;;5779:35;5465:19;;27541:200:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;27460:289;;:::o;20645:125::-;20724:4;20713:7;;:15;;;;;;;:::i;:::-;;;;-1:-1:-1;;20739:11:0;:23;;20758:4;;20739:11;:15;;:23;;20758:4;;20739:23;:::i;:::-;;;;-1:-1:-1;;;;20645:125:0:o;20778:249::-;20867:4;20851:22;;;;:7;:22;;;;;:32;;20876:7;;20851:22;:32;;20876:7;;20851:32;:::i;:::-;;;;-1:-1:-1;;20917:4:0;20897:26;;;;:11;:26;;;;;;;;20894:77;;;20954:4;20938:22;;;;:7;:22;;;;;:33;;20964:7;;20938:22;:33;;20964:7;;20938:33;:::i;:::-;;;;-1:-1:-1;;20894:77:0;21002:7;20982:11;:18;;;:27;;;;;;;:::i;14:160:1:-;79:20;;135:13;;128:21;118:32;;108:60;;164:1;161;154:12;108:60;14:160;;;:::o;179:156::-;245:20;;305:4;294:16;;284:27;;274:55;;325:1;322;315:12;340:247;399:6;452:2;440:9;431:7;427:23;423:32;420:52;;;468:1;465;458:12;420:52;507:9;494:23;526:31;551:5;526:31;:::i;592:251::-;662:6;715:2;703:9;694:7;690:23;686:32;683:52;;;731:1;728;721:12;683:52;763:9;757:16;782:31;807:5;782:31;:::i;848:404::-;932:6;940;993:2;981:9;972:7;968:23;964:32;961:52;;;1009:1;1006;999:12;961:52;1048:9;1035:23;1067:31;1092:5;1067:31;:::i;:::-;1117:5;-1:-1:-1;1174:2:1;1159:18;;1146:32;1187:33;1146:32;1187:33;:::i;:::-;1239:7;1229:17;;;848:404;;;;;:::o;1650:456::-;1727:6;1735;1743;1796:2;1784:9;1775:7;1771:23;1767:32;1764:52;;;1812:1;1809;1802:12;1764:52;1851:9;1838:23;1870:31;1895:5;1870:31;:::i;:::-;1920:5;-1:-1:-1;1977:2:1;1962:18;;1949:32;1990:33;1949:32;1990:33;:::i;:::-;1650:456;;2042:7;;-1:-1:-1;;;2096:2:1;2081:18;;;;2068:32;;1650:456::o;2111:315::-;2176:6;2184;2237:2;2225:9;2216:7;2212:23;2208:32;2205:52;;;2253:1;2250;2243:12;2205:52;2292:9;2279:23;2311:31;2336:5;2311:31;:::i;:::-;2361:5;-1:-1:-1;2385:35:1;2416:2;2401:18;;2385:35;:::i;:::-;2375:45;;2111:315;;;;;:::o;2431:::-;2499:6;2507;2560:2;2548:9;2539:7;2535:23;2531:32;2528:52;;;2576:1;2573;2566:12;2528:52;2615:9;2602:23;2634:31;2659:5;2634:31;:::i;:::-;2684:5;2736:2;2721:18;;;;2708:32;;-1:-1:-1;;;2431:315:1:o;2751:689::-;2843:6;2851;2859;2912:2;2900:9;2891:7;2887:23;2883:32;2880:52;;;2928:1;2925;2918:12;2880:52;2968:9;2955:23;2997:18;3038:2;3030:6;3027:14;3024:34;;;3054:1;3051;3044:12;3024:34;3092:6;3081:9;3077:22;3067:32;;3137:7;3130:4;3126:2;3122:13;3118:27;3108:55;;3159:1;3156;3149:12;3108:55;3199:2;3186:16;3225:2;3217:6;3214:14;3211:34;;;3241:1;3238;3231:12;3211:34;3296:7;3289:4;3279:6;3276:1;3272:14;3268:2;3264:23;3260:34;3257:47;3254:67;;;3317:1;3314;3307:12;3254:67;3348:4;3340:13;;;;-1:-1:-1;3372:6:1;-1:-1:-1;3397:37:1;;3413:20;;;-1:-1:-1;3397:37:1;:::i;:::-;3387:47;;2751:689;;;;;:::o;3445:180::-;3501:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:52;;;3570:1;3567;3560:12;3522:52;3593:26;3609:9;3593:26;:::i;3630:180::-;3689:6;3742:2;3730:9;3721:7;3717:23;3713:32;3710:52;;;3758:1;3755;3748:12;3710:52;-1:-1:-1;3781:23:1;;3630:180;-1:-1:-1;3630:180:1:o;3815:248::-;3880:6;3888;3941:2;3929:9;3920:7;3916:23;3912:32;3909:52;;;3957:1;3954;3947:12;3909:52;3993:9;3980:23;3970:33;;4022:35;4053:2;4042:9;4038:18;4022:35;:::i;4068:248::-;4136:6;4144;4197:2;4185:9;4176:7;4172:23;4168:32;4165:52;;;4213:1;4210;4203:12;4165:52;-1:-1:-1;;4236:23:1;;;4306:2;4291:18;;;4278:32;;-1:-1:-1;4068:248:1:o;4321:306::-;4409:6;4417;4425;4478:2;4466:9;4457:7;4453:23;4449:32;4446:52;;;4494:1;4491;4484:12;4446:52;4523:9;4517:16;4507:26;;4573:2;4562:9;4558:18;4552:25;4542:35;;4617:2;4606:9;4602:18;4596:25;4586:35;;4321:306;;;;;:::o;4632:322::-;4703:6;4711;4719;4772:2;4760:9;4751:7;4747:23;4743:32;4740:52;;;4788:1;4785;4778:12;4740:52;4811:27;4828:9;4811:27;:::i;:::-;4801:37;;4857:36;4889:2;4878:9;4874:18;4857:36;:::i;:::-;4847:46;;4912:36;4944:2;4933:9;4929:18;4912:36;:::i;6274:656::-;6386:4;6415:2;6444;6433:9;6426:21;6476:6;6470:13;6519:6;6514:2;6503:9;6499:18;6492:34;6544:1;6554:140;6568:6;6565:1;6562:13;6554:140;;;6663:14;;;6659:23;;6653:30;6629:17;;;6648:2;6625:26;6618:66;6583:10;;6554:140;;;6712:6;6709:1;6706:13;6703:91;;;6782:1;6777:2;6768:6;6757:9;6753:22;6749:31;6742:42;6703:91;-1:-1:-1;6846:2:1;6834:15;6851:66;6830:88;6815:104;;;;6921:2;6811:113;;6274:656;-1:-1:-1;;;6274:656:1:o;15895:1026::-;16157:4;16205:3;16194:9;16190:19;16236:6;16225:9;16218:25;16262:2;16300:6;16295:2;16284:9;16280:18;16273:34;16343:3;16338:2;16327:9;16323:18;16316:31;16367:6;16402;16396:13;16433:6;16425;16418:22;16471:3;16460:9;16456:19;16449:26;;16510:2;16502:6;16498:15;16484:29;;16531:1;16541:218;16555:6;16552:1;16549:13;16541:218;;;16620:13;;-1:-1:-1;;;;;16616:62:1;16604:75;;16734:15;;;;16699:12;;;;16577:1;16570:9;16541:218;;;-1:-1:-1;;;;;;;16815:55:1;;;;16810:2;16795:18;;16788:83;-1:-1:-1;;;16902:3:1;16887:19;16880:35;16776:3;15895:1026;-1:-1:-1;;;15895:1026:1:o;17792:128::-;17832:3;17863:1;17859:6;17856:1;17853:13;17850:39;;;17869:18;;:::i;:::-;-1:-1:-1;17905:9:1;;17792:128::o;17925:204::-;17963:3;17999:4;17996:1;17992:12;18031:4;18028:1;18024:12;18066:3;18060:4;18056:14;18051:3;18048:23;18045:49;;;18074:18;;:::i;:::-;18110:13;;17925:204;-1:-1:-1;;;17925:204:1:o;18134:274::-;18174:1;18200;18190:189;;18235:77;18232:1;18225:88;18336:4;18333:1;18326:15;18364:4;18361:1;18354:15;18190:189;-1:-1:-1;18393:9:1;;18134:274::o;18413:482::-;18502:1;18545:5;18502:1;18559:330;18580:7;18570:8;18567:21;18559:330;;;18699:4;-1:-1:-1;;18627:77:1;18621:4;18618:87;18615:113;;;18708:18;;:::i;:::-;18758:7;18748:8;18744:22;18741:55;;;18778:16;;;;18741:55;18857:22;;;;18817:15;;;;18559:330;;;18563:3;18413:482;;;;;:::o;18900:140::-;18958:5;18987:47;19028:4;19018:8;19014:19;19008:4;19094:5;19124:8;19114:80;;-1:-1:-1;19165:1:1;19179:5;;19114:80;19213:4;19203:76;;-1:-1:-1;19250:1:1;19264:5;;19203:76;19295:4;19313:1;19308:59;;;;19381:1;19376:130;;;;19288:218;;19308:59;19338:1;19329:10;;19352:5;;;19376:130;19413:3;19403:8;19400:17;19397:43;;;19420:18;;:::i;:::-;-1:-1:-1;;19476:1:1;19462:16;;19491:5;;19288:218;;19590:2;19580:8;19577:16;19571:3;19565:4;19562:13;19558:36;19552:2;19542:8;19539:16;19534:2;19528:4;19525:12;19521:35;19518:77;19515:159;;;-1:-1:-1;19627:19:1;;;19659:5;;19515:159;19706:34;19731:8;19725:4;19706:34;:::i;:::-;19836:6;-1:-1:-1;;19764:79:1;19755:7;19752:92;19749:118;;;19847:18;;:::i;:::-;19885:20;;19045:866;-1:-1:-1;;;19045:866:1:o;19916:228::-;19956:7;20082:1;-1:-1:-1;;20010:74:1;20007:1;20004:81;19999:1;19992:9;19985:17;19981:105;19978:131;;;20089:18;;:::i;:::-;-1:-1:-1;20129:9:1;;19916:228::o;20149:238::-;20187:7;20227:4;20224:1;20220:12;20259:4;20256:1;20252:12;20319:3;20313:4;20309:14;20304:3;20301:23;20294:3;20287:11;20280:19;20276:49;20273:75;;;20328:18;;:::i;20392:125::-;20432:4;20460:1;20457;20454:8;20451:34;;;20465:18;;:::i;:::-;-1:-1:-1;20502:9:1;;20392:125::o;20522:195::-;20561:3;-1:-1:-1;;20585:5:1;20582:77;20579:103;;;20662:18;;:::i;:::-;-1:-1:-1;20709:1:1;20698:13;;20522:195::o;20722:184::-;20774:77;20771:1;20764:88;20871:4;20868:1;20861:15;20895:4;20892:1;20885:15;20911:184;20963:77;20960:1;20953:88;21060:4;21057:1;21050:15;21084:4;21081:1;21074:15;21100:184;21152:77;21149:1;21142:88;21249:4;21246:1;21239:15;21273:4;21270:1;21263:15;21478:154;-1:-1:-1;;;;;21557:5:1;21553:54;21546:5;21543:65;21533:93;;21622:1;21619;21612:12

Swarm Source

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