ETH Price: $2,464.46 (+2.73%)

Token

Kintsugi Inu (KSUGI)
 

Overview

Max Total Supply

1,000,000,000,000,000 KSUGI

Holders

52

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
322,506,946,178.100863496 KSUGI

Value
$0.00
0x28142c0Fa742a65a427bd20C7e00Cfd14BB7ca62
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:
KintsugiInu

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity Multiple files format)

File 7 of 8: KintsugInu.sol
// SPDX-License-Identifier: NOLICENSE
pragma solidity ^0.8.0;



//  _ __ _        _                 _   _           
// | / /<_>._ _ _| |_ ___ _ _  ___ <_> | |._ _  _ _ 
// |  \ | || ' | | | <_-<| | |/ . || | | || ' || | |
// |_\_\|_||_|_| |_| /__/`___|\_. ||_| |_||_|_|`___|
//                            <___'                 


/* Kintsugi Inu:
* 1 Quadrillion Supply
*
*Tax at Launch:
*Fees on TX: 10%
*Reflections: 2%
*Liquidity: 3%
*Marketing: 5% 
*
*MaxTX on buy: 0.5% of supply
*MaTX on sell: 0.5% of supply
*maxWallet: 1% of supply
* 
*/

import "./Ownable.sol";
import "./IERC20.sol";
import "./IUniswapV2Router02.sol";
import "./IUniswapV2Factory.sol";
import "./Address.sol";

contract KintsugiInu 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 = 10**15 * 10**_decimals;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));

    uint256 public maxTxAmountBuy = _tTotal/200; // 0.5% of supply (5T tokens)
    uint256 public maxTxAmountSell = _tTotal/200; // 0.5% of supply (5T tokens)
    uint256 public maxWalletAmount = _tTotal/100; // 1% of supply
    
    //antisnipers
    uint256 public liqAddedBlockNumber;
    uint256 public blocksToWait = 2;


    address payable public marketingAddress;

    mapping (address => bool) public isAutomatedMarketMakerPair;

    string private constant _name = "Kintsugi Inu";
    string private constant _symbol = "KSUGI";

    bool private inSwapAndLiquify;

    IUniswapV2Router02 public UniswapV2Router;
    address public uniswapPair;
    bool public swapAndLiquifyEnabled = true;
    uint256 public numTokensSellToAddToLiquidity = _tTotal/500;
    bool public blacklistEnabled = true;

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

    feeRatesStruct public buyRates = feeRatesStruct(
     {
      rfi: 2,    //autoreflection rate, in %
      marketing: 5, //marketing fee in % (in ETH)
      autolp: 3, // autolp rate in %
      toSwap: 8 // marketing + autolp
    });

    feeRatesStruct public sellRates = feeRatesStruct(
    {
      rfi: 2,    //autoreflection rate, in %
      marketing: 5, //marketing fee in % (in ETH)
      autolp: 3, // autolp rate in %
      toSwap: 8 // marketing + autolp
    });

    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(msg.sender);
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[marketingAddress]=true;
        _isExcludedFromFee[address(this)]=true;
        
        _isExcludedFromMaxWallet[owner()] = true;
        _isExcludedFromMaxWallet[marketingAddress]=true;
        _isExcludedFromMaxWallet[address(this)]=true;

        _isExcludedFromMaxWallet[uniswapPair] = 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 excludeMultipleAccountsFromFees(address[] calldata accounts, bool excluded) external onlyOwner {
        for(uint256 i = 0; i < accounts.length; i++) {
            _isExcludedFromFee[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(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);
        
        marketingAddress.sendValue(address(this).balance); //we give the remaining tax to marketing (5/8 of the toSwap tax)
    }

    function swapTokensForETH(uint256 tokenAmount) private {

        // generate the Pancakeswap pair path of token -> wETH
        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));
        }

        // make the swap
        UniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ETHAmount) private {

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

    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;
        emit ExcludeFromMaxWallet(_pair, value);

        }
        emit SetAutomatedMarketMakerPair(_pair, value);
    }

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

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

    function setMaxTransactionAmountsPerK(uint256 _maxTxAmountBuyPer10K, uint256 _maxTxAmountSellPer10K) external onlyOwner
    {
     maxTxAmountBuy = _tTotal*_maxTxAmountBuyPer10K/10000;
     maxTxAmountSell = _tTotal*_maxTxAmountSellPer10K/10000;
    }
    
    function setNumTokensSellToAddToLiq(uint256 amountTokens) external onlyOwner
    {
     numTokensSellToAddToLiquidity = amountTokens*10**_decimals;
    }

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

    function manualSwapAndAddToLiq(uint256 amountTokens) external onlyOwner
    {                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           
       swapAndLiquify(amountTokens*10**_decimals);
    }
    
    // Blacklist Snipebots post Block 0,1
    function blacklistBot(address botAddress, bool _isBot) external onlyOwner
    {   require(blacklistEnabled, "The Blacklist function is renounced"); 
    	require(isBot[botAddress]!=_isBot ,"The address is already set to that value");
        isBot[botAddress] = _isBot;
        emit BlacklistedUser(botAddress,_isBot);
    }

    function setMaxWalletAmount(uint256 _maxAmountWalletPer10K) external onlyOwner {
        maxWalletAmount = _tTotal*_maxAmountWalletPer10K/10000;
        emit MaxWalletAmountUpdated(maxWalletAmount);
    }

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

        emit ExcludeFromMaxWallet(account, excluded);
    }
    
    function rescueTokens(IERC20 tokenAddress) external onlyOwner{
        IERC20 token = tokenAddress;
        uint256 tokenAmt = token.balanceOf(address(this));
        require(tokenAmt > 0, 'ERC-20 balance is 0');

        token.transfer(msg.sender, tokenAmt);
    }
    // Function to completely disable Blacklisting forever
    function disableBlacklistFunction() external onlyOwner {
      blacklistEnabled=false;
    }

}


File 1 of 8: Address.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

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

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    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");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    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");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    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);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    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);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    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);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    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);
            }
        }
    }
}

File 2 of 8: Context.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

File 3 of 8: IERC20.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

File 4 of 8: IUniswapV2Factory.sol
pragma solidity >=0.5.0;

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

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

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

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

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

File 5 of 8: IUniswapV2Router01.sol
pragma solidity >=0.6.2;

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

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

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

File 6 of 8: IUniswapV2Router02.sol
pragma solidity >=0.6.2;

import './IUniswapV2Router01.sol';

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

File 8 of 8: Ownable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./Context.sol";

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _setOwner(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _setOwner(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    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 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":[{"internalType":"address","name":"botAddress","type":"address"},{"internalType":"bool","name":"_isBot","type":"bool"}],"name":"blacklistBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"blacklistEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blocksToWait","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyRates","outputs":[{"internalType":"uint8","name":"rfi","type":"uint8"},{"internalType":"uint8","name":"marketing","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":[],"name":"disableBlacklistFunction","outputs":[],"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":"excludeMultipleAccountsFromFees","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":[{"internalType":"uint256","name":"amountTokens","type":"uint256"}],"name":"manualSwapAndAddToLiq","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","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":[{"internalType":"contract IERC20","name":"tokenAddress","type":"address"}],"name":"rescueTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellRates","outputs":[{"internalType":"uint8","name":"rfi","type":"uint8"},{"internalType":"uint8","name":"marketing","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":"_marketing","type":"uint8"},{"internalType":"uint8","name":"_autolp","type":"uint8"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_marketingAddress","type":"address"}],"name":"setMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTxAmountBuyPer10K","type":"uint256"},{"internalType":"uint256","name":"_maxTxAmountSellPer10K","type":"uint256"}],"name":"setMaxTransactionAmountsPerK","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxAmountWalletPer10K","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":"_marketing","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":[],"name":"uniswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052620000126009600a6200068e565b620000259066038d7ea4c68000620006a6565b60098190556200003890600019620006de565b6200004690600019620006f5565b600a5560c86009546200005a91906200070f565b600b5560c86009546200006e91906200070f565b600c5560646009546200008291906200070f565b600d556002600f556013805460ff60a01b1916600160a01b179055600954620000af906101f4906200070f565b60145560158054600160ff1990911617905560408051608080820183526002808352600560208085018290526003858701819052600860609687018190526016805463ffffffff199081166308030502908117928390558a519889018b52878952948801959095529786019190915293909401929092526017805490921690921790556018805461ffff191661010080850460ff9081169091029190911790921763ffff0000191663ff00000019620100008086048516021617630100000093849004929092169092021790553480156200018957600080fd5b50620001953362000529565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001ed573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000213919062000726565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000261573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000287919062000726565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620002d5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002fb919062000726565b601380546001600160a01b0319166001600160a01b039283169081178255600090815260116020526040808220805460ff1916600190811790915592549051929316917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab9190a360128054610100600160a81b0319166101006001600160a01b03841602179055600a54600160006200039c6000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600090812091909155601080546001600160a01b03191633179055600190600490620003e66000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790556010549091168152600490925280822080548416600190811790915530835290822080549093168117909255600690620004566000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790556010548216815260069093528183208054851660019081179091553084528284208054861682179055601354909116835291208054909216179055620004d26000546001600160a01b031690565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6009546040516200051a91815260200190565b60405180910390a35062000751565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620005d0578160001904821115620005b457620005b462000579565b80851615620005c257918102915b93841c939080029062000594565b509250929050565b600082620005e95750600162000688565b81620005f85750600062000688565b81600181146200061157600281146200061c576200063c565b600191505062000688565b60ff84111562000630576200063062000579565b50506001821b62000688565b5060208310610133831016604e8410600b841016171562000661575081810a62000688565b6200066d83836200058f565b806000190482111562000684576200068462000579565b0290505b92915050565b60006200069f60ff841683620005d8565b9392505050565b6000816000190483118215151615620006c357620006c362000579565b500290565b634e487b7160e01b600052601260045260246000fd5b600082620006f057620006f0620006c8565b500690565b6000828210156200070a576200070a62000579565b500390565b600082620007215762000721620006c8565b500490565b6000602082840312156200073957600080fd5b81516001600160a01b03811681146200069f57600080fd5b61356680620007616000396000f3fe6080604052600436106103385760003560e01c80638236802e116101ab578063bd94545b116100f7578063d44e586e11610095578063dd62ed3e1161006f578063dd62ed3e14610a5a578063e22b62de14610aa0578063ea2f0b3714610ac0578063f2fde38b14610ae057600080fd5b8063d44e586e14610a18578063d6c180bf14610a2e578063d8dcac4f14610a4457600080fd5b8063c49b9a80116100d1578063c49b9a80146109a2578063c816841b146109c2578063d12a7688146109e2578063d2fcc001146109f857600080fd5b8063bd94545b14610948578063bffb691d14610968578063c492f0461461098257600080fd5b80639a7a23d611610164578063a5ece9411161013e578063a5ece941146108d2578063a9059cbb146108f2578063a9d3b3ae14610912578063aa4bde281461093257600080fd5b80639a7a23d6146108625780639ba5e4d514610882578063a457c2d7146108b257600080fd5b80638236802e1461078757806388f82020146107a75780638a0eef5a146107e05780638da5cb5b146107f6578063906e9dd01461081457806395d89b411461083457600080fd5b80633bbac579116102855780636dd3d39f11610223578063715018a6116101fd578063715018a6146106ec57806373cafdc2146107015780637949a4031461073757806379eb8d1d1461076757600080fd5b80636dd3d39f1461063057806370a0823114610669578063713898cd1461068957600080fd5b80634a74bb021161025f5780634a74bb021461059657806350be7cdb146105b757806352390c02146105d75780635342acb4146105f757600080fd5b80633bbac57914610526578063437823ec146105565780634549b0391461057657600080fd5b806323b872dd116102f25780632d838119116102cc5780632d838119146104aa578063313ce567146104ca5780633685d419146104e6578063395093511461050657600080fd5b806323b872dd1461045557806327a14fc2146104755780632b0443701461049557600080fd5b8062ae3bf8146103445780630467978014610366578063055add0d1461038657806306fdde03146103c8578063095ea7b31461040657806318160ddd1461043657600080fd5b3661033f57005b600080fd5b34801561035057600080fd5b5061036461035f366004612f53565b610b00565b005b34801561037257600080fd5b50610364610381366004612f70565b610c5f565b34801561039257600080fd5b506012546103ab9061010090046001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156103d457600080fd5b5060408051808201909152600c81526b4b696e747375676920496e7560a01b60208201525b6040516103bf9190612f89565b34801561041257600080fd5b50610426610421366004612fde565b610ca5565b60405190151581526020016103bf565b34801561044257600080fd5b506009545b6040519081526020016103bf565b34801561046157600080fd5b5061042661047036600461300a565b610cbc565b34801561048157600080fd5b50610364610490366004612f70565b610d66565b3480156104a157600080fd5b50610364610de7565b3480156104b657600080fd5b506104476104c5366004612f70565b610e1d565b3480156104d657600080fd5b50604051600981526020016103bf565b3480156104f257600080fd5b50610364610501366004612f53565b610ea1565b34801561051257600080fd5b50610426610521366004612fde565b611058565b34801561053257600080fd5b50610426610541366004612f53565b60076020526000908152604090205460ff1681565b34801561056257600080fd5b50610364610571366004612f53565b611094565b34801561058257600080fd5b50610447610591366004613059565b6110e2565b3480156105a257600080fd5b5060135461042690600160a01b900460ff1681565b3480156105c357600080fd5b506103646105d236600461309f565b61116c565b3480156105e357600080fd5b506103646105f2366004612f53565b6111f4565b34801561060357600080fd5b50610426610612366004612f53565b6001600160a01b031660009081526004602052604090205460ff1690565b34801561063c57600080fd5b5061042661064b366004612f53565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561067557600080fd5b50610447610684366004612f53565b611347565b34801561069557600080fd5b506017546106bf9060ff808216916101008104821691620100008204811691630100000090041684565b6040805160ff958616815293851660208501529184169183019190915290911660608201526080016103bf565b3480156106f857600080fd5b506103646113a6565b34801561070d57600080fd5b506016546106bf9060ff808216916101008104821691620100008204811691630100000090041684565b34801561074357600080fd5b50610426610752366004612f53565b60116020526000908152604090205460ff1681565b34801561077357600080fd5b506103646107823660046130e2565b6113dc565b34801561079357600080fd5b506103646107a2366004613104565b611447565b3480156107b357600080fd5b506104266107c2366004612f53565b6001600160a01b031660009081526005602052604090205460ff1690565b3480156107ec57600080fd5b50610447600e5481565b34801561080257600080fd5b506000546001600160a01b03166103ab565b34801561082057600080fd5b5061036461082f366004612f53565b6115b1565b34801561084057600080fd5b506040805180820190915260058152644b5355474960d81b60208201526103f9565b34801561086e57600080fd5b5061036461087d366004613104565b6115fd565b34801561088e57600080fd5b50601954601a5461089d919082565b604080519283526020830191909152016103bf565b3480156108be57600080fd5b506104266108cd366004612fde565b611781565b3480156108de57600080fd5b506010546103ab906001600160a01b031681565b3480156108fe57600080fd5b5061042661090d366004612fde565b61181a565b34801561091e57600080fd5b5061036461092d366004612f70565b611827565b34801561093e57600080fd5b50610447600d5481565b34801561095457600080fd5b50610364610963366004613132565b611872565b34801561097457600080fd5b506015546104269060ff1681565b34801561098e57600080fd5b5061036461099d366004613132565b611a3e565b3480156109ae57600080fd5b506103646109bd3660046131b8565b611ad9565b3480156109ce57600080fd5b506013546103ab906001600160a01b031681565b3480156109ee57600080fd5b5061044760145481565b348015610a0457600080fd5b50610364610a13366004613104565b611b50565b348015610a2457600080fd5b50610447600c5481565b348015610a3a57600080fd5b50610447600b5481565b348015610a5057600080fd5b50610447600f5481565b348015610a6657600080fd5b50610447610a753660046131d5565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610aac57600080fd5b50610364610abb36600461309f565b611c5e565b348015610acc57600080fd5b50610364610adb366004612f53565b611ce6565b348015610aec57600080fd5b50610364610afb366004612f53565b611d31565b6000546001600160a01b03163314610b335760405162461bcd60e51b8152600401610b2a90613203565b60405180910390fd5b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015610b7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ba09190613238565b905060008111610be85760405162461bcd60e51b815260206004820152601360248201527204552432d32302062616c616e6365206973203606c1b6044820152606401610b2a565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015610c35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c599190613251565b50505050565b6000546001600160a01b03163314610c895760405162461bcd60e51b8152600401610b2a90613203565b610c956009600a613368565b610c9f9082613377565b60145550565b6000610cb2338484611dc9565b5060015b92915050565b6000610cc9848484611eed565b6001600160a01b038416600090815260036020908152604080832033845290915290205482811015610d4e5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610b2a565b610d5b8533858403611dc9565b506001949350505050565b6000546001600160a01b03163314610d905760405162461bcd60e51b8152600401610b2a90613203565b61271081600954610da19190613377565b610dab9190613396565b600d8190556040519081527f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e001906020015b60405180910390a150565b6000546001600160a01b03163314610e115760405162461bcd60e51b8152600401610b2a90613203565b6015805460ff19169055565b6000600a54821115610e845760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610b2a565b6000610e8e6123c5565b9050610e9a8184613396565b9392505050565b6000546001600160a01b03163314610ecb5760405162461bcd60e51b8152600401610b2a90613203565b6001600160a01b03811660009081526005602052604090205460ff16610f335760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610b2a565b60005b60085481101561105457816001600160a01b031660088281548110610f5d57610f5d6133b8565b6000918252602090912001546001600160a01b031614156110425760088054610f88906001906133ce565b81548110610f9857610f986133b8565b600091825260209091200154600880546001600160a01b039092169183908110610fc457610fc46133b8565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff19169055600880548061101c5761101c6133e5565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b8061104c816133fb565b915050610f36565b5050565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610cb291859061108f908690613416565b611dc9565b6000546001600160a01b031633146110be5760405162461bcd60e51b8152600401610b2a90613203565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b60006009548311156111365760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610b2a565b816111525760006111488460016123e8565b519150610cb69050565b600061115f8460016123e8565b602001519150610cb69050565b6000546001600160a01b031633146111965760405162461bcd60e51b8152600401610b2a90613203565b6016805460ff838116620100000262ff0000198683166101000261ffff199094169288169290921792909217161790556111d0818361342e565b6016805460ff9290921663010000000263ff00000019909216919091179055505050565b6000546001600160a01b0316331461121e5760405162461bcd60e51b8152600401610b2a90613203565b6001600160a01b03811660009081526005602052604090205460ff16156112875760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610b2a565b6001600160a01b038116600090815260016020526040902054156112e1576001600160a01b0381166000908152600160205260409020546112c790610e1d565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6001600160a01b03811660009081526005602052604081205460ff161561138457506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610cb690610e1d565b6000546001600160a01b031633146113d05760405162461bcd60e51b8152600401610b2a90613203565b6113da600061245e565b565b6000546001600160a01b031633146114065760405162461bcd60e51b8152600401610b2a90613203565b612710826009546114179190613377565b6114219190613396565b600b5560095461271090611436908390613377565b6114409190613396565b600c555050565b6000546001600160a01b031633146114715760405162461bcd60e51b8152600401610b2a90613203565b60155460ff166114cf5760405162461bcd60e51b815260206004820152602360248201527f54686520426c61636b6c6973742066756e6374696f6e2069732072656e6f756e60448201526218d95960ea1b6064820152608401610b2a565b6001600160a01b03821660009081526007602052604090205460ff161515811515141561154f5760405162461bcd60e51b815260206004820152602860248201527f546865206164647265737320697320616c72656164792073657420746f20746860448201526761742076616c756560c01b6064820152608401610b2a565b6001600160a01b038216600081815260076020908152604091829020805460ff1916851515908117909155915192835290917f3159dadbd8e2d720a851b412e3358e7e44bb11734c9bfd5715340e21798e8b2591015b60405180910390a25050565b6000546001600160a01b031633146115db5760405162461bcd60e51b8152600401610b2a90613203565b601080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146116275760405162461bcd60e51b8152600401610b2a90613203565b6001600160a01b03821660009081526011602052604090205460ff16151581151514156116bc5760405162461bcd60e51b815260206004820152603860248201527f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160448201527f6c72656164792073657420746f20746861742076616c756500000000000000006064820152608401610b2a565b6001600160a01b0382166000908152601160205260409020805460ff19168215801591909117909155611745576001600160a01b038216600081815260066020908152604091829020805460ff191660011790559051918252821515917f4a8452f723db48bf05f301f94d62a2cf7a72976cde77d83e3646584858b8f4b2910160405180910390a25b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526003602090815260408083206001600160a01b0386168452909152812054828110156118035760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b2a565b6118103385858403611dc9565b5060019392505050565b6000610cb2338484611eed565b6000546001600160a01b031633146118515760405162461bcd60e51b8152600401610b2a90613203565b61186f6118606009600a613368565b61186a9083613377565b6124ae565b50565b6000546001600160a01b0316331461189c5760405162461bcd60e51b8152600401610b2a90613203565b60005b82811015610c5957811515600660008686858181106118c0576118c06133b8565b90506020020160208101906118d59190612f53565b6001600160a01b0316815260208101919091526040016000205460ff16151514156119725760405162461bcd60e51b815260206004820152604160248201527f5f69734578636c7564656446726f6d4d617857616c6c657420616c726561647960448201527f2073657420746f20746861742076616c756520666f72206f6e652077616c6c656064820152601d60fa1b608482015260a401610b2a565b8160066000868685818110611989576119896133b8565b905060200201602081019061199e9190612f53565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558115157f4a8452f723db48bf05f301f94d62a2cf7a72976cde77d83e3646584858b8f4b28585848181106119fc576119fc6133b8565b9050602002016020810190611a119190612f53565b6040516001600160a01b03909116815260200160405180910390a280611a36816133fb565b91505061189f565b6000546001600160a01b03163314611a685760405162461bcd60e51b8152600401610b2a90613203565b60005b82811015610c59578160046000868685818110611a8a57611a8a6133b8565b9050602002016020810190611a9f9190612f53565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580611ad1816133fb565b915050611a6b565b6000546001600160a01b03163314611b035760405162461bcd60e51b8152600401610b2a90613203565b60138054821515600160a01b0260ff60a01b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990610ddc90831515815260200190565b6000546001600160a01b03163314611b7a5760405162461bcd60e51b8152600401610b2a90613203565b6001600160a01b03821660009081526006602052604090205460ff1615158115151415611c045760405162461bcd60e51b815260206004820152603260248201527f5f69734578636c7564656446726f6d4d617857616c6c657420616c72656164796044820152712073657420746f20746861742076616c756560701b6064820152608401610b2a565b6001600160a01b038216600081815260066020908152604091829020805460ff1916851515908117909155915192835290917f4a8452f723db48bf05f301f94d62a2cf7a72976cde77d83e3646584858b8f4b291016115a5565b6000546001600160a01b03163314611c885760405162461bcd60e51b8152600401610b2a90613203565b6017805460ff838116620100000262ff0000198683166101000261ffff19909416928816929092179290921716179055611cc2818361342e565b6017805460ff9290921663010000000263ff00000019909216919091179055505050565b6000546001600160a01b03163314611d105760405162461bcd60e51b8152600401610b2a90613203565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b03163314611d5b5760405162461bcd60e51b8152600401610b2a90613203565b6001600160a01b038116611dc05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b2a565b61186f8161245e565b6001600160a01b038316611e2b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b2a565b6001600160a01b038216611e8c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b2a565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600e54158015611f1557506001600160a01b03821660009081526011602052604090205460ff165b15611f1f5743600e555b6001600160a01b038316611f835760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b2a565b6001600160a01b038216611fe55760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b2a565b6001600160a01b03831660009081526007602052604090205460ff161561204e5760405162461bcd60e51b815260206004820181905260248201527f45524332303a206164647265737320626c61636b6c69737465642028626f74296044820152606401610b2a565b600081116120b05760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610b2a565b6120b983611347565b8111156121225760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b6064820152608401610b2a565b6001600160a01b03831660009081526004602052604081205460ff168061216157506001600160a01b03831660009081526004602052604090205460ff165b1590508015612352576001600160a01b03841660009081526011602052604090205460ff16156122a657600f54600e5461219b9190613416565b4310156121ff576001600160a01b038316600081815260076020908152604091829020805460ff19166001908117909155915192835290917f3159dadbd8e2d720a851b412e3358e7e44bb11734c9bfd5715340e21798e8b25910160405180910390a25b6016546018805460ff80841661ffff19909216919091176101008085048316021763ffff000019166201000080850483160263ff00000019161763010000009384900491909116909202919091179055600b548211156122a15760405162461bcd60e51b815260206004820181905260248201527f616d6f756e74206d757374206265203c3d206d61785478416d6f756e744275796044820152606401610b2a565b612352565b6017546018805460ff80841661ffff19909216919091176101008085048316021763ffff000019166201000080850483160263ff00000019161763010000009384900491909116909202919091179055600c548211156123525760405162461bcd60e51b815260206004820152602160248201527f616d6f756e74206d757374206265203c3d206d61785478416d6f756e7453656c6044820152601b60fa1b6064820152608401610b2a565b60145461235e30611347565b1015801561236f575060125460ff16155b801561239457506001600160a01b03841660009081526011602052604090205460ff16155b80156123a95750601354600160a01b900460ff165b156123b9576123b96014546124ae565b610c5984848484612598565b60008060006123d2612816565b90925090506123e18183613396565b9250505090565b6124286040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6124328383612999565b90506124478184846124426123c5565b612a5b565b606085015260408401526020830152815292915050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6012805460ff191660011790556018546000906124d6906301000000900460ff166002613453565b60185460ff918216925060009183916124f791620100009091041685613377565b6125019190613396565b9050600061250f82856133ce565b90504761251b82612ac6565b600061252782476133ce565b6018549091506000906125439062010000900460ff16876133ce565b6018546125599062010000900460ff1684613377565b6125639190613396565b905061256f8582612c79565b601054612585906001600160a01b031647612d75565b50506012805460ff191690555050505050565b60006125a483836123e8565b6001600160a01b03861660009081526005602052604090205490915060ff16156125f6576001600160a01b038516600090815260026020526040812080548592906125f09084906133ce565b90915550505b6001600160a01b03841660009081526005602052604090205460ff161561264a5760808101516001600160a01b03851660009081526002602052604081208054909190612644908490613416565b90915550505b80516001600160a01b038616600090815260016020526040812080549091906126749084906133ce565b90915550506020808201516001600160a01b03861660009081526001909252604082208054919290916126a8908490613416565b90915550508115612729576126c581604001518260a00151612e93565b6126d781606001518260c00151612ec8565b306001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360c0015160405161272091815260200190565b60405180910390a35b6001600160a01b03841660009081526006602052604090205460ff168061275a5750600d5461275785611347565b11155b6127be5760405162461bcd60e51b815260206004820152602f60248201527f526563697069656e742063616e6e6f7420686f6c64206d6f7265207468616e2060448201526e1b585e15d85b1b195d105b5bdd5b9d608a1b6064820152608401610b2a565b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836080015160405161280791815260200190565b60405180910390a35050505050565b600a546009546000918291825b60085481101561296857826001600060088481548110612845576128456133b8565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806128b05750816002600060088481548110612889576128896133b8565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156128c657600a54600954945094505050509091565b60016000600883815481106128dd576128dd6133b8565b60009182526020808320909101546001600160a01b0316835282019290925260400190205461290c90846133ce565b92506002600060088381548110612925576129256133b8565b60009182526020808320909101546001600160a01b0316835282019290925260400190205461295490836133ce565b915080612960816133fb565b915050612823565b50600954600a546129799190613396565b82101561299057600a546009549350935050509091565b90939092509050565b6129d96040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b816129ea5760808101839052610cb6565b6018546064906129fd9060ff1685613377565b612a079190613396565b60a0820152601854606490612a26906301000000900460ff1685613377565b612a309190613396565b60c0820181905260a0820151612a4690856133ce565b612a5091906133ce565b608082015292915050565b6000808080612a6a8588613377565b935085612a7f57508291506000905080612abb565b848860a00151612a8f9190613377565b9150848860c00151612aa19190613377565b905080612aae83866133ce565b612ab891906133ce565b92505b945094509450949050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612afb57612afb6133b8565b60200260200101906001600160a01b031690816001600160a01b031681525050601260019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b929190613474565b81600181518110612ba557612ba56133b8565b6001600160a01b03928316602091820292909201810191909152601254306000908152600383526040808220610100909304909416815291522054821115612c0657601254612c0690309061010090046001600160a01b0316600019611dc9565b60125460405163791ac94760e01b81526101009091046001600160a01b03169063791ac94790612c43908590600090869030904290600401613491565b600060405180830381600087803b158015612c5d57600080fd5b505af1158015612c71573d6000803e3d6000fd5b505050505050565b6012546001600160a01b036101009091041663f305d719823085600080612ca86000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015612d10573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612d359190613502565b505060408051848152602081018490527f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b92500160405180910390a15050565b80471015612dc55760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610b2a565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612e12576040519150601f19603f3d011682016040523d82523d6000602084013e612e17565b606091505b5050905080612e8e5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610b2a565b505050565b81600a6000828254612ea591906133ce565b909155505060198054829190600090612ebf908490613416565b90915550505050565b3060009081526001602052604081208054849290612ee7908490613416565b90915550503060009081526005602052604090205460ff1615612f29573060009081526002602052604081208054839290612f23908490613416565b90915550505b8060196001016000828254612ebf9190613416565b6001600160a01b038116811461186f57600080fd5b600060208284031215612f6557600080fd5b8135610e9a81612f3e565b600060208284031215612f8257600080fd5b5035919050565b600060208083528351808285015260005b81811015612fb657858101830151858201604001528201612f9a565b81811115612fc8576000604083870101525b50601f01601f1916929092016040019392505050565b60008060408385031215612ff157600080fd5b8235612ffc81612f3e565b946020939093013593505050565b60008060006060848603121561301f57600080fd5b833561302a81612f3e565b9250602084013561303a81612f3e565b929592945050506040919091013590565b801515811461186f57600080fd5b6000806040838503121561306c57600080fd5b82359150602083013561307e8161304b565b809150509250929050565b803560ff8116811461309a57600080fd5b919050565b6000806000606084860312156130b457600080fd5b6130bd84613089565b92506130cb60208501613089565b91506130d960408501613089565b90509250925092565b600080604083850312156130f557600080fd5b50508035926020909101359150565b6000806040838503121561311757600080fd5b823561312281612f3e565b9150602083013561307e8161304b565b60008060006040848603121561314757600080fd5b833567ffffffffffffffff8082111561315f57600080fd5b818601915086601f83011261317357600080fd5b81358181111561318257600080fd5b8760208260051b850101111561319757600080fd5b602092830195509350508401356131ad8161304b565b809150509250925092565b6000602082840312156131ca57600080fd5b8135610e9a8161304b565b600080604083850312156131e857600080fd5b82356131f381612f3e565b9150602083013561307e81612f3e565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006020828403121561324a57600080fd5b5051919050565b60006020828403121561326357600080fd5b8151610e9a8161304b565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156132bf5781600019048211156132a5576132a561326e565b808516156132b257918102915b93841c9390800290613289565b509250929050565b6000826132d657506001610cb6565b816132e357506000610cb6565b81600181146132f957600281146133035761331f565b6001915050610cb6565b60ff8411156133145761331461326e565b50506001821b610cb6565b5060208310610133831016604e8410600b8410161715613342575081810a610cb6565b61334c8383613284565b80600019048211156133605761336061326e565b029392505050565b6000610e9a60ff8416836132c7565b60008160001904831182151516156133915761339161326e565b500290565b6000826133b357634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b6000828210156133e0576133e061326e565b500390565b634e487b7160e01b600052603160045260246000fd5b600060001982141561340f5761340f61326e565b5060010190565b600082198211156134295761342961326e565b500190565b600060ff821660ff84168060ff0382111561344b5761344b61326e565b019392505050565b600060ff821660ff84168160ff04811182151516156133605761336061326e565b60006020828403121561348657600080fd5b8151610e9a81612f3e565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156134e15784516001600160a01b0316835293830193918301916001016134bc565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561351757600080fd5b835192506020840151915060408401519050925092509256fea264697066735822122044ed2797a9bd08024dcb35e31695529764edf29c993368003aa67415f05d1dcb64736f6c634300080b0033

Deployed Bytecode

0x6080604052600436106103385760003560e01c80638236802e116101ab578063bd94545b116100f7578063d44e586e11610095578063dd62ed3e1161006f578063dd62ed3e14610a5a578063e22b62de14610aa0578063ea2f0b3714610ac0578063f2fde38b14610ae057600080fd5b8063d44e586e14610a18578063d6c180bf14610a2e578063d8dcac4f14610a4457600080fd5b8063c49b9a80116100d1578063c49b9a80146109a2578063c816841b146109c2578063d12a7688146109e2578063d2fcc001146109f857600080fd5b8063bd94545b14610948578063bffb691d14610968578063c492f0461461098257600080fd5b80639a7a23d611610164578063a5ece9411161013e578063a5ece941146108d2578063a9059cbb146108f2578063a9d3b3ae14610912578063aa4bde281461093257600080fd5b80639a7a23d6146108625780639ba5e4d514610882578063a457c2d7146108b257600080fd5b80638236802e1461078757806388f82020146107a75780638a0eef5a146107e05780638da5cb5b146107f6578063906e9dd01461081457806395d89b411461083457600080fd5b80633bbac579116102855780636dd3d39f11610223578063715018a6116101fd578063715018a6146106ec57806373cafdc2146107015780637949a4031461073757806379eb8d1d1461076757600080fd5b80636dd3d39f1461063057806370a0823114610669578063713898cd1461068957600080fd5b80634a74bb021161025f5780634a74bb021461059657806350be7cdb146105b757806352390c02146105d75780635342acb4146105f757600080fd5b80633bbac57914610526578063437823ec146105565780634549b0391461057657600080fd5b806323b872dd116102f25780632d838119116102cc5780632d838119146104aa578063313ce567146104ca5780633685d419146104e6578063395093511461050657600080fd5b806323b872dd1461045557806327a14fc2146104755780632b0443701461049557600080fd5b8062ae3bf8146103445780630467978014610366578063055add0d1461038657806306fdde03146103c8578063095ea7b31461040657806318160ddd1461043657600080fd5b3661033f57005b600080fd5b34801561035057600080fd5b5061036461035f366004612f53565b610b00565b005b34801561037257600080fd5b50610364610381366004612f70565b610c5f565b34801561039257600080fd5b506012546103ab9061010090046001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156103d457600080fd5b5060408051808201909152600c81526b4b696e747375676920496e7560a01b60208201525b6040516103bf9190612f89565b34801561041257600080fd5b50610426610421366004612fde565b610ca5565b60405190151581526020016103bf565b34801561044257600080fd5b506009545b6040519081526020016103bf565b34801561046157600080fd5b5061042661047036600461300a565b610cbc565b34801561048157600080fd5b50610364610490366004612f70565b610d66565b3480156104a157600080fd5b50610364610de7565b3480156104b657600080fd5b506104476104c5366004612f70565b610e1d565b3480156104d657600080fd5b50604051600981526020016103bf565b3480156104f257600080fd5b50610364610501366004612f53565b610ea1565b34801561051257600080fd5b50610426610521366004612fde565b611058565b34801561053257600080fd5b50610426610541366004612f53565b60076020526000908152604090205460ff1681565b34801561056257600080fd5b50610364610571366004612f53565b611094565b34801561058257600080fd5b50610447610591366004613059565b6110e2565b3480156105a257600080fd5b5060135461042690600160a01b900460ff1681565b3480156105c357600080fd5b506103646105d236600461309f565b61116c565b3480156105e357600080fd5b506103646105f2366004612f53565b6111f4565b34801561060357600080fd5b50610426610612366004612f53565b6001600160a01b031660009081526004602052604090205460ff1690565b34801561063c57600080fd5b5061042661064b366004612f53565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561067557600080fd5b50610447610684366004612f53565b611347565b34801561069557600080fd5b506017546106bf9060ff808216916101008104821691620100008204811691630100000090041684565b6040805160ff958616815293851660208501529184169183019190915290911660608201526080016103bf565b3480156106f857600080fd5b506103646113a6565b34801561070d57600080fd5b506016546106bf9060ff808216916101008104821691620100008204811691630100000090041684565b34801561074357600080fd5b50610426610752366004612f53565b60116020526000908152604090205460ff1681565b34801561077357600080fd5b506103646107823660046130e2565b6113dc565b34801561079357600080fd5b506103646107a2366004613104565b611447565b3480156107b357600080fd5b506104266107c2366004612f53565b6001600160a01b031660009081526005602052604090205460ff1690565b3480156107ec57600080fd5b50610447600e5481565b34801561080257600080fd5b506000546001600160a01b03166103ab565b34801561082057600080fd5b5061036461082f366004612f53565b6115b1565b34801561084057600080fd5b506040805180820190915260058152644b5355474960d81b60208201526103f9565b34801561086e57600080fd5b5061036461087d366004613104565b6115fd565b34801561088e57600080fd5b50601954601a5461089d919082565b604080519283526020830191909152016103bf565b3480156108be57600080fd5b506104266108cd366004612fde565b611781565b3480156108de57600080fd5b506010546103ab906001600160a01b031681565b3480156108fe57600080fd5b5061042661090d366004612fde565b61181a565b34801561091e57600080fd5b5061036461092d366004612f70565b611827565b34801561093e57600080fd5b50610447600d5481565b34801561095457600080fd5b50610364610963366004613132565b611872565b34801561097457600080fd5b506015546104269060ff1681565b34801561098e57600080fd5b5061036461099d366004613132565b611a3e565b3480156109ae57600080fd5b506103646109bd3660046131b8565b611ad9565b3480156109ce57600080fd5b506013546103ab906001600160a01b031681565b3480156109ee57600080fd5b5061044760145481565b348015610a0457600080fd5b50610364610a13366004613104565b611b50565b348015610a2457600080fd5b50610447600c5481565b348015610a3a57600080fd5b50610447600b5481565b348015610a5057600080fd5b50610447600f5481565b348015610a6657600080fd5b50610447610a753660046131d5565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610aac57600080fd5b50610364610abb36600461309f565b611c5e565b348015610acc57600080fd5b50610364610adb366004612f53565b611ce6565b348015610aec57600080fd5b50610364610afb366004612f53565b611d31565b6000546001600160a01b03163314610b335760405162461bcd60e51b8152600401610b2a90613203565b60405180910390fd5b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015610b7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ba09190613238565b905060008111610be85760405162461bcd60e51b815260206004820152601360248201527204552432d32302062616c616e6365206973203606c1b6044820152606401610b2a565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015610c35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c599190613251565b50505050565b6000546001600160a01b03163314610c895760405162461bcd60e51b8152600401610b2a90613203565b610c956009600a613368565b610c9f9082613377565b60145550565b6000610cb2338484611dc9565b5060015b92915050565b6000610cc9848484611eed565b6001600160a01b038416600090815260036020908152604080832033845290915290205482811015610d4e5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610b2a565b610d5b8533858403611dc9565b506001949350505050565b6000546001600160a01b03163314610d905760405162461bcd60e51b8152600401610b2a90613203565b61271081600954610da19190613377565b610dab9190613396565b600d8190556040519081527f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e001906020015b60405180910390a150565b6000546001600160a01b03163314610e115760405162461bcd60e51b8152600401610b2a90613203565b6015805460ff19169055565b6000600a54821115610e845760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610b2a565b6000610e8e6123c5565b9050610e9a8184613396565b9392505050565b6000546001600160a01b03163314610ecb5760405162461bcd60e51b8152600401610b2a90613203565b6001600160a01b03811660009081526005602052604090205460ff16610f335760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610b2a565b60005b60085481101561105457816001600160a01b031660088281548110610f5d57610f5d6133b8565b6000918252602090912001546001600160a01b031614156110425760088054610f88906001906133ce565b81548110610f9857610f986133b8565b600091825260209091200154600880546001600160a01b039092169183908110610fc457610fc46133b8565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff19169055600880548061101c5761101c6133e5565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b8061104c816133fb565b915050610f36565b5050565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610cb291859061108f908690613416565b611dc9565b6000546001600160a01b031633146110be5760405162461bcd60e51b8152600401610b2a90613203565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b60006009548311156111365760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610b2a565b816111525760006111488460016123e8565b519150610cb69050565b600061115f8460016123e8565b602001519150610cb69050565b6000546001600160a01b031633146111965760405162461bcd60e51b8152600401610b2a90613203565b6016805460ff838116620100000262ff0000198683166101000261ffff199094169288169290921792909217161790556111d0818361342e565b6016805460ff9290921663010000000263ff00000019909216919091179055505050565b6000546001600160a01b0316331461121e5760405162461bcd60e51b8152600401610b2a90613203565b6001600160a01b03811660009081526005602052604090205460ff16156112875760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610b2a565b6001600160a01b038116600090815260016020526040902054156112e1576001600160a01b0381166000908152600160205260409020546112c790610e1d565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6001600160a01b03811660009081526005602052604081205460ff161561138457506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610cb690610e1d565b6000546001600160a01b031633146113d05760405162461bcd60e51b8152600401610b2a90613203565b6113da600061245e565b565b6000546001600160a01b031633146114065760405162461bcd60e51b8152600401610b2a90613203565b612710826009546114179190613377565b6114219190613396565b600b5560095461271090611436908390613377565b6114409190613396565b600c555050565b6000546001600160a01b031633146114715760405162461bcd60e51b8152600401610b2a90613203565b60155460ff166114cf5760405162461bcd60e51b815260206004820152602360248201527f54686520426c61636b6c6973742066756e6374696f6e2069732072656e6f756e60448201526218d95960ea1b6064820152608401610b2a565b6001600160a01b03821660009081526007602052604090205460ff161515811515141561154f5760405162461bcd60e51b815260206004820152602860248201527f546865206164647265737320697320616c72656164792073657420746f20746860448201526761742076616c756560c01b6064820152608401610b2a565b6001600160a01b038216600081815260076020908152604091829020805460ff1916851515908117909155915192835290917f3159dadbd8e2d720a851b412e3358e7e44bb11734c9bfd5715340e21798e8b2591015b60405180910390a25050565b6000546001600160a01b031633146115db5760405162461bcd60e51b8152600401610b2a90613203565b601080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146116275760405162461bcd60e51b8152600401610b2a90613203565b6001600160a01b03821660009081526011602052604090205460ff16151581151514156116bc5760405162461bcd60e51b815260206004820152603860248201527f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160448201527f6c72656164792073657420746f20746861742076616c756500000000000000006064820152608401610b2a565b6001600160a01b0382166000908152601160205260409020805460ff19168215801591909117909155611745576001600160a01b038216600081815260066020908152604091829020805460ff191660011790559051918252821515917f4a8452f723db48bf05f301f94d62a2cf7a72976cde77d83e3646584858b8f4b2910160405180910390a25b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526003602090815260408083206001600160a01b0386168452909152812054828110156118035760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b2a565b6118103385858403611dc9565b5060019392505050565b6000610cb2338484611eed565b6000546001600160a01b031633146118515760405162461bcd60e51b8152600401610b2a90613203565b61186f6118606009600a613368565b61186a9083613377565b6124ae565b50565b6000546001600160a01b0316331461189c5760405162461bcd60e51b8152600401610b2a90613203565b60005b82811015610c5957811515600660008686858181106118c0576118c06133b8565b90506020020160208101906118d59190612f53565b6001600160a01b0316815260208101919091526040016000205460ff16151514156119725760405162461bcd60e51b815260206004820152604160248201527f5f69734578636c7564656446726f6d4d617857616c6c657420616c726561647960448201527f2073657420746f20746861742076616c756520666f72206f6e652077616c6c656064820152601d60fa1b608482015260a401610b2a565b8160066000868685818110611989576119896133b8565b905060200201602081019061199e9190612f53565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558115157f4a8452f723db48bf05f301f94d62a2cf7a72976cde77d83e3646584858b8f4b28585848181106119fc576119fc6133b8565b9050602002016020810190611a119190612f53565b6040516001600160a01b03909116815260200160405180910390a280611a36816133fb565b91505061189f565b6000546001600160a01b03163314611a685760405162461bcd60e51b8152600401610b2a90613203565b60005b82811015610c59578160046000868685818110611a8a57611a8a6133b8565b9050602002016020810190611a9f9190612f53565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580611ad1816133fb565b915050611a6b565b6000546001600160a01b03163314611b035760405162461bcd60e51b8152600401610b2a90613203565b60138054821515600160a01b0260ff60a01b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990610ddc90831515815260200190565b6000546001600160a01b03163314611b7a5760405162461bcd60e51b8152600401610b2a90613203565b6001600160a01b03821660009081526006602052604090205460ff1615158115151415611c045760405162461bcd60e51b815260206004820152603260248201527f5f69734578636c7564656446726f6d4d617857616c6c657420616c72656164796044820152712073657420746f20746861742076616c756560701b6064820152608401610b2a565b6001600160a01b038216600081815260066020908152604091829020805460ff1916851515908117909155915192835290917f4a8452f723db48bf05f301f94d62a2cf7a72976cde77d83e3646584858b8f4b291016115a5565b6000546001600160a01b03163314611c885760405162461bcd60e51b8152600401610b2a90613203565b6017805460ff838116620100000262ff0000198683166101000261ffff19909416928816929092179290921716179055611cc2818361342e565b6017805460ff9290921663010000000263ff00000019909216919091179055505050565b6000546001600160a01b03163314611d105760405162461bcd60e51b8152600401610b2a90613203565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b03163314611d5b5760405162461bcd60e51b8152600401610b2a90613203565b6001600160a01b038116611dc05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b2a565b61186f8161245e565b6001600160a01b038316611e2b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b2a565b6001600160a01b038216611e8c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b2a565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600e54158015611f1557506001600160a01b03821660009081526011602052604090205460ff165b15611f1f5743600e555b6001600160a01b038316611f835760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b2a565b6001600160a01b038216611fe55760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b2a565b6001600160a01b03831660009081526007602052604090205460ff161561204e5760405162461bcd60e51b815260206004820181905260248201527f45524332303a206164647265737320626c61636b6c69737465642028626f74296044820152606401610b2a565b600081116120b05760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610b2a565b6120b983611347565b8111156121225760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b6064820152608401610b2a565b6001600160a01b03831660009081526004602052604081205460ff168061216157506001600160a01b03831660009081526004602052604090205460ff165b1590508015612352576001600160a01b03841660009081526011602052604090205460ff16156122a657600f54600e5461219b9190613416565b4310156121ff576001600160a01b038316600081815260076020908152604091829020805460ff19166001908117909155915192835290917f3159dadbd8e2d720a851b412e3358e7e44bb11734c9bfd5715340e21798e8b25910160405180910390a25b6016546018805460ff80841661ffff19909216919091176101008085048316021763ffff000019166201000080850483160263ff00000019161763010000009384900491909116909202919091179055600b548211156122a15760405162461bcd60e51b815260206004820181905260248201527f616d6f756e74206d757374206265203c3d206d61785478416d6f756e744275796044820152606401610b2a565b612352565b6017546018805460ff80841661ffff19909216919091176101008085048316021763ffff000019166201000080850483160263ff00000019161763010000009384900491909116909202919091179055600c548211156123525760405162461bcd60e51b815260206004820152602160248201527f616d6f756e74206d757374206265203c3d206d61785478416d6f756e7453656c6044820152601b60fa1b6064820152608401610b2a565b60145461235e30611347565b1015801561236f575060125460ff16155b801561239457506001600160a01b03841660009081526011602052604090205460ff16155b80156123a95750601354600160a01b900460ff165b156123b9576123b96014546124ae565b610c5984848484612598565b60008060006123d2612816565b90925090506123e18183613396565b9250505090565b6124286040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6124328383612999565b90506124478184846124426123c5565b612a5b565b606085015260408401526020830152815292915050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6012805460ff191660011790556018546000906124d6906301000000900460ff166002613453565b60185460ff918216925060009183916124f791620100009091041685613377565b6125019190613396565b9050600061250f82856133ce565b90504761251b82612ac6565b600061252782476133ce565b6018549091506000906125439062010000900460ff16876133ce565b6018546125599062010000900460ff1684613377565b6125639190613396565b905061256f8582612c79565b601054612585906001600160a01b031647612d75565b50506012805460ff191690555050505050565b60006125a483836123e8565b6001600160a01b03861660009081526005602052604090205490915060ff16156125f6576001600160a01b038516600090815260026020526040812080548592906125f09084906133ce565b90915550505b6001600160a01b03841660009081526005602052604090205460ff161561264a5760808101516001600160a01b03851660009081526002602052604081208054909190612644908490613416565b90915550505b80516001600160a01b038616600090815260016020526040812080549091906126749084906133ce565b90915550506020808201516001600160a01b03861660009081526001909252604082208054919290916126a8908490613416565b90915550508115612729576126c581604001518260a00151612e93565b6126d781606001518260c00151612ec8565b306001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360c0015160405161272091815260200190565b60405180910390a35b6001600160a01b03841660009081526006602052604090205460ff168061275a5750600d5461275785611347565b11155b6127be5760405162461bcd60e51b815260206004820152602f60248201527f526563697069656e742063616e6e6f7420686f6c64206d6f7265207468616e2060448201526e1b585e15d85b1b195d105b5bdd5b9d608a1b6064820152608401610b2a565b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836080015160405161280791815260200190565b60405180910390a35050505050565b600a546009546000918291825b60085481101561296857826001600060088481548110612845576128456133b8565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806128b05750816002600060088481548110612889576128896133b8565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156128c657600a54600954945094505050509091565b60016000600883815481106128dd576128dd6133b8565b60009182526020808320909101546001600160a01b0316835282019290925260400190205461290c90846133ce565b92506002600060088381548110612925576129256133b8565b60009182526020808320909101546001600160a01b0316835282019290925260400190205461295490836133ce565b915080612960816133fb565b915050612823565b50600954600a546129799190613396565b82101561299057600a546009549350935050509091565b90939092509050565b6129d96040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b816129ea5760808101839052610cb6565b6018546064906129fd9060ff1685613377565b612a079190613396565b60a0820152601854606490612a26906301000000900460ff1685613377565b612a309190613396565b60c0820181905260a0820151612a4690856133ce565b612a5091906133ce565b608082015292915050565b6000808080612a6a8588613377565b935085612a7f57508291506000905080612abb565b848860a00151612a8f9190613377565b9150848860c00151612aa19190613377565b905080612aae83866133ce565b612ab891906133ce565b92505b945094509450949050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612afb57612afb6133b8565b60200260200101906001600160a01b031690816001600160a01b031681525050601260019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b929190613474565b81600181518110612ba557612ba56133b8565b6001600160a01b03928316602091820292909201810191909152601254306000908152600383526040808220610100909304909416815291522054821115612c0657601254612c0690309061010090046001600160a01b0316600019611dc9565b60125460405163791ac94760e01b81526101009091046001600160a01b03169063791ac94790612c43908590600090869030904290600401613491565b600060405180830381600087803b158015612c5d57600080fd5b505af1158015612c71573d6000803e3d6000fd5b505050505050565b6012546001600160a01b036101009091041663f305d719823085600080612ca86000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015612d10573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612d359190613502565b505060408051848152602081018490527f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b92500160405180910390a15050565b80471015612dc55760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610b2a565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612e12576040519150601f19603f3d011682016040523d82523d6000602084013e612e17565b606091505b5050905080612e8e5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610b2a565b505050565b81600a6000828254612ea591906133ce565b909155505060198054829190600090612ebf908490613416565b90915550505050565b3060009081526001602052604081208054849290612ee7908490613416565b90915550503060009081526005602052604090205460ff1615612f29573060009081526002602052604081208054839290612f23908490613416565b90915550505b8060196001016000828254612ebf9190613416565b6001600160a01b038116811461186f57600080fd5b600060208284031215612f6557600080fd5b8135610e9a81612f3e565b600060208284031215612f8257600080fd5b5035919050565b600060208083528351808285015260005b81811015612fb657858101830151858201604001528201612f9a565b81811115612fc8576000604083870101525b50601f01601f1916929092016040019392505050565b60008060408385031215612ff157600080fd5b8235612ffc81612f3e565b946020939093013593505050565b60008060006060848603121561301f57600080fd5b833561302a81612f3e565b9250602084013561303a81612f3e565b929592945050506040919091013590565b801515811461186f57600080fd5b6000806040838503121561306c57600080fd5b82359150602083013561307e8161304b565b809150509250929050565b803560ff8116811461309a57600080fd5b919050565b6000806000606084860312156130b457600080fd5b6130bd84613089565b92506130cb60208501613089565b91506130d960408501613089565b90509250925092565b600080604083850312156130f557600080fd5b50508035926020909101359150565b6000806040838503121561311757600080fd5b823561312281612f3e565b9150602083013561307e8161304b565b60008060006040848603121561314757600080fd5b833567ffffffffffffffff8082111561315f57600080fd5b818601915086601f83011261317357600080fd5b81358181111561318257600080fd5b8760208260051b850101111561319757600080fd5b602092830195509350508401356131ad8161304b565b809150509250925092565b6000602082840312156131ca57600080fd5b8135610e9a8161304b565b600080604083850312156131e857600080fd5b82356131f381612f3e565b9150602083013561307e81612f3e565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006020828403121561324a57600080fd5b5051919050565b60006020828403121561326357600080fd5b8151610e9a8161304b565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156132bf5781600019048211156132a5576132a561326e565b808516156132b257918102915b93841c9390800290613289565b509250929050565b6000826132d657506001610cb6565b816132e357506000610cb6565b81600181146132f957600281146133035761331f565b6001915050610cb6565b60ff8411156133145761331461326e565b50506001821b610cb6565b5060208310610133831016604e8410600b8410161715613342575081810a610cb6565b61334c8383613284565b80600019048211156133605761336061326e565b029392505050565b6000610e9a60ff8416836132c7565b60008160001904831182151516156133915761339161326e565b500290565b6000826133b357634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b6000828210156133e0576133e061326e565b500390565b634e487b7160e01b600052603160045260246000fd5b600060001982141561340f5761340f61326e565b5060010190565b600082198211156134295761342961326e565b500190565b600060ff821660ff84168060ff0382111561344b5761344b61326e565b019392505050565b600060ff821660ff84168160ff04811182151516156133605761336061326e565b60006020828403121561348657600080fd5b8151610e9a81612f3e565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156134e15784516001600160a01b0316835293830193918301916001016134bc565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561351757600080fd5b835192506020840151915060408401519050925092509256fea264697066735822122044ed2797a9bd08024dcb35e31695529764edf29c993368003aa67415f05d1dcb64736f6c634300080b0033

Deployed Bytecode Sourcemap

690:21770:6:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22036:265;;;;;;;;;;-1:-1:-1;22036:265:6;;;;;:::i;:::-;;:::i;:::-;;18365:153;;;;;;;;;;-1:-1:-1;18365:153:6;;;;;:::i;:::-;;:::i;1990:41::-;;;;;;;;;;-1:-1:-1;1990:41:6;;;;;;;-1:-1:-1;;;;;1990:41:6;;;;;;-1:-1:-1;;;;;807:32:8;;;789:51;;777:2;762:18;1990:41:6;;;;;;;;4782:81;;;;;;;;;;-1:-1:-1;4851:5:6;;;;;;;;;;;;-1:-1:-1;;;4851:5:6;;;;4782:81;;;;;;;:::i;5684:158::-;;;;;;;;;;-1:-1:-1;5684:158:6;;;;;:::i;:::-;;:::i;:::-;;;1946:14:8;;1939:22;1921:41;;1909:2;1894:18;5684:158:6;1781:187:8;5067:93:6;;;;;;;;;;-1:-1:-1;5146:7:6;;5067:93;;;2119:25:8;;;2107:2;2092:18;5067:93:6;1973:177:8;5848:440:6;;;;;;;;;;-1:-1:-1;5848:440:6;;;;;:::i;:::-;;:::i;21501:204::-;;;;;;;;;;-1:-1:-1;21501:204:6;;;;;:::i;:::-;;:::i;22365:92::-;;;;;;;;;;;;;:::i;7499:244::-;;;;;;;;;;-1:-1:-1;7499:244:6;;;;;:::i;:::-;;:::i;4958:81::-;;;;;;;;;;-1:-1:-1;4958:81:6;;1249:1;2774:36:8;;2762:2;2747:18;4958:81:6;2632:184:8;8148:464:6;;;;;;;;;;-1:-1:-1;8148:464:6;;;;;:::i;:::-;;:::i;6294:210::-;;;;;;;;;;-1:-1:-1;6294:210:6;;;;;:::i;:::-;;:::i;1135:38::-;;;;;;;;;;-1:-1:-1;1135:38:6;;;;;:::i;:::-;;;;;;;;;;;;;;;;8619:111;;;;;;;;;;-1:-1:-1;8619:111:6;;;;;:::i;:::-;;:::i;7045:447::-;;;;;;;;;;-1:-1:-1;7045:447:6;;;;;:::i;:::-;;:::i;2069:40::-;;;;;;;;;;-1:-1:-1;2069:40:6;;;;-1:-1:-1;;;2069:40:6;;;;;;17637:225;;;;;;;;;;-1:-1:-1;17637:225:6;;;;;:::i;:::-;;:::i;7814:328::-;;;;;;;;;;-1:-1:-1;7814:328:6;;;;;:::i;:::-;;:::i;9543:121::-;;;;;;;;;;-1:-1:-1;9543:121:6;;;;;:::i;:::-;-1:-1:-1;;;;;9630:27:6;9607:4;9630:27;;;:18;:27;;;;;;;;;9543:121;9669:133;;;;;;;;;;-1:-1:-1;9669:133:6;;;;;:::i;:::-;-1:-1:-1;;;;;9762:33:6;9739:4;9762:33;;;:24;:33;;;;;;;;;9669:133;5166:195;;;;;;;;;;-1:-1:-1;5166:195:6;;;;;:::i;:::-;;:::i;2575:232::-;;;;;;;;;;-1:-1:-1;2575:232:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4251:4:8;4239:17;;;4221:36;;4293:17;;;4288:2;4273:18;;4266:45;4347:17;;;4327:18;;;4320:45;;;;4401:17;;;4396:2;4381:18;;4374:45;4208:3;4193:19;2575:232:6;4006:419:8;1598:92:7;;;;;;;;;;;;;:::i;2336:232:6:-;;;;;;;;;;-1:-1:-1;2336:232:6;;;;;;;;;;;;;;;;;;;;;;;;;;;1788:59;;;;;;;;;;-1:-1:-1;1788:59:6;;;;;:::i;:::-;;;;;;;;;;;;;;;;18104:251;;;;;;;;;;-1:-1:-1;18104:251:6;;;;;:::i;:::-;;:::i;21171:324::-;;;;;;;;;;-1:-1:-1;21171:324:6;;;;;:::i;:::-;;:::i;6921:118::-;;;;;;;;;;-1:-1:-1;6921:118:6;;;;;:::i;:::-;-1:-1:-1;;;;;7012:20:6;6989:4;7012:20;;;:11;:20;;;;;;;;;6921:118;1663:34;;;;;;;;;;;;;;;;966:85:7;;;;;;;;;;-1:-1:-1;1012:7:7;1038:6;-1:-1:-1;;;;;1038:6:7;966:85;;18524:140:6;;;;;;;;;;-1:-1:-1;18524:140:6;;;;;:::i;:::-;;:::i;4868:85::-;;;;;;;;;;-1:-1:-1;4939:7:6;;;;;;;;;;;;-1:-1:-1;;;4939:7:6;;;;4868:85;;17178:453;;;;;;;;;;-1:-1:-1;17178:453:6;;;;;:::i;:::-;;:::i;2948:36::-;;;;;;;;;;-1:-1:-1;2948:36:6;;;;;;;;;;;;;5728:25:8;;;5784:2;5769:18;;5762:34;;;;5701:18;2948:36:6;5554:248:8;6510:405:6;;;;;;;;;;-1:-1:-1;6510:405:6;;;;;:::i;:::-;;:::i;1742:39::-;;;;;;;;;;-1:-1:-1;1742:39:6;;;;-1:-1:-1;;;;;1742:39:6;;;5367:164;;;;;;;;;;-1:-1:-1;5367:164:6;;;;;:::i;:::-;;:::i;18670:2449::-;;;;;;;;;;-1:-1:-1;18670:2449:6;;;;;:::i;:::-;;:::i;1574:44::-;;;;;;;;;;;;;;;;8740:444;;;;;;;;;;-1:-1:-1;8740:444:6;;;;;:::i;:::-;;:::i;2179:35::-;;;;;;;;;;-1:-1:-1;2179:35:6;;;;;;;;9189:232;;;;;;;;;;-1:-1:-1;9189:232:6;;;;;:::i;:::-;;:::i;9808:164::-;;;;;;;;;;-1:-1:-1;9808:164:6;;;;;:::i;:::-;;:::i;2037:26::-;;;;;;;;;;-1:-1:-1;2037:26:6;;;;-1:-1:-1;;;;;2037:26:6;;;2115:58;;;;;;;;;;;;;;;;21711:315;;;;;;;;;;-1:-1:-1;21711:315:6;;;;;:::i;:::-;;:::i;1494:44::-;;;;;;;;;;;;;;;;1415:43;;;;;;;;;;;;;;;;1703:31;;;;;;;;;;;;;;;;5537:141;;;;;;;;;;-1:-1:-1;5537:141:6;;;;;:::i;:::-;-1:-1:-1;;;;;5644:18:6;;;5618:7;5644:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;5537:141;17868:230;;;;;;;;;;-1:-1:-1;17868:230:6;;;;;:::i;:::-;;:::i;9427:110::-;;;;;;;;;;-1:-1:-1;9427:110:6;;;;;:::i;:::-;;:::i;1839:189:7:-;;;;;;;;;;-1:-1:-1;1839:189:7;;;;;:::i;:::-;;:::i;22036:265:6:-;1012:7:7;1038:6;-1:-1:-1;;;;;1038:6:7;665:10:1;1178:23:7;1170:68;;;;-1:-1:-1;;;1170:68:7;;;;;;;:::i;:::-;;;;;;;;;22163:30:6::1;::::0;-1:-1:-1;;;22163:30:6;;22187:4:::1;22163:30;::::0;::::1;789:51:8::0;22122:12:6;;22107::::1;::::0;-1:-1:-1;;;;;22163:15:6;::::1;::::0;::::1;::::0;762:18:8;;22163:30:6::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22144:49;;22222:1;22211:8;:12;22203:44;;;::::0;-1:-1:-1;;;22203:44:6;;8193:2:8;22203:44:6::1;::::0;::::1;8175:21:8::0;8232:2;8212:18;;;8205:30;-1:-1:-1;;;8251:18:8;;;8244:49;8310:18;;22203:44:6::1;7991:343:8::0;22203:44:6::1;22258:36;::::0;-1:-1:-1;;;22258:36:6;;22273:10:::1;22258:36;::::0;::::1;8513:51:8::0;8580:18;;;8573:34;;;-1:-1:-1;;;;;22258:14:6;::::1;::::0;::::1;::::0;8486:18:8;;22258:36:6::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22097:204;;22036:265:::0;:::o;18365:153::-;1012:7:7;1038:6;-1:-1:-1;;;;;1038:6:7;665:10:1;1178:23:7;1170:68;;;;-1:-1:-1;;;1170:68:7;;;;;;;:::i;:::-;18498:13:6::1;1249:1;18498:2;:13;:::i;:::-;18485:26;::::0;:12;:26:::1;:::i;:::-;18453:29;:58:::0;-1:-1:-1;18365:153:6:o;5684:158::-;5759:4;5775:39;665:10:1;5798:7:6;5807:6;5775:8;:39::i;:::-;-1:-1:-1;5831:4:6;5684:158;;;;;:::o;5848:440::-;5946:4;5962:36;5972:6;5980:9;5991:6;5962:9;:36::i;:::-;-1:-1:-1;;;;;6036:19:6;;6009:24;6036:19;;;:11;:19;;;;;;;;665:10:1;6036:33:6;;;;;;;;6087:26;;;;6079:79;;;;-1:-1:-1;;;6079:79:6;;10758:2:8;6079:79:6;;;10740:21:8;10797:2;10777:18;;;10770:30;10836:34;10816:18;;;10809:62;-1:-1:-1;;;10887:18:8;;;10880:38;10935:19;;6079:79:6;10556:404:8;6079:79:6;6192:57;6201:6;665:10:1;6242:6:6;6223:16;:25;6192:8;:57::i;:::-;-1:-1:-1;6277:4:6;;5848:440;-1:-1:-1;;;;5848:440:6:o;21501:204::-;1012:7:7;1038:6;-1:-1:-1;;;;;1038:6:7;665:10:1;1178:23:7;1170:68;;;;-1:-1:-1;;;1170:68:7;;;;;;;:::i;:::-;21639:5:6::1;21616:22;21608:7;;:30;;;;:::i;:::-;:36;;;;:::i;:::-;21590:15;:54:::0;;;21659:39:::1;::::0;2119:25:8;;;21659:39:6::1;::::0;2107:2:8;2092:18;21659:39:6::1;;;;;;;;21501:204:::0;:::o;22365:92::-;1012:7:7;1038:6;-1:-1:-1;;;;;1038:6:7;665:10:1;1178:23:7;1170:68;;;;-1:-1:-1;;;1170:68:7;;;;;;;:::i;:::-;22428:16:6::1;:22:::0;;-1:-1:-1;;22428:22:6::1;::::0;;22365:92::o;7499:244::-;7565:7;7603;;7592;:18;;7584:73;;;;-1:-1:-1;;;7584:73:6;;11389:2:8;7584:73:6;;;11371:21:8;11428:2;11408:18;;;11401:30;11467:34;11447:18;;;11440:62;-1:-1:-1;;;11518:18:8;;;11511:40;11568:19;;7584:73:6;11187:406:8;7584:73:6;7667:19;7690:10;:8;:10::i;:::-;7667:33;-1:-1:-1;7717:19:6;7667:33;7717:7;:19;:::i;:::-;7710:26;7499:244;-1:-1:-1;;;7499:244:6:o;8148:464::-;1012:7:7;1038:6;-1:-1:-1;;;;;1038:6:7;665:10:1;1178:23:7;1170:68;;;;-1:-1:-1;;;1170:68:7;;;;;;;:::i;:::-;-1:-1:-1;;;;;8229:20:6;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;8221:56;;;::::0;-1:-1:-1;;;8221:56:6;;11800:2:8;8221:56:6::1;::::0;::::1;11782:21:8::0;11839:2;11819:18;;;11812:30;11878:25;11858:18;;;11851:53;11921:18;;8221:56:6::1;11598:347:8::0;8221:56:6::1;8292:9;8287:319;8311:9;:16:::0;8307:20;::::1;8287:319;;;8368:7;-1:-1:-1::0;;;;;8352:23:6::1;:9;8362:1;8352:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;8352:12:6::1;:23;8348:248;;;8410:9;8420:16:::0;;:20:::1;::::0;8439:1:::1;::::0;8420:20:::1;:::i;:::-;8410:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;8395:9:::1;:12:::0;;-1:-1:-1;;;;;8410:31:6;;::::1;::::0;8405:1;;8395:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;8395:46:6::1;-1:-1:-1::0;;;;;8395:46:6;;::::1;;::::0;;8459:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;8497:11:::1;:20:::0;;;;:28;;-1:-1:-1;;8497:28:6::1;::::0;;8543:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;8543:15:6;;;;;-1:-1:-1;;;;;;8543:15:6::1;::::0;;;;;8287:319:::1;8148:464:::0;:::o;8348:248::-:1;8329:3:::0;::::1;::::0;::::1;:::i;:::-;;;;8287:319;;;;8148:464:::0;:::o;6294:210::-;665:10:1;6382:4:6;6430:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6430:34:6;;;;;;;;;;6382:4;;6398:78;;6421:7;;6430:45;;6465:10;;6430:45;:::i;:::-;6398:8;:78::i;8619:111::-;1012:7:7;1038:6;-1:-1:-1;;;;;1038:6:7;665:10:1;1178:23:7;1170:68;;;;-1:-1:-1;;;1170:68:7;;;;;;;:::i;:::-;-1:-1:-1;;;;;8689:27:6::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;8689:34:6::1;8719:4;8689:34;::::0;;8619:111::o;7045:447::-;7135:7;7173;;7162;:18;;7154:62;;;;-1:-1:-1;;;7154:62:6;;12819:2:8;7154:62:6;;;12801:21:8;12858:2;12838:18;;;12831:30;12897:33;12877:18;;;12870:61;12948:18;;7154:62:6;12617:355:8;7154:62:6;7231:17;7226:260;;7264:28;7295:25;7306:7;7315:4;7295:10;:25::i;:::-;7341:9;;-1:-1:-1;7334:16:6;;-1:-1:-1;7334:16:6;7226:260;7381:28;7412:25;7423:7;7432:4;7412:10;:25::i;:::-;7458:17;;;;-1:-1:-1;7451:24:6;;-1:-1:-1;7451:24:6;17637:225;1012:7:7;1038:6;-1:-1:-1;;;;;1038:6:7;665:10:1;1178:23:7;1170:68;;;;-1:-1:-1;;;1170:68:7;;;;;;;:::i;:::-;17730:8:6::1;:17:::0;;::::1;17790:23:::0;;::::1;::::0;::::1;-1:-1:-1::0;;17754:29:6;;::::1;17730:17;17754:29;-1:-1:-1::0;;17754:29:6;;;17730:17;;::::1;17754:29:::0;;;;;;;::::1;17790:23;;::::0;;17837:18:::1;17806:7:::0;17773:10;17837:18:::1;:::i;:::-;17820:8;:35:::0;;::::1;::::0;;;::::1;::::0;::::1;-1:-1:-1::0;;17820:35:6;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;17637:225:6:o;7814:328::-;1012:7:7;1038:6;-1:-1:-1;;;;;1038:6:7;665:10:1;1178:23:7;1170:68;;;;-1:-1:-1;;;1170:68:7;;;;;;;:::i;:::-;-1:-1:-1;;;;;7898:20:6;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;7897:21;7889:61;;;::::0;-1:-1:-1;;;7889:61:6;;13388:2:8;7889:61:6::1;::::0;::::1;13370:21:8::0;13427:2;13407:18;;;13400:30;13466:29;13446:18;;;13439:57;13513:18;;7889:61:6::1;13186:351:8::0;7889:61:6::1;-1:-1:-1::0;;;;;7963:16:6;::::1;7982:1;7963:16:::0;;;:7:::1;:16;::::0;;;;;:20;7960:106:::1;;-1:-1:-1::0;;;;;8038:16:6;::::1;;::::0;;;:7:::1;:16;::::0;;;;;8018:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;7999:16:6;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;7960:106:::1;-1:-1:-1::0;;;;;8075:20:6::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;8075:27:6::1;8098:4;8075:27:::0;;::::1;::::0;;;8112:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;8112:23:6::1;::::0;;::::1;::::0;;7814:328::o;5166:195::-;-1:-1:-1;;;;;5255:20:6;;5232:7;5255:20;;;:11;:20;;;;;;;;5251:49;;;-1:-1:-1;;;;;;5284:16:6;;;;;:7;:16;;;;;;;5166:195::o;5251:49::-;-1:-1:-1;;;;;5337:16:6;;;;;;:7;:16;;;;;;5317:37;;:19;:37::i;1598:92:7:-;1012:7;1038:6;-1:-1:-1;;;;;1038:6:7;665:10:1;1178:23:7;1170:68;;;;-1:-1:-1;;;1170:68:7;;;;;;;:::i;:::-;1662:21:::1;1680:1;1662:9;:21::i;:::-;1598:92::o:0;18104:251:6:-;1012:7:7;1038:6;-1:-1:-1;;;;;1038:6:7;665:10:1;1178:23:7;1170:68;;;;-1:-1:-1;;;1170:68:7;;;;;;;:::i;:::-;18282:5:6::1;18260:21;18252:7;;:29;;;;:::i;:::-;:35;;;;:::i;:::-;18235:14;:52:::0;18312:7:::1;::::0;18343:5:::1;::::0;18312:30:::1;::::0;18320:22;;18312:30:::1;:::i;:::-;:36;;;;:::i;:::-;18294:15;:54:::0;-1:-1:-1;;18104:251:6:o;21171:324::-;1012:7:7;1038:6;-1:-1:-1;;;;;1038:6:7;665:10:1;1178:23:7;1170:68;;;;-1:-1:-1;;;1170:68:7;;;;;;;:::i;:::-;21261:16:6::1;::::0;::::1;;21253:64;;;::::0;-1:-1:-1;;;21253:64:6;;13744:2:8;21253:64:6::1;::::0;::::1;13726:21:8::0;13783:2;13763:18;;;13756:30;13822:34;13802:18;;;13795:62;-1:-1:-1;;;13873:18:8;;;13866:33;13916:19;;21253:64:6::1;13542:399:8::0;21253:64:6::1;-1:-1:-1::0;;;;;21333:17:6;::::1;;::::0;;;:5:::1;:17;::::0;;;;;::::1;;:25;;::::0;::::1;;;;21325:78;;;::::0;-1:-1:-1;;;21325:78:6;;14148:2:8;21325:78:6::1;::::0;::::1;14130:21:8::0;14187:2;14167:18;;;14160:30;14226:34;14206:18;;;14199:62;-1:-1:-1;;;14277:18:8;;;14270:38;14325:19;;21325:78:6::1;13946:404:8::0;21325:78:6::1;-1:-1:-1::0;;;;;21413:17:6;::::1;;::::0;;;:5:::1;:17;::::0;;;;;;;;:26;;-1:-1:-1;;21413:26:6::1;::::0;::::1;;::::0;;::::1;::::0;;;21454:34;;789:51:8;;;21413:26:6;;21454:34:::1;::::0;762:18:8;21454:34:6::1;;;;;;;;21171:324:::0;;:::o;18524:140::-;1012:7:7;1038:6;-1:-1:-1;;;;;1038:6:7;665:10:1;1178:23:7;1170:68;;;;-1:-1:-1;;;1170:68:7;;;;;;;:::i;:::-;18621:16:6::1;:36:::0;;-1:-1:-1;;;;;;18621:36:6::1;-1:-1:-1::0;;;;;18621:36:6;;;::::1;::::0;;;::::1;::::0;;18524:140::o;17178:453::-;1012:7:7;1038:6;-1:-1:-1;;;;;1038:6:7;665:10:1;1178:23:7;1170:68;;;;-1:-1:-1;;;1170:68:7;;;;;;;:::i;:::-;-1:-1:-1;;;;;17278:33:6;::::1;;::::0;;;:26:::1;:33;::::0;;;;;::::1;;:42;;::::0;::::1;;;;17270:111;;;::::0;-1:-1:-1;;;17270:111:6;;14557:2:8;17270:111:6::1;::::0;::::1;14539:21:8::0;14596:2;14576:18;;;14569:30;14635:34;14615:18;;;14608:62;14706:26;14686:18;;;14679:54;14750:19;;17270:111:6::1;14355:420:8::0;17270:111:6::1;-1:-1:-1::0;;;;;17391:33:6;::::1;;::::0;;;:26:::1;:33;::::0;;;;:41;;-1:-1:-1;;17391:41:6::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;17442:127:::1;;-1:-1:-1::0;;;;;17470:31:6;::::1;;::::0;;;:24:::1;:31;::::0;;;;;;;;:38;;-1:-1:-1;;17470:38:6::1;17504:4;17470:38;::::0;;17523:34;;789:51:8;;;17523:34:6;::::1;;::::0;::::1;::::0;762:18:8;17523:34:6::1;;;;;;;17442:127;17583:41;::::0;;::::1;;::::0;-1:-1:-1;;;;;17583:41:6;::::1;::::0;::::1;::::0;;;::::1;17178:453:::0;;:::o;6510:405::-;665:10:1;6603:4:6;6646:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6646:34:6;;;;;;;;;;6698:35;;;;6690:85;;;;-1:-1:-1;;;6690:85:6;;14982:2:8;6690:85:6;;;14964:21:8;15021:2;15001:18;;;14994:30;15060:34;15040:18;;;15033:62;-1:-1:-1;;;15111:18:8;;;15104:35;15156:19;;6690:85:6;14780:401:8;6690:85:6;6809:67;665:10:1;6832:7:6;6860:15;6841:16;:34;6809:8;:67::i;:::-;-1:-1:-1;6904:4:6;;6510:405;-1:-1:-1;;;6510:405:6:o;5367:164::-;5445:4;5461:42;665:10:1;5485:9:6;5496:6;5461:9;:42::i;18670:2449::-;1012:7:7;1038:6;-1:-1:-1;;;;;1038:6:7;665:10:1;1178:23:7;1170:68;;;;-1:-1:-1;;;1170:68:7;;;;;;;:::i;:::-;21070:42:6::1;21098:13;1249:1;21098:2;:13;:::i;:::-;21085:26;::::0;:12;:26:::1;:::i;:::-;21070:14;:42::i;:::-;18670:2449:::0;:::o;8740:444::-;1012:7:7;1038:6;-1:-1:-1;;;;;1038:6:7;665:10:1;1178:23:7;1170:68;;;;-1:-1:-1;;;1170:68:7;;;;;;;:::i;:::-;8861:9:6::1;8857:321;8876:19:::0;;::::1;8857:321;;;8965:8;8924:49;;:24;:37;8949:8;;8958:1;8949:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;8924:37:6::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;8924:37:6;;::::1;;:49;;;;8916:127;;;::::0;-1:-1:-1;;;8916:127:6;;15388:2:8;8916:127:6::1;::::0;::::1;15370:21:8::0;15427:2;15407:18;;;15400:30;15466:34;15446:18;;;15439:62;15537:34;15517:18;;;15510:62;-1:-1:-1;;;15588:19:8;;;15581:32;15630:19;;8916:127:6::1;15186:469:8::0;8916:127:6::1;9097:8;9057:24;:37;9082:8;;9091:1;9082:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;9057:37:6::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;9057:37:6;:48;;-1:-1:-1;;9057:48:6::1;::::0;::::1;;::::0;;;::::1;::::0;;9124:43;::::1;;;9145:8:::0;;9154:1;9145:11;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;9124:43;::::0;-1:-1:-1;;;;;807:32:8;;;789:51;;777:2;762:18;9124:43:6::1;;;;;;;8897:3:::0;::::1;::::0;::::1;:::i;:::-;;;;8857:321;;9189:232:::0;1012:7:7;1038:6;-1:-1:-1;;;;;1038:6:7;665:10:1;1178:23:7;1170:68;;;;-1:-1:-1;;;1170:68:7;;;;;;;:::i;:::-;9307:9:6::1;9303:112;9322:19:::0;;::::1;9303:112;;;9396:8;9362:18;:31;9381:8;;9390:1;9381:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;9362:31:6::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;9362:31:6;:42;;-1:-1:-1;;9362:42:6::1;::::0;::::1;;::::0;;;::::1;::::0;;9343:3;::::1;::::0;::::1;:::i;:::-;;;;9303:112;;9808:164:::0;1012:7:7;1038:6;-1:-1:-1;;;;;1038:6:7;665:10:1;1178:23:7;1170:68;;;;-1:-1:-1;;;1170:68:7;;;;;;;:::i;:::-;9882:21:6::1;:32:::0;;;::::1;;-1:-1:-1::0;;;9882:32:6::1;-1:-1:-1::0;;;;9882:32:6;;::::1;;::::0;;9927:38:::1;::::0;::::1;::::0;::::1;::::0;9906:8;1946:14:8;1939:22;1921:41;;1909:2;1894:18;;1781:187;21711:315:6;1012:7:7;1038:6;-1:-1:-1;;;;;1038:6:7;665:10:1;1178:23:7;1170:68;;;;-1:-1:-1;;;1170:68:7;;;;;;;:::i;:::-;-1:-1:-1;;;;;21810:33:6;::::1;;::::0;;;:24:::1;:33;::::0;;;;;::::1;;:45;;::::0;::::1;;;;21802:108;;;::::0;-1:-1:-1;;;21802:108:6;;15862:2:8;21802:108:6::1;::::0;::::1;15844:21:8::0;15901:2;15881:18;;;15874:30;15940:34;15920:18;;;15913:62;-1:-1:-1;;;15991:18:8;;;15984:48;16049:19;;21802:108:6::1;15660:414:8::0;21802:108:6::1;-1:-1:-1::0;;;;;21920:33:6;::::1;;::::0;;;:24:::1;:33;::::0;;;;;;;;:44;;-1:-1:-1;;21920:44:6::1;::::0;::::1;;::::0;;::::1;::::0;;;21980:39;;789:51:8;;;21920:44:6;;21980:39:::1;::::0;762:18:8;21980:39:6::1;617:229:8::0;17868:230:6;1012:7:7;1038:6;-1:-1:-1;;;;;1038:6:7;665:10:1;1178:23:7;1170:68;;;;-1:-1:-1;;;1170:68:7;;;;;;;:::i;:::-;17962:9:6::1;:18:::0;;::::1;18024:24:::0;;::::1;::::0;::::1;-1:-1:-1::0;;17987:30:6;;::::1;17962:18;17987:30;-1:-1:-1::0;;17987:30:6;;;17962:18;;::::1;17987:30:::0;;;;;;;::::1;18024:24;;::::0;;18073:18:::1;18041:7:::0;18007:10;18073:18:::1;:::i;:::-;18055:9;:36:::0;;::::1;::::0;;;::::1;::::0;::::1;-1:-1:-1::0;;18055:36:6;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;17868:230:6:o;9427:110::-;1012:7:7;1038:6;-1:-1:-1;;;;;1038:6:7;665:10:1;1178:23:7;1170:68;;;;-1:-1:-1;;;1170:68:7;;;;;;;:::i;:::-;-1:-1:-1;;;;;9495:27:6::1;9525:5;9495:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;9495:35:6::1;::::0;;9427:110::o;1839:189:7:-;1012:7;1038:6;-1:-1:-1;;;;;1038:6:7;665:10:1;1178:23:7;1170:68;;;;-1:-1:-1;;;1170:68:7;;;;;;;:::i;:::-;-1:-1:-1;;;;;1927:22:7;::::1;1919:73;;;::::0;-1:-1:-1;;;1919:73:7;;16281:2:8;1919:73:7::1;::::0;::::1;16263:21:8::0;16320:2;16300:18;;;16293:30;16359:34;16339:18;;;16332:62;-1:-1:-1;;;16410:18:8;;;16403:36;16456:19;;1919:73:7::1;16079:402:8::0;1919:73:7::1;2002:19;2012:8;2002:9;:19::i;12368:330:6:-:0;-1:-1:-1;;;;;12460:19:6;;12452:68;;;;-1:-1:-1;;;12452:68:6;;16688:2:8;12452:68:6;;;16670:21:8;16727:2;16707:18;;;16700:30;16766:34;16746:18;;;16739:62;-1:-1:-1;;;16817:18:8;;;16810:34;16861:19;;12452:68:6;16486:400:8;12452:68:6;-1:-1:-1;;;;;12538:21:6;;12530:68;;;;-1:-1:-1;;;12530:68:6;;17093:2:8;12530:68:6;;;17075:21:8;17132:2;17112:18;;;17105:30;17171:34;17151:18;;;17144:62;-1:-1:-1;;;17222:18:8;;;17215:32;17264:19;;12530:68:6;16891:398:8;12530:68:6;-1:-1:-1;;;;;12608:18:6;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;12659:32;;2119:25:8;;;12659:32:6;;2092:18:8;12659:32:6;;;;;;;12368:330;;;:::o;12704:1579::-;12786:19;;:22;:56;;;;-1:-1:-1;;;;;;12812:30:6;;;;;;:26;:30;;;;;;;;12786:56;12783:116;;;12876:12;12854:19;:34;12783:116;-1:-1:-1;;;;;12917:18:6;;12909:68;;;;-1:-1:-1;;;12909:68:6;;17496:2:8;12909:68:6;;;17478:21:8;17535:2;17515:18;;;17508:30;17574:34;17554:18;;;17547:62;-1:-1:-1;;;17625:18:8;;;17618:35;17670:19;;12909:68:6;17294:401:8;12909:68:6;-1:-1:-1;;;;;12995:16:6;;12987:64;;;;-1:-1:-1;;;12987:64:6;;17902:2:8;12987:64:6;;;17884:21:8;17941:2;17921:18;;;17914:30;17980:34;17960:18;;;17953:62;-1:-1:-1;;;18031:18:8;;;18024:33;18074:19;;12987:64:6;17700:399:8;12987:64:6;-1:-1:-1;;;;;13070:11:6;;;;;;:5;:11;;;;;;;;13069:12;13061:57;;;;-1:-1:-1;;;13061:57:6;;18306:2:8;13061:57:6;;;18288:21:8;;;18325:18;;;18318:30;18384:34;18364:18;;;18357:62;18436:18;;13061:57:6;18104:356:8;13061:57:6;13145:1;13136:6;:10;13128:64;;;;-1:-1:-1;;;13128:64:6;;18667:2:8;13128:64:6;;;18649:21:8;18706:2;18686:18;;;18679:30;18745:34;18725:18;;;18718:62;-1:-1:-1;;;18796:18:8;;;18789:39;18845:19;;13128:64:6;18465:405:8;13128:64:6;13220:15;13230:4;13220:9;:15::i;:::-;13210:6;:25;;13202:86;;;;-1:-1:-1;;;13202:86:6;;19077:2:8;13202:86:6;;;19059:21:8;19116:2;19096:18;;;19089:30;19155:34;19135:18;;;19128:62;-1:-1:-1;;;19206:18:8;;;19199:47;19263:19;;13202:86:6;18875:413:8;13202:86:6;-1:-1:-1;;;;;13315:24:6;;13298:12;13315:24;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;13343:22:6;;;;;;:18;:22;;;;;;;;13315:50;13313:53;13298:68;;13380:7;13377:593;;;-1:-1:-1;;;;;13415:32:6;;;;;;:26;:32;;;;;;;;13412:548;;;13515:12;;13495:19;;:32;;;;:::i;:::-;13482:12;:45;13479:166;;;-1:-1:-1;;;;;13563:9:6;;;;;;:5;:9;;;;;;;;;:16;;-1:-1:-1;;13563:16:6;13575:4;13563:16;;;;;;13602:24;;789:51:8;;;13575:4:6;;13602:24;;762:18:8;13602:24:6;;;;;;;13479:166;13678:8;13663:23;:12;:23;;;;;;-1:-1:-1;;13663:23:6;;;;;;;;;;;;;;;-1:-1:-1;;13663:23:6;;;;;;;;-1:-1:-1;;13663:23:6;;;;;;;;;;;;;;;;;;;;13720:14;;13712:22;;;13704:67;;;;-1:-1:-1;;;13704:67:6;;19495:2:8;13704:67:6;;;19477:21:8;;;19514:18;;;19507:30;19573:34;19553:18;;;19546:62;19625:18;;13704:67:6;19293:356:8;13704:67:6;13412:548;;;13849:9;13834:24;:12;:24;;;;;;-1:-1:-1;;13834:24:6;;;;;;;;;;;;;;;-1:-1:-1;;13834:24:6;;;;;;;;-1:-1:-1;;13834:24:6;;;;;;;;;;;;;;;;;;;;13892:15;;13884:23;;;13876:69;;;;-1:-1:-1;;;13876:69:6;;19856:2:8;13876:69:6;;;19838:21:8;19895:2;19875:18;;;19868:30;19934:34;19914:18;;;19907:62;-1:-1:-1;;;19985:18:8;;;19978:31;20026:19;;13876:69:6;19654:397:8;13876:69:6;14012:29;;13984:24;14002:4;13984:9;:24::i;:::-;:57;;:79;;;;-1:-1:-1;14047:16:6;;;;14046:17;13984:79;:116;;;;-1:-1:-1;;;;;;14068:32:6;;;;;;:26;:32;;;;;;;;14067:33;13984:116;:141;;;;-1:-1:-1;14104:21:6;;-1:-1:-1;;;14104:21:6;;;;13984:141;13980:245;;;14169:45;14184:29;;14169:14;:45::i;:::-;14235:41;14250:4;14256:2;14260:6;14268:7;14235:14;:41::i;11686:155::-;11727:7;11747:15;11764;11783:19;:17;:19::i;:::-;11746:56;;-1:-1:-1;11746:56:6;-1:-1:-1;11819:15:6;11746:56;;11819:15;:::i;:::-;11812:22;;;;11686:155;:::o;10450:341::-;10523:36;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10523:36:6;10583:29;10595:7;10604;10583:11;:29::i;:::-;10571:41;;10706:52;10718:9;10729:7;10738;10747:10;:8;:10::i;:::-;10706:11;:52::i;:::-;10685:17;;;10622:136;10669:14;;;10622:136;10642:25;;;10622:136;;;10450:341;;;;:::o;2034:169:7:-;2089:16;2108:6;;-1:-1:-1;;;;;2124:17:7;;;-1:-1:-1;;;;;;2124:17:7;;;;;;2156:40;;2108:6;;;;;;;2156:40;;2089:16;2156:40;2079:124;2034:169;:::o;15218:858:6:-;3721:16;:23;;-1:-1:-1;;3721:23:6;3740:4;3721:23;;;15325:12:::1;:19:::0;3721:16;;15325:21:::1;::::0;:19;;::::1;3721:23:::0;15325:19:::1;15345:1;15325:21;:::i;:::-;15412:12;:19:::0;15303:43:::1;::::0;;::::1;::::0;-1:-1:-1;15356:32:6::1;::::0;15303:43;;15391:40:::1;::::0;15412:19;;;::::1;;15391:20:::0;:40:::1;:::i;:::-;:52;;;;:::i;:::-;15356:87:::0;-1:-1:-1;15453:14:6::1;15470:45;15356:87:::0;15470:20;:45:::1;:::i;:::-;15453:62:::0;-1:-1:-1;15551:21:6::1;15614:24;15453:62:::0;15614:16:::1;:24::i;:::-;15649:20;15672:37;15695:14:::0;15672:21:::1;:37;:::i;:::-;15799:12;:19:::0;15649:60;;-1:-1:-1;15719:29:6::1;::::0;15786:32:::1;::::0;15799:19;;::::1;;;15786:11:::0;:32:::1;:::i;:::-;15764:12;:19:::0;15751:32:::1;::::0;15764:19;;::::1;;;15751:12:::0;:32:::1;:::i;:::-;:68;;;;:::i;:::-;15719:100;;15875:61;15888:24;15914:21;15875:12;:61::i;:::-;15955:16;::::0;:49:::1;::::0;-1:-1:-1;;;;;15955:16:6::1;15982:21;15955:26;:49::i;:::-;-1:-1:-1::0;;3765:16:6;:24;;-1:-1:-1;;3765:24:6;;;-1:-1:-1;;;;;15218:858:6:o;14361:851::-;14478:28;14509;14520:7;14529;14509:10;:28::i;:::-;-1:-1:-1;;;;;14552:19:6;;;;;;:11;:19;;;;;;14478:59;;-1:-1:-1;14552:19:6;;14548:80;;;-1:-1:-1;;;;;14591:15:6;;;;;;:7;:15;;;;;:26;;14610:7;;14591:15;:26;;14610:7;;14591:26;:::i;:::-;;;;-1:-1:-1;;14548:80:6;-1:-1:-1;;;;;14642:22:6;;;;;;:11;:22;;;;;;;;14638:96;;;14706:17;;;;-1:-1:-1;;;;;14684:18:6;;;;;;:7;:18;;;;;:39;;:18;;;:39;;14706:17;;14684:39;:::i;:::-;;;;-1:-1:-1;;14638:96:6;14763:9;;-1:-1:-1;;;;;14744:15:6;;14763:9;14744:15;;;:7;:15;;;;;:28;;:15;;14763:9;14744:28;;14763:9;;14744:28;:::i;:::-;;;;-1:-1:-1;;14804:17:6;;;;;-1:-1:-1;;;;;14782:18:6;;;;;;:7;:18;;;;;;:39;;14804:17;;14782:18;;:39;;14804:17;;14782:39;:::i;:::-;;;;-1:-1:-1;;14831:167:6;;;;14861:27;14873:1;:6;;;14881:1;:6;;;14861:11;:27::i;:::-;14898:32;14910:1;:9;;;14920:1;:9;;;14898:11;:32::i;:::-;14970:4;-1:-1:-1;;;;;14945:42:6;14954:6;-1:-1:-1;;;;;14945:42:6;;14977:1;:9;;;14945:42;;;;2119:25:8;;2107:2;2092:18;;1973:177;14945:42:6;;;;;;;;14831:167;-1:-1:-1;;;;;15015:35:6;;;;;;:24;:35;;;;;;;;;:77;;;15077:15;;15054:20;15064:9;15054;:20::i;:::-;:38;;15015:77;15007:137;;;;-1:-1:-1;;;15007:137:6;;20501:2:8;15007:137:6;;;20483:21:8;20540:2;20520:18;;;20513:30;20579:34;20559:18;;;20552:62;-1:-1:-1;;;20630:18:8;;;20623:45;20685:19;;15007:137:6;20299:411:8;15007:137:6;15176:9;-1:-1:-1;;;;;15159:46:6;15168:6;-1:-1:-1;;;;;15159:46:6;;15187:1;:17;;;15159:46;;;;2119:25:8;;2107:2;2092:18;;1973:177;15159:46:6;;;;;;;;14459:753;14361:851;;;;:::o;11847:514::-;11943:7;;11978;;11897;;;;;11995:259;12019:9;:16;12015:20;;11995:259;;;12084:7;12060;:21;12068:9;12078:1;12068:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;12068:12:6;12060:21;;;;;;;;;;;;;:31;;:66;;;12119:7;12095;:21;12103:9;12113:1;12103:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;12103:12:6;12095:21;;;;;;;;;;;;;:31;12060:66;12056:97;;;12136:7;;12145;;12128:25;;;;;;;11847:514;;:::o;12056:97::-;12177:7;:21;12185:9;12195:1;12185:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;12185:12:6;12177:21;;;;;;;;;;;;;12167:31;;;;:::i;:::-;;;12222:7;:21;12230:9;12240:1;12230:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;12230:12:6;12222:21;;;;;;;;;;;;;12212:31;;;;:::i;:::-;;-1:-1:-1;12037:3:6;;;;:::i;:::-;;;;11995:259;;;;12285:7;;12277;;:15;;;;:::i;:::-;12267:7;:25;12263:56;;;12302:7;;12311;;12294:25;;;;;;11847:514;;:::o;12263:56::-;12337:7;;12346;;-1:-1:-1;11847:514:6;-1:-1:-1;11847:514:6:o;10797:376::-;10871:28;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10871:28:6;10916:7;10912:83;;10937:17;;;:27;;;10976:8;;10912:83;11021:12;:16;11038:3;;11013:24;;11021:16;;11013:7;:24;:::i;:::-;:28;;;;:::i;:::-;11004:6;;;:37;11071:12;:19;11091:3;;11063:27;;11071:19;;;;;11063:7;:27;:::i;:::-;:31;;;;:::i;:::-;11051:9;;;:43;;;11132:6;;;;11124:14;;:7;:14;:::i;:::-;:24;;;;:::i;:::-;11104:17;;;:44;10797:376;;;;:::o;11179:501::-;11304:15;;;;11397:19;11405:11;11397:7;:19;:::i;:::-;11387:29;;11431:7;11427:64;;-1:-1:-1;11459:7:6;;-1:-1:-1;11476:1:6;;-1:-1:-1;11476:1:6;11452:28;;11427:64;11515:11;11508:1;:6;;;:18;;;;:::i;:::-;11501:25;;11556:11;11546:1;:9;;;:21;;;;:::i;:::-;11536:31;-1:-1:-1;11536:31:6;11596:12;11604:4;11596:7;:12;:::i;:::-;:20;;;;:::i;:::-;11577:39;;11179:501;;;;;;;;;;:::o;16082:669::-;16235:16;;;16249:1;16235:16;;;;;;;;16211:21;;16235:16;;;;;;;;;;-1:-1:-1;16235:16:6;16211:40;;16279:4;16261;16266:1;16261:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;16261:23:6;;;-1:-1:-1;;;;;16261:23:6;;;;;16304:15;;;;;;;;;-1:-1:-1;;;;;16304:15:6;-1:-1:-1;;;;;16304:20:6;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16294:4;16299:1;16294:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;16294:32:6;;;:7;;;;;;;;;;:32;;;;16373:15;;16358:4;5618:7;5644:18;;;:11;:18;;;;;;16373:15;;;;;;;5644:27;;;;;;16393:11;-1:-1:-1;16337:154:6;;;16450:15;;16418:62;;16435:4;;16450:15;;;-1:-1:-1;;;;;16450:15:6;-1:-1:-1;;16418:8:6;:62::i;:::-;16526:15;;:218;;-1:-1:-1;;;16526:218:6;;:15;;;;-1:-1:-1;;;;;16526:15:6;;:66;;:218;;16606:11;;16631:1;;16674:4;;16700;;16719:15;;16526:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16137:614;16082:669;:::o;16757:415::-;16867:15;;-1:-1:-1;;;;;16867:15:6;;;;;:31;16906:9;16938:4;16957:11;16982:1;;17066:7;1012::7;1038:6;-1:-1:-1;;;;;1038:6:7;;966:85;17066:7:6;16867:245;;;;;;-1:-1:-1;;;;;;16867:245:6;;;-1:-1:-1;;;;;22455:15:8;;;16867:245:6;;;22437:34:8;22487:18;;;22480:34;;;;22530:18;;;22523:34;;;;22573:18;;;22566:34;22637:15;;;22616:19;;;22609:44;17087:15:6;22669:19:8;;;22662:35;22371:19;;16867:245:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;17127:38:6;;;5728:25:8;;;5784:2;5769:18;;5762:34;;;17127:38:6;;-1:-1:-1;5701:18:8;17127:38:6;;;;;;;16757:415;;:::o;2012:312:0:-;2126:6;2101:21;:31;;2093:73;;;;-1:-1:-1;;;2093:73:0;;23221:2:8;2093:73:0;;;23203:21:8;23260:2;23240:18;;;23233:30;23299:31;23279:18;;;23272:59;23348:18;;2093:73:0;23019:353:8;2093:73:0;2178:12;2196:9;-1:-1:-1;;;;;2196:14:0;2218:6;2196:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2177:52;;;2247:7;2239:78;;;;-1:-1:-1;;;2239:78:0;;23789:2:8;2239:78:0;;;23771:21:8;23828:2;23808:18;;;23801:30;23867:34;23847:18;;;23840:62;23938:28;23918:18;;;23911:56;23984:19;;2239:78:0;23587:422:8;2239:78:0;2083:241;2012:312;;:::o;10073:122:6:-;10151:4;10140:7;;:15;;;;;;;:::i;:::-;;;;-1:-1:-1;;10165:11:6;:23;;10184:4;;10165:11;:15;;:23;;10184:4;;10165:23;:::i;:::-;;;;-1:-1:-1;;;;10073:122:6:o;10201:243::-;10289:4;10273:22;;;;:7;:22;;;;;:32;;10298:7;;10273:22;:32;;10298:7;;10273:32;:::i;:::-;;;;-1:-1:-1;;10338:4:6;10318:26;;;;:11;:26;;;;;;;;10315:76;;;10374:4;10358:22;;;;:7;:22;;;;;:33;;10384:7;;10358:22;:33;;10384:7;;10358:33;:::i;:::-;;;;-1:-1:-1;;10315:76:6;10421:7;10401:11;:18;;;:27;;;;;;;:::i;14:139:8:-;-1:-1:-1;;;;;97:31:8;;87:42;;77:70;;143:1;140;133:12;158:269;231:6;284:2;272:9;263:7;259:23;255:32;252:52;;;300:1;297;290:12;252:52;339:9;326:23;358:39;391:5;358:39;:::i;432:180::-;491:6;544:2;532:9;523:7;519:23;515:32;512:52;;;560:1;557;550:12;512:52;-1:-1:-1;583:23:8;;432:180;-1:-1:-1;432:180:8:o;851:597::-;963:4;992:2;1021;1010:9;1003:21;1053:6;1047:13;1096:6;1091:2;1080:9;1076:18;1069:34;1121:1;1131:140;1145:6;1142:1;1139:13;1131:140;;;1240:14;;;1236:23;;1230:30;1206:17;;;1225:2;1202:26;1195:66;1160:10;;1131:140;;;1289:6;1286:1;1283:13;1280:91;;;1359:1;1354:2;1345:6;1334:9;1330:22;1326:31;1319:42;1280:91;-1:-1:-1;1432:2:8;1411:15;-1:-1:-1;;1407:29:8;1392:45;;;;1439:2;1388:54;;851:597;-1:-1:-1;;;851:597:8:o;1453:323::-;1521:6;1529;1582:2;1570:9;1561:7;1557:23;1553:32;1550:52;;;1598:1;1595;1588:12;1550:52;1637:9;1624:23;1656:39;1689:5;1656:39;:::i;:::-;1714:5;1766:2;1751:18;;;;1738:32;;-1:-1:-1;;;1453:323:8:o;2155:472::-;2232:6;2240;2248;2301:2;2289:9;2280:7;2276:23;2272:32;2269:52;;;2317:1;2314;2307:12;2269:52;2356:9;2343:23;2375:39;2408:5;2375:39;:::i;:::-;2433:5;-1:-1:-1;2490:2:8;2475:18;;2462:32;2503:41;2462:32;2503:41;:::i;:::-;2155:472;;2563:7;;-1:-1:-1;;;2617:2:8;2602:18;;;;2589:32;;2155:472::o;3081:118::-;3167:5;3160:13;3153:21;3146:5;3143:32;3133:60;;3189:1;3186;3179:12;3204:309;3269:6;3277;3330:2;3318:9;3309:7;3305:23;3301:32;3298:52;;;3346:1;3343;3336:12;3298:52;3382:9;3369:23;3359:33;;3442:2;3431:9;3427:18;3414:32;3455:28;3477:5;3455:28;:::i;:::-;3502:5;3492:15;;;3204:309;;;;;:::o;3518:156::-;3584:20;;3644:4;3633:16;;3623:27;;3613:55;;3664:1;3661;3654:12;3613:55;3518:156;;;:::o;3679:322::-;3750:6;3758;3766;3819:2;3807:9;3798:7;3794:23;3790:32;3787:52;;;3835:1;3832;3825:12;3787:52;3858:27;3875:9;3858:27;:::i;:::-;3848:37;;3904:36;3936:2;3925:9;3921:18;3904:36;:::i;:::-;3894:46;;3959:36;3991:2;3980:9;3976:18;3959:36;:::i;:::-;3949:46;;3679:322;;;;;:::o;4430:248::-;4498:6;4506;4559:2;4547:9;4538:7;4534:23;4530:32;4527:52;;;4575:1;4572;4565:12;4527:52;-1:-1:-1;;4598:23:8;;;4668:2;4653:18;;;4640:32;;-1:-1:-1;4430:248:8:o;4683:390::-;4748:6;4756;4809:2;4797:9;4788:7;4784:23;4780:32;4777:52;;;4825:1;4822;4815:12;4777:52;4864:9;4851:23;4883:39;4916:5;4883:39;:::i;:::-;4941:5;-1:-1:-1;4998:2:8;4983:18;;4970:32;5011:30;4970:32;5011:30;:::i;6031:750::-;6123:6;6131;6139;6192:2;6180:9;6171:7;6167:23;6163:32;6160:52;;;6208:1;6205;6198:12;6160:52;6248:9;6235:23;6277:18;6318:2;6310:6;6307:14;6304:34;;;6334:1;6331;6324:12;6304:34;6372:6;6361:9;6357:22;6347:32;;6417:7;6410:4;6406:2;6402:13;6398:27;6388:55;;6439:1;6436;6429:12;6388:55;6479:2;6466:16;6505:2;6497:6;6494:14;6491:34;;;6521:1;6518;6511:12;6491:34;6576:7;6569:4;6559:6;6556:1;6552:14;6548:2;6544:23;6540:34;6537:47;6534:67;;;6597:1;6594;6587:12;6534:67;6628:4;6620:13;;;;-1:-1:-1;6652:6:8;-1:-1:-1;;6693:20:8;;6680:34;6723:28;6680:34;6723:28;:::i;:::-;6770:5;6760:15;;;6031:750;;;;;:::o;6786:241::-;6842:6;6895:2;6883:9;6874:7;6870:23;6866:32;6863:52;;;6911:1;6908;6901:12;6863:52;6950:9;6937:23;6969:28;6991:5;6969:28;:::i;7032:404::-;7100:6;7108;7161:2;7149:9;7140:7;7136:23;7132:32;7129:52;;;7177:1;7174;7167:12;7129:52;7216:9;7203:23;7235:39;7268:5;7235:39;:::i;:::-;7293:5;-1:-1:-1;7350:2:8;7335:18;;7322:32;7363:41;7322:32;7363:41;:::i;7441:356::-;7643:2;7625:21;;;7662:18;;;7655:30;7721:34;7716:2;7701:18;;7694:62;7788:2;7773:18;;7441:356::o;7802:184::-;7872:6;7925:2;7913:9;7904:7;7900:23;7896:32;7893:52;;;7941:1;7938;7931:12;7893:52;-1:-1:-1;7964:16:8;;7802:184;-1:-1:-1;7802:184:8:o;8618:245::-;8685:6;8738:2;8726:9;8717:7;8713:23;8709:32;8706:52;;;8754:1;8751;8744:12;8706:52;8786:9;8780:16;8805:28;8827:5;8805:28;:::i;8868:127::-;8929:10;8924:3;8920:20;8917:1;8910:31;8960:4;8957:1;8950:15;8984:4;8981:1;8974:15;9000:422;9089:1;9132:5;9089:1;9146:270;9167:7;9157:8;9154:21;9146:270;;;9226:4;9222:1;9218:6;9214:17;9208:4;9205:27;9202:53;;;9235:18;;:::i;:::-;9285:7;9275:8;9271:22;9268:55;;;9305:16;;;;9268:55;9384:22;;;;9344:15;;;;9146:270;;;9150:3;9000:422;;;;;:::o;9427:806::-;9476:5;9506:8;9496:80;;-1:-1:-1;9547:1:8;9561:5;;9496:80;9595:4;9585:76;;-1:-1:-1;9632:1:8;9646:5;;9585:76;9677:4;9695:1;9690:59;;;;9763:1;9758:130;;;;9670:218;;9690:59;9720:1;9711:10;;9734:5;;;9758:130;9795:3;9785:8;9782:17;9779:43;;;9802:18;;:::i;:::-;-1:-1:-1;;9858:1:8;9844:16;;9873:5;;9670:218;;9972:2;9962:8;9959:16;9953:3;9947:4;9944:13;9940:36;9934:2;9924:8;9921:16;9916:2;9910:4;9907:12;9903:35;9900:77;9897:159;;;-1:-1:-1;10009:19:8;;;10041:5;;9897:159;10088:34;10113:8;10107:4;10088:34;:::i;:::-;10158:6;10154:1;10150:6;10146:19;10137:7;10134:32;10131:58;;;10169:18;;:::i;:::-;10207:20;;9427:806;-1:-1:-1;;;9427:806:8:o;10238:140::-;10296:5;10325:47;10366:4;10356:8;10352:19;10346:4;10325:47;:::i;10383:168::-;10423:7;10489:1;10485;10481:6;10477:14;10474:1;10471:21;10466:1;10459:9;10452:17;10448:45;10445:71;;;10496:18;;:::i;:::-;-1:-1:-1;10536:9:8;;10383:168::o;10965:217::-;11005:1;11031;11021:132;;11075:10;11070:3;11066:20;11063:1;11056:31;11110:4;11107:1;11100:15;11138:4;11135:1;11128:15;11021:132;-1:-1:-1;11167:9:8;;10965:217::o;11950:127::-;12011:10;12006:3;12002:20;11999:1;11992:31;12042:4;12039:1;12032:15;12066:4;12063:1;12056:15;12082:125;12122:4;12150:1;12147;12144:8;12141:34;;;12155:18;;:::i;:::-;-1:-1:-1;12192:9:8;;12082:125::o;12212:127::-;12273:10;12268:3;12264:20;12261:1;12254:31;12304:4;12301:1;12294:15;12328:4;12325:1;12318:15;12344:135;12383:3;-1:-1:-1;;12404:17:8;;12401:43;;;12424:18;;:::i;:::-;-1:-1:-1;12471:1:8;12460:13;;12344:135::o;12484:128::-;12524:3;12555:1;12551:6;12548:1;12545:13;12542:39;;;12561:18;;:::i;:::-;-1:-1:-1;12597:9:8;;12484:128::o;12977:204::-;13015:3;13051:4;13048:1;13044:12;13083:4;13080:1;13076:12;13118:3;13112:4;13108:14;13103:3;13100:23;13097:49;;;13126:18;;:::i;:::-;13162:13;;12977:204;-1:-1:-1;;;12977:204:8:o;20056:238::-;20094:7;20134:4;20131:1;20127:12;20166:4;20163:1;20159:12;20226:3;20220:4;20216:14;20211:3;20208:23;20201:3;20194:11;20187:19;20183:49;20180:75;;;20235:18;;:::i;20847:259::-;20917:6;20970:2;20958:9;20949:7;20945:23;20941:32;20938:52;;;20986:1;20983;20976:12;20938:52;21018:9;21012:16;21037:39;21070:5;21037:39;:::i;21111:980::-;21373:4;21421:3;21410:9;21406:19;21452:6;21441:9;21434:25;21478:2;21516:6;21511:2;21500:9;21496:18;21489:34;21559:3;21554:2;21543:9;21539:18;21532:31;21583:6;21618;21612:13;21649:6;21641;21634:22;21687:3;21676:9;21672:19;21665:26;;21726:2;21718:6;21714:15;21700:29;;21747:1;21757:195;21771:6;21768:1;21765:13;21757:195;;;21836:13;;-1:-1:-1;;;;;21832:39:8;21820:52;;21927:15;;;;21892:12;;;;21868:1;21786:9;21757:195;;;-1:-1:-1;;;;;;;22008:32:8;;;;22003:2;21988:18;;21981:60;-1:-1:-1;;;22072:3:8;22057:19;22050:35;21969:3;21111:980;-1:-1:-1;;;21111:980:8:o;22708:306::-;22796:6;22804;22812;22865:2;22853:9;22844:7;22840:23;22836:32;22833:52;;;22881:1;22878;22871:12;22833:52;22910:9;22904:16;22894:26;;22960:2;22949:9;22945:18;22939:25;22929:35;;23004:2;22993:9;22989:18;22983:25;22973:35;;22708:306;;;;;:::o

Swarm Source

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