ETH Price: $3,513.94 (+5.03%)

Token

Dark Onion (DARK)
 

Overview

Max Total Supply

100,000,000,000 DARK

Holders

170

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
39,809,914.692270329 DARK

Value
$0.00
0x4b1C6855475e65446e955612cA6167d9D9E843AB
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:
DarkOnion

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity Multiple files format)

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

/* 

$$$$$$$\                      $$\              $$$$$$\            $$\                     
$$  __$$\                     $$ |            $$  __$$\           \__|                    
$$ |  $$ | $$$$$$\   $$$$$$\  $$ |  $$\       $$ /  $$ |$$$$$$$\  $$\  $$$$$$\  $$$$$$$\  
$$ |  $$ | \____$$\ $$  __$$\ $$ | $$  |      $$ |  $$ |$$  __$$\ $$ |$$  __$$\ $$  __$$\ 
$$ |  $$ | $$$$$$$ |$$ |  \__|$$$$$$  /       $$ |  $$ |$$ |  $$ |$$ |$$ /  $$ |$$ |  $$ |
$$ |  $$ |$$  __$$ |$$ |      $$  _$$<        $$ |  $$ |$$ |  $$ |$$ |$$ |  $$ |$$ |  $$ |
$$$$$$$  |\$$$$$$$ |$$ |      $$ | \$$\        $$$$$$  |$$ |  $$ |$$ |\$$$$$$  |$$ |  $$ |
\_______/  \_______|\__|      \__|  \__|       \______/ \__|  \__|\__| \______/ \__|  \__|

🔥 Launch: 20th December @ 11pm UTC

Website: www.darkonion.co
Telegram: @darkoniontoken
Twitter: @darkoniontoken

Dark-Webbing The Metaverses!

⭐️ $DARK TOKENOMICS ⭐️

🔸 Supply: 100 Billion
🔸 Team Tokens: 3% (100% vested, 90 days)
🔸 Private Sale: 3% (50% Vested)
🔸 Liquidity Pool: 96% 

🔹Starting LP: $30,000 USD. (7.6 ETH)

🔸 Tax: 10%
🔸 Reflection: 3%
🔸 Virtual Asset Wallet: 7%
❗️During the first 24 hours, sell tax is set at 25%.

*/

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

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

    uint256 public maxTxAmountBuy = _tTotal/142; 
    uint256 public maxTxAmountSell = _tTotal/333; 
    uint256 public maxWalletAmount = _tTotal/100; 
    
    //antisnipers
    uint256 public liqAddedBlockNumber;
    uint256 public blocksToWait = 2;

    address payable public marketingAddress;

    mapping (address => bool) public isAutomatedMarketMakerPair;

    string private constant _name = "Dark Onion";
    string private constant _symbol = "DARK";

    bool private inSwapAndLiquify;

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

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

    feeRatesStruct public buyRates = feeRatesStruct(
     {
      rfi: 3,    
      marketing: 7, 
      autolp: 0, 
      toSwap: 7 
    });

    feeRatesStruct public sellRates = feeRatesStruct(
    {
      rfi: 3,   
      marketing: 22, 
      autolp: 0, 
      toSwap: 22 
    });

    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 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() external onlyOwner
    {
            swapAndLiquify(balanceOf(address(this)));
    }
    
    // Cannot BLACKLIST user manually, the only way to get into the Blacklist is to snipe, buy in block no.1. We give grace here if a genuine user can prove that they did not snipe in block 0 or 1.
    function unblacklistSniper(address botAddress) external onlyOwner
    {   require(!isBot[botAddress] ,"address provided is already not blacklisted");
        isBot[botAddress] = false;
        emit BlacklistedUser(botAddress,false);
    }

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

}

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 4 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 5 of 8: IUniswapV2Factory.sol
// SPDX-License-Identifier: MIT

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 6 of 8: IUniswapV2Router01.sol
// SPDX-License-Identifier: MIT

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 7 of 8: IUniswapV2Router02.sol
// SPDX-License-Identifier: MIT

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":[],"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":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeMultipleAccountsFromMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isAutomatedMarketMakerPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liqAddedBlockNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":[],"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":[{"internalType":"address","name":"botAddress","type":"address"}],"name":"unblacklistSniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052620000126009600a62000657565b620000239064174876e80062000742565b600981905562000036906000196200077e565b620000449060001962000764565b600a55608e600954620000589190620005f3565b600b5561014d6009546200006d9190620005f3565b600c556064600954620000819190620005f3565b600d556002600f556013805460ff60a01b1916600160a01b179055600954620000ae906101f490620005f3565b601455604080516080808201835260038083526007602080850182905260008587018190526060958601929092526015805460ff19908116851761ff00199081166107001763ffff0000199081166307000000179384905589519788018a52868852601694880185905298870194909452949095018190528054841690921781166116001790941663160000001790556017805463ff0000001962ff00001960ff80871693909516929092179095166101008086048516021716620100008085048416021793909316630100000092839004919091169091021790553480156200019757600080fd5b50620001ac620001a66200053d565b62000541565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620001ff57600080fd5b505afa15801562000214573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200023a9190620005a0565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200028357600080fd5b505afa15801562000298573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002be9190620005a0565b6040518363ffffffff1660e01b8152600401620002dd929190620005d0565b602060405180830381600087803b158015620002f857600080fd5b505af11580156200030d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003339190620005a0565b601380546001600160a01b0319166001600160a01b03928316178082558216600090815260116020526040808220805460ff1916600190811790915592549051929316917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab9190a360128054610100600160a81b0319166101006001600160a01b03841602179055600a5460016000620003cc62000591565b6001600160a01b031681526020810191909152604001600090812091909155601080546001600160a01b031916331790556001906004906200040d62000591565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905560105490911681526004909252808220805484166001908117909155308352908220805490931681179092556006906200047462000591565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790556010548216815260069093528183208054851660019081179091553084528284208054861682179055601354909116835291208054909216179055620004e762000591565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6009546040516200052e9190620005ea565b60405180910390a350620007c1565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000546001600160a01b031690565b600060208284031215620005b2578081fd5b81516001600160a01b0381168114620005c9578182fd5b9392505050565b6001600160a01b0392831681529116602082015260400190565b90815260200190565b600082620006055762000605620007ab565b500490565b80825b60018086116200061e57506200064e565b81870482111562000633576200063362000795565b808616156200064157918102915b9490941c9380026200060d565b94509492505050565b6000620005c960001960ff8516846000826200067657506001620005c9565b816200068557506000620005c9565b81600181146200069e5760028114620006a957620006dd565b6001915050620005c9565b60ff841115620006bd57620006bd62000795565b6001841b915084821115620006d657620006d662000795565b50620005c9565b5060208310610133831016604e8410600b841016171562000715575081810a838111156200070f576200070f62000795565b620005c9565b6200072484848460016200060a565b80860482111562000739576200073962000795565b02949350505050565b60008160001904831182151516156200075f576200075f62000795565b500290565b60008282101562000779576200077962000795565b500390565b600082620007905762000790620007ab565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b61359780620007d16000396000f3fe6080604052600436106102cd5760003560e01c806379eb8d1d11610175578063aa4bde28116100dc578063d44e586e11610095578063dd62ed3e1161006f578063dd62ed3e14610827578063e22b62de14610847578063ea2f0b3714610867578063f2fde38b14610887576102d4565b8063d44e586e146107e8578063d6c180bf146107fd578063d8dcac4f14610812576102d4565b8063aa4bde2814610749578063bd94545b1461075e578063c49b9a801461077e578063c816841b1461079e578063d12a7688146107b3578063d2fcc001146107c8576102d4565b806395d89b411161012e57806395d89b411461069c5780639a7a23d6146106b15780639ba5e4d5146106d1578063a457c2d7146106f4578063a5ece94114610714578063a9059cbb14610729576102d4565b806379eb8d1d146105fd57806388f820201461061d5780638a0eef5a1461063d5780638da5cb5b14610652578063906e9dd014610667578063958b0f2014610687576102d4565b80633bbac579116102345780635342acb4116101ed578063713898cd116101c7578063713898cd1461058e578063715018a6146105b357806373cafdc2146105c85780637949a403146105dd576102d4565b80635342acb41461052e5780636dd3d39f1461054e57806370a082311461056e576102d4565b80633bbac57914610479578063437823ec146104995780634549b039146104b95780634a74bb02146104d957806350be7cdb146104ee57806352390c021461050e576102d4565b806323b872dd1161028657806323b872dd146103b757806327a14fc2146103d75780632d838119146103f7578063313ce567146104175780633685d419146104395780633950935114610459576102d4565b806304679780146102d9578063055add0d146102fb57806306fdde0314610326578063095ea7b31461034857806315952f541461037557806318160ddd14610395576102d4565b366102d457005b600080fd5b3480156102e557600080fd5b506102f96102f4366004612a8f565b6108a7565b005b34801561030757600080fd5b5061031061090b565b60405161031d9190612b53565b60405180910390f35b34801561033257600080fd5b5061033b61091f565b60405161031d9190612bad565b34801561035457600080fd5b506103686103633660046129cc565b610943565b60405161031d9190612ba2565b34801561038157600080fd5b506102f96103903660046128e8565b610961565b3480156103a157600080fd5b506103aa610a33565b60405161031d919061328e565b3480156103c357600080fd5b506103686103d2366004612958565b610a39565b3480156103e357600080fd5b506102f96103f2366004612a8f565b610acb565b34801561040357600080fd5b506103aa610412366004612a8f565b610b63565b34801561042357600080fd5b5061042c610ba6565b60405161031d9190613315565b34801561044557600080fd5b506102f96104543660046128e8565b610bab565b34801561046557600080fd5b506103686104743660046129cc565b610d80565b34801561048557600080fd5b506103686104943660046128e8565b610dd4565b3480156104a557600080fd5b506102f96104b43660046128e8565b610de9565b3480156104c557600080fd5b506103aa6104d4366004612aa7565b610e4c565b3480156104e557600080fd5b50610368610ea6565b3480156104fa57600080fd5b506102f9610509366004612b17565b610eb6565b34801561051a57600080fd5b506102f96105293660046128e8565b610f55565b34801561053a57600080fd5b506103686105493660046128e8565b61108d565b34801561055a57600080fd5b506103686105693660046128e8565b6110ab565b34801561057a57600080fd5b506103aa6105893660046128e8565b6110c9565b34801561059a57600080fd5b506105a361112b565b60405161031d9493929190613323565b3480156105bf57600080fd5b506102f9611150565b3480156105d457600080fd5b506105a361119b565b3480156105e957600080fd5b506103686105f83660046128e8565b6111c0565b34801561060957600080fd5b506102f9610618366004612ac9565b6111d5565b34801561062957600080fd5b506103686106383660046128e8565b611255565b34801561064957600080fd5b506103aa611273565b34801561065e57600080fd5b50610310611279565b34801561067357600080fd5b506102f96106823660046128e8565b611288565b34801561069357600080fd5b506102f96112e9565b3480156106a857600080fd5b5061033b611339565b3480156106bd57600080fd5b506102f96106cc366004612998565b611357565b3480156106dd57600080fd5b506106e661149e565b60405161031d929190613307565b34801561070057600080fd5b5061036861070f3660046129cc565b6114a7565b34801561072057600080fd5b50610310611520565b34801561073557600080fd5b506103686107443660046129cc565b61152f565b34801561075557600080fd5b506103aa611543565b34801561076a57600080fd5b506102f96107793660046129f7565b611549565b34801561078a57600080fd5b506102f9610799366004612a75565b6116f4565b3480156107aa57600080fd5b5061031061177a565b3480156107bf57600080fd5b506103aa611789565b3480156107d457600080fd5b506102f96107e3366004612998565b61178f565b3480156107f457600080fd5b506103aa611871565b34801561080957600080fd5b506103aa611877565b34801561081e57600080fd5b506103aa61187d565b34801561083357600080fd5b506103aa610842366004612920565b611883565b34801561085357600080fd5b506102f9610862366004612b17565b6118ae565b34801561087357600080fd5b506102f96108823660046128e8565b61194d565b34801561089357600080fd5b506102f96108a23660046128e8565b6119ad565b6108af611a1e565b6001600160a01b03166108c0611279565b6001600160a01b0316146108ef5760405162461bcd60e51b81526004016108e6906130f3565b60405180910390fd5b6108fb6009600a6133eb565b61090590826134bc565b60145550565b60125461010090046001600160a01b031681565b60408051808201909152600a8152692230b9359027b734b7b760b11b602082015290565b6000610957610950611a1e565b8484611a22565b5060015b92915050565b610969611a1e565b6001600160a01b031661097a611279565b6001600160a01b0316146109a05760405162461bcd60e51b81526004016108e6906130f3565b6001600160a01b03811660009081526007602052604090205460ff16156109d95760405162461bcd60e51b81526004016108e690613029565b6001600160a01b038116600090815260076020526040808220805460ff19169055517f3159dadbd8e2d720a851b412e3358e7e44bb11734c9bfd5715340e21798e8b2590610a28908490612b53565b60405180910390a250565b60095490565b6000610a46848484611ad6565b6001600160a01b038416600090815260036020526040812081610a67611a1e565b6001600160a01b03166001600160a01b0316815260200190815260200160002054905082811015610aaa5760405162461bcd60e51b81526004016108e6906130ab565b610abe85610ab6611a1e565b858403611a22565b60019150505b9392505050565b610ad3611a1e565b6001600160a01b0316610ae4611279565b6001600160a01b031614610b0a5760405162461bcd60e51b81526004016108e6906130f3565b61271081600954610b1b91906134bc565b610b259190613385565b600d8190556040517f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e00191610b589161328e565b60405180910390a150565b6000600a54821115610b875760405162461bcd60e51b81526004016108e690612cfb565b6000610b91611e17565b9050610b9d8184613385565b9150505b919050565b600990565b610bb3611a1e565b6001600160a01b0316610bc4611279565b6001600160a01b031614610bea5760405162461bcd60e51b81526004016108e6906130f3565b6001600160a01b03811660009081526005602052604090205460ff16610c225760405162461bcd60e51b81526004016108e690612f86565b60005b600854811015610d7c57816001600160a01b031660088281548110610c5a57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03161415610d6a5760088054610c8590600190613504565b81548110610ca357634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600880546001600160a01b039092169183908110610cdd57634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff191690556008805480610d4357634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b0319169055019055610d7c565b80610d748161351b565b915050610c25565b5050565b6000610957610d8d611a1e565b848460036000610d9b611a1e565b6001600160a01b03908116825260208083019390935260409182016000908120918b1681529252902054610dcf9190613348565b611a22565b60076020526000908152604090205460ff1681565b610df1611a1e565b6001600160a01b0316610e02611279565b6001600160a01b031614610e285760405162461bcd60e51b81526004016108e6906130f3565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000600954831115610e705760405162461bcd60e51b81526004016108e690613074565b81610e8c576000610e82846001611e3a565b51915061095b9050565b6000610e99846001611e3a565b60200151915061095b9050565b601354600160a01b900460ff1681565b610ebe611a1e565b6001600160a01b0316610ecf611279565b6001600160a01b031614610ef55760405162461bcd60e51b81526004016108e6906130f3565b6015805460ff191660ff8581169190911761ff001916610100858316021762ff000019166201000091841691909102179055610f318183613360565b6015805460ff9290921663010000000263ff00000019909216919091179055505050565b610f5d611a1e565b6001600160a01b0316610f6e611279565b6001600160a01b031614610f945760405162461bcd60e51b81526004016108e6906130f3565b6001600160a01b03811660009081526005602052604090205460ff1615610fcd5760405162461bcd60e51b81526004016108e690612ea0565b6001600160a01b03811660009081526001602052604090205415611027576001600160a01b03811660009081526001602052604090205461100d90610b63565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6001600160a01b031660009081526004602052604090205460ff1690565b6001600160a01b031660009081526006602052604090205460ff1690565b6001600160a01b03811660009081526005602052604081205460ff161561110957506001600160a01b038116600090815260026020526040902054610ba1565b6001600160a01b03821660009081526001602052604090205461095b90610b63565b60165460ff808216916101008104821691620100008204811691630100000090041684565b611158611a1e565b6001600160a01b0316611169611279565b6001600160a01b03161461118f5760405162461bcd60e51b81526004016108e6906130f3565b6111996000611e78565b565b60155460ff808216916101008104821691620100008204811691630100000090041684565b60116020526000908152604090205460ff1681565b6111dd611a1e565b6001600160a01b03166111ee611279565b6001600160a01b0316146112145760405162461bcd60e51b81526004016108e6906130f3565b6127108260095461122591906134bc565b61122f9190613385565b600b55600954612710906112449083906134bc565b61124e9190613385565b600c555050565b6001600160a01b031660009081526005602052604090205460ff1690565b600e5481565b6000546001600160a01b031690565b611290611a1e565b6001600160a01b03166112a1611279565b6001600160a01b0316146112c75760405162461bcd60e51b81526004016108e6906130f3565b601080546001600160a01b0319166001600160a01b0392909216919091179055565b6112f1611a1e565b6001600160a01b0316611302611279565b6001600160a01b0316146113285760405162461bcd60e51b81526004016108e6906130f3565b611199611334306110c9565b611ec8565b6040805180820190915260048152634441524b60e01b602082015290565b61135f611a1e565b6001600160a01b0316611370611279565b6001600160a01b0316146113965760405162461bcd60e51b81526004016108e6906130f3565b6001600160a01b03821660009081526011602052604090205460ff16151581151514156113d55760405162461bcd60e51b81526004016108e690612dcd565b6001600160a01b0382166000908152601160205260409020805460ff19168215801591909117909155611462576001600160a01b03821660009081526006602052604090819020805460ff1916600117905551811515907f4a8452f723db48bf05f301f94d62a2cf7a72976cde77d83e3646584858b8f4b290611459908590612b53565b60405180910390a25b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b60185460195482565b600080600360006114b6611a1e565b6001600160a01b03908116825260208083019390935260409182016000908120918816815292529020549050828110156115025760405162461bcd60e51b81526004016108e690613249565b61151661150d611a1e565b85858403611a22565b5060019392505050565b6010546001600160a01b031681565b600061095761153c611a1e565b8484611ad6565b600d5481565b611551611a1e565b6001600160a01b0316611562611279565b6001600160a01b0316146115885760405162461bcd60e51b81526004016108e6906130f3565b60005b828110156116ee57811515600660008686858181106115ba57634e487b7160e01b600052603260045260246000fd5b90506020020160208101906115cf91906128e8565b6001600160a01b0316815260208101919091526040016000205460ff161515141561160c5760405162461bcd60e51b81526004016108e690612c43565b816006600086868581811061163157634e487b7160e01b600052603260045260246000fd5b905060200201602081019061164691906128e8565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558115157f4a8452f723db48bf05f301f94d62a2cf7a72976cde77d83e3646584858b8f4b28585848181106116b257634e487b7160e01b600052603260045260246000fd5b90506020020160208101906116c791906128e8565b6040516116d49190612b53565b60405180910390a2806116e68161351b565b91505061158b565b50505050565b6116fc611a1e565b6001600160a01b031661170d611279565b6001600160a01b0316146117335760405162461bcd60e51b81526004016108e6906130f3565b6013805460ff60a01b1916600160a01b831515021790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990610b58908390612ba2565b6013546001600160a01b031681565b60145481565b611797611a1e565b6001600160a01b03166117a8611279565b6001600160a01b0316146117ce5760405162461bcd60e51b81526004016108e6906130f3565b6001600160a01b03821660009081526006602052604090205460ff161515811515141561180d5760405162461bcd60e51b81526004016108e690612ed7565b6001600160a01b03821660009081526006602052604090819020805460ff191683151590811790915590517f4a8452f723db48bf05f301f94d62a2cf7a72976cde77d83e3646584858b8f4b290611865908590612b53565b60405180910390a25050565b600c5481565b600b5481565b600f5481565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b6118b6611a1e565b6001600160a01b03166118c7611279565b6001600160a01b0316146118ed5760405162461bcd60e51b81526004016108e6906130f3565b6016805460ff191660ff8581169190911761ff001916610100858316021762ff0000191662010000918416919091021790556119298183613360565b6016805460ff9290921663010000000263ff00000019909216919091179055505050565b611955611a1e565b6001600160a01b0316611966611279565b6001600160a01b03161461198c5760405162461bcd60e51b81526004016108e6906130f3565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6119b5611a1e565b6001600160a01b03166119c6611279565b6001600160a01b0316146119ec5760405162461bcd60e51b81526004016108e6906130f3565b6001600160a01b038116611a125760405162461bcd60e51b81526004016108e690612d45565b611a1b81611e78565b50565b3390565b6001600160a01b038316611a485760405162461bcd60e51b81526004016108e690613205565b6001600160a01b038216611a6e5760405162461bcd60e51b81526004016108e690612d8b565b6001600160a01b0380841660008181526003602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590611ac990859061328e565b60405180910390a3505050565b600e54158015611afe57506001600160a01b03821660009081526011602052604090205460ff165b15611b085743600e555b6001600160a01b038316611b2e5760405162461bcd60e51b81526004016108e6906131c0565b6001600160a01b038216611b545760405162461bcd60e51b81526004016108e690612c00565b6001600160a01b03831660009081526007602052604090205460ff1615611b8d5760405162461bcd60e51b81526004016108e690612ff4565b60008111611bad5760405162461bcd60e51b81526004016108e690613128565b611bb6836110c9565b811115611bd55760405162461bcd60e51b81526004016108e690612caa565b6001600160a01b03831660009081526004602052604081205460ff1680611c1457506001600160a01b03831660009081526004602052604090205460ff165b1590508015611da4576001600160a01b03841660009081526011602052604090205460ff1615611d2f57600f54600e54611c4e9190613348565b431015611cb5576001600160a01b03831660009081526007602052604090819020805460ff1916600190811790915590517f3159dadbd8e2d720a851b412e3358e7e44bb11734c9bfd5715340e21798e8b2590611cac908690612b53565b60405180910390a25b6015546017805460ff80841660ff199092169190911761ff0019166101008085048316021762ff00001916620100008085048316021763ff000000191663010000009384900491909116909202919091179055600b54821115611d2a5760405162461bcd60e51b81526004016108e690612e6b565b611da4565b6016546017805460ff80841660ff199092169190911761ff0019166101008085048316021762ff00001916620100008085048316021763ff000000191663010000009384900491909116909202919091179055600c54821115611da45760405162461bcd60e51b81526004016108e690612e2a565b601454611db0306110c9565b10158015611dc1575060125460ff16155b8015611de657506001600160a01b03841660009081526011602052604090205460ff16155b8015611dfb5750601354600160a01b900460ff165b15611e0b57611e0b601454611ec8565b6116ee84848484611fb2565b6000806000611e246121e4565b9092509050611e338183613385565b9250505090565b611e4261288a565b611e4c83836123a2565b9050611e61818484611e5c611e17565b61242c565b606085015260408401526020830152815292915050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6012805460ff19166001179055601754600090611ef0906301000000900460ff1660026134db565b60175460ff91821692506000918391611f11916201000090910416856134bc565b611f1b9190613385565b90506000611f298285613504565b905047611f3582612497565b6000611f418247613504565b601754909150600090611f5d9062010000900460ff1687613504565b601754611f739062010000900460ff16846134bc565b611f7d9190613385565b9050611f898582612666565b601054611f9f906001600160a01b03164761273e565b50506012805460ff191690555050505050565b6000611fbe8383611e3a565b6001600160a01b03861660009081526005602052604090205490915060ff1615612010576001600160a01b0385166000908152600260205260408120805485929061200a908490613504565b90915550505b6001600160a01b03841660009081526005602052604090205460ff16156120645760808101516001600160a01b0385166000908152600260205260408120805490919061205e908490613348565b90915550505b80516001600160a01b0386166000908152600160205260408120805490919061208e908490613504565b90915550506020808201516001600160a01b03861660009081526001909252604082208054919290916120c2908490613348565b90915550508115612141576120df81604001518260a001516127df565b6120f181606001518260c00151612814565b306001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360c00151604051612138919061328e565b60405180910390a35b6001600160a01b03841660009081526006602052604090205460ff16806121725750600d5461216f856110c9565b11155b61218e5760405162461bcd60e51b81526004016108e690613171565b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83608001516040516121d5919061328e565b60405180910390a35050505050565b600a546009546000918291825b60085481101561236f5782600160006008848154811061222157634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061229a575081600260006008848154811061227357634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156122b157600a546009549450945050505061239e565b60016000600883815481106122d657634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020546123059084613504565b9250600260006008838154811061232c57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205461235b9083613504565b9150806123678161351b565b9150506121f1565b50600954600a546123809190613385565b82101561239857600a5460095493509350505061239e565b90925090505b9091565b6123aa61288a565b816123bb576080810183905261095b565b6017546064906123ce9060ff16856134bc565b6123d89190613385565b60a08201526017546064906123f7906301000000900460ff16856134bc565b6124019190613385565b60c0820181905260a08201516124179085613504565b6124219190613504565b608082015292915050565b600080808061243b85886134bc565b9350856124505750829150600090508061248c565b848860a0015161246091906134bc565b9150848860c0015161247291906134bc565b90508061247f8386613504565b6124899190613504565b92505b945094509450949050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106124da57634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050601260019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561254857600080fd5b505afa15801561255c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125809190612904565b816001815181106125a157634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260125483916125ce91309161010090910416611883565b10156125f3576012546125f390309061010090046001600160a01b0316600019611a22565b60125460405163791ac94760e01b81526101009091046001600160a01b03169063791ac94790612630908590600090869030904290600401613297565b600060405180830381600087803b15801561264a57600080fd5b505af115801561265e573d6000803e3d6000fd5b505050505050565b60125461010090046001600160a01b031663f305d71982308560008061268a611279565b426040518863ffffffff1660e01b81526004016126ac96959493929190612b67565b6060604051808303818588803b1580156126c557600080fd5b505af11580156126d9573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906126fe9190612aea565b5050507f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b8282604051612732929190613307565b60405180910390a15050565b8047101561275e5760405162461bcd60e51b81526004016108e690612fbd565b6000826001600160a01b03168260405161277790612b50565b60006040518083038185875af1925050503d80600081146127b4576040519150601f19603f3d011682016040523d82523d6000602084013e6127b9565b606091505b50509050806127da5760405162461bcd60e51b81526004016108e690612f29565b505050565b81600a60008282546127f19190613504565b90915550506018805482919060009061280b908490613348565b90915550505050565b3060009081526001602052604081208054849290612833908490613348565b90915550503060009081526005602052604090205460ff161561287557306000908152600260205260408120805483929061286f908490613348565b90915550505b806018600101600082825461280b9190613348565b6040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b80358015158114610ba157600080fd5b803560ff81168114610ba157600080fd5b6000602082840312156128f9578081fd5b8135610ac48161354c565b600060208284031215612915578081fd5b8151610ac48161354c565b60008060408385031215612932578081fd5b823561293d8161354c565b9150602083013561294d8161354c565b809150509250929050565b60008060006060848603121561296c578081fd5b83356129778161354c565b925060208401356129878161354c565b929592945050506040919091013590565b600080604083850312156129aa578182fd5b82356129b58161354c565b91506129c3602084016128c7565b90509250929050565b600080604083850312156129de578182fd5b82356129e98161354c565b946020939093013593505050565b600080600060408486031215612a0b578283fd5b833567ffffffffffffffff80821115612a22578485fd5b818601915086601f830112612a35578485fd5b813581811115612a43578586fd5b8760208083028501011115612a56578586fd5b602092830195509350612a6c91860190506128c7565b90509250925092565b600060208284031215612a86578081fd5b610ac4826128c7565b600060208284031215612aa0578081fd5b5035919050565b60008060408385031215612ab9578182fd5b823591506129c3602084016128c7565b60008060408385031215612adb578182fd5b50508035926020909101359150565b600080600060608486031215612afe578283fd5b8351925060208401519150604084015190509250925092565b600080600060608486031215612b2b578283fd5b612b34846128d7565b9250612b42602085016128d7565b9150612a6c604085016128d7565b90565b6001600160a01b0391909116815260200190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b901515815260200190565b6000602080835283518082850152825b81811015612bd957858101830151858201604001528201612bbd565b81811115612bea5783604083870101525b50601f01601f1916929092016040019392505050565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526041908201527f5f69734578636c7564656446726f6d4d617857616c6c657420616c726561647960408201527f2073657420746f20746861742076616c756520666f72206f6e652077616c6c656060820152601d60fa1b608082015260a00190565b60208082526031908201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206040820152707468616e20796f75722062616c616e636560781b606082015260800190565b6020808252602a908201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260408201526965666c656374696f6e7360b01b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b60208082526038908201527f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160408201527f6c72656164792073657420746f20746861742076616c75650000000000000000606082015260800190565b60208082526021908201527f616d6f756e74206d757374206265203c3d206d61785478416d6f756e7453656c6040820152601b60fa1b606082015260800190565b6020808252818101527f616d6f756e74206d757374206265203c3d206d61785478416d6f756e74427579604082015260600190565b6020808252601b908201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604082015260600190565b60208082526032908201527f5f69734578636c7564656446726f6d4d617857616c6c657420616c72656164796040820152712073657420746f20746861742076616c756560701b606082015260800190565b6020808252603a908201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260408201527f6563697069656e74206d61792068617665207265766572746564000000000000606082015260800190565b60208082526017908201527f4163636f756e74206973206e6f74206578636c75646564000000000000000000604082015260600190565b6020808252601d908201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604082015260600190565b6020808252818101527f45524332303a206164647265737320626c61636b6c69737465642028626f7429604082015260600190565b6020808252602b908201527f616464726573732070726f766964656420697320616c7265616479206e6f742060408201526a189b1858dadb1a5cdd195960aa1b606082015260800190565b6020808252601f908201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604082015260600190565b60208082526028908201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616040820152676c6c6f77616e636560c01b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526029908201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206040820152687468616e207a65726f60b81b606082015260800190565b6020808252602f908201527f526563697069656e742063616e6e6f7420686f6c64206d6f7265207468616e2060408201526e1b585e15d85b1b195d105b5bdd5b9d608a1b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526025908201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604082015264207a65726f60d81b606082015260800190565b90815260200190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b818110156132e65784516001600160a01b0316835293830193918301916001016132c1565b50506001600160a01b03969096166060850152505050608001529392505050565b918252602082015260400190565b60ff91909116815260200190565b60ff948516815292841660208401529083166040830152909116606082015260800190565b6000821982111561335b5761335b613536565b500190565b600060ff821660ff84168060ff0382111561337d5761337d613536565b019392505050565b6000826133a057634e487b7160e01b81526012600452602481fd5b500490565b80825b60018086116133b757506133e2565b8187048211156133c9576133c9613536565b808616156133d657918102915b9490941c9380026133a8565b94509492505050565b6000610ac460001960ff85168460008261340757506001610ac4565b8161341457506000610ac4565b816001811461342a576002811461343457613461565b6001915050610ac4565b60ff84111561344557613445613536565b6001841b91508482111561345b5761345b613536565b50610ac4565b5060208310610133831016604e8410600b8410161715613494575081810a8381111561348f5761348f613536565b610ac4565b6134a184848460016133a5565b8086048211156134b3576134b3613536565b02949350505050565b60008160001904831182151516156134d6576134d6613536565b500290565b600060ff821660ff84168160ff04811182151516156134fc576134fc613536565b029392505050565b60008282101561351657613516613536565b500390565b600060001982141561352f5761352f613536565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0381168114611a1b57600080fdfea26469706673582212207db737d2bf1d1e50c2068343f3d6f0cdbe8fbdc36002f5375939c9ca607347b564736f6c63430008000033

Deployed Bytecode

0x6080604052600436106102cd5760003560e01c806379eb8d1d11610175578063aa4bde28116100dc578063d44e586e11610095578063dd62ed3e1161006f578063dd62ed3e14610827578063e22b62de14610847578063ea2f0b3714610867578063f2fde38b14610887576102d4565b8063d44e586e146107e8578063d6c180bf146107fd578063d8dcac4f14610812576102d4565b8063aa4bde2814610749578063bd94545b1461075e578063c49b9a801461077e578063c816841b1461079e578063d12a7688146107b3578063d2fcc001146107c8576102d4565b806395d89b411161012e57806395d89b411461069c5780639a7a23d6146106b15780639ba5e4d5146106d1578063a457c2d7146106f4578063a5ece94114610714578063a9059cbb14610729576102d4565b806379eb8d1d146105fd57806388f820201461061d5780638a0eef5a1461063d5780638da5cb5b14610652578063906e9dd014610667578063958b0f2014610687576102d4565b80633bbac579116102345780635342acb4116101ed578063713898cd116101c7578063713898cd1461058e578063715018a6146105b357806373cafdc2146105c85780637949a403146105dd576102d4565b80635342acb41461052e5780636dd3d39f1461054e57806370a082311461056e576102d4565b80633bbac57914610479578063437823ec146104995780634549b039146104b95780634a74bb02146104d957806350be7cdb146104ee57806352390c021461050e576102d4565b806323b872dd1161028657806323b872dd146103b757806327a14fc2146103d75780632d838119146103f7578063313ce567146104175780633685d419146104395780633950935114610459576102d4565b806304679780146102d9578063055add0d146102fb57806306fdde0314610326578063095ea7b31461034857806315952f541461037557806318160ddd14610395576102d4565b366102d457005b600080fd5b3480156102e557600080fd5b506102f96102f4366004612a8f565b6108a7565b005b34801561030757600080fd5b5061031061090b565b60405161031d9190612b53565b60405180910390f35b34801561033257600080fd5b5061033b61091f565b60405161031d9190612bad565b34801561035457600080fd5b506103686103633660046129cc565b610943565b60405161031d9190612ba2565b34801561038157600080fd5b506102f96103903660046128e8565b610961565b3480156103a157600080fd5b506103aa610a33565b60405161031d919061328e565b3480156103c357600080fd5b506103686103d2366004612958565b610a39565b3480156103e357600080fd5b506102f96103f2366004612a8f565b610acb565b34801561040357600080fd5b506103aa610412366004612a8f565b610b63565b34801561042357600080fd5b5061042c610ba6565b60405161031d9190613315565b34801561044557600080fd5b506102f96104543660046128e8565b610bab565b34801561046557600080fd5b506103686104743660046129cc565b610d80565b34801561048557600080fd5b506103686104943660046128e8565b610dd4565b3480156104a557600080fd5b506102f96104b43660046128e8565b610de9565b3480156104c557600080fd5b506103aa6104d4366004612aa7565b610e4c565b3480156104e557600080fd5b50610368610ea6565b3480156104fa57600080fd5b506102f9610509366004612b17565b610eb6565b34801561051a57600080fd5b506102f96105293660046128e8565b610f55565b34801561053a57600080fd5b506103686105493660046128e8565b61108d565b34801561055a57600080fd5b506103686105693660046128e8565b6110ab565b34801561057a57600080fd5b506103aa6105893660046128e8565b6110c9565b34801561059a57600080fd5b506105a361112b565b60405161031d9493929190613323565b3480156105bf57600080fd5b506102f9611150565b3480156105d457600080fd5b506105a361119b565b3480156105e957600080fd5b506103686105f83660046128e8565b6111c0565b34801561060957600080fd5b506102f9610618366004612ac9565b6111d5565b34801561062957600080fd5b506103686106383660046128e8565b611255565b34801561064957600080fd5b506103aa611273565b34801561065e57600080fd5b50610310611279565b34801561067357600080fd5b506102f96106823660046128e8565b611288565b34801561069357600080fd5b506102f96112e9565b3480156106a857600080fd5b5061033b611339565b3480156106bd57600080fd5b506102f96106cc366004612998565b611357565b3480156106dd57600080fd5b506106e661149e565b60405161031d929190613307565b34801561070057600080fd5b5061036861070f3660046129cc565b6114a7565b34801561072057600080fd5b50610310611520565b34801561073557600080fd5b506103686107443660046129cc565b61152f565b34801561075557600080fd5b506103aa611543565b34801561076a57600080fd5b506102f96107793660046129f7565b611549565b34801561078a57600080fd5b506102f9610799366004612a75565b6116f4565b3480156107aa57600080fd5b5061031061177a565b3480156107bf57600080fd5b506103aa611789565b3480156107d457600080fd5b506102f96107e3366004612998565b61178f565b3480156107f457600080fd5b506103aa611871565b34801561080957600080fd5b506103aa611877565b34801561081e57600080fd5b506103aa61187d565b34801561083357600080fd5b506103aa610842366004612920565b611883565b34801561085357600080fd5b506102f9610862366004612b17565b6118ae565b34801561087357600080fd5b506102f96108823660046128e8565b61194d565b34801561089357600080fd5b506102f96108a23660046128e8565b6119ad565b6108af611a1e565b6001600160a01b03166108c0611279565b6001600160a01b0316146108ef5760405162461bcd60e51b81526004016108e6906130f3565b60405180910390fd5b6108fb6009600a6133eb565b61090590826134bc565b60145550565b60125461010090046001600160a01b031681565b60408051808201909152600a8152692230b9359027b734b7b760b11b602082015290565b6000610957610950611a1e565b8484611a22565b5060015b92915050565b610969611a1e565b6001600160a01b031661097a611279565b6001600160a01b0316146109a05760405162461bcd60e51b81526004016108e6906130f3565b6001600160a01b03811660009081526007602052604090205460ff16156109d95760405162461bcd60e51b81526004016108e690613029565b6001600160a01b038116600090815260076020526040808220805460ff19169055517f3159dadbd8e2d720a851b412e3358e7e44bb11734c9bfd5715340e21798e8b2590610a28908490612b53565b60405180910390a250565b60095490565b6000610a46848484611ad6565b6001600160a01b038416600090815260036020526040812081610a67611a1e565b6001600160a01b03166001600160a01b0316815260200190815260200160002054905082811015610aaa5760405162461bcd60e51b81526004016108e6906130ab565b610abe85610ab6611a1e565b858403611a22565b60019150505b9392505050565b610ad3611a1e565b6001600160a01b0316610ae4611279565b6001600160a01b031614610b0a5760405162461bcd60e51b81526004016108e6906130f3565b61271081600954610b1b91906134bc565b610b259190613385565b600d8190556040517f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e00191610b589161328e565b60405180910390a150565b6000600a54821115610b875760405162461bcd60e51b81526004016108e690612cfb565b6000610b91611e17565b9050610b9d8184613385565b9150505b919050565b600990565b610bb3611a1e565b6001600160a01b0316610bc4611279565b6001600160a01b031614610bea5760405162461bcd60e51b81526004016108e6906130f3565b6001600160a01b03811660009081526005602052604090205460ff16610c225760405162461bcd60e51b81526004016108e690612f86565b60005b600854811015610d7c57816001600160a01b031660088281548110610c5a57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03161415610d6a5760088054610c8590600190613504565b81548110610ca357634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600880546001600160a01b039092169183908110610cdd57634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff191690556008805480610d4357634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b0319169055019055610d7c565b80610d748161351b565b915050610c25565b5050565b6000610957610d8d611a1e565b848460036000610d9b611a1e565b6001600160a01b03908116825260208083019390935260409182016000908120918b1681529252902054610dcf9190613348565b611a22565b60076020526000908152604090205460ff1681565b610df1611a1e565b6001600160a01b0316610e02611279565b6001600160a01b031614610e285760405162461bcd60e51b81526004016108e6906130f3565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000600954831115610e705760405162461bcd60e51b81526004016108e690613074565b81610e8c576000610e82846001611e3a565b51915061095b9050565b6000610e99846001611e3a565b60200151915061095b9050565b601354600160a01b900460ff1681565b610ebe611a1e565b6001600160a01b0316610ecf611279565b6001600160a01b031614610ef55760405162461bcd60e51b81526004016108e6906130f3565b6015805460ff191660ff8581169190911761ff001916610100858316021762ff000019166201000091841691909102179055610f318183613360565b6015805460ff9290921663010000000263ff00000019909216919091179055505050565b610f5d611a1e565b6001600160a01b0316610f6e611279565b6001600160a01b031614610f945760405162461bcd60e51b81526004016108e6906130f3565b6001600160a01b03811660009081526005602052604090205460ff1615610fcd5760405162461bcd60e51b81526004016108e690612ea0565b6001600160a01b03811660009081526001602052604090205415611027576001600160a01b03811660009081526001602052604090205461100d90610b63565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6001600160a01b031660009081526004602052604090205460ff1690565b6001600160a01b031660009081526006602052604090205460ff1690565b6001600160a01b03811660009081526005602052604081205460ff161561110957506001600160a01b038116600090815260026020526040902054610ba1565b6001600160a01b03821660009081526001602052604090205461095b90610b63565b60165460ff808216916101008104821691620100008204811691630100000090041684565b611158611a1e565b6001600160a01b0316611169611279565b6001600160a01b03161461118f5760405162461bcd60e51b81526004016108e6906130f3565b6111996000611e78565b565b60155460ff808216916101008104821691620100008204811691630100000090041684565b60116020526000908152604090205460ff1681565b6111dd611a1e565b6001600160a01b03166111ee611279565b6001600160a01b0316146112145760405162461bcd60e51b81526004016108e6906130f3565b6127108260095461122591906134bc565b61122f9190613385565b600b55600954612710906112449083906134bc565b61124e9190613385565b600c555050565b6001600160a01b031660009081526005602052604090205460ff1690565b600e5481565b6000546001600160a01b031690565b611290611a1e565b6001600160a01b03166112a1611279565b6001600160a01b0316146112c75760405162461bcd60e51b81526004016108e6906130f3565b601080546001600160a01b0319166001600160a01b0392909216919091179055565b6112f1611a1e565b6001600160a01b0316611302611279565b6001600160a01b0316146113285760405162461bcd60e51b81526004016108e6906130f3565b611199611334306110c9565b611ec8565b6040805180820190915260048152634441524b60e01b602082015290565b61135f611a1e565b6001600160a01b0316611370611279565b6001600160a01b0316146113965760405162461bcd60e51b81526004016108e6906130f3565b6001600160a01b03821660009081526011602052604090205460ff16151581151514156113d55760405162461bcd60e51b81526004016108e690612dcd565b6001600160a01b0382166000908152601160205260409020805460ff19168215801591909117909155611462576001600160a01b03821660009081526006602052604090819020805460ff1916600117905551811515907f4a8452f723db48bf05f301f94d62a2cf7a72976cde77d83e3646584858b8f4b290611459908590612b53565b60405180910390a25b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b60185460195482565b600080600360006114b6611a1e565b6001600160a01b03908116825260208083019390935260409182016000908120918816815292529020549050828110156115025760405162461bcd60e51b81526004016108e690613249565b61151661150d611a1e565b85858403611a22565b5060019392505050565b6010546001600160a01b031681565b600061095761153c611a1e565b8484611ad6565b600d5481565b611551611a1e565b6001600160a01b0316611562611279565b6001600160a01b0316146115885760405162461bcd60e51b81526004016108e6906130f3565b60005b828110156116ee57811515600660008686858181106115ba57634e487b7160e01b600052603260045260246000fd5b90506020020160208101906115cf91906128e8565b6001600160a01b0316815260208101919091526040016000205460ff161515141561160c5760405162461bcd60e51b81526004016108e690612c43565b816006600086868581811061163157634e487b7160e01b600052603260045260246000fd5b905060200201602081019061164691906128e8565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558115157f4a8452f723db48bf05f301f94d62a2cf7a72976cde77d83e3646584858b8f4b28585848181106116b257634e487b7160e01b600052603260045260246000fd5b90506020020160208101906116c791906128e8565b6040516116d49190612b53565b60405180910390a2806116e68161351b565b91505061158b565b50505050565b6116fc611a1e565b6001600160a01b031661170d611279565b6001600160a01b0316146117335760405162461bcd60e51b81526004016108e6906130f3565b6013805460ff60a01b1916600160a01b831515021790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990610b58908390612ba2565b6013546001600160a01b031681565b60145481565b611797611a1e565b6001600160a01b03166117a8611279565b6001600160a01b0316146117ce5760405162461bcd60e51b81526004016108e6906130f3565b6001600160a01b03821660009081526006602052604090205460ff161515811515141561180d5760405162461bcd60e51b81526004016108e690612ed7565b6001600160a01b03821660009081526006602052604090819020805460ff191683151590811790915590517f4a8452f723db48bf05f301f94d62a2cf7a72976cde77d83e3646584858b8f4b290611865908590612b53565b60405180910390a25050565b600c5481565b600b5481565b600f5481565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b6118b6611a1e565b6001600160a01b03166118c7611279565b6001600160a01b0316146118ed5760405162461bcd60e51b81526004016108e6906130f3565b6016805460ff191660ff8581169190911761ff001916610100858316021762ff0000191662010000918416919091021790556119298183613360565b6016805460ff9290921663010000000263ff00000019909216919091179055505050565b611955611a1e565b6001600160a01b0316611966611279565b6001600160a01b03161461198c5760405162461bcd60e51b81526004016108e6906130f3565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6119b5611a1e565b6001600160a01b03166119c6611279565b6001600160a01b0316146119ec5760405162461bcd60e51b81526004016108e6906130f3565b6001600160a01b038116611a125760405162461bcd60e51b81526004016108e690612d45565b611a1b81611e78565b50565b3390565b6001600160a01b038316611a485760405162461bcd60e51b81526004016108e690613205565b6001600160a01b038216611a6e5760405162461bcd60e51b81526004016108e690612d8b565b6001600160a01b0380841660008181526003602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590611ac990859061328e565b60405180910390a3505050565b600e54158015611afe57506001600160a01b03821660009081526011602052604090205460ff165b15611b085743600e555b6001600160a01b038316611b2e5760405162461bcd60e51b81526004016108e6906131c0565b6001600160a01b038216611b545760405162461bcd60e51b81526004016108e690612c00565b6001600160a01b03831660009081526007602052604090205460ff1615611b8d5760405162461bcd60e51b81526004016108e690612ff4565b60008111611bad5760405162461bcd60e51b81526004016108e690613128565b611bb6836110c9565b811115611bd55760405162461bcd60e51b81526004016108e690612caa565b6001600160a01b03831660009081526004602052604081205460ff1680611c1457506001600160a01b03831660009081526004602052604090205460ff165b1590508015611da4576001600160a01b03841660009081526011602052604090205460ff1615611d2f57600f54600e54611c4e9190613348565b431015611cb5576001600160a01b03831660009081526007602052604090819020805460ff1916600190811790915590517f3159dadbd8e2d720a851b412e3358e7e44bb11734c9bfd5715340e21798e8b2590611cac908690612b53565b60405180910390a25b6015546017805460ff80841660ff199092169190911761ff0019166101008085048316021762ff00001916620100008085048316021763ff000000191663010000009384900491909116909202919091179055600b54821115611d2a5760405162461bcd60e51b81526004016108e690612e6b565b611da4565b6016546017805460ff80841660ff199092169190911761ff0019166101008085048316021762ff00001916620100008085048316021763ff000000191663010000009384900491909116909202919091179055600c54821115611da45760405162461bcd60e51b81526004016108e690612e2a565b601454611db0306110c9565b10158015611dc1575060125460ff16155b8015611de657506001600160a01b03841660009081526011602052604090205460ff16155b8015611dfb5750601354600160a01b900460ff165b15611e0b57611e0b601454611ec8565b6116ee84848484611fb2565b6000806000611e246121e4565b9092509050611e338183613385565b9250505090565b611e4261288a565b611e4c83836123a2565b9050611e61818484611e5c611e17565b61242c565b606085015260408401526020830152815292915050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6012805460ff19166001179055601754600090611ef0906301000000900460ff1660026134db565b60175460ff91821692506000918391611f11916201000090910416856134bc565b611f1b9190613385565b90506000611f298285613504565b905047611f3582612497565b6000611f418247613504565b601754909150600090611f5d9062010000900460ff1687613504565b601754611f739062010000900460ff16846134bc565b611f7d9190613385565b9050611f898582612666565b601054611f9f906001600160a01b03164761273e565b50506012805460ff191690555050505050565b6000611fbe8383611e3a565b6001600160a01b03861660009081526005602052604090205490915060ff1615612010576001600160a01b0385166000908152600260205260408120805485929061200a908490613504565b90915550505b6001600160a01b03841660009081526005602052604090205460ff16156120645760808101516001600160a01b0385166000908152600260205260408120805490919061205e908490613348565b90915550505b80516001600160a01b0386166000908152600160205260408120805490919061208e908490613504565b90915550506020808201516001600160a01b03861660009081526001909252604082208054919290916120c2908490613348565b90915550508115612141576120df81604001518260a001516127df565b6120f181606001518260c00151612814565b306001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360c00151604051612138919061328e565b60405180910390a35b6001600160a01b03841660009081526006602052604090205460ff16806121725750600d5461216f856110c9565b11155b61218e5760405162461bcd60e51b81526004016108e690613171565b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83608001516040516121d5919061328e565b60405180910390a35050505050565b600a546009546000918291825b60085481101561236f5782600160006008848154811061222157634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061229a575081600260006008848154811061227357634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156122b157600a546009549450945050505061239e565b60016000600883815481106122d657634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020546123059084613504565b9250600260006008838154811061232c57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205461235b9083613504565b9150806123678161351b565b9150506121f1565b50600954600a546123809190613385565b82101561239857600a5460095493509350505061239e565b90925090505b9091565b6123aa61288a565b816123bb576080810183905261095b565b6017546064906123ce9060ff16856134bc565b6123d89190613385565b60a08201526017546064906123f7906301000000900460ff16856134bc565b6124019190613385565b60c0820181905260a08201516124179085613504565b6124219190613504565b608082015292915050565b600080808061243b85886134bc565b9350856124505750829150600090508061248c565b848860a0015161246091906134bc565b9150848860c0015161247291906134bc565b90508061247f8386613504565b6124899190613504565b92505b945094509450949050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106124da57634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050601260019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561254857600080fd5b505afa15801561255c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125809190612904565b816001815181106125a157634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260125483916125ce91309161010090910416611883565b10156125f3576012546125f390309061010090046001600160a01b0316600019611a22565b60125460405163791ac94760e01b81526101009091046001600160a01b03169063791ac94790612630908590600090869030904290600401613297565b600060405180830381600087803b15801561264a57600080fd5b505af115801561265e573d6000803e3d6000fd5b505050505050565b60125461010090046001600160a01b031663f305d71982308560008061268a611279565b426040518863ffffffff1660e01b81526004016126ac96959493929190612b67565b6060604051808303818588803b1580156126c557600080fd5b505af11580156126d9573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906126fe9190612aea565b5050507f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b8282604051612732929190613307565b60405180910390a15050565b8047101561275e5760405162461bcd60e51b81526004016108e690612fbd565b6000826001600160a01b03168260405161277790612b50565b60006040518083038185875af1925050503d80600081146127b4576040519150601f19603f3d011682016040523d82523d6000602084013e6127b9565b606091505b50509050806127da5760405162461bcd60e51b81526004016108e690612f29565b505050565b81600a60008282546127f19190613504565b90915550506018805482919060009061280b908490613348565b90915550505050565b3060009081526001602052604081208054849290612833908490613348565b90915550503060009081526005602052604090205460ff161561287557306000908152600260205260408120805483929061286f908490613348565b90915550505b806018600101600082825461280b9190613348565b6040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b80358015158114610ba157600080fd5b803560ff81168114610ba157600080fd5b6000602082840312156128f9578081fd5b8135610ac48161354c565b600060208284031215612915578081fd5b8151610ac48161354c565b60008060408385031215612932578081fd5b823561293d8161354c565b9150602083013561294d8161354c565b809150509250929050565b60008060006060848603121561296c578081fd5b83356129778161354c565b925060208401356129878161354c565b929592945050506040919091013590565b600080604083850312156129aa578182fd5b82356129b58161354c565b91506129c3602084016128c7565b90509250929050565b600080604083850312156129de578182fd5b82356129e98161354c565b946020939093013593505050565b600080600060408486031215612a0b578283fd5b833567ffffffffffffffff80821115612a22578485fd5b818601915086601f830112612a35578485fd5b813581811115612a43578586fd5b8760208083028501011115612a56578586fd5b602092830195509350612a6c91860190506128c7565b90509250925092565b600060208284031215612a86578081fd5b610ac4826128c7565b600060208284031215612aa0578081fd5b5035919050565b60008060408385031215612ab9578182fd5b823591506129c3602084016128c7565b60008060408385031215612adb578182fd5b50508035926020909101359150565b600080600060608486031215612afe578283fd5b8351925060208401519150604084015190509250925092565b600080600060608486031215612b2b578283fd5b612b34846128d7565b9250612b42602085016128d7565b9150612a6c604085016128d7565b90565b6001600160a01b0391909116815260200190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b901515815260200190565b6000602080835283518082850152825b81811015612bd957858101830151858201604001528201612bbd565b81811115612bea5783604083870101525b50601f01601f1916929092016040019392505050565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526041908201527f5f69734578636c7564656446726f6d4d617857616c6c657420616c726561647960408201527f2073657420746f20746861742076616c756520666f72206f6e652077616c6c656060820152601d60fa1b608082015260a00190565b60208082526031908201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206040820152707468616e20796f75722062616c616e636560781b606082015260800190565b6020808252602a908201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260408201526965666c656374696f6e7360b01b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b60208082526038908201527f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160408201527f6c72656164792073657420746f20746861742076616c75650000000000000000606082015260800190565b60208082526021908201527f616d6f756e74206d757374206265203c3d206d61785478416d6f756e7453656c6040820152601b60fa1b606082015260800190565b6020808252818101527f616d6f756e74206d757374206265203c3d206d61785478416d6f756e74427579604082015260600190565b6020808252601b908201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604082015260600190565b60208082526032908201527f5f69734578636c7564656446726f6d4d617857616c6c657420616c72656164796040820152712073657420746f20746861742076616c756560701b606082015260800190565b6020808252603a908201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260408201527f6563697069656e74206d61792068617665207265766572746564000000000000606082015260800190565b60208082526017908201527f4163636f756e74206973206e6f74206578636c75646564000000000000000000604082015260600190565b6020808252601d908201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604082015260600190565b6020808252818101527f45524332303a206164647265737320626c61636b6c69737465642028626f7429604082015260600190565b6020808252602b908201527f616464726573732070726f766964656420697320616c7265616479206e6f742060408201526a189b1858dadb1a5cdd195960aa1b606082015260800190565b6020808252601f908201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604082015260600190565b60208082526028908201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616040820152676c6c6f77616e636560c01b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526029908201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206040820152687468616e207a65726f60b81b606082015260800190565b6020808252602f908201527f526563697069656e742063616e6e6f7420686f6c64206d6f7265207468616e2060408201526e1b585e15d85b1b195d105b5bdd5b9d608a1b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526025908201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604082015264207a65726f60d81b606082015260800190565b90815260200190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b818110156132e65784516001600160a01b0316835293830193918301916001016132c1565b50506001600160a01b03969096166060850152505050608001529392505050565b918252602082015260400190565b60ff91909116815260200190565b60ff948516815292841660208401529083166040830152909116606082015260800190565b6000821982111561335b5761335b613536565b500190565b600060ff821660ff84168060ff0382111561337d5761337d613536565b019392505050565b6000826133a057634e487b7160e01b81526012600452602481fd5b500490565b80825b60018086116133b757506133e2565b8187048211156133c9576133c9613536565b808616156133d657918102915b9490941c9380026133a8565b94509492505050565b6000610ac460001960ff85168460008261340757506001610ac4565b8161341457506000610ac4565b816001811461342a576002811461343457613461565b6001915050610ac4565b60ff84111561344557613445613536565b6001841b91508482111561345b5761345b613536565b50610ac4565b5060208310610133831016604e8410600b8410161715613494575081810a8381111561348f5761348f613536565b610ac4565b6134a184848460016133a5565b8086048211156134b3576134b3613536565b02949350505050565b60008160001904831182151516156134d6576134d6613536565b500290565b600060ff821660ff84168160ff04811182151516156134fc576134fc613536565b029392505050565b60008282101561351657613516613536565b500390565b600060001982141561352f5761352f613536565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0381168114611a1b57600080fdfea26469706673582212207db737d2bf1d1e50c2068343f3d6f0cdbe8fbdc36002f5375939c9ca607347b564736f6c63430008000033

Deployed Bytecode Sourcemap

1459:19045:2:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19068:156;;;;;;;;;;-1:-1:-1;19068:156:2;;;;;:::i;:::-;;:::i;:::-;;2718:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5363:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;6294:161::-;;;;;;;;;;-1:-1:-1;6294:161:2;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;19714:242::-;;;;;;;;;;-1:-1:-1;19714:242:2;;;;;:::i;:::-;;:::i;5659:95::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;6463:450::-;;;;;;;;;;-1:-1:-1;6463:450:2;;;;;:::i;:::-;;:::i;19964:207::-;;;;;;;;;;-1:-1:-1;19964:207:2;;;;;:::i;:::-;;:::i;8157:248::-;;;;;;;;;;-1:-1:-1;8157:248:2;;;;;:::i;:::-;;:::i;5545:83::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;8822:475::-;;;;;;;;;;-1:-1:-1;8822:475:2;;;;;:::i;:::-;;:::i;6921:213::-;;;;;;;;;;-1:-1:-1;6921:213:2;;;;;:::i;:::-;;:::i;1913:38::-;;;;;;;;;;-1:-1:-1;1913:38:2;;;;;:::i;:::-;;:::i;9305:113::-;;;;;;;;;;-1:-1:-1;9305:113:2;;;;;:::i;:::-;;:::i;7691:456::-;;;;;;;;;;-1:-1:-1;7691:456:2;;;;;:::i;:::-;;:::i;2799:40::-;;;;;;;;;;;;;:::i;18318:231::-;;;;;;;;;;-1:-1:-1;18318:231:2;;;;;:::i;:::-;;:::i;8479:335::-;;;;;;;;;;-1:-1:-1;8479:335:2;;;;;:::i;:::-;;:::i;10008:123::-;;;;;;;;;;-1:-1:-1;10008:123:2;;;;;:::i;:::-;;:::i;10137:135::-;;;;;;;;;;-1:-1:-1;10137:135:2;;;;;:::i;:::-;;:::i;5762:198::-;;;;;;;;;;-1:-1:-1;5762:198:2;;;;;:::i;:::-;;:::i;3186:143::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;1650:94:7:-;;;;;;;;;;;;;:::i;3035:142:2:-;;;;;;;;;;;;;:::i;2512:59::-;;;;;;;;;;-1:-1:-1;2512:59:2;;;;;:::i;:::-;;:::i;18801:255::-;;;;;;;;;;-1:-1:-1;18801:255:2;;;;;:::i;:::-;;:::i;7563:120::-;;;;;;;;;;-1:-1:-1;7563:120:2;;;;;:::i;:::-;;:::i;2383:34::-;;;;;;;;;;;;;:::i;999:87:7:-;;;;;;;;;;;;;:::i;19232:143:2:-;;;;;;;;;;-1:-1:-1;19232:143:2;;;;;:::i;:::-;;:::i;19383:120::-;;;;;;;;;;;;;:::i;5452:87::-;;;;;;;;;;;;;:::i;17847:463::-;;;;;;;;;;-1:-1:-1;17847:463:2;;;;;:::i;:::-;;:::i;3478:36::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;7142:413::-;;;;;;;;;;-1:-1:-1;7142:413:2;;;;;:::i;:::-;;:::i;2464:39::-;;;;;;;;;;;;;:::i;5968:167::-;;;;;;;;;;-1:-1:-1;5968:167:2;;;;;:::i;:::-;;:::i;2306:44::-;;;;;;;;;;;;;:::i;9430:450::-;;;;;;;;;;-1:-1:-1;9430:450:2;;;;;:::i;:::-;;:::i;10280:167::-;;;;;;;;;;-1:-1:-1;10280:167:2;;;;;:::i;:::-;;:::i;2766:26::-;;;;;;;;;;;;;:::i;2846:58::-;;;;;;;;;;;;;:::i;20179:320::-;;;;;;;;;;-1:-1:-1;20179:320:2;;;;;:::i;:::-;;:::i;2254:44::-;;;;;;;;;;;;;:::i;2203:43::-;;;;;;;;;;;;;:::i;2424:31::-;;;;;;;;;;;;;:::i;6143:143::-;;;;;;;;;;-1:-1:-1;6143:143:2;;;;;:::i;:::-;;:::i;18557:236::-;;;;;;;;;;-1:-1:-1;18557:236:2;;;;;:::i;:::-;;:::i;9888:112::-;;;;;;;;;;-1:-1:-1;9888:112:2;;;;;:::i;:::-;;:::i;1899:192:7:-;;;;;;;;;;-1:-1:-1;1899:192:7;;;;;:::i;:::-;;:::i;19068:156:2:-;1230:12:7;:10;:12::i;:::-;-1:-1:-1;;;;;1219:23:7;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1219:23:7;;1211:68;;;;-1:-1:-1;;;1211:68:7;;;;;;;:::i;:::-;;;;;;;;;19203:13:2::1;2031:1;19203:2;:13;:::i;:::-;19190:26;::::0;:12;:26:::1;:::i;:::-;19158:29;:58:::0;-1:-1:-1;19068:156:2:o;2718:41::-;;;;;;-1:-1:-1;;;;;2718:41:2;;:::o;5363:83::-;5433:5;;;;;;;;;;;;-1:-1:-1;;;5433:5:2;;;;5363:83;:::o;6294:161::-;6369:4;6386:39;6395:12;:10;:12::i;:::-;6409:7;6418:6;6386:8;:39::i;:::-;-1:-1:-1;6443:4:2;6294:161;;;;;:::o;19714:242::-;1230:12:7;:10;:12::i;:::-;-1:-1:-1;;;;;1219:23:7;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1219:23:7;;1211:68;;;;-1:-1:-1;;;1211:68:7;;;;;;;:::i;:::-;-1:-1:-1;;;;;19798:17:2;::::1;;::::0;;;:5:::1;:17;::::0;;;;;::::1;;19797:18;19789:74;;;;-1:-1:-1::0;;;19789:74:2::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19874:17:2;::::1;19894:5;19874:17:::0;;;:5:::1;:17;::::0;;;;;:25;;-1:-1:-1;;19874:25:2::1;::::0;;19915:33;::::1;::::0;::::1;::::0;19880:10;;19915:33:::1;:::i;:::-;;;;;;;;19714:242:::0;:::o;5659:95::-;5739:7;;5659:95;:::o;6463:450::-;6561:4;6578:36;6588:6;6596:9;6607:6;6578:9;:36::i;:::-;-1:-1:-1;;;;;6654:19:2;;6627:24;6654:19;;;:11;:19;;;;;6627:24;6674:12;:10;:12::i;:::-;-1:-1:-1;;;;;6654:33:2;-1:-1:-1;;;;;6654:33:2;;;;;;;;;;;;;6627:60;;6726:6;6706:16;:26;;6698:79;;;;-1:-1:-1;;;6698:79:2;;;;;;;:::i;:::-;6813:57;6822:6;6830:12;:10;:12::i;:::-;6863:6;6844:16;:25;6813:8;:57::i;:::-;6901:4;6894:11;;;6463:450;;;;;;:::o;19964:207::-;1230:12:7;:10;:12::i;:::-;-1:-1:-1;;;;;1219:23:7;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1219:23:7;;1211:68;;;;-1:-1:-1;;;1211:68:7;;;;;;;:::i;:::-;20103:5:2::1;20080:22;20072:7;;:30;;;;:::i;:::-;:36;;;;:::i;:::-;20054:15;:54:::0;;;20124:39:::1;::::0;::::1;::::0;::::1;::::0;::::1;:::i;:::-;;;;;;;;19964:207:::0;:::o;8157:248::-;8223:7;8262;;8251;:18;;8243:73;;;;-1:-1:-1;;;8243:73:2;;;;;;;:::i;:::-;8327:19;8350:10;:8;:10::i;:::-;8327:33;-1:-1:-1;8378:19:2;8327:33;8378:7;:19;:::i;:::-;8371:26;;;8157:248;;;;:::o;5545:83::-;2031:1;5545:83;:::o;8822:475::-;1230:12:7;:10;:12::i;:::-;-1:-1:-1;;;;;1219:23:7;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1219:23:7;;1211:68;;;;-1:-1:-1;;;1211:68:7;;;;;;;:::i;:::-;-1:-1:-1;;;;;8904:20:2;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;8896:56;;;;-1:-1:-1::0;;;8896:56:2::1;;;;;;;:::i;:::-;8968:9;8963:327;8987:9;:16:::0;8983:20;::::1;8963:327;;;9045:7;-1:-1:-1::0;;;;;9029:23:2::1;:9;9039:1;9029:12;;;;;;-1:-1:-1::0;;;9029:12:2::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;9029:12:2::1;:23;9025:254;;;9088:9;9098:16:::0;;:20:::1;::::0;9117:1:::1;::::0;9098:20:::1;:::i;:::-;9088:31;;;;;;-1:-1:-1::0;;;9088:31:2::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;9073:9:::1;:12:::0;;-1:-1:-1;;;;;9088:31:2;;::::1;::::0;9083:1;;9073:12;::::1;;;-1:-1:-1::0;;;9073:12:2::1;;;;;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;9073:46:2::1;-1:-1:-1::0;;;;;9073:46:2;;::::1;;::::0;;9138:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;9177:11:::1;:20:::0;;;;:28;;-1:-1:-1;;9177:28:2::1;::::0;;9224:9:::1;:15:::0;;;::::1;;-1:-1:-1::0;;;9224:15:2::1;;;;;;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;9224:15:2;;;;;-1:-1:-1;;;;;;9224:15:2::1;::::0;;;;;9258:5:::1;;9025:254;9005:3:::0;::::1;::::0;::::1;:::i;:::-;;;;8963:327;;;;8822:475:::0;:::o;6921:213::-;7009:4;7026:78;7035:12;:10;:12::i;:::-;7049:7;7093:10;7058:11;:25;7070:12;:10;:12::i;:::-;-1:-1:-1;;;;;7058:25:2;;;;;;;;;;;;;;;;;-1:-1:-1;7058:25:2;;;:34;;;;;;;;;;:45;;;;:::i;:::-;7026:8;:78::i;1913:38::-;;;;;;;;;;;;;;;:::o;9305:113::-;1230:12:7;:10;:12::i;:::-;-1:-1:-1;;;;;1219:23:7;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1219:23:7;;1211:68;;;;-1:-1:-1;;;1211:68:7;;;;;;;:::i;:::-;-1:-1:-1;;;;;9376:27:2::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;9376:34:2::1;9406:4;9376:34;::::0;;9305:113::o;7691:456::-;7781:7;7820;;7809;:18;;7801:62;;;;-1:-1:-1;;;7801:62:2;;;;;;;:::i;:::-;7879:17;7874:266;;7913:28;7944:25;7955:7;7964:4;7944:10;:25::i;:::-;7991:9;;-1:-1:-1;7984:16:2;;-1:-1:-1;7984:16:2;7874:266;8033:28;8064:25;8075:7;8084:4;8064:10;:25::i;:::-;8111:17;;;;-1:-1:-1;8104:24:2;;-1:-1:-1;8104:24:2;2799:40;;;-1:-1:-1;;;2799:40:2;;;;;:::o;18318:231::-;1230:12:7;:10;:12::i;:::-;-1:-1:-1;;;;;1219:23:7;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1219:23:7;;1211:68;;;;-1:-1:-1;;;1211:68:7;;;;;;;:::i;:::-;18413:8:2::1;:17:::0;;-1:-1:-1;;18413:17:2::1;;::::0;;::::1;::::0;;;::::1;-1:-1:-1::0;;18438:29:2::1;18413:17;18438:29:::0;;::::1;;;-1:-1:-1::0;;18475:23:2::1;::::0;;;::::1;::::0;;;::::1;;::::0;;18523:18:::1;18475:23:::0;18438:29;18523:18:::1;:::i;:::-;18506:8;:35:::0;;::::1;::::0;;;::::1;::::0;::::1;-1:-1:-1::0;;18506:35:2;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;18318:231:2:o;8479:335::-;1230:12:7;:10;:12::i;:::-;-1:-1:-1;;;;;1219:23:7;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1219:23:7;;1211:68;;;;-1:-1:-1;;;1211:68:7;;;;;;;:::i;:::-;-1:-1:-1;;;;;8564:20:2;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;8563:21;8555:61;;;;-1:-1:-1::0;;;8555:61:2::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;8630:16:2;::::1;8649:1;8630:16:::0;;;:7:::1;:16;::::0;;;;;:20;8627:108:::1;;-1:-1:-1::0;;;;;8706:16:2;::::1;;::::0;;;:7:::1;:16;::::0;;;;;8686:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;8667:16:2;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;8627:108:::1;-1:-1:-1::0;;;;;8745:20:2::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;8745:27:2::1;8768:4;8745:27:::0;;::::1;::::0;;;8783:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;8783:23:2::1;::::0;;::::1;::::0;;8479:335::o;10008:123::-;-1:-1:-1;;;;;10096:27:2;10072:4;10096:27;;;:18;:27;;;;;;;;;10008:123::o;10137:135::-;-1:-1:-1;;;;;10231:33:2;10207:4;10231:33;;;:24;:33;;;;;;;;;10137:135::o;5762:198::-;-1:-1:-1;;;;;5852:20:2;;5828:7;5852:20;;;:11;:20;;;;;;;;5848:49;;;-1:-1:-1;;;;;;5881:16:2;;;;;;:7;:16;;;;;;5874:23;;5848:49;-1:-1:-1;;;;;5935:16:2;;;;;;:7;:16;;;;;;5915:37;;:19;:37::i;3186:143::-;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1650:94:7:-;1230:12;:10;:12::i;:::-;-1:-1:-1;;;;;1219:23:7;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1219:23:7;;1211:68;;;;-1:-1:-1;;;1211:68:7;;;;;;;:::i;:::-;1715:21:::1;1733:1;1715:9;:21::i;:::-;1650:94::o:0;3035:142:2:-;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2512:59::-;;;;;;;;;;;;;;;:::o;18801:255::-;1230:12:7;:10;:12::i;:::-;-1:-1:-1;;;;;1219:23:7;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1219:23:7;;1211:68;;;;-1:-1:-1;;;1211:68:7;;;;;;;:::i;:::-;18981:5:2::1;18959:21;18951:7;;:29;;;;:::i;:::-;:35;;;;:::i;:::-;18934:14;:52:::0;19012:7:::1;::::0;19043:5:::1;::::0;19012:30:::1;::::0;19020:22;;19012:30:::1;:::i;:::-;:36;;;;:::i;:::-;18994:15;:54:::0;-1:-1:-1;;18801:255:2:o;7563:120::-;-1:-1:-1;;;;;7655:20:2;7631:4;7655:20;;;:11;:20;;;;;;;;;7563:120::o;2383:34::-;;;;:::o;999:87:7:-;1045:7;1072:6;-1:-1:-1;;;;;1072:6:7;999:87;:::o;19232:143:2:-;1230:12:7;:10;:12::i;:::-;-1:-1:-1;;;;;1219:23:7;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1219:23:7;;1211:68;;;;-1:-1:-1;;;1211:68:7;;;;;;;:::i;:::-;19331:16:2::1;:36:::0;;-1:-1:-1;;;;;;19331:36:2::1;-1:-1:-1::0;;;;;19331:36:2;;;::::1;::::0;;;::::1;::::0;;19232:143::o;19383:120::-;1230:12:7;:10;:12::i;:::-;-1:-1:-1;;;;;1219:23:7;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1219:23:7;;1211:68;;;;-1:-1:-1;;;1211:68:7;;;;;;;:::i;:::-;19455:40:2::1;19470:24;19488:4;19470:9;:24::i;:::-;19455:14;:40::i;5452:87::-:0;5524:7;;;;;;;;;;;;-1:-1:-1;;;5524:7:2;;;;5452:87;:::o;17847:463::-;1230:12:7;:10;:12::i;:::-;-1:-1:-1;;;;;1219:23:7;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1219:23:7;;1211:68;;;;-1:-1:-1;;;1211:68:7;;;;;;;:::i;:::-;-1:-1:-1;;;;;17948:33:2;::::1;;::::0;;;:26:::1;:33;::::0;;;;;::::1;;:42;;::::0;::::1;;;;17940:111;;;;-1:-1:-1::0;;;17940:111:2::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;18062:33:2;::::1;;::::0;;;:26:::1;:33;::::0;;;;:41;;-1:-1:-1;;18062:41:2::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;18114:132:::1;;-1:-1:-1::0;;;;;18144:31:2;::::1;;::::0;;;:24:::1;:31;::::0;;;;;;:38;;-1:-1:-1;;18144:38:2::1;18178:4;18144:38;::::0;;18198:34;;::::1;;::::0;::::1;::::0;::::1;::::0;18169:5;;18198:34:::1;:::i;:::-;;;;;;;;18114:132;18261:41;::::0;;::::1;;::::0;-1:-1:-1;;;;;18261:41:2;::::1;::::0;::::1;::::0;;;::::1;17847:463:::0;;:::o;3478:36::-;;;;;;:::o;7142:413::-;7235:4;7252:24;7279:11;:25;7291:12;:10;:12::i;:::-;-1:-1:-1;;;;;7279:25:2;;;;;;;;;;;;;;;;;-1:-1:-1;7279:25:2;;;:34;;;;;;;;;;;-1:-1:-1;7332:35:2;;;;7324:85;;;;-1:-1:-1;;;7324:85:2;;;;;;;:::i;:::-;7445:67;7454:12;:10;:12::i;:::-;7468:7;7496:15;7477:16;:34;7445:8;:67::i;:::-;-1:-1:-1;7543:4:2;;7142:413;-1:-1:-1;;;7142:413:2:o;2464:39::-;;;-1:-1:-1;;;;;2464:39:2;;:::o;5968:167::-;6046:4;6063:42;6073:12;:10;:12::i;:::-;6087:9;6098:6;6063:9;:42::i;2306:44::-;;;;:::o;9430:450::-;1230:12:7;:10;:12::i;:::-;-1:-1:-1;;;;;1219:23:7;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1219:23:7;;1211:68;;;;-1:-1:-1;;;1211:68:7;;;;;;;:::i;:::-;9552:9:2::1;9548:325;9567:19:::0;;::::1;9548:325;;;9657:8;9616:49;;:24;:37;9641:8;;9650:1;9641:11;;;;;-1:-1:-1::0;;;9641:11:2::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;9616:37:2::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;9616:37:2;;::::1;;:49;;;;9608:127;;;;-1:-1:-1::0;;;9608:127:2::1;;;;;;;:::i;:::-;9790:8;9750:24;:37;9775:8;;9784:1;9775:11;;;;;-1:-1:-1::0;;;9775:11:2::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;9750:37:2::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;9750:37:2;:48;;-1:-1:-1;;9750:48:2::1;::::0;::::1;;::::0;;;::::1;::::0;;9818:43;::::1;;;9839:8:::0;;9848:1;9839:11;;::::1;;;-1:-1:-1::0;;;9839:11:2::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9818:43;;;;;;:::i;:::-;;;;;;;;9588:3:::0;::::1;::::0;::::1;:::i;:::-;;;;9548:325;;;;9430:450:::0;;;:::o;10280:167::-;1230:12:7;:10;:12::i;:::-;-1:-1:-1;;;;;1219:23:7;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1219:23:7;;1211:68;;;;-1:-1:-1;;;1211:68:7;;;;;;;:::i;:::-;10355:21:2::1;:32:::0;;-1:-1:-1;;;;10355:32:2::1;-1:-1:-1::0;;;10355:32:2;::::1;;;;::::0;;10401:38:::1;::::0;::::1;::::0;::::1;::::0;10355:32;;10401:38:::1;:::i;2766:26::-:0;;;-1:-1:-1;;;;;2766:26:2;;:::o;2846:58::-;;;;:::o;20179:320::-;1230:12:7;:10;:12::i;:::-;-1:-1:-1;;;;;1219:23:7;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1219:23:7;;1211:68;;;;-1:-1:-1;;;1211:68:7;;;;;;;:::i;:::-;-1:-1:-1;;;;;20279:33:2;::::1;;::::0;;;:24:::1;:33;::::0;;;;;::::1;;:45;;::::0;::::1;;;;20271:108;;;;-1:-1:-1::0;;;20271:108:2::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;20390:33:2;::::1;;::::0;;;:24:::1;:33;::::0;;;;;;:44;;-1:-1:-1;;20390:44:2::1;::::0;::::1;;::::0;;::::1;::::0;;;20452:39;;::::1;::::0;::::1;::::0;20390:33;;20452:39:::1;:::i;:::-;;;;;;;;20179:320:::0;;:::o;2254:44::-;;;;:::o;2203:43::-;;;;:::o;2424:31::-;;;;:::o;6143:143::-;-1:-1:-1;;;;;6251:18:2;;;6224:7;6251:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;6143:143::o;18557:236::-;1230:12:7;:10;:12::i;:::-;-1:-1:-1;;;;;1219:23:7;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1219:23:7;;1211:68;;;;-1:-1:-1;;;1211:68:7;;;;;;;:::i;:::-;18653:9:2::1;:18:::0;;-1:-1:-1;;18653:18:2::1;;::::0;;::::1;::::0;;;::::1;-1:-1:-1::0;;18679:30:2::1;18653:18;18679:30:::0;;::::1;;;-1:-1:-1::0;;18717:24:2::1;::::0;;;::::1;::::0;;;::::1;;::::0;;18767:18:::1;18717:24:::0;18679:30;18767:18:::1;:::i;:::-;18749:9;:36:::0;;::::1;::::0;;;::::1;::::0;::::1;-1:-1:-1::0;;18749:36:2;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;18557:236:2:o;9888:112::-;1230:12:7;:10;:12::i;:::-;-1:-1:-1;;;;;1219:23:7;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1219:23:7;;1211:68;;;;-1:-1:-1;;;1211:68:7;;;;;;;:::i;:::-;-1:-1:-1;;;;;9957:27:2::1;9987:5;9957:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;9957:35:2::1;::::0;;9888:112::o;1899:192:7:-;1230:12;:10;:12::i;:::-;-1:-1:-1;;;;;1219:23:7;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1219:23:7;;1211:68;;;;-1:-1:-1;;;1211:68:7;;;;;;;:::i;:::-;-1:-1:-1;;;;;1988:22:7;::::1;1980:73;;;;-1:-1:-1::0;;;1980:73:7::1;;;;;;;:::i;:::-;2064:19;2074:8;2064:9;:19::i;:::-;1899:192:::0;:::o;601:98:1:-;681:10;601:98;:::o;12910:335:2:-;-1:-1:-1;;;;;13003:19:2;;12995:68;;;;-1:-1:-1;;;12995:68:2;;;;;;;:::i;:::-;-1:-1:-1;;;;;13082:21:2;;13074:68;;;;-1:-1:-1;;;13074:68:2;;;;;;;:::i;:::-;-1:-1:-1;;;;;13153:18:2;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;;:36;;;13205:32;;;;;13183:6;;13205:32;:::i;:::-;;;;;;;;12910:335;;;:::o;13253:1618::-;13336:19;;:22;:56;;;;-1:-1:-1;;;;;;13362:30:2;;;;;;:26;:30;;;;;;;;13336:56;13333:118;;;13427:12;13405:19;:34;13333:118;-1:-1:-1;;;;;13471:18:2;;13463:68;;;;-1:-1:-1;;;13463:68:2;;;;;;;:::i;:::-;-1:-1:-1;;;;;13550:16:2;;13542:64;;;;-1:-1:-1;;;13542:64:2;;;;;;;:::i;:::-;-1:-1:-1;;;;;13626:11:2;;;;;;:5;:11;;;;;;;;13625:12;13617:57;;;;-1:-1:-1;;;13617:57:2;;;;;;;:::i;:::-;13702:1;13693:6;:10;13685:64;;;;-1:-1:-1;;;13685:64:2;;;;;;;:::i;:::-;13778:15;13788:4;13778:9;:15::i;:::-;13768:6;:25;;13760:86;;;;-1:-1:-1;;;13760:86:2;;;;;;;:::i;:::-;-1:-1:-1;;;;;13874:24:2;;13857:12;13874:24;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;13902:22:2;;;;;;:18;:22;;;;;;;;13874:50;13872:53;13857:68;;13941:7;13938:612;;;-1:-1:-1;;;;;13979:32:2;;;;;;:26;:32;;;;;;;;13976:563;;;14081:12;;14061:19;;:32;;;;:::i;:::-;14048:12;:45;14045:170;;;-1:-1:-1;;;;;14131:9:2;;;;;;:5;:9;;;;;;;:16;;-1:-1:-1;;14131:16:2;14143:4;14131:16;;;;;;14171:24;;;;;;14137:2;;14171:24;:::i;:::-;;;;;;;;14045:170;14250:8;14235:23;:12;:23;;;;;;-1:-1:-1;;14235:23:2;;;;;;;-1:-1:-1;;14235:23:2;;;;;;;;;-1:-1:-1;;14235:23:2;;;;;;;;;-1:-1:-1;;14235:23:2;;;;;;;;;;;;;;;;;;;14293:14;;14285:22;;;14277:67;;;;-1:-1:-1;;;14277:67:2;;;;;;;:::i;:::-;13976:563;;;14426:9;14411:24;:12;:24;;;;;;-1:-1:-1;;14411:24:2;;;;;;;-1:-1:-1;;14411:24:2;;;;;;;;;-1:-1:-1;;14411:24:2;;;;;;;;;-1:-1:-1;;14411:24:2;;;;;;;;;;;;;;;;;;;14470:15;;14462:23;;;14454:69;;;;-1:-1:-1;;;14454:69:2;;;;;;;:::i;:::-;14594:29;;14566:24;14584:4;14566:9;:24::i;:::-;:57;;:79;;;;-1:-1:-1;14629:16:2;;;;14628:17;14566:79;:116;;;;-1:-1:-1;;;;;;14650:32:2;;;;;;:26;:32;;;;;;;;14649:33;14566:116;:141;;;;-1:-1:-1;14686:21:2;;-1:-1:-1;;;14686:21:2;;;;14566:141;14562:248;;;14753:45;14768:29;;14753:14;:45::i;:::-;14822:41;14837:4;14843:2;14847:6;14855:7;14822:14;:41::i;12210:158::-;12251:7;12272:15;12289;12308:19;:17;:19::i;:::-;12271:56;;-1:-1:-1;12271:56:2;-1:-1:-1;12345:15:2;12271:56;;12345:15;:::i;:::-;12338:22;;;;12210:158;:::o;10943:345::-;11016:36;;:::i;:::-;11077:29;11089:7;11098;11077:11;:29::i;:::-;11065:41;;11201:52;11213:9;11224:7;11233;11242:10;:8;:10::i;:::-;11201:11;:52::i;:::-;11180:17;;;11117:136;11164:14;;;11117:136;11137:25;;;11117:136;;;10943:345;;;;:::o;2099:173:7:-;2155:16;2174:6;;-1:-1:-1;;;;;2191:17:7;;;-1:-1:-1;;;;;;2191:17:7;;;;;;2224:40;;2174:6;;;;;;;2224:40;;2155:16;2224:40;2099:173;;:::o;15832:876:2:-;4272:16;:23;;-1:-1:-1;;4272:23:2;4291:4;4272:23;;;15941:12:::1;:19:::0;4272:16;;15941:21:::1;::::0;:19;;::::1;4272:23:::0;15941:19:::1;15961:1;15941:21;:::i;:::-;16029:12;:19:::0;15919:43:::1;::::0;;::::1;::::0;-1:-1:-1;15973:32:2::1;::::0;15919:43;;16008:40:::1;::::0;16029:19;;;::::1;;16008:20:::0;:40:::1;:::i;:::-;:52;;;;:::i;:::-;15973:87:::0;-1:-1:-1;16071:14:2::1;16088:45;15973:87:::0;16088:20;:45:::1;:::i;:::-;16071:62:::0;-1:-1:-1;16171:21:2::1;16237:24;16071:62:::0;16237:16:::1;:24::i;:::-;16274:20;16297:37;16320:14:::0;16297:21:::1;:37;:::i;:::-;16425:12;:19:::0;16274:60;;-1:-1:-1;16345:29:2::1;::::0;16412:32:::1;::::0;16425:19;;::::1;;;16412:11:::0;:32:::1;:::i;:::-;16390:12;:19:::0;16377:32:::1;::::0;16390:19;;::::1;;;16377:12:::0;:32:::1;:::i;:::-;:68;;;;:::i;:::-;16345:100;;16504:61;16517:24;16543:21;16504:12;:61::i;:::-;16586:16;::::0;:49:::1;::::0;-1:-1:-1;;;;;16586:16:2::1;16613:21;16586:26;:49::i;:::-;-1:-1:-1::0;;4318:16:2;:24;;-1:-1:-1;;4318:24:2;;;-1:-1:-1;;;;;15832:876:2:o;14952:872::-;15071:28;15102;15113:7;15122;15102:10;:28::i;:::-;-1:-1:-1;;;;;15147:19:2;;;;;;:11;:19;;;;;;15071:59;;-1:-1:-1;15147:19:2;;15143:82;;;-1:-1:-1;;;;;15187:15:2;;;;;;:7;:15;;;;;:26;;15206:7;;15187:15;:26;;15206:7;;15187:26;:::i;:::-;;;;-1:-1:-1;;15143:82:2;-1:-1:-1;;;;;15240:22:2;;;;;;:11;:22;;;;;;;;15236:98;;;15305:17;;;;-1:-1:-1;;;;;15283:18:2;;;;;;:7;:18;;;;;:39;;:18;;;:39;;15305:17;;15283:39;:::i;:::-;;;;-1:-1:-1;;15236:98:2;15365:9;;-1:-1:-1;;;;;15346:15:2;;15365:9;15346:15;;;:7;:15;;;;;:28;;:15;;15365:9;15346:28;;15365:9;;15346:28;:::i;:::-;;;;-1:-1:-1;;15407:17:2;;;;;-1:-1:-1;;;;;15385:18:2;;;;;;:7;:18;;;;;;:39;;15407:17;;15385:18;;:39;;15407:17;;15385:39;:::i;:::-;;;;-1:-1:-1;;15435:172:2;;;;15467:27;15479:1;:6;;;15487:1;:6;;;15467:11;:27::i;:::-;15505:32;15517:1;:9;;;15527:1;:9;;;15505:11;:32::i;:::-;15578:4;-1:-1:-1;;;;;15553:42:2;15562:6;-1:-1:-1;;;;;15553:42:2;;15585:1;:9;;;15553:42;;;;;;:::i;:::-;;;;;;;;15435:172;-1:-1:-1;;;;;15625:35:2;;;;;;:24;:35;;;;;;;;;:77;;;15687:15;;15664:20;15674:9;15664;:20::i;:::-;:38;;15625:77;15617:137;;;;-1:-1:-1;;;15617:137:2;;;;;;;:::i;:::-;15787:9;-1:-1:-1;;;;;15770:46:2;15779:6;-1:-1:-1;;;;;15770:46:2;;15798:1;:17;;;15770:46;;;;;;:::i;:::-;;;;;;;;14952:872;;;;;:::o;12376:524::-;12473:7;;12509;;12426;;;;;12527:263;12551:9;:16;12547:20;;12527:263;;;12617:7;12593;:21;12601:9;12611:1;12601:12;;;;;;-1:-1:-1;;;12601:12:2;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12601:12:2;12593:21;;;;;;;;;;;;;:31;;:66;;;12652:7;12628;:21;12636:9;12646:1;12636:12;;;;;;-1:-1:-1;;;12636:12:2;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12636:12:2;12628:21;;;;;;;;;;;;;:31;12593:66;12589:97;;;12669:7;;12678;;12661:25;;;;;;;;;12589:97;12711:7;:21;12719:9;12729:1;12719:12;;;;;;-1:-1:-1;;;12719:12:2;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12719:12:2;12711:21;;;;;;;;;;;;;12701:31;;;;:::i;:::-;;;12757:7;:21;12765:9;12775:1;12765:12;;;;;;-1:-1:-1;;;12765:12:2;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12765:12:2;12757:21;;;;;;;;;;;;;12747:31;;;;:::i;:::-;;-1:-1:-1;12569:3:2;;;;:::i;:::-;;;;12527:263;;;;12822:7;;12814;;:15;;;;:::i;:::-;12804:7;:25;12800:56;;;12839:7;;12848;;12831:25;;;;;;;;12800:56;12875:7;;-1:-1:-1;12884:7:2;-1:-1:-1;12376:524:2;;;:::o;11296:386::-;11370:28;;:::i;:::-;11417:7;11413:86;;11439:17;;;:27;;;11479:8;;11413:86;11526:12;:16;11543:3;;11518:24;;11526:16;;11518:7;:24;:::i;:::-;:28;;;;:::i;:::-;11509:6;;;:37;11577:12;:19;11597:3;;11569:27;;11577:19;;;;;11569:7;:27;:::i;:::-;:31;;;;:::i;:::-;11557:9;;;:43;;;11639:6;;;;11631:14;;:7;:14;:::i;:::-;:24;;;;:::i;:::-;11611:17;;;:44;11296:386;;;;:::o;11690:512::-;11815:15;;;;11909:19;11917:11;11909:7;:19;:::i;:::-;11899:29;;11945:7;11941:66;;-1:-1:-1;11974:7:2;;-1:-1:-1;11991:1:2;;-1:-1:-1;11991:1:2;11967:28;;11941:66;12033:11;12026:1;:6;;;:18;;;;:::i;:::-;12019:25;;12075:11;12065:1;:9;;;:21;;;;:::i;:::-;12055:31;-1:-1:-1;12055:31:2;12116:12;12124:4;12116:7;:12;:::i;:::-;:20;;;;:::i;:::-;12097:39;;11690:512;;;;;;;;;;:::o;16716:688::-;16872:16;;;16886:1;16872:16;;;;;;;;16848:21;;16872:16;;;;;;;;;;-1:-1:-1;16872:16:2;16848:40;;16917:4;16899;16904:1;16899:7;;;;;;-1:-1:-1;;;16899:7:2;;;;;;;;;;;;;;:23;-1:-1:-1;;;;;16899:23:2;;;-1:-1:-1;;;;;16899:23:2;;;;;16943:15;;;;;;;;;-1:-1:-1;;;;;16943:15:2;-1:-1:-1;;;;;16943:20:2;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16933:4;16938:1;16933:7;;;;;;-1:-1:-1;;;16933:7:2;;;;;;;;;-1:-1:-1;;;;;16933:32:2;;;:7;;;;;;;;;:32;17014:15;;17034:11;;16981:50;;16999:4;;17014:15;;;;;16981:9;:50::i;:::-;:64;16978:156;;;17092:15;;17060:62;;17077:4;;17092:15;;;-1:-1:-1;;;;;17092:15:2;-1:-1:-1;;17060:8:2;:62::i;:::-;17172:15;;:224;;-1:-1:-1;;;17172:224:2;;:15;;;;-1:-1:-1;;;;;17172:15:2;;:66;;:224;;17253:11;;17279:1;;17323:4;;17350;;17370:15;;17172:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16716:688;;:::o;17412:427::-;17525:15;;;;;-1:-1:-1;;;;;17525:15:2;:31;17564:9;17597:4;17617:11;17643:1;;17729:7;:5;:7::i;:::-;17751:15;17525:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;17793:38;17808:11;17821:9;17793:38;;;;;;;:::i;:::-;;;;;;;;17412:427;;:::o;2065:317:0:-;2180:6;2155:21;:31;;2147:73;;;;-1:-1:-1;;;2147:73:0;;;;;;;:::i;:::-;2234:12;2252:9;-1:-1:-1;;;;;2252:14:0;2274:6;2252:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2233:52;;;2304:7;2296:78;;;;-1:-1:-1;;;2296:78:0;;;;;;;:::i;:::-;2065:317;;;:::o;10553:125:2:-;10632:4;10621:7;;:15;;;;;;;:::i;:::-;;;;-1:-1:-1;;10647:11:2;:23;;10666:4;;10647:11;:15;;:23;;10666:4;;10647:23;:::i;:::-;;;;-1:-1:-1;;;;10553:125:2:o;10686:249::-;10775:4;10759:22;;;;:7;:22;;;;;:32;;10784:7;;10759:22;:32;;10784:7;;10759:32;:::i;:::-;;;;-1:-1:-1;;10825:4:2;10805:26;;;;:11;:26;;;;;;;;10802:77;;;10862:4;10846:22;;;;:7;:22;;;;;:33;;10872:7;;10846:22;:33;;10872:7;;10846:33;:::i;:::-;;;;-1:-1:-1;;10802:77:2;10910:7;10890:11;:18;;;:27;;;;;;;:::i;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:162:8:-;81:20;;137:13;;130:21;120:32;;110:2;;166:1;163;156:12;181:158;249:20;;309:4;298:16;;288:27;;278:2;;329:1;326;319:12;344:259;;456:2;444:9;435:7;431:23;427:32;424:2;;;477:6;469;462:22;424:2;521:9;508:23;540:33;567:5;540:33;:::i;608:263::-;;731:2;719:9;710:7;706:23;702:32;699:2;;;752:6;744;737:22;699:2;789:9;783:16;808:33;835:5;808:33;:::i;1148:402::-;;;1277:2;1265:9;1256:7;1252:23;1248:32;1245:2;;;1298:6;1290;1283:22;1245:2;1342:9;1329:23;1361:33;1388:5;1361:33;:::i;:::-;1413:5;-1:-1:-1;1470:2:8;1455:18;;1442:32;1483:35;1442:32;1483:35;:::i;:::-;1537:7;1527:17;;;1235:315;;;;;:::o;1555:470::-;;;;1701:2;1689:9;1680:7;1676:23;1672:32;1669:2;;;1722:6;1714;1707:22;1669:2;1766:9;1753:23;1785:33;1812:5;1785:33;:::i;:::-;1837:5;-1:-1:-1;1894:2:8;1879:18;;1866:32;1907:35;1866:32;1907:35;:::i;:::-;1659:366;;1961:7;;-1:-1:-1;;;2015:2:8;2000:18;;;;1987:32;;1659:366::o;2030:329::-;;;2156:2;2144:9;2135:7;2131:23;2127:32;2124:2;;;2177:6;2169;2162:22;2124:2;2221:9;2208:23;2240:33;2267:5;2240:33;:::i;:::-;2292:5;-1:-1:-1;2316:37:8;2349:2;2334:18;;2316:37;:::i;:::-;2306:47;;2114:245;;;;;:::o;2364:327::-;;;2493:2;2481:9;2472:7;2468:23;2464:32;2461:2;;;2514:6;2506;2499:22;2461:2;2558:9;2545:23;2577:33;2604:5;2577:33;:::i;:::-;2629:5;2681:2;2666:18;;;;2653:32;;-1:-1:-1;;;2451:240:8:o;2696:744::-;;;;2857:2;2845:9;2836:7;2832:23;2828:32;2825:2;;;2878:6;2870;2863:22;2825:2;2923:9;2910:23;2952:18;2993:2;2985:6;2982:14;2979:2;;;3014:6;3006;2999:22;2979:2;3057:6;3046:9;3042:22;3032:32;;3102:7;3095:4;3091:2;3087:13;3083:27;3073:2;;3129:6;3121;3114:22;3073:2;3174;3161:16;3200:2;3192:6;3189:14;3186:2;;;3221:6;3213;3206:22;3186:2;3284:7;3277:4;3269;3261:6;3257:17;3253:2;3249:26;3245:37;3242:50;3239:2;;;3310:6;3302;3295:22;3239:2;3346:4;3338:13;;;;-1:-1:-1;3370:6:8;-1:-1:-1;3395:39:8;;3413:20;;;-1:-1:-1;3395:39:8;:::i;:::-;3385:49;;2815:625;;;;;:::o;3445:192::-;;3554:2;3542:9;3533:7;3529:23;3525:32;3522:2;;;3575:6;3567;3560:22;3522:2;3603:28;3621:9;3603:28;:::i;3642:190::-;;3754:2;3742:9;3733:7;3729:23;3725:32;3722:2;;;3775:6;3767;3760:22;3722:2;-1:-1:-1;3803:23:8;;3712:120;-1:-1:-1;3712:120:8:o;3837:260::-;;;3963:2;3951:9;3942:7;3938:23;3934:32;3931:2;;;3984:6;3976;3969:22;3931:2;4025:9;4012:23;4002:33;;4054:37;4087:2;4076:9;4072:18;4054:37;:::i;4102:258::-;;;4231:2;4219:9;4210:7;4206:23;4202:32;4199:2;;;4252:6;4244;4237:22;4199:2;-1:-1:-1;;4280:23:8;;;4350:2;4335:18;;;4322:32;;-1:-1:-1;4189:171:8:o;4365:316::-;;;;4522:2;4510:9;4501:7;4497:23;4493:32;4490:2;;;4543:6;4535;4528:22;4490:2;4577:9;4571:16;4561:26;;4627:2;4616:9;4612:18;4606:25;4596:35;;4671:2;4660:9;4656:18;4650:25;4640:35;;4480:201;;;;;:::o;4686:338::-;;;;4826:2;4814:9;4805:7;4801:23;4797:32;4794:2;;;4847:6;4839;4832:22;4794:2;4875:29;4894:9;4875:29;:::i;:::-;4865:39;;4923:38;4957:2;4946:9;4942:18;4923:38;:::i;:::-;4913:48;;4980:38;5014:2;5003:9;4999:18;4980:38;:::i;5029:205::-;5229:3;5220:14::o;5239:203::-;-1:-1:-1;;;;;5403:32:8;;;;5385:51;;5373:2;5358:18;;5340:102::o;5671:607::-;-1:-1:-1;;;;;6030:15:8;;;6012:34;;6077:2;6062:18;;6055:34;;;;6120:2;6105:18;;6098:34;;;;6163:2;6148:18;;6141:34;;;;6212:15;;;6206:3;6191:19;;6184:44;5992:3;6244:19;;6237:35;;;;5961:3;5946:19;;5928:350::o;6283:187::-;6448:14;;6441:22;6423:41;;6411:2;6396:18;;6378:92::o;6710:603::-;;6851:2;6880;6869:9;6862:21;6912:6;6906:13;6955:6;6950:2;6939:9;6935:18;6928:34;6980:4;6993:140;7007:6;7004:1;7001:13;6993:140;;;7102:14;;;7098:23;;7092:30;7068:17;;;7087:2;7064:26;7057:66;7022:10;;6993:140;;;7151:6;7148:1;7145:13;7142:2;;;7221:4;7216:2;7207:6;7196:9;7192:22;7188:31;7181:45;7142:2;-1:-1:-1;7297:2:8;7276:15;-1:-1:-1;;7272:29:8;7257:45;;;;7304:2;7253:54;;6831:482;-1:-1:-1;;;6831:482:8:o;7318:399::-;7520:2;7502:21;;;7559:2;7539:18;;;7532:30;7598:34;7593:2;7578:18;;7571:62;-1:-1:-1;;;7664:2:8;7649:18;;7642:33;7707:3;7692:19;;7492:225::o;7722:469::-;7924:2;7906:21;;;7963:2;7943:18;;;7936:30;8002:34;7997:2;7982:18;;7975:62;8073:34;8068:2;8053:18;;8046:62;-1:-1:-1;;;8139:3:8;8124:19;;8117:32;8181:3;8166:19;;7896:295::o;8196:413::-;8398:2;8380:21;;;8437:2;8417:18;;;8410:30;8476:34;8471:2;8456:18;;8449:62;-1:-1:-1;;;8542:2:8;8527:18;;8520:47;8599:3;8584:19;;8370:239::o;8614:406::-;8816:2;8798:21;;;8855:2;8835:18;;;8828:30;8894:34;8889:2;8874:18;;8867:62;-1:-1:-1;;;8960:2:8;8945:18;;8938:40;9010:3;8995:19;;8788:232::o;9025:402::-;9227:2;9209:21;;;9266:2;9246:18;;;9239:30;9305:34;9300:2;9285:18;;9278:62;-1:-1:-1;;;9371:2:8;9356:18;;9349:36;9417:3;9402:19;;9199:228::o;9432:398::-;9634:2;9616:21;;;9673:2;9653:18;;;9646:30;9712:34;9707:2;9692:18;;9685:62;-1:-1:-1;;;9778:2:8;9763:18;;9756:32;9820:3;9805:19;;9606:224::o;9835:420::-;10037:2;10019:21;;;10076:2;10056:18;;;10049:30;10115:34;10110:2;10095:18;;10088:62;10186:26;10181:2;10166:18;;10159:54;10245:3;10230:19;;10009:246::o;10260:397::-;10462:2;10444:21;;;10501:2;10481:18;;;10474:30;10540:34;10535:2;10520:18;;10513:62;-1:-1:-1;;;10606:2:8;10591:18;;10584:31;10647:3;10632:19;;10434:223::o;10662:356::-;10864:2;10846:21;;;10883:18;;;10876:30;10942:34;10937:2;10922:18;;10915:62;11009:2;10994:18;;10836:182::o;11023:351::-;11225:2;11207:21;;;11264:2;11244:18;;;11237:30;11303:29;11298:2;11283:18;;11276:57;11365:2;11350:18;;11197:177::o;11379:414::-;11581:2;11563:21;;;11620:2;11600:18;;;11593:30;11659:34;11654:2;11639:18;;11632:62;-1:-1:-1;;;11725:2:8;11710:18;;11703:48;11783:3;11768:19;;11553:240::o;11798:422::-;12000:2;11982:21;;;12039:2;12019:18;;;12012:30;12078:34;12073:2;12058:18;;12051:62;12149:28;12144:2;12129:18;;12122:56;12210:3;12195:19;;11972:248::o;12225:347::-;12427:2;12409:21;;;12466:2;12446:18;;;12439:30;12505:25;12500:2;12485:18;;12478:53;12563:2;12548:18;;12399:173::o;12577:353::-;12779:2;12761:21;;;12818:2;12798:18;;;12791:30;12857:31;12852:2;12837:18;;12830:59;12921:2;12906:18;;12751:179::o;12935:356::-;13137:2;13119:21;;;13156:18;;;13149:30;13215:34;13210:2;13195:18;;13188:62;13282:2;13267:18;;13109:182::o;13296:407::-;13498:2;13480:21;;;13537:2;13517:18;;;13510:30;13576:34;13571:2;13556:18;;13549:62;-1:-1:-1;;;13642:2:8;13627:18;;13620:41;13693:3;13678:19;;13470:233::o;13708:355::-;13910:2;13892:21;;;13949:2;13929:18;;;13922:30;13988:33;13983:2;13968:18;;13961:61;14054:2;14039:18;;13882:181::o;14068:404::-;14270:2;14252:21;;;14309:2;14289:18;;;14282:30;14348:34;14343:2;14328:18;;14321:62;-1:-1:-1;;;14414:2:8;14399:18;;14392:38;14462:3;14447:19;;14242:230::o;14477:356::-;14679:2;14661:21;;;14698:18;;;14691:30;14757:34;14752:2;14737:18;;14730:62;14824:2;14809:18;;14651:182::o;14838:405::-;15040:2;15022:21;;;15079:2;15059:18;;;15052:30;15118:34;15113:2;15098:18;;15091:62;-1:-1:-1;;;15184:2:8;15169:18;;15162:39;15233:3;15218:19;;15012:231::o;15248:411::-;15450:2;15432:21;;;15489:2;15469:18;;;15462:30;15528:34;15523:2;15508:18;;15501:62;-1:-1:-1;;;15594:2:8;15579:18;;15572:45;15649:3;15634:19;;15422:237::o;15664:401::-;15866:2;15848:21;;;15905:2;15885:18;;;15878:30;15944:34;15939:2;15924:18;;15917:62;-1:-1:-1;;;16010:2:8;15995:18;;15988:35;16055:3;16040:19;;15838:227::o;16070:400::-;16272:2;16254:21;;;16311:2;16291:18;;;16284:30;16350:34;16345:2;16330:18;;16323:62;-1:-1:-1;;;16416:2:8;16401:18;;16394:34;16460:3;16445:19;;16244:226::o;16475:401::-;16677:2;16659:21;;;16716:2;16696:18;;;16689:30;16755:34;16750:2;16735:18;;16728:62;-1:-1:-1;;;16821:2:8;16806:18;;16799:35;16866:3;16851:19;;16649:227::o;16881:177::-;17027:25;;;17015:2;17000:18;;16982:76::o;17063:983::-;;17373:3;17362:9;17358:19;17404:6;17393:9;17386:25;17430:2;17468:6;17463:2;17452:9;17448:18;17441:34;17511:3;17506:2;17495:9;17491:18;17484:31;17535:6;17570;17564:13;17601:6;17593;17586:22;17639:3;17628:9;17624:19;17617:26;;17678:2;17670:6;17666:15;17652:29;;17699:4;17712:195;17726:6;17723:1;17720:13;17712:195;;;17791:13;;-1:-1:-1;;;;;17787:39:8;17775:52;;17882:15;;;;17847:12;;;;17823:1;17741:9;17712:195;;;-1:-1:-1;;;;;;;17963:32:8;;;;17958:2;17943:18;;17936:60;-1:-1:-1;;;18027:3:8;18012:19;18005:35;17924:3;17334:712;-1:-1:-1;;;17334:712:8:o;18051:248::-;18225:25;;;18281:2;18266:18;;18259:34;18213:2;18198:18;;18180:119::o;18304:184::-;18476:4;18464:17;;;;18446:36;;18434:2;18419:18;;18401:87::o;18493:419::-;18738:4;18726:17;;;18708:36;;18780:17;;;18775:2;18760:18;;18753:45;18834:17;;;18829:2;18814:18;;18807:45;18888:17;;;18883:2;18868:18;;18861:45;18695:3;18680:19;;18662:250::o;18917:128::-;;18988:1;18984:6;18981:1;18978:13;18975:2;;;18994:18;;:::i;:::-;-1:-1:-1;19030:9:8;;18965:80::o;19050:204::-;;19124:4;19121:1;19117:12;19156:4;19153:1;19149:12;19191:3;19185:4;19181:14;19176:3;19173:23;19170:2;;;19199:18;;:::i;:::-;19235:13;;19096:158;-1:-1:-1;;;19096:158:8:o;19259:217::-;;19325:1;19315:2;;-1:-1:-1;;;19350:31:8;;19404:4;19401:1;19394:15;19432:4;19357:1;19422:15;19315:2;-1:-1:-1;19461:9:8;;19305:171::o;19481:453::-;19577:6;19600:5;19614:314;19663:1;19700:2;19690:8;19687:16;19677:2;;19707:5;;;19677:2;19748:4;19743:3;19739:14;19733:4;19730:24;19727:2;;;19757:18;;:::i;:::-;19807:2;19797:8;19793:17;19790:2;;;19822:16;;;;19790:2;19901:17;;;;;19861:15;;19614:314;;;19558:376;;;;;;;:::o;19939:148::-;;20026:55;-1:-1:-1;;20067:4:8;20053:19;;20047:4;20092:922;20176:8;20166:2;;-1:-1:-1;20217:1:8;20231:5;;20166:2;20265:4;20255:2;;-1:-1:-1;20302:1:8;20316:5;;20255:2;20347:4;20365:1;20360:59;;;;20433:1;20428:183;;;;20340:271;;20360:59;20390:1;20381:10;;20404:5;;;20428:183;20465:3;20455:8;20452:17;20449:2;;;20472:18;;:::i;:::-;20528:1;20518:8;20514:16;20505:25;;20556:3;20549:5;20546:14;20543:2;;;20563:18;;:::i;:::-;20596:5;;;20340:271;;20695:2;20685:8;20682:16;20676:3;20670:4;20667:13;20663:36;20657:2;20647:8;20644:16;20639:2;20633:4;20630:12;20626:35;20623:77;20620:2;;;-1:-1:-1;20732:19:8;;;20767:14;;;20764:2;;;20784:18;;:::i;:::-;20817:5;;20620:2;20864:42;20902:3;20892:8;20886:4;20883:1;20864:42;:::i;:::-;20939:6;20934:3;20930:16;20921:7;20918:29;20915:2;;;20950:18;;:::i;:::-;20988:20;;20156:858;-1:-1:-1;;;;20156:858:8:o;21019:168::-;;21125:1;21121;21117:6;21113:14;21110:1;21107:21;21102:1;21095:9;21088:17;21084:45;21081:2;;;21132:18;;:::i;:::-;-1:-1:-1;21172:9:8;;21071:116::o;21192:238::-;;21270:4;21267:1;21263:12;21302:4;21299:1;21295:12;21362:3;21356:4;21352:14;21347:3;21344:23;21337:3;21330:11;21323:19;21319:49;21316:2;;;21371:18;;:::i;:::-;21411:13;;21242:188;-1:-1:-1;;;21242:188:8:o;21435:125::-;;21503:1;21500;21497:8;21494:2;;;21508:18;;:::i;:::-;-1:-1:-1;21545:9:8;;21484:76::o;21565:135::-;;-1:-1:-1;;21625:17:8;;21622:2;;;21645:18;;:::i;:::-;-1:-1:-1;21692:1:8;21681:13;;21612:88::o;21705:127::-;21766:10;21761:3;21757:20;21754:1;21747:31;21797:4;21794:1;21787:15;21821:4;21818:1;21811:15;21837:133;-1:-1:-1;;;;;21914:31:8;;21904:42;;21894:2;;21960:1;21957;21950:12

Swarm Source

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