ETH Price: $2,534.30 (+3.98%)

Token

Lucy's Dream (Moon)
 

Overview

Max Total Supply

100,000,000,000,000 Moon

Holders

35

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
0.21065594 Moon

Value
$0.00
0x3edc235e3e238bceeaed5cfed56fbc2f0a509ea5
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:
lucyDream

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 1300 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-10-15
*/

// "Don't cry because it's over, smile because it happened."

/*                                          ,,╓╥≡mmHmv≡╥╥╖,,,
                                   ╓╥M╜"                   `╙╨#╖,
                            ,,,╓@╜                               '╙h╖
                       ╓@╜╙  '`                                      "Ñ╖
                    ╓Ñ`                     ¿                           ╙W
                  g▀                       ƒ  ,r²─,                       ╙p
                ╓▓                        ]▒"     ∩╙*╓                      ╢
               $░░                       ,    ╙▒      ╙k,                    ╫
             ,▓░░                        ▒   ╓╜         ░%                    ▌
            ┌▓░░░          ░            ║╖╖┌╜            `║                   ]
           ,▓░░░░        .░              ,╜               `╢                   ▌
           ▓░░░░░       ░▒      [      ▒/                  ░H                  ╫
          ▓░░░░░░░     ░▒░     ,░      ╜                    ║         ▒        ▐
         ▐▌░░░░░░░    ░░Ñ     ░║      ]      ,╓╥mHH═╥=,,     ╗ ░      ║        ]U
         ▓░░░░░░░░░  ░░║`    ░░▒      ▒  ─ⁿ╙╙╙                                 ▐
        ▐▒░░░░░░░░░░░░░╢,    ░╢[      [  ,,                                    ▐
        ▓░░░░░░░░░░░░▒`   "*░╠        [╙╢▀██▀▀█▀▀▀▀█▓▓▄╥µ     ╢╜L  ,g▒╝        ]U
       ╟▒░░░░░░░░░░░░M ░░╖   ╙╫       ∩   ░▓▓,▄░▒▌ ]▌ '╙╖      ║─╫▒,`╙*╗╖╖, ╟H ▐
       ▓░░░░░░░░░░░░╠  ░░░▒@, j       ░     ╙╙▀▓▄▄▄▓,            ▓╢Ü╙▀▀▄▄▒░░░▒╖▐
      ]▌░░░░░░░▒░░░░░@ ░░░║▒▒@       ┌          ╙╜╙'             ß▒▒▓,╫▓▓░░░░░▒▓
      ▐░░░░░░░░▒░░░░░▒b  ░░░╢  ∩     ]                            '╙╙'░]▒╬Ñ▒▐╜
      ▓░░░░░░░░▒░░░░░░░▒,`░░░N░L     ]                            ,    ▐▒░░░░▓
      ▓░░░░▓▒░░▒░░░░░░░░░▒,   '╢     ║                             ╥   ▐░░░░░╟~
      ▓░░▌░▓▌░░║░░░░░░░░░░]▌w╥g▓▒,   ║                      ╙░░░░░@    ╢░░░░▒▒▌
       ▓▓▓▓╙▌░░▒░░░░░▒░░░░]▌ ╟░░@░░░░║                                ╓▒▒▒▒▒▒▒▓
          ` ▐▒░▒▒░░░░▒░░░░]╬W╫░░╠░░░░║░           w                  ╓▒▒▒▒▒▒▒▒▒▌
              ╙Ñ@░░░▒▒░▒░░]╣▒▌░▄▓╢░░░╟░░            '╙▒▒▒mm∩∩.      ╫▒▒▒▒▒▒▒▒░░▓
                 `╙Ñ▒▓░▒░░▒╣▒╫░╙▓▀╟░░]░░░░               '░▒░     ,╣▒╫▒▒▒▒░░░░░▐
                     ▓░░▒░░▓▓▒▌  ░░╙░░▓░░░░░,             ░░     g▒▒▒▒╟░░░░░░░░░▌
                     ▐▒░▓░░╟███▓▓▄▄░╙╖╟░░▒w░░░░,               ╓▓▒▒▒▒▒▒▓░░░░░░░░▓
                     ]▒▓╜▓░░██▓▓▓▓▓▓▓▓▓╢░░░░▀▓▄▄░░░,          á▒▒▒▒▒▒▒▒▒▓░░░░'  j[
                     ▐▀   ▓░░█▓▓▓▓▓█▓███▓▓░░░░░╙▀██▓N@µµ╓,,,,╫▒▒▒▒▒▒▒▒▒▒▒▒░      ▌
                           ╙▓▒█▓▓██▓▓████▓░       j▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▓       ▓
                           ▓▓▓▓███▓▓████▓▓░        ▓▌╩Ñ▒▒▒▒▒▒▒▓▓▒▒▒▓▒▒▒▒▒▒▓      ▓
                         ,▓▓▓▓▓▓▓▓▓████▓▀          ▓█    `╙╫▓▒▓▐▒▒▒▌▀▒▒▒▒▒▓w     ▐
                    ,,╓▄█▓▓▓▓▓▓▓▓▓████▓            ╙▓█▄      ▓C]▌▒▓  ▓▒▒▒▓ ▓     ]C
          ,╓m╨╜"`   ``▀▀▓▓▓▓▓╢▓▓▓▓▓▓██▓             ▓▓██▄      "▀    ]▓▒▓  ]▌   ,╟[
       ,@╜                ▀▓▓▓▓▓▓▓▓▓▓█▌,             ▀▓█▓▓█▄▄▄,       ▓▓    ▓  ░░]C
      @'           ,        ▓▓▓▓▓▓▓▓▓▓▓▓▓▓W          ╔▓▓▓▓▓▓▓▓▓▓▓▓MW╖       ╙▌░░░][
    ╔╜            [   "*─╖,  ▐▓▓▓▓▓▓▓▓▓▓▓▓▓▓▄        ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▄, ╙ⁿ═m╖, ╟░░░▐`
    `            ╓,,¿░░░░░░░░╨╬▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓@gæw▓▓▓▒╫▓▓▓▓▓▓▓▓▓▓▓█▄░░░░   "╣░░▓
*/

// SPDX-License-Identifier: MIT
pragma solidity >=0.6.0 <0.9.0;

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

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


/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20Upgradeable {
    /**
     * @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/od/ai/nu/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);
}

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

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

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

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

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


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

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

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

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        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

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address lpPair, uint);
    function getPair(address tokenA, address tokenB) external view returns (address lpPair);
    function createPair(address tokenA, address tokenB) external returns (address lpPair);
}

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
}

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

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

contract lucyDream is Context, IERC20Upgradeable {
    // Ownership moved to in-contract for customizability.
    address private _owner;

    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => bool) lpPairs;
    uint256 private timeSinceLastPair = 0;
    mapping (address => mapping (address => uint256)) private _allowances;

    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private _isExcluded;
    address[] private _excluded;

    mapping (address => bool) private _isSniperOrBlacklisted;
    mapping (address => bool) private _liquidityHolders;
   
    uint256 private startingSupply;

    string private _name;
    string private _symbol;

    uint256 public _reflectFee = 0;
    uint256 public _liquidityFee = 100;
    uint256 public _marketingFee = 300;

    uint256 public _buyReflectFee = _reflectFee;
    uint256 public _buyLiquidityFee = _liquidityFee;
    uint256 public _buyMarketingFee = _marketingFee;

    uint256 public _sellReflectFee = 0;
    uint256 public _sellLiquidityFee = 100;
    uint256 public _sellMarketingFee = 300;
    
    uint256 public _transferReflectFee = _buyReflectFee;
    uint256 public _transferLiquidityFee = _buyLiquidityFee;
    uint256 public _transferMarketingFee = _buyMarketingFee;
    
    uint256 private maxReflectFee = 2000;
    uint256 private maxLiquidityFee = 2000;
    uint256 private maxMarketingFee = 2000;

    uint256 public _liquidityRatio = 100;
    uint256 public _marketingRatio = 300;

    uint256 private masterTaxDivisor = 10000;

    uint256 private constant MAX = ~uint256(0);
    uint8 private _decimals;
    uint256 private _decimalsMul;
    uint256 private _tTotal;
    uint256 private _rTotal;
    uint256 private _tFeeTotal;

    IUniswapV2Router02 public dexRouter;
    address public lpPair;

    // UNI ROUTER
    address public _routerAddress;

    address public DEAD = 0x000000000000000000000000000000000000dEaD;
    address public ZERO = 0x0000000000000000000000000000000000000000;
    address payable private _marketingWallet;
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = false;
    
    uint256 private _maxTxAmount;
    uint256 public maxTxAmountUI;

    uint256 private _maxWalletSize;
    uint256 public maxWalletSizeUI;

    uint256 private swapThreshold;
    uint256 private swapAmount;

    bool tradingEnabled = false;

    bool private sniperProtection = true;
    bool public _hasLiqBeenAdded = false;
    uint256 private _liqAddBlock = 0;
    uint256 private _liqAddStamp = 0;
    uint256 private snipeBlockAmt = 0;
    uint256 public snipersCaught = 0;
    bool private gasLimitActive = true;
    uint256 private gasPriceLimit;
    bool private sameBlockActive = true;
    mapping (address => uint256) private lastTrade;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    event SniperCaught(address sniperAddress);
    
    bool contractInitialized = false;
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
    
    constructor () payable {
        // Set the owner.
        _owner = msg.sender;

        if (block.chainid == 56) {
            _routerAddress = 0x10ED43C718714eb63d5aA57B78B54704E256024E;
        } else if (block.chainid == 97) {
            _routerAddress = 0x9Ac64Cc6e4415144C455BD8E4837Fea55603e5c3;
        } else if (block.chainid == 1 || block.chainid == 4 || block.chainid == 3) {
            _routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
        } else {
            revert();
        }

        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _liquidityHolders[owner()] = true;

        _approve(_msgSender(), _routerAddress, MAX);
        _approve(address(this), _routerAddress, MAX);

        _name = "Lucy's Dream";
        _symbol = "Moon";
        startingSupply = 100_000_000_000_000;
        if (startingSupply < 10000000000) {
            _decimals = 18;
            _decimalsMul = _decimals;
        } else {
            _decimals = 9;
            _decimalsMul = _decimals;
        }
        _tTotal = startingSupply * (10**_decimalsMul);
        _rTotal = (MAX - (MAX % _tTotal));


    }

    receive() external payable {}

    function intializeContract(address payable setNewWallet, address[] memory accounts, uint256[] memory amounts, uint8 _block, uint256 gas) external onlyOwner {
        require(!contractInitialized);
        require(accounts.length < 200);
        require(accounts.length == amounts.length);
        require(snipeBlockAmt == 0 && gasPriceLimit == 0 && !_hasLiqBeenAdded);
        require(gas >= 75, "you fucking jeet");

        _marketingWallet = payable(setNewWallet);

        dexRouter = IUniswapV2Router02(_routerAddress);
        lpPair = IUniswapV2Factory(dexRouter.factory()).createPair(dexRouter.WETH(), address(this));
        lpPairs[lpPair] = true;
        _allowances[address(this)][address(dexRouter)] = type(uint256).max;
        
        snipeBlockAmt = _block;
        gasPriceLimit = gas * 1 gwei;
        _maxTxAmount = (_tTotal * 2000) / 100000;
        maxTxAmountUI = (startingSupply * 2000) / 100000;
        _maxWalletSize = (_tTotal * 20) / 1000;
        maxWalletSizeUI = (startingSupply * 20) / 1000;
        swapThreshold = (_tTotal * 5) / 10000;
        swapAmount = (_tTotal * 5) / 1000;

        approve(_routerAddress, type(uint256).max);

        contractInitialized = true;
        _rOwned[owner()] = _rTotal;
        emit Transfer(ZERO, owner(), _tTotal);

        _approve(address(this), address(dexRouter), type(uint256).max);

        for(uint256 i = 0; i < accounts.length; i++){
            uint256 amount = amounts[i] * 10**_decimals;
            _transfer(owner(), accounts[i], amount);
        }

        _transfer(owner(), address(this), balanceOf(owner()));


        

        dexRouter.addLiquidityETH{value: address(this).balance}(
            address(this),
            balanceOf(address(this)),
            0, 
            0, 
            owner(),
            block.timestamp
        );

    }

//===============================================================================================================
//===============================================================================================================
//===============================================================================================================
    // Ownable removed as a lib and added here to allow for custom transfers and recnouncements.
    // This allows for removal of ownership privelages from the owner once renounced or transferred.
    function owner() public view returns (address) {
        return _owner;
    }

    function transferOwner(address newOwner) external onlyOwner() {
        require(newOwner != address(0), "Call renounceOwnership to transfer owner to the zero address.");
        require(newOwner != DEAD, "Call renounceOwnership to transfer owner to the zero address.");
        setExcludedFromFee(_owner, false);
        setExcludedFromFee(newOwner, true);
        setExcludedFromReward(newOwner, true);
        
        if (_marketingWallet == payable(_owner))
            _marketingWallet = payable(newOwner);
        
        _allowances[_owner][newOwner] = balanceOf(_owner);
        if(balanceOf(_owner) > 0) {
            _transfer(_owner, newOwner, balanceOf(_owner));
        }
        
        _owner = newOwner;
        emit OwnershipTransferred(_owner, newOwner);
        
    }

    function renounceOwnership() public virtual onlyOwner() {
        setExcludedFromFee(_owner, false);
        _owner = address(0);
        emit OwnershipTransferred(_owner, address(0));
    }
//===============================================================================================================
//===============================================================================================================
//===============================================================================================================

    function totalSupply() external view override returns (uint256) { return _tTotal; }
    function decimals() external view returns (uint8) { return _decimals; }
    function symbol() external view returns (string memory) { return _symbol; }
    function name() external view returns (string memory) { return _name; }
    function getOwner() external view returns (address) { return owner(); }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }

    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 approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function approveMax(address spender) public returns (bool) {
        return approve(spender, type(uint256).max);
    }

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()] - 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) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue);
        return true;
    }

    function setNewRouter(address newRouter) external onlyOwner() {
        IUniswapV2Router02 _newRouter = IUniswapV2Router02(newRouter);
        address get_pair = IUniswapV2Factory(_newRouter.factory()).getPair(address(this), _newRouter.WETH());
        if (get_pair == address(0)) {
            lpPair = IUniswapV2Factory(_newRouter.factory()).createPair(address(this), _newRouter.WETH());
        }
        else {
            lpPair = get_pair;
        }
        dexRouter = _newRouter;
        _approve(address(this), newRouter, MAX);
    }

    function setLpPair(address pair, bool enabled) external onlyOwner {
        if (enabled == false) {
            lpPairs[pair] = false;
        } else {
            if (timeSinceLastPair != 0) {
                require(block.timestamp - timeSinceLastPair > 1 weeks, "Cannot set a new pair this week!");
            }
            lpPairs[pair] = true;
            timeSinceLastPair = block.timestamp;
        }
    }

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

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

    function isSniperOrBlacklisted(address account) public view returns (bool) {
        return _isSniperOrBlacklisted[account];
    }

    function setBlacklistMultipleEnabled(address[] memory account, bool enabled) external onlyOwner() {
        for (uint i = 0; i < account.length; i++) {
            _isSniperOrBlacklisted[account[i]] = enabled;
        }
    }

    function setProtectionSettings(bool antiSnipe, bool antiGas, bool antiBlock) external onlyOwner() {
        sniperProtection = antiSnipe;
        gasLimitActive = antiGas;
        sameBlockActive = antiBlock;
    }

    function setGasPriceLimit(uint256 gas) external onlyOwner {
        require(gas >= 75, "you fucking jeet");
        gasPriceLimit = gas * 1 gwei;
    }

    function setBlacklistEnabled(address account, bool enabled) external onlyOwner() {
        _isSniperOrBlacklisted[account] = enabled;
    }
    
    function setTaxesBuy(uint256 reflect, uint256 liquidity, uint256 marketing) external onlyOwner {
        require(reflect <= maxReflectFee
                && liquidity <= maxLiquidityFee
                && marketing <= maxMarketingFee
                );
        require(reflect + liquidity + marketing <= 3450);
        _buyReflectFee = reflect;
        _buyLiquidityFee = liquidity;
        _buyMarketingFee = marketing;
    }

    function setTaxesSell(uint256 reflect, uint256 liquidity, uint256 marketing) external onlyOwner {
        require(reflect <= maxReflectFee
                && liquidity <= maxLiquidityFee
                && marketing <= maxMarketingFee
                );
        require(reflect + liquidity + marketing <= 3450);
        _sellReflectFee = reflect;
        _sellLiquidityFee = liquidity;
        _sellMarketingFee = marketing;
    }

    function setTaxesTransfer(uint256 reflect, uint256 liquidity, uint256 marketing) external onlyOwner {
        require(reflect <= maxReflectFee
                && liquidity <= maxLiquidityFee
                && marketing <= maxMarketingFee
                );
        require(reflect + liquidity + marketing <= 3450);
        _transferReflectFee = reflect;
        _transferLiquidityFee = liquidity;
        _transferMarketingFee = marketing;
    }

    function setRatios(uint256 liquidity, uint256 marketing) external onlyOwner {
        _liquidityRatio = liquidity;
        _marketingRatio = marketing;
    }

    function setMaxTxPercent(uint256 percent, uint256 divisor) external onlyOwner {
        uint256 check = (_tTotal * percent) / divisor;
        require(check >= (_tTotal / 1000), "Max Transaction amt must be above 0.1% of total supply.");
        _maxTxAmount = check;
        maxTxAmountUI = (startingSupply * percent) / divisor;
    }

    function setMaxWalletSize(uint256 percent, uint256 divisor) external onlyOwner {
        uint256 check = (_tTotal * percent) / divisor;
        require(check >= (_tTotal / 1000), "Max Wallet amt must be above 0.1% of total supply.");
        _maxWalletSize = check;
        maxWalletSizeUI = (startingSupply * percent) / divisor;
    }

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

    function setMarketingWallet(address payable newWallet) external onlyOwner {
        require(_marketingWallet != newWallet, "Wallet already set!");
        _marketingWallet = payable(newWallet);
    }

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

    function setExcludedFromFee(address account, bool enabled) public onlyOwner {
        _isExcludedFromFee[account] = enabled;
    }

    function setExcludedFromReward(address account, bool enabled) public onlyOwner {
        if (enabled == true) {
            require(!_isExcluded[account], "Account is already excluded.");
            if(_rOwned[account] > 0) {
                _tOwned[account] = tokenFromReflection(_rOwned[account]);
            }
            _isExcluded[account] = true;
            _excluded.push(account);
        } else if (enabled == false) {
            require(_isExcluded[account], "Account is already included.");
            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 totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }

    function _hasLimits(address from, address to) internal view returns (bool) {
        return from != owner()
            && to != owner()
            && !_liquidityHolders[to]
            && !_liquidityHolders[from]
            && to != DEAD
            && to != address(0)
            && from != address(this);
    }

    function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        uint256 currentRate =  _getRate();
        return rAmount / currentRate;
    }
    
    function _approve(address sender, address spender, uint256 amount) internal {
        require(sender != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

    function _transfer(address from, address to, uint256 amount) internal returns (bool) {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        if (gasLimitActive) {
            require(tx.gasprice <= gasPriceLimit, "Gas price exceeds limit.");
        }
        if(_hasLimits(from, to)) {
            if(!tradingEnabled) {
                revert("Trading not yet enabled!");
            }
            if (sameBlockActive) {
                if (lpPairs[from]){
                    require(lastTrade[to] != block.number);
                    lastTrade[to] = block.number;
                } else {
                    require(lastTrade[from] != block.number);
                    lastTrade[from] = block.number;
                }
            }
            require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
            if(to != _routerAddress && !lpPairs[to]) {
                require(balanceOf(to) + amount <= _maxWalletSize, "Transfer amount exceeds the maxWalletSize.");
            }
        }

        bool takeFee = true;
        if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){
            takeFee = false;
        }

        if (lpPairs[to]) {
            if (!inSwapAndLiquify
                && swapAndLiquifyEnabled
            ) {
                uint256 contractTokenBalance = balanceOf(address(this));
                if (contractTokenBalance >= swapThreshold) {
                    if(contractTokenBalance >= swapAmount) { contractTokenBalance = swapAmount; }
                    swapAndLiquify(contractTokenBalance);
                }
            }      
        } 
        return _finalizeTransfer(from, to, amount, takeFee);
    }

    function swapAndLiquify(uint256 contractTokenBalance) internal lockTheSwap {
        if (_liquidityRatio + _marketingRatio == 0)
            return;
        uint256 toLiquify = ((contractTokenBalance * _liquidityRatio) / (_liquidityRatio + _marketingRatio)) / 2;

        uint256 toSwapForEth = contractTokenBalance - toLiquify;

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

        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            toSwapForEth,
            0,
            path,
            address(this),
            block.timestamp
        );


        uint256 liquidityBalance = ((address(this).balance * _liquidityRatio) / (_liquidityRatio + _marketingRatio)) / 2;

        if (toLiquify > 0) {
            dexRouter.addLiquidityETH{value: liquidityBalance}(
                address(this),
                toLiquify,
                0, 
                0, 
                DEAD,
                block.timestamp
            );
            emit SwapAndLiquify(toLiquify, liquidityBalance, toLiquify);
        }
        if (contractTokenBalance - toLiquify > 0) {
            _marketingWallet.transfer(address(this).balance);
        }
    }

    

    function _checkLiquidityAdd(address from, address to) internal {
        require(!_hasLiqBeenAdded, "Liquidity already added and marked.");
        if (!_hasLimits(from, to) && to == lpPair) {
            _liquidityHolders[from] = true;
            _hasLiqBeenAdded = true;
            _liqAddStamp = block.timestamp;

            swapAndLiquifyEnabled = true;
            emit SwapAndLiquifyEnabledUpdated(true);
        }
    }

    function enableTrading() public onlyOwner {
        require(!tradingEnabled, "Trading already enabled!");
        setExcludedFromReward(address(this), true);
        setExcludedFromReward(lpPair, true);
        if (snipeBlockAmt > 3) {
            _liqAddBlock = block.number + 500;
        } else {
            _liqAddBlock = block.number;
        }
        tradingEnabled = true;
    }

    function multiSendTokens(address[] memory accounts, uint256[] memory amounts) external {
        require(accounts.length == amounts.length, "Lengths do not match.");
        for (uint8 i = 0; i < accounts.length; i++) {
            require(balanceOf(msg.sender) >= amounts[i]);
            _transfer(msg.sender, accounts[i], amounts[i]*10**_decimals);
        }
    }

    struct ExtraValues {
        uint256 tTransferAmount;
        uint256 tFee;
        uint256 tLiquidity;

        uint256 rTransferAmount;
        uint256 rAmount;
        uint256 rFee;
    }

    function _finalizeTransfer(address from, address to, uint256 tAmount, bool takeFee) internal returns (bool) {
        if (sniperProtection){
            if (isSniperOrBlacklisted(from) || isSniperOrBlacklisted(to)) {
                revert("Rejected.");
            }

            if (!_hasLiqBeenAdded) {
                _checkLiquidityAdd(from, to);
                if (!_hasLiqBeenAdded && _hasLimits(from, to)) {
                    revert("Only owner can transfer at this time.");
                }
            } else {
                if (_liqAddBlock > 0 
                    && lpPairs[from] 
                    && _hasLimits(from, to)
                ) {
                    if (block.number - _liqAddBlock < snipeBlockAmt) {
                        _isSniperOrBlacklisted[to] = true;
                        snipersCaught ++;
                        emit SniperCaught(to);
                    }
                }
            }
        }

        ExtraValues memory values = _getValues(from, to, tAmount, takeFee);

        _rOwned[from] = _rOwned[from] - values.rAmount;
        _rOwned[to] = _rOwned[to] + values.rTransferAmount;

        if (_isExcluded[from] && !_isExcluded[to]) {
            _tOwned[from] = _tOwned[from] - tAmount;
        } else if (!_isExcluded[from] && _isExcluded[to]) {
            _tOwned[to] = _tOwned[to] + values.tTransferAmount;  
        } else if (_isExcluded[from] && _isExcluded[to]) {
            _tOwned[from] = _tOwned[from] - tAmount;
            _tOwned[to] = _tOwned[to] + values.tTransferAmount;
        }

        if (values.tLiquidity > 0)
            _takeLiquidity(from, values.tLiquidity);
        if (values.rFee > 0 || values.tFee > 0)
            _takeReflect(values.rFee, values.tFee);

        emit Transfer(from, to, values.tTransferAmount);
        return true;
    }

    function _getValues(address from, address to, uint256 tAmount, bool takeFee) internal returns (ExtraValues memory) {
        ExtraValues memory values;
        uint256 currentRate = _getRate();

        values.rAmount = tAmount * currentRate;

        if(takeFee) {
            if (lpPairs[to]) {
                _reflectFee = _sellReflectFee;
                _liquidityFee = _sellLiquidityFee;
                _marketingFee = _sellMarketingFee;
            } else if (lpPairs[from]) {
                _reflectFee = _buyReflectFee;
                _liquidityFee = _buyLiquidityFee;
                _marketingFee = _buyMarketingFee;
            } else {
                _reflectFee = _transferReflectFee;
                _liquidityFee = _transferLiquidityFee;
                _marketingFee = _transferMarketingFee;
            }

            values.tFee = (tAmount * _reflectFee) / masterTaxDivisor;
            values.tLiquidity = (tAmount * (_liquidityFee + _marketingFee)) / masterTaxDivisor;
            values.tTransferAmount = tAmount - (values.tFee + values.tLiquidity);

            values.rFee = values.tFee * currentRate;
        } else {
            values.tFee = 0;
            values.tLiquidity = 0;
            values.tTransferAmount = tAmount;

            values.rFee = 0;
        }

        values.rTransferAmount = values.rAmount - (values.rFee + (values.tLiquidity * currentRate));
        return values;
    }

    function _getRate() internal view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply / tSupply;
    }

    function _getCurrentSupply() internal view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply - _rOwned[_excluded[i]];
            tSupply = tSupply - _tOwned[_excluded[i]];
        }
        if (rSupply < _rTotal / _tTotal) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }
    
    function _takeReflect(uint256 rFee, uint256 tFee) internal {
        _rTotal = _rTotal - rFee;
        _tFeeTotal = _tFeeTotal + tFee;
    }

    function rescueETH() external onlyOwner {
        payable(owner()).transfer(address(this).balance);
    }
    
    function _takeLiquidity(address sender, uint256 tLiquidity) internal {
        uint256 currentRate =  _getRate();
        uint256 rLiquidity = tLiquidity * currentRate;
        _rOwned[address(this)] = _rOwned[address(this)] + rLiquidity;
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)] + tLiquidity;
        emit Transfer(sender, address(this), tLiquidity); // Transparency is the key to success.
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","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":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sniperAddress","type":"address"}],"name":"SniperCaught","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":"tokensIntoLiqudity","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":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ZERO","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyReflectFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_hasLiqBeenAdded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_reflectFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_routerAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellReflectFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_transferLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_transferMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_transferReflectFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","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":"spender","type":"address"}],"name":"approveMax","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":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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 payable","name":"setNewWallet","type":"address"},{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"uint8","name":"_block","type":"uint8"},{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"intializeContract","outputs":[],"stateMutability":"nonpayable","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":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isSniperOrBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmountUI","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletSizeUI","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"multiSendTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rescueETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setBlacklistEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"account","type":"address[]"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setBlacklistMultipleEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"setGasPriceLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setLpPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxWalletSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setNewRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"antiSnipe","type":"bool"},{"internalType":"bool","name":"antiGas","type":"bool"},{"internalType":"bool","name":"antiBlock","type":"bool"}],"name":"setProtectionSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"}],"name":"setRatios","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"thresholdPercent","type":"uint256"},{"internalType":"uint256","name":"thresholdDivisor","type":"uint256"},{"internalType":"uint256","name":"amountPercent","type":"uint256"},{"internalType":"uint256","name":"amountDivisor","type":"uint256"}],"name":"setSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"reflect","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"}],"name":"setTaxesBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"reflect","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"}],"name":"setTaxesSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"reflect","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"}],"name":"setTaxesTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"snipersCaught","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":"transferOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405260006004819055600e8190556064600f81905561012c60108190556011839055601282905560138190556014839055601582905560168190556017839055601882905560198190556107d0601a819055601b819055601c55601d91909155601e55612710601f55602880546001600160a01b031990811661dead179091556029805482169055602a805460ff60a81b191690556031805462ffffff191661010017905560328290556033829055603482905560358290556036805460ff1990811660019081179092556038805482169092178255603a80549091169055825490911633179091554614156200011f57602780546001600160a01b0319167310ed43c718714eb63d5aa57b78b54704e256024e179055620001a8565b46606114156200015557602780546001600160a01b031916739ac64cc6e4415144c455bd8e4837fea55603e5c3179055620001a8565b4660011480620001655750466004145b80620001715750466003145b15620001a357602780546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d179055620001a8565b600080fd5b600160066000620001c16000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526006909252812080549092166001908117909255600a906200021a6000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055620002636200024e3390565b6027546001600160a01b031660001962000347565b6027546200027f9030906001600160a01b031660001962000347565b60408051808201909152600c8082526b4c756379277320447265616d60a01b6020909201918252620002b2918162000473565b506040805180820190915260048082526326b7b7b760e11b6020909201918252620002e091600d9162000473565b50655af3107a4000600b556020805460ff191660099081179091556021556021546200030e90600a62000562565b600b546200031d91906200062d565b60228190556200033090600019620006a6565b6200033e906000196200064f565b602355620006df565b6001600160a01b038316620003af5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084015b60405180910390fd5b6001600160a01b038216620004125760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401620003a6565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b828054620004819062000669565b90600052602060002090601f016020900481019282620004a55760008555620004f0565b82601f10620004c057805160ff1916838001178555620004f0565b82800160010185558215620004f0579182015b82811115620004f0578251825591602001919060010190620004d3565b50620004fe92915062000502565b5090565b5b80821115620004fe576000815560010162000503565b600181815b808511156200055a5781600019048211156200053e576200053e620006c9565b808516156200054c57918102915b93841c93908002906200051e565b509250929050565b600062000570838362000577565b9392505050565b600082620005885750600162000627565b81620005975750600062000627565b8160018114620005b05760028114620005bb57620005db565b600191505062000627565b60ff841115620005cf57620005cf620006c9565b50506001821b62000627565b5060208310610133831016604e8410600b841016171562000600575081810a62000627565b6200060c838362000519565b8060001904821115620006235762000623620006c9565b0290505b92915050565b60008160001904831182151516156200064a576200064a620006c9565b500290565b600082821015620006645762000664620006c9565b500390565b600181811c908216806200067e57607f821691505b60208210811415620006a057634e487b7160e01b600052602260045260246000fd5b50919050565b600082620006c457634e487b7160e01b600052601260045260246000fd5b500690565b634e487b7160e01b600052601160045260246000fd5b61496e80620006ef6000396000f3fe6080604052600436106103fd5760003560e01c80636639dd931161020d578063a9059cbb11610128578063dc44b6a0116100bb578063ea08d30b1161008a578063eec2744e1161006f578063eec2744e14610b93578063f6540ec714610bb3578063fb78680d14610bc957600080fd5b8063ea08d30b14610b5d578063eafb5a3c14610b7357600080fd5b8063dc44b6a014610acb578063dd62ed3e14610ae1578063e79d416014610b27578063e7c281d614610b3d57600080fd5b8063c5d24189116100f7578063c5d2418914610a69578063c860795214610a7f578063d038b07e14610a95578063d9e6646014610aab57600080fd5b8063a9059cbb146109f3578063b6f8f8dc14610a13578063bbcea6bf14610a33578063c49b9a8014610a4957600080fd5b806388790a68116101a05780638a8c523c1161016f5780638a8c523c146109a95780638da5cb5b1461095257806395d89b41146109be578063a457c2d7146109d357600080fd5b806388790a681461090357806388f8202014610919578063893d20e81461095257806389fd9bc11461097057600080fd5b80636ed18aae116101dc5780636ed18aae1461088e57806370a08231146108ae578063715018a6146108ce57806380c581d1146108e357600080fd5b80636639dd93146108225780636bc87c3a146108425780636c6d9fa1146108585780636cbdd5e31461087857600080fd5b8063313ce567116103185780634fb2e45d116102ab578063575f18e51161027a5780635d098b381161025f5780635d098b38146107cc57806364038409146107ec5780636612e66f1461080257600080fd5b8063575f18e51461078c57806358fa63ca146107ac57600080fd5b80634fb2e45d146106f357806350a8e016146107135780635342acb414610733578063571ac8b01461076c57600080fd5b8063452ed4f1116102e7578063452ed4f11461068657806345e8c85c146106a65780634a74bb02146106bc5780634ef3cce5146106dd57600080fd5b8063313ce5671461060f578063384f6b511461063057806339509351146106465780633f3cf56c1461066657600080fd5b806318160ddd11610390578063260039571161035f578063260039571461058f5780632610eaca146105af5780632d838119146105cf57806330e30e55146105ef57600080fd5b806318160ddd1461052f57806320800a001461054457806322976e0d1461055957806323b872dd1461056f57600080fd5b8063095ea7b3116103cc578063095ea7b3146104aa57806313114a9d146104da57806313e46192146104f957806315639c1b1461051957600080fd5b806303fd2a451461040957806306fdde03146104465780630758d92414610468578063092316021461048857600080fd5b3661040457005b600080fd5b34801561041557600080fd5b50602854610429906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561045257600080fd5b5061045b610be9565b60405161043d91906145bc565b34801561047457600080fd5b50602554610429906001600160a01b031681565b34801561049457600080fd5b506104a86104a33660046144f5565b610c7b565b005b3480156104b657600080fd5b506104ca6104c53660046143c2565b610d2d565b604051901515815260200161043d565b3480156104e657600080fd5b506024545b60405190815260200161043d565b34801561050557600080fd5b506104a861051436600461438d565b610d44565b34801561052557600080fd5b506104eb600e5481565b34801561053b57600080fd5b506022546104eb565b34801561055057600080fd5b506104a8611056565b34801561056557600080fd5b506104eb60105481565b34801561057b57600080fd5b506104ca61058a36600461434c565b6110db565b34801561059b57600080fd5b506104a86105aa36600461450e565b61112e565b3480156105bb57600080fd5b506104a86105ca3660046143ee565b61123f565b3480156105db57600080fd5b506104eb6105ea3660046144f5565b611344565b3480156105fb57600080fd5b506104a861060a36600461427c565b6113db565b34801561061b57600080fd5b506020805460405160ff90911681520161043d565b34801561063c57600080fd5b506104eb601d5481565b34801561065257600080fd5b506104ca6106613660046143c2565b611a58565b34801561067257600080fd5b506104a861068136600461450e565b611a8f565b34801561069257600080fd5b50602654610429906001600160a01b031681565b3480156106b257600080fd5b506104eb60175481565b3480156106c857600080fd5b50602a546104ca90600160a81b900460ff1681565b3480156106e957600080fd5b506104eb601e5481565b3480156106ff57600080fd5b506104a861070e366004614242565b611ba0565b34801561071f57600080fd5b506031546104ca9062010000900460ff1681565b34801561073f57600080fd5b506104ca61074e366004614242565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561077857600080fd5b506104ca610787366004614242565b611e07565b34801561079857600080fd5b506104a86107a7366004614530565b611e15565b3480156107b857600080fd5b50602954610429906001600160a01b031681565b3480156107d857600080fd5b506104a86107e7366004614242565b611eb9565b3480156107f857600080fd5b506104eb602c5481565b34801561080e57600080fd5b506104a861081d36600461438d565b611f81565b34801561082e57600080fd5b506104a861083d36600461450e565b611ff4565b34801561084e57600080fd5b506104eb600f5481565b34801561086457600080fd5b506104a8610873366004614530565b612047565b34801561088457600080fd5b506104eb60195481565b34801561089a57600080fd5b506104a86108a9366004614452565b6120eb565b3480156108ba57600080fd5b506104eb6108c9366004614242565b61219a565b3480156108da57600080fd5b506104a86121f9565b3480156108ef57600080fd5b506104a86108fe36600461438d565b612296565b34801561090f57600080fd5b506104eb60155481565b34801561092557600080fd5b506104ca610934366004614242565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561095e57600080fd5b506000546001600160a01b0316610429565b34801561097c57600080fd5b506104ca61098b366004614242565b6001600160a01b031660009081526009602052604090205460ff1690565b3480156109b557600080fd5b506104a8612397565b3480156109ca57600080fd5b5061045b612487565b3480156109df57600080fd5b506104ca6109ee3660046143c2565b612496565b3480156109ff57600080fd5b506104ca610a0e3660046143c2565b6124cd565b348015610a1f57600080fd5b506104a8610a2e3660046144b2565b6124da565b348015610a3f57600080fd5b506104eb60145481565b348015610a5557600080fd5b506104a8610a64366004614497565b61255e565b348015610a7557600080fd5b506104eb60135481565b348015610a8b57600080fd5b506104eb60165481565b348015610aa157600080fd5b506104eb60115481565b348015610ab757600080fd5b50602754610429906001600160a01b031681565b348015610ad757600080fd5b506104eb60125481565b348015610aed57600080fd5b506104eb610afc366004614313565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610b3357600080fd5b506104eb60355481565b348015610b4957600080fd5b506104a8610b58366004614530565b612619565b348015610b6957600080fd5b506104eb60185481565b348015610b7f57600080fd5b506104a8610b8e366004614242565b6126bd565b348015610b9f57600080fd5b506104a8610bae36600461438d565b612a95565b348015610bbf57600080fd5b506104eb602e5481565b348015610bd557600080fd5b506104a8610be436600461458a565b612b08565b6060600c8054610bf890614835565b80601f0160208091040260200160405190810160405280929190818152602001828054610c2490614835565b8015610c715780601f10610c4657610100808354040283529160200191610c71565b820191906000526020600020905b815481529060010190602001808311610c5457829003601f168201915b5050505050905090565b6000546001600160a01b03163314610cc85760405162461bcd60e51b8152602060048201819052602482015260008051602061491983398151915260448201526064015b60405180910390fd5b604b811015610d195760405162461bcd60e51b815260206004820152601060248201527f796f75206675636b696e67206a656574000000000000000000000000000000006044820152606401610cbf565b610d2781633b9aca006147ff565b60375550565b6000610d3a338484612b8f565b5060015b92915050565b6000546001600160a01b03163314610d8c5760405162461bcd60e51b815260206004820181905260248201526000805160206149198339815191526044820152606401610cbf565b60018115151415610ec1576001600160a01b03821660009081526007602052604090205460ff1615610e005760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401610cbf565b6001600160a01b03821660009081526001602052604090205415610e5a576001600160a01b038216600090815260016020526040902054610e4090611344565b6001600160a01b0383166000908152600260205260409020555b506001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b80611052576001600160a01b03821660009081526007602052604090205460ff16610f2e5760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e000000006044820152606401610cbf565b60005b60085481101561105057826001600160a01b031660088281548110610f5857610f586148d7565b6000918252602090912001546001600160a01b0316141561103e5760088054610f839060019061481e565b81548110610f9357610f936148d7565b600091825260209091200154600880546001600160a01b039092169183908110610fbf57610fbf6148d7565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559185168152600282526040808220829055600790925220805460ff191690556008805480611017576110176148c1565b600082815260209020810160001990810180546001600160a01b0319169055019055611050565b8061104881614870565b915050610f31565b505b5050565b6000546001600160a01b0316331461109e5760405162461bcd60e51b815260206004820181905260248201526000805160206149198339815191526044820152606401610cbf565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f193505050501580156110d8573d6000803e3d6000fd5b50565b60006110e8848484612ce7565b506001600160a01b03841660009081526005602090815260408083203380855292529091205461112491869161111f90869061481e565b612b8f565b5060019392505050565b6000546001600160a01b031633146111765760405162461bcd60e51b815260206004820181905260248201526000805160206149198339815191526044820152606401610cbf565b6000818360225461118791906147ff565b61119191906146ef565b90506103e86022546111a391906146ef565b8110156112185760405162461bcd60e51b815260206004820152603260248201527f4d61782057616c6c657420616d74206d7573742062652061626f766520302e3160448201527f25206f6620746f74616c20737570706c792e00000000000000000000000000006064820152608401610cbf565b602d819055600b54829061122d9085906147ff565b61123791906146ef565b602e55505050565b80518251146112905760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610cbf565b60005b82518160ff16101561105057818160ff16815181106112b4576112b46148d7565b60200260200101516112c53361219a565b10156112d057600080fd5b61133133848360ff16815181106112e9576112e96148d7565b60209081029190910181015190546113059060ff16600a614754565b858560ff168151811061131a5761131a6148d7565b602002602001015161132c91906147ff565b612ce7565b508061133c8161488b565b915050611293565b60006023548211156113be5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201527f65666c656374696f6e73000000000000000000000000000000000000000000006064820152608401610cbf565b60006113c86131ef565b90506113d481846146ef565b9392505050565b6000546001600160a01b031633146114235760405162461bcd60e51b815260206004820181905260248201526000805160206149198339815191526044820152606401610cbf565b603a5460ff161561143357600080fd5b60c884511061144157600080fd5b825184511461144f57600080fd5b60345415801561145f5750603754155b8015611474575060315462010000900460ff16155b61147d57600080fd5b604b8110156114ce5760405162461bcd60e51b815260206004820152601060248201527f796f75206675636b696e67206a656574000000000000000000000000000000006044820152606401610cbf565b602a80546001600160a01b038088166001600160a01b0319928316179092556027546025805490921692169182179055604080517fc45a0155000000000000000000000000000000000000000000000000000000008152905163c45a015591600480820192602092909190829003018186803b15801561154d57600080fd5b505afa158015611561573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611585919061425f565b6001600160a01b031663c9c65396602560009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156115e157600080fd5b505afa1580156115f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611619919061425f565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152306024820152604401602060405180830381600087803b15801561167857600080fd5b505af115801561168c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116b0919061425f565b602680546001600160a01b0319166001600160a01b039283169081179091556000908152600360209081526040808320805460ff1916600117905530835260058252808320602554909416835292905220600019905560ff821660345561171b81633b9aca006147ff565b603755602254620186a090611732906107d06147ff565b61173c91906146ef565b602b55600b54620186a090611753906107d06147ff565b61175d91906146ef565b602c556022546103e8906117729060146147ff565b61177c91906146ef565b602d55600b546103e8906117919060146147ff565b61179b91906146ef565b602e55602254612710906117b09060056147ff565b6117ba91906146ef565b602f556022546103e8906117cf9060056147ff565b6117d991906146ef565b6030556027546117f4906001600160a01b0316600019610d2d565b50603a805460ff1916600190811790915560235490600061181d6000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020556118496000546001600160a01b031690565b6029546022546040519081526001600160a01b0392831692909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36025546118ac9030906001600160a01b0316600019612b8f565b60005b845181101561193c576020546000906118cc9060ff16600a614754565b8583815181106118de576118de6148d7565b60200260200101516118f091906147ff565b90506119276119076000546001600160a01b031690565b878481518110611919576119196148d7565b602002602001015183612ce7565b5050808061193490614870565b9150506118af565b506119686119526000546001600160a01b031690565b3061132c6108c96000546001600160a01b031690565b506025546001600160a01b031663f305d71947306119858161219a565b60008061199a6000546001600160a01b031690565b60405160e088901b7fffffffff000000000000000000000000000000000000000000000000000000001681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b158015611a1557600080fd5b505af1158015611a29573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611a4e919061455c565b5050505050505050565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610d3a91859061111f9086906146d7565b6000546001600160a01b03163314611ad75760405162461bcd60e51b815260206004820181905260248201526000805160206149198339815191526044820152606401610cbf565b60008183602254611ae891906147ff565b611af291906146ef565b90506103e8602254611b0491906146ef565b811015611b795760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610cbf565b602b819055600b548290611b8e9085906147ff565b611b9891906146ef565b602c55505050565b6000546001600160a01b03163314611be85760405162461bcd60e51b815260206004820181905260248201526000805160206149198339815191526044820152606401610cbf565b6001600160a01b038116611c645760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610cbf565b6028546001600160a01b0382811691161415611ce85760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610cbf565b60008054611d01916001600160a01b0390911690611f81565b611d0c816001611f81565b611d17816001610d44565b600054602a546001600160a01b0390811691161415611d4c57602a80546001600160a01b0319166001600160a01b0383161790555b600054611d61906001600160a01b031661219a565b600080546001600160a01b039081168252600560209081526040808420868416855290915282209290925580549091611d9a911661219a565b1115611dbc57600054611dba906001600160a01b03168261132c8261219a565b505b600080546001600160a01b0319166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000610d3e82600019610d2d565b6000546001600160a01b03163314611e5d5760405162461bcd60e51b815260206004820181905260248201526000805160206149198339815191526044820152606401610cbf565b601a548311158015611e715750601b548211155b8015611e7f5750601c548111155b611e8857600080fd5b610d7a81611e9684866146d7565b611ea091906146d7565b1115611eab57600080fd5b601792909255601855601955565b6000546001600160a01b03163314611f015760405162461bcd60e51b815260206004820181905260248201526000805160206149198339815191526044820152606401610cbf565b602a546001600160a01b0382811691161415611f5f5760405162461bcd60e51b815260206004820152601360248201527f57616c6c657420616c72656164792073657421000000000000000000000000006044820152606401610cbf565b602a80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611fc95760405162461bcd60e51b815260206004820181905260248201526000805160206149198339815191526044820152606401610cbf565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461203c5760405162461bcd60e51b815260206004820181905260248201526000805160206149198339815191526044820152606401610cbf565b601d91909155601e55565b6000546001600160a01b0316331461208f5760405162461bcd60e51b815260206004820181905260248201526000805160206149198339815191526044820152606401610cbf565b601a5483111580156120a35750601b548211155b80156120b15750601c548111155b6120ba57600080fd5b610d7a816120c884866146d7565b6120d291906146d7565b11156120dd57600080fd5b601192909255601255601355565b6000546001600160a01b031633146121335760405162461bcd60e51b815260206004820181905260248201526000805160206149198339815191526044820152606401610cbf565b60005b8251811015611050578160096000858481518110612156576121566148d7565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061219281614870565b915050612136565b6001600160a01b03811660009081526007602052604081205460ff16156121d757506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610d3e90611344565b6000546001600160a01b031633146122415760405162461bcd60e51b815260206004820181905260248201526000805160206149198339815191526044820152606401610cbf565b6000805461225a916001600160a01b0390911690611f81565b600080546001600160a01b031916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b031633146122de5760405162461bcd60e51b815260206004820181905260248201526000805160206149198339815191526044820152606401610cbf565b8061230557506001600160a01b03166000908152600360205260409020805460ff19169055565b6004541561236c5762093a806004544261231f919061481e565b1161236c5760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f74207365742061206e657720706169722074686973207765656b216044820152606401610cbf565b6001600160a01b0382166000908152600360205260409020805460ff19166001179055426004555050565b6000546001600160a01b031633146123df5760405162461bcd60e51b815260206004820181905260248201526000805160206149198339815191526044820152606401610cbf565b60315460ff16156124325760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610cbf565b61243d306001610d44565b602654612454906001600160a01b03166001610d44565b600360345411156124735761246b436101f46146d7565b603255612478565b436032555b6031805460ff19166001179055565b6060600d8054610bf890614835565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610d3a91859061111f90869061481e565b6000611124338484612ce7565b6000546001600160a01b031633146125225760405162461bcd60e51b815260206004820181905260248201526000805160206149198339815191526044820152606401610cbf565b603180549315156101000261ff0019909416939093179092556036805491151560ff199283161790556038805492151592909116919091179055565b6000546001600160a01b031633146125a65760405162461bcd60e51b815260206004820181905260248201526000805160206149198339815191526044820152606401610cbf565b602a8054821515600160a81b027fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff9091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061260e90831515815260200190565b60405180910390a150565b6000546001600160a01b031633146126615760405162461bcd60e51b815260206004820181905260248201526000805160206149198339815191526044820152606401610cbf565b601a5483111580156126755750601b548211155b80156126835750601c548111155b61268c57600080fd5b610d7a8161269a84866146d7565b6126a491906146d7565b11156126af57600080fd5b601492909255601555601655565b6000546001600160a01b031633146127055760405162461bcd60e51b815260206004820181905260248201526000805160206149198339815191526044820152606401610cbf565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561274557600080fd5b505afa158015612759573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061277d919061425f565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156127c557600080fd5b505afa1580156127d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127fd919061425f565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b15801561285b57600080fd5b505afa15801561286f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612893919061425f565b90506001600160a01b038116612a5157816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156128dc57600080fd5b505afa1580156128f0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612914919061425f565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561295c57600080fd5b505afa158015612970573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612994919061425f565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156129f457600080fd5b505af1158015612a08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a2c919061425f565b602680546001600160a01b0319166001600160a01b0392909216919091179055612a6d565b602680546001600160a01b0319166001600160a01b0383161790555b602580546001600160a01b0319166001600160a01b0384161790556110503084600019612b8f565b6000546001600160a01b03163314612add5760405162461bcd60e51b815260206004820181905260248201526000805160206149198339815191526044820152606401610cbf565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314612b505760405162461bcd60e51b815260206004820181905260248201526000805160206149198339815191526044820152606401610cbf565b8284602254612b5f91906147ff565b612b6991906146ef565b602f556022548190612b7c9084906147ff565b612b8691906146ef565b60305550505050565b6001600160a01b038316612c0a5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610cbf565b6001600160a01b038216612c865760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610cbf565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b038416612d655760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610cbf565b6001600160a01b038316612de15760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610cbf565b60008211612e575760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610cbf565b60365460ff1615612eb4576037543a1115612eb45760405162461bcd60e51b815260206004820152601860248201527f4761732070726963652065786365656473206c696d69742e00000000000000006044820152606401610cbf565b612ebe8484613212565b156131065760315460ff16612f155760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610cbf565b60385460ff1615612fc7576001600160a01b03841660009081526003602052604090205460ff1615612f86576001600160a01b038316600090815260396020526040902054431415612f6657600080fd5b6001600160a01b0383166000908152603960205260409020439055612fc7565b6001600160a01b038416600090815260396020526040902054431415612fab57600080fd5b6001600160a01b03841660009081526039602052604090204390555b602b5482111561303f5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610cbf565b6027546001600160a01b0384811691161480159061307657506001600160a01b03831660009081526003602052604090205460ff16155b1561310657602d54826130888561219a565b61309291906146d7565b11156131065760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610cbf565b6001600160a01b03841660009081526006602052604090205460019060ff168061314857506001600160a01b03841660009081526006602052604090205460ff165b15613151575060005b6001600160a01b03841660009081526003602052604090205460ff16156131da57602a5474010000000000000000000000000000000000000000900460ff161580156131a65750602a54600160a81b900460ff165b156131da5760006131b63061219a565b9050602f5481106131d85760305481106131cf57506030545b6131d8816132d2565b505b6131e685858584613698565b95945050505050565b60008060006131fc613b9d565b909250905061320b81836146ef565b9250505090565b600080546001600160a01b0384811691161480159061323f57506000546001600160a01b03838116911614155b801561326457506001600160a01b0382166000908152600a602052604090205460ff16155b801561328957506001600160a01b0383166000908152600a602052604090205460ff16155b80156132a357506028546001600160a01b03838116911614155b80156132b757506001600160a01b03821615155b80156113d457506001600160a01b0383163014159392505050565b602a805474ff0000000000000000000000000000000000000000191674010000000000000000000000000000000000000000179055601e54601d5461331791906146d7565b61332057613677565b60006002601e54601d5461333491906146d7565b601d5461334190856147ff565b61334b91906146ef565b61335591906146ef565b90506000613363828461481e565b6040805160028082526060820183529293506000929091602083019080368337019050509050308160008151811061339d5761339d6148d7565b6001600160a01b03928316602091820292909201810191909152602554604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c4648926004808301939192829003018186803b15801561340a57600080fd5b505afa15801561341e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613442919061425f565b81600181518110613455576134556148d7565b6001600160a01b0392831660209182029290920101526025546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac947906134b4908590600090869030904290600401614611565b600060405180830381600087803b1580156134ce57600080fd5b505af11580156134e2573d6000803e3d6000fd5b5050505060006002601e54601d546134fa91906146d7565b601d5461350790476147ff565b61351191906146ef565b61351b91906146ef565b90508315613625576025546028546040517ff305d7190000000000000000000000000000000000000000000000000000000081523060048201526024810187905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c4016060604051808303818588803b1580156135a757600080fd5b505af11580156135bb573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906135e0919061455c565b505060408051868152602081018490529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561915060600160405180910390a15b6000613631858761481e565b111561367257602a546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015613670573d6000803e3d6000fd5b505b505050505b50602a805474ff000000000000000000000000000000000000000019169055565b603154600090610100900460ff16156138b0576001600160a01b03851660009081526009602052604090205460ff16806136ea57506001600160a01b03841660009081526009602052604090205460ff165b156137375760405162461bcd60e51b815260206004820152600960248201527f52656a65637465642e00000000000000000000000000000000000000000000006044820152606401610cbf565b60315462010000900460ff166137e7576137518585613d20565b60315462010000900460ff1615801561376f575061376f8585613212565b156137e25760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060448201527f74696d652e0000000000000000000000000000000000000000000000000000006064820152608401610cbf565b6138b0565b600060325411801561381157506001600160a01b03851660009081526003602052604090205460ff165b801561382257506138228585613212565b156138b057603454603254613837904361481e565b10156138b0576001600160a01b0384166000908152600960205260408120805460ff19166001179055603580549161386e83614870565b90915550506040516001600160a01b03851681527f18e6e5ce5c121466e41a954e72765d1ea02b8e6919043b61f0dab08b4c6572e59060200160405180910390a15b60006138be86868686613e72565b60808101516001600160a01b0388166000908152600160205260409020549192506138e89161481e565b6001600160a01b038088166000908152600160205260408082209390935560608401519188168152919091205461391f91906146d7565b6001600160a01b0380871660009081526001602090815260408083209490945591891681526007909152205460ff16801561397357506001600160a01b03851660009081526007602052604090205460ff16155b156139ba576001600160a01b03861660009081526002602052604090205461399c90859061481e565b6001600160a01b038716600090815260026020526040902055613afa565b6001600160a01b03861660009081526007602052604090205460ff161580156139fb57506001600160a01b03851660009081526007602052604090205460ff165b15613a435780516001600160a01b038616600090815260026020526040902054613a2591906146d7565b6001600160a01b038616600090815260026020526040902055613afa565b6001600160a01b03861660009081526007602052604090205460ff168015613a8357506001600160a01b03851660009081526007602052604090205460ff165b15613afa576001600160a01b038616600090815260026020526040902054613aac90859061481e565b6001600160a01b0380881660009081526002602052604080822093909355835191881681529190912054613ae091906146d7565b6001600160a01b0386166000908152600260205260409020555b604081015115613b1257613b12868260400151614060565b60008160a001511180613b29575060008160200151115b15613b4057613b408160a00151826020015161412c565b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360000151604051613b8991815260200190565b60405180910390a350600195945050505050565b6023546022546000918291825b600854811015613cef57826001600060088481548110613bcc57613bcc6148d7565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180613c375750816002600060088481548110613c1057613c106148d7565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15613c4d57602354602254945094505050509091565b6001600060088381548110613c6457613c646148d7565b60009182526020808320909101546001600160a01b03168352820192909252604001902054613c93908461481e565b92506002600060088381548110613cac57613cac6148d7565b60009182526020808320909101546001600160a01b03168352820192909252604001902054613cdb908361481e565b915080613ce781614870565b915050613baa565b50602254602354613d0091906146ef565b821015613d17576023546022549350935050509091565b90939092509050565b60315462010000900460ff1615613d9f5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610cbf565b613da98282613212565b158015613dc357506026546001600160a01b038281169116145b15611052576001600160a01b0382166000908152600a602052604090819020805460ff191660019081179091556031805462ff000019166201000017905542603355602a80547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff16600160a81b17905590517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15991613e6691901515815260200190565b60405180910390a15050565b613eab6040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b613ee46040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6000613eee6131ef565b9050613efa81866147ff565b6080830152831561400a576001600160a01b03861660009081526003602052604090205460ff1615613f3d57601454600e55601554600f55601654601055613f88565b6001600160a01b03871660009081526003602052604090205460ff1615613f7557601154600e55601254600f55601354601055613f88565b601754600e55601854600f556019546010555b601f54600e54613f9890876147ff565b613fa291906146ef565b6020830152601f54601054600f54613fba91906146d7565b613fc490876147ff565b613fce91906146ef565b604083018190526020830151613fe491906146d7565b613fee908661481e565b825260208201516140009082906147ff565b60a0830152614023565b6000602083018190526040830181905285835260a08301525b80826040015161403391906147ff565b8260a0015161404291906146d7565b8260800151614051919061481e565b60608301525095945050505050565b600061406a6131ef565b9050600061407882846147ff565b306000908152600160205260409020549091506140969082906146d7565b3060009081526001602090815260408083209390935560079052205460ff16156140e657306000908152600260205260409020546140d59084906146d7565b306000908152600260205260409020555b60405183815230906001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350505050565b8160235461413a919061481e565b60235560245461414b9082906146d7565b6024555050565b600082601f83011261416357600080fd5b81356020614178614173836146b3565b614682565b80838252828201915082860187848660051b890101111561419857600080fd5b60005b858110156141c05781356141ae81614903565b8452928401929084019060010161419b565b5090979650505050505050565b600082601f8301126141de57600080fd5b813560206141ee614173836146b3565b80838252828201915082860187848660051b890101111561420e57600080fd5b60005b858110156141c057813584529284019290840190600101614211565b8035801515811461423d57600080fd5b919050565b60006020828403121561425457600080fd5b81356113d481614903565b60006020828403121561427157600080fd5b81516113d481614903565b600080600080600060a0868803121561429457600080fd5b853561429f81614903565b9450602086013567ffffffffffffffff808211156142bc57600080fd5b6142c889838a01614152565b955060408801359150808211156142de57600080fd5b506142eb888289016141cd565b935050606086013560ff8116811461430257600080fd5b949793965091946080013592915050565b6000806040838503121561432657600080fd5b823561433181614903565b9150602083013561434181614903565b809150509250929050565b60008060006060848603121561436157600080fd5b833561436c81614903565b9250602084013561437c81614903565b929592945050506040919091013590565b600080604083850312156143a057600080fd5b82356143ab81614903565b91506143b96020840161422d565b90509250929050565b600080604083850312156143d557600080fd5b82356143e081614903565b946020939093013593505050565b6000806040838503121561440157600080fd5b823567ffffffffffffffff8082111561441957600080fd5b61442586838701614152565b9350602085013591508082111561443b57600080fd5b50614448858286016141cd565b9150509250929050565b6000806040838503121561446557600080fd5b823567ffffffffffffffff81111561447c57600080fd5b61448885828601614152565b9250506143b96020840161422d565b6000602082840312156144a957600080fd5b6113d48261422d565b6000806000606084860312156144c757600080fd5b6144d08461422d565b92506144de6020850161422d565b91506144ec6040850161422d565b90509250925092565b60006020828403121561450757600080fd5b5035919050565b6000806040838503121561452157600080fd5b50508035926020909101359150565b60008060006060848603121561454557600080fd5b505081359360208301359350604090920135919050565b60008060006060848603121561457157600080fd5b8351925060208401519150604084015190509250925092565b600080600080608085870312156145a057600080fd5b5050823594602084013594506040840135936060013592509050565b600060208083528351808285015260005b818110156145e9578581018301518582016040015282016145cd565b818111156145fb576000604083870101525b50601f01601f1916929092016040019392505050565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156146615784516001600160a01b03168352938301939183019160010161463c565b50506001600160a01b03969096166060850152505050608001529392505050565b604051601f8201601f1916810167ffffffffffffffff811182821017156146ab576146ab6148ed565b604052919050565b600067ffffffffffffffff8211156146cd576146cd6148ed565b5060051b60200190565b600082198211156146ea576146ea6148ab565b500190565b60008261470c57634e487b7160e01b600052601260045260246000fd5b500490565b600181815b8085111561474c578160001904821115614732576147326148ab565b8085161561473f57918102915b93841c9390800290614716565b509250929050565b60006113d460ff84168360008261476d57506001610d3e565b8161477a57506000610d3e565b8160018114614790576002811461479a576147b6565b6001915050610d3e565b60ff8411156147ab576147ab6148ab565b50506001821b610d3e565b5060208310610133831016604e8410600b84101617156147d9575081810a610d3e565b6147e38383614711565b80600019048211156147f7576147f76148ab565b029392505050565b6000816000190483118215151615614819576148196148ab565b500290565b600082821015614830576148306148ab565b500390565b600181811c9082168061484957607f821691505b6020821081141561486a57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415614884576148846148ab565b5060010190565b600060ff821660ff8114156148a2576148a26148ab565b60010192915050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146110d857600080fdfe4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a26469706673582212209d2abaa7c086bbd77cee8f9df0cd5819e9a9d4898e8c97b1232a4fcb149bb53b64736f6c63430008070033

Deployed Bytecode

0x6080604052600436106103fd5760003560e01c80636639dd931161020d578063a9059cbb11610128578063dc44b6a0116100bb578063ea08d30b1161008a578063eec2744e1161006f578063eec2744e14610b93578063f6540ec714610bb3578063fb78680d14610bc957600080fd5b8063ea08d30b14610b5d578063eafb5a3c14610b7357600080fd5b8063dc44b6a014610acb578063dd62ed3e14610ae1578063e79d416014610b27578063e7c281d614610b3d57600080fd5b8063c5d24189116100f7578063c5d2418914610a69578063c860795214610a7f578063d038b07e14610a95578063d9e6646014610aab57600080fd5b8063a9059cbb146109f3578063b6f8f8dc14610a13578063bbcea6bf14610a33578063c49b9a8014610a4957600080fd5b806388790a68116101a05780638a8c523c1161016f5780638a8c523c146109a95780638da5cb5b1461095257806395d89b41146109be578063a457c2d7146109d357600080fd5b806388790a681461090357806388f8202014610919578063893d20e81461095257806389fd9bc11461097057600080fd5b80636ed18aae116101dc5780636ed18aae1461088e57806370a08231146108ae578063715018a6146108ce57806380c581d1146108e357600080fd5b80636639dd93146108225780636bc87c3a146108425780636c6d9fa1146108585780636cbdd5e31461087857600080fd5b8063313ce567116103185780634fb2e45d116102ab578063575f18e51161027a5780635d098b381161025f5780635d098b38146107cc57806364038409146107ec5780636612e66f1461080257600080fd5b8063575f18e51461078c57806358fa63ca146107ac57600080fd5b80634fb2e45d146106f357806350a8e016146107135780635342acb414610733578063571ac8b01461076c57600080fd5b8063452ed4f1116102e7578063452ed4f11461068657806345e8c85c146106a65780634a74bb02146106bc5780634ef3cce5146106dd57600080fd5b8063313ce5671461060f578063384f6b511461063057806339509351146106465780633f3cf56c1461066657600080fd5b806318160ddd11610390578063260039571161035f578063260039571461058f5780632610eaca146105af5780632d838119146105cf57806330e30e55146105ef57600080fd5b806318160ddd1461052f57806320800a001461054457806322976e0d1461055957806323b872dd1461056f57600080fd5b8063095ea7b3116103cc578063095ea7b3146104aa57806313114a9d146104da57806313e46192146104f957806315639c1b1461051957600080fd5b806303fd2a451461040957806306fdde03146104465780630758d92414610468578063092316021461048857600080fd5b3661040457005b600080fd5b34801561041557600080fd5b50602854610429906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561045257600080fd5b5061045b610be9565b60405161043d91906145bc565b34801561047457600080fd5b50602554610429906001600160a01b031681565b34801561049457600080fd5b506104a86104a33660046144f5565b610c7b565b005b3480156104b657600080fd5b506104ca6104c53660046143c2565b610d2d565b604051901515815260200161043d565b3480156104e657600080fd5b506024545b60405190815260200161043d565b34801561050557600080fd5b506104a861051436600461438d565b610d44565b34801561052557600080fd5b506104eb600e5481565b34801561053b57600080fd5b506022546104eb565b34801561055057600080fd5b506104a8611056565b34801561056557600080fd5b506104eb60105481565b34801561057b57600080fd5b506104ca61058a36600461434c565b6110db565b34801561059b57600080fd5b506104a86105aa36600461450e565b61112e565b3480156105bb57600080fd5b506104a86105ca3660046143ee565b61123f565b3480156105db57600080fd5b506104eb6105ea3660046144f5565b611344565b3480156105fb57600080fd5b506104a861060a36600461427c565b6113db565b34801561061b57600080fd5b506020805460405160ff90911681520161043d565b34801561063c57600080fd5b506104eb601d5481565b34801561065257600080fd5b506104ca6106613660046143c2565b611a58565b34801561067257600080fd5b506104a861068136600461450e565b611a8f565b34801561069257600080fd5b50602654610429906001600160a01b031681565b3480156106b257600080fd5b506104eb60175481565b3480156106c857600080fd5b50602a546104ca90600160a81b900460ff1681565b3480156106e957600080fd5b506104eb601e5481565b3480156106ff57600080fd5b506104a861070e366004614242565b611ba0565b34801561071f57600080fd5b506031546104ca9062010000900460ff1681565b34801561073f57600080fd5b506104ca61074e366004614242565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561077857600080fd5b506104ca610787366004614242565b611e07565b34801561079857600080fd5b506104a86107a7366004614530565b611e15565b3480156107b857600080fd5b50602954610429906001600160a01b031681565b3480156107d857600080fd5b506104a86107e7366004614242565b611eb9565b3480156107f857600080fd5b506104eb602c5481565b34801561080e57600080fd5b506104a861081d36600461438d565b611f81565b34801561082e57600080fd5b506104a861083d36600461450e565b611ff4565b34801561084e57600080fd5b506104eb600f5481565b34801561086457600080fd5b506104a8610873366004614530565b612047565b34801561088457600080fd5b506104eb60195481565b34801561089a57600080fd5b506104a86108a9366004614452565b6120eb565b3480156108ba57600080fd5b506104eb6108c9366004614242565b61219a565b3480156108da57600080fd5b506104a86121f9565b3480156108ef57600080fd5b506104a86108fe36600461438d565b612296565b34801561090f57600080fd5b506104eb60155481565b34801561092557600080fd5b506104ca610934366004614242565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561095e57600080fd5b506000546001600160a01b0316610429565b34801561097c57600080fd5b506104ca61098b366004614242565b6001600160a01b031660009081526009602052604090205460ff1690565b3480156109b557600080fd5b506104a8612397565b3480156109ca57600080fd5b5061045b612487565b3480156109df57600080fd5b506104ca6109ee3660046143c2565b612496565b3480156109ff57600080fd5b506104ca610a0e3660046143c2565b6124cd565b348015610a1f57600080fd5b506104a8610a2e3660046144b2565b6124da565b348015610a3f57600080fd5b506104eb60145481565b348015610a5557600080fd5b506104a8610a64366004614497565b61255e565b348015610a7557600080fd5b506104eb60135481565b348015610a8b57600080fd5b506104eb60165481565b348015610aa157600080fd5b506104eb60115481565b348015610ab757600080fd5b50602754610429906001600160a01b031681565b348015610ad757600080fd5b506104eb60125481565b348015610aed57600080fd5b506104eb610afc366004614313565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610b3357600080fd5b506104eb60355481565b348015610b4957600080fd5b506104a8610b58366004614530565b612619565b348015610b6957600080fd5b506104eb60185481565b348015610b7f57600080fd5b506104a8610b8e366004614242565b6126bd565b348015610b9f57600080fd5b506104a8610bae36600461438d565b612a95565b348015610bbf57600080fd5b506104eb602e5481565b348015610bd557600080fd5b506104a8610be436600461458a565b612b08565b6060600c8054610bf890614835565b80601f0160208091040260200160405190810160405280929190818152602001828054610c2490614835565b8015610c715780601f10610c4657610100808354040283529160200191610c71565b820191906000526020600020905b815481529060010190602001808311610c5457829003601f168201915b5050505050905090565b6000546001600160a01b03163314610cc85760405162461bcd60e51b8152602060048201819052602482015260008051602061491983398151915260448201526064015b60405180910390fd5b604b811015610d195760405162461bcd60e51b815260206004820152601060248201527f796f75206675636b696e67206a656574000000000000000000000000000000006044820152606401610cbf565b610d2781633b9aca006147ff565b60375550565b6000610d3a338484612b8f565b5060015b92915050565b6000546001600160a01b03163314610d8c5760405162461bcd60e51b815260206004820181905260248201526000805160206149198339815191526044820152606401610cbf565b60018115151415610ec1576001600160a01b03821660009081526007602052604090205460ff1615610e005760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401610cbf565b6001600160a01b03821660009081526001602052604090205415610e5a576001600160a01b038216600090815260016020526040902054610e4090611344565b6001600160a01b0383166000908152600260205260409020555b506001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b80611052576001600160a01b03821660009081526007602052604090205460ff16610f2e5760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e000000006044820152606401610cbf565b60005b60085481101561105057826001600160a01b031660088281548110610f5857610f586148d7565b6000918252602090912001546001600160a01b0316141561103e5760088054610f839060019061481e565b81548110610f9357610f936148d7565b600091825260209091200154600880546001600160a01b039092169183908110610fbf57610fbf6148d7565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559185168152600282526040808220829055600790925220805460ff191690556008805480611017576110176148c1565b600082815260209020810160001990810180546001600160a01b0319169055019055611050565b8061104881614870565b915050610f31565b505b5050565b6000546001600160a01b0316331461109e5760405162461bcd60e51b815260206004820181905260248201526000805160206149198339815191526044820152606401610cbf565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f193505050501580156110d8573d6000803e3d6000fd5b50565b60006110e8848484612ce7565b506001600160a01b03841660009081526005602090815260408083203380855292529091205461112491869161111f90869061481e565b612b8f565b5060019392505050565b6000546001600160a01b031633146111765760405162461bcd60e51b815260206004820181905260248201526000805160206149198339815191526044820152606401610cbf565b6000818360225461118791906147ff565b61119191906146ef565b90506103e86022546111a391906146ef565b8110156112185760405162461bcd60e51b815260206004820152603260248201527f4d61782057616c6c657420616d74206d7573742062652061626f766520302e3160448201527f25206f6620746f74616c20737570706c792e00000000000000000000000000006064820152608401610cbf565b602d819055600b54829061122d9085906147ff565b61123791906146ef565b602e55505050565b80518251146112905760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610cbf565b60005b82518160ff16101561105057818160ff16815181106112b4576112b46148d7565b60200260200101516112c53361219a565b10156112d057600080fd5b61133133848360ff16815181106112e9576112e96148d7565b60209081029190910181015190546113059060ff16600a614754565b858560ff168151811061131a5761131a6148d7565b602002602001015161132c91906147ff565b612ce7565b508061133c8161488b565b915050611293565b60006023548211156113be5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201527f65666c656374696f6e73000000000000000000000000000000000000000000006064820152608401610cbf565b60006113c86131ef565b90506113d481846146ef565b9392505050565b6000546001600160a01b031633146114235760405162461bcd60e51b815260206004820181905260248201526000805160206149198339815191526044820152606401610cbf565b603a5460ff161561143357600080fd5b60c884511061144157600080fd5b825184511461144f57600080fd5b60345415801561145f5750603754155b8015611474575060315462010000900460ff16155b61147d57600080fd5b604b8110156114ce5760405162461bcd60e51b815260206004820152601060248201527f796f75206675636b696e67206a656574000000000000000000000000000000006044820152606401610cbf565b602a80546001600160a01b038088166001600160a01b0319928316179092556027546025805490921692169182179055604080517fc45a0155000000000000000000000000000000000000000000000000000000008152905163c45a015591600480820192602092909190829003018186803b15801561154d57600080fd5b505afa158015611561573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611585919061425f565b6001600160a01b031663c9c65396602560009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156115e157600080fd5b505afa1580156115f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611619919061425f565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152306024820152604401602060405180830381600087803b15801561167857600080fd5b505af115801561168c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116b0919061425f565b602680546001600160a01b0319166001600160a01b039283169081179091556000908152600360209081526040808320805460ff1916600117905530835260058252808320602554909416835292905220600019905560ff821660345561171b81633b9aca006147ff565b603755602254620186a090611732906107d06147ff565b61173c91906146ef565b602b55600b54620186a090611753906107d06147ff565b61175d91906146ef565b602c556022546103e8906117729060146147ff565b61177c91906146ef565b602d55600b546103e8906117919060146147ff565b61179b91906146ef565b602e55602254612710906117b09060056147ff565b6117ba91906146ef565b602f556022546103e8906117cf9060056147ff565b6117d991906146ef565b6030556027546117f4906001600160a01b0316600019610d2d565b50603a805460ff1916600190811790915560235490600061181d6000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020556118496000546001600160a01b031690565b6029546022546040519081526001600160a01b0392831692909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36025546118ac9030906001600160a01b0316600019612b8f565b60005b845181101561193c576020546000906118cc9060ff16600a614754565b8583815181106118de576118de6148d7565b60200260200101516118f091906147ff565b90506119276119076000546001600160a01b031690565b878481518110611919576119196148d7565b602002602001015183612ce7565b5050808061193490614870565b9150506118af565b506119686119526000546001600160a01b031690565b3061132c6108c96000546001600160a01b031690565b506025546001600160a01b031663f305d71947306119858161219a565b60008061199a6000546001600160a01b031690565b60405160e088901b7fffffffff000000000000000000000000000000000000000000000000000000001681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b158015611a1557600080fd5b505af1158015611a29573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611a4e919061455c565b5050505050505050565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610d3a91859061111f9086906146d7565b6000546001600160a01b03163314611ad75760405162461bcd60e51b815260206004820181905260248201526000805160206149198339815191526044820152606401610cbf565b60008183602254611ae891906147ff565b611af291906146ef565b90506103e8602254611b0491906146ef565b811015611b795760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610cbf565b602b819055600b548290611b8e9085906147ff565b611b9891906146ef565b602c55505050565b6000546001600160a01b03163314611be85760405162461bcd60e51b815260206004820181905260248201526000805160206149198339815191526044820152606401610cbf565b6001600160a01b038116611c645760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610cbf565b6028546001600160a01b0382811691161415611ce85760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610cbf565b60008054611d01916001600160a01b0390911690611f81565b611d0c816001611f81565b611d17816001610d44565b600054602a546001600160a01b0390811691161415611d4c57602a80546001600160a01b0319166001600160a01b0383161790555b600054611d61906001600160a01b031661219a565b600080546001600160a01b039081168252600560209081526040808420868416855290915282209290925580549091611d9a911661219a565b1115611dbc57600054611dba906001600160a01b03168261132c8261219a565b505b600080546001600160a01b0319166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000610d3e82600019610d2d565b6000546001600160a01b03163314611e5d5760405162461bcd60e51b815260206004820181905260248201526000805160206149198339815191526044820152606401610cbf565b601a548311158015611e715750601b548211155b8015611e7f5750601c548111155b611e8857600080fd5b610d7a81611e9684866146d7565b611ea091906146d7565b1115611eab57600080fd5b601792909255601855601955565b6000546001600160a01b03163314611f015760405162461bcd60e51b815260206004820181905260248201526000805160206149198339815191526044820152606401610cbf565b602a546001600160a01b0382811691161415611f5f5760405162461bcd60e51b815260206004820152601360248201527f57616c6c657420616c72656164792073657421000000000000000000000000006044820152606401610cbf565b602a80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611fc95760405162461bcd60e51b815260206004820181905260248201526000805160206149198339815191526044820152606401610cbf565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461203c5760405162461bcd60e51b815260206004820181905260248201526000805160206149198339815191526044820152606401610cbf565b601d91909155601e55565b6000546001600160a01b0316331461208f5760405162461bcd60e51b815260206004820181905260248201526000805160206149198339815191526044820152606401610cbf565b601a5483111580156120a35750601b548211155b80156120b15750601c548111155b6120ba57600080fd5b610d7a816120c884866146d7565b6120d291906146d7565b11156120dd57600080fd5b601192909255601255601355565b6000546001600160a01b031633146121335760405162461bcd60e51b815260206004820181905260248201526000805160206149198339815191526044820152606401610cbf565b60005b8251811015611050578160096000858481518110612156576121566148d7565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061219281614870565b915050612136565b6001600160a01b03811660009081526007602052604081205460ff16156121d757506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610d3e90611344565b6000546001600160a01b031633146122415760405162461bcd60e51b815260206004820181905260248201526000805160206149198339815191526044820152606401610cbf565b6000805461225a916001600160a01b0390911690611f81565b600080546001600160a01b031916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b031633146122de5760405162461bcd60e51b815260206004820181905260248201526000805160206149198339815191526044820152606401610cbf565b8061230557506001600160a01b03166000908152600360205260409020805460ff19169055565b6004541561236c5762093a806004544261231f919061481e565b1161236c5760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f74207365742061206e657720706169722074686973207765656b216044820152606401610cbf565b6001600160a01b0382166000908152600360205260409020805460ff19166001179055426004555050565b6000546001600160a01b031633146123df5760405162461bcd60e51b815260206004820181905260248201526000805160206149198339815191526044820152606401610cbf565b60315460ff16156124325760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610cbf565b61243d306001610d44565b602654612454906001600160a01b03166001610d44565b600360345411156124735761246b436101f46146d7565b603255612478565b436032555b6031805460ff19166001179055565b6060600d8054610bf890614835565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610d3a91859061111f90869061481e565b6000611124338484612ce7565b6000546001600160a01b031633146125225760405162461bcd60e51b815260206004820181905260248201526000805160206149198339815191526044820152606401610cbf565b603180549315156101000261ff0019909416939093179092556036805491151560ff199283161790556038805492151592909116919091179055565b6000546001600160a01b031633146125a65760405162461bcd60e51b815260206004820181905260248201526000805160206149198339815191526044820152606401610cbf565b602a8054821515600160a81b027fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff9091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061260e90831515815260200190565b60405180910390a150565b6000546001600160a01b031633146126615760405162461bcd60e51b815260206004820181905260248201526000805160206149198339815191526044820152606401610cbf565b601a5483111580156126755750601b548211155b80156126835750601c548111155b61268c57600080fd5b610d7a8161269a84866146d7565b6126a491906146d7565b11156126af57600080fd5b601492909255601555601655565b6000546001600160a01b031633146127055760405162461bcd60e51b815260206004820181905260248201526000805160206149198339815191526044820152606401610cbf565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561274557600080fd5b505afa158015612759573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061277d919061425f565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156127c557600080fd5b505afa1580156127d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127fd919061425f565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b15801561285b57600080fd5b505afa15801561286f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612893919061425f565b90506001600160a01b038116612a5157816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156128dc57600080fd5b505afa1580156128f0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612914919061425f565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561295c57600080fd5b505afa158015612970573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612994919061425f565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156129f457600080fd5b505af1158015612a08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a2c919061425f565b602680546001600160a01b0319166001600160a01b0392909216919091179055612a6d565b602680546001600160a01b0319166001600160a01b0383161790555b602580546001600160a01b0319166001600160a01b0384161790556110503084600019612b8f565b6000546001600160a01b03163314612add5760405162461bcd60e51b815260206004820181905260248201526000805160206149198339815191526044820152606401610cbf565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314612b505760405162461bcd60e51b815260206004820181905260248201526000805160206149198339815191526044820152606401610cbf565b8284602254612b5f91906147ff565b612b6991906146ef565b602f556022548190612b7c9084906147ff565b612b8691906146ef565b60305550505050565b6001600160a01b038316612c0a5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610cbf565b6001600160a01b038216612c865760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610cbf565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b038416612d655760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610cbf565b6001600160a01b038316612de15760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610cbf565b60008211612e575760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610cbf565b60365460ff1615612eb4576037543a1115612eb45760405162461bcd60e51b815260206004820152601860248201527f4761732070726963652065786365656473206c696d69742e00000000000000006044820152606401610cbf565b612ebe8484613212565b156131065760315460ff16612f155760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610cbf565b60385460ff1615612fc7576001600160a01b03841660009081526003602052604090205460ff1615612f86576001600160a01b038316600090815260396020526040902054431415612f6657600080fd5b6001600160a01b0383166000908152603960205260409020439055612fc7565b6001600160a01b038416600090815260396020526040902054431415612fab57600080fd5b6001600160a01b03841660009081526039602052604090204390555b602b5482111561303f5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610cbf565b6027546001600160a01b0384811691161480159061307657506001600160a01b03831660009081526003602052604090205460ff16155b1561310657602d54826130888561219a565b61309291906146d7565b11156131065760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610cbf565b6001600160a01b03841660009081526006602052604090205460019060ff168061314857506001600160a01b03841660009081526006602052604090205460ff165b15613151575060005b6001600160a01b03841660009081526003602052604090205460ff16156131da57602a5474010000000000000000000000000000000000000000900460ff161580156131a65750602a54600160a81b900460ff165b156131da5760006131b63061219a565b9050602f5481106131d85760305481106131cf57506030545b6131d8816132d2565b505b6131e685858584613698565b95945050505050565b60008060006131fc613b9d565b909250905061320b81836146ef565b9250505090565b600080546001600160a01b0384811691161480159061323f57506000546001600160a01b03838116911614155b801561326457506001600160a01b0382166000908152600a602052604090205460ff16155b801561328957506001600160a01b0383166000908152600a602052604090205460ff16155b80156132a357506028546001600160a01b03838116911614155b80156132b757506001600160a01b03821615155b80156113d457506001600160a01b0383163014159392505050565b602a805474ff0000000000000000000000000000000000000000191674010000000000000000000000000000000000000000179055601e54601d5461331791906146d7565b61332057613677565b60006002601e54601d5461333491906146d7565b601d5461334190856147ff565b61334b91906146ef565b61335591906146ef565b90506000613363828461481e565b6040805160028082526060820183529293506000929091602083019080368337019050509050308160008151811061339d5761339d6148d7565b6001600160a01b03928316602091820292909201810191909152602554604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c4648926004808301939192829003018186803b15801561340a57600080fd5b505afa15801561341e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613442919061425f565b81600181518110613455576134556148d7565b6001600160a01b0392831660209182029290920101526025546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac947906134b4908590600090869030904290600401614611565b600060405180830381600087803b1580156134ce57600080fd5b505af11580156134e2573d6000803e3d6000fd5b5050505060006002601e54601d546134fa91906146d7565b601d5461350790476147ff565b61351191906146ef565b61351b91906146ef565b90508315613625576025546028546040517ff305d7190000000000000000000000000000000000000000000000000000000081523060048201526024810187905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c4016060604051808303818588803b1580156135a757600080fd5b505af11580156135bb573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906135e0919061455c565b505060408051868152602081018490529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561915060600160405180910390a15b6000613631858761481e565b111561367257602a546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015613670573d6000803e3d6000fd5b505b505050505b50602a805474ff000000000000000000000000000000000000000019169055565b603154600090610100900460ff16156138b0576001600160a01b03851660009081526009602052604090205460ff16806136ea57506001600160a01b03841660009081526009602052604090205460ff165b156137375760405162461bcd60e51b815260206004820152600960248201527f52656a65637465642e00000000000000000000000000000000000000000000006044820152606401610cbf565b60315462010000900460ff166137e7576137518585613d20565b60315462010000900460ff1615801561376f575061376f8585613212565b156137e25760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060448201527f74696d652e0000000000000000000000000000000000000000000000000000006064820152608401610cbf565b6138b0565b600060325411801561381157506001600160a01b03851660009081526003602052604090205460ff165b801561382257506138228585613212565b156138b057603454603254613837904361481e565b10156138b0576001600160a01b0384166000908152600960205260408120805460ff19166001179055603580549161386e83614870565b90915550506040516001600160a01b03851681527f18e6e5ce5c121466e41a954e72765d1ea02b8e6919043b61f0dab08b4c6572e59060200160405180910390a15b60006138be86868686613e72565b60808101516001600160a01b0388166000908152600160205260409020549192506138e89161481e565b6001600160a01b038088166000908152600160205260408082209390935560608401519188168152919091205461391f91906146d7565b6001600160a01b0380871660009081526001602090815260408083209490945591891681526007909152205460ff16801561397357506001600160a01b03851660009081526007602052604090205460ff16155b156139ba576001600160a01b03861660009081526002602052604090205461399c90859061481e565b6001600160a01b038716600090815260026020526040902055613afa565b6001600160a01b03861660009081526007602052604090205460ff161580156139fb57506001600160a01b03851660009081526007602052604090205460ff165b15613a435780516001600160a01b038616600090815260026020526040902054613a2591906146d7565b6001600160a01b038616600090815260026020526040902055613afa565b6001600160a01b03861660009081526007602052604090205460ff168015613a8357506001600160a01b03851660009081526007602052604090205460ff165b15613afa576001600160a01b038616600090815260026020526040902054613aac90859061481e565b6001600160a01b0380881660009081526002602052604080822093909355835191881681529190912054613ae091906146d7565b6001600160a01b0386166000908152600260205260409020555b604081015115613b1257613b12868260400151614060565b60008160a001511180613b29575060008160200151115b15613b4057613b408160a00151826020015161412c565b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360000151604051613b8991815260200190565b60405180910390a350600195945050505050565b6023546022546000918291825b600854811015613cef57826001600060088481548110613bcc57613bcc6148d7565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180613c375750816002600060088481548110613c1057613c106148d7565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15613c4d57602354602254945094505050509091565b6001600060088381548110613c6457613c646148d7565b60009182526020808320909101546001600160a01b03168352820192909252604001902054613c93908461481e565b92506002600060088381548110613cac57613cac6148d7565b60009182526020808320909101546001600160a01b03168352820192909252604001902054613cdb908361481e565b915080613ce781614870565b915050613baa565b50602254602354613d0091906146ef565b821015613d17576023546022549350935050509091565b90939092509050565b60315462010000900460ff1615613d9f5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610cbf565b613da98282613212565b158015613dc357506026546001600160a01b038281169116145b15611052576001600160a01b0382166000908152600a602052604090819020805460ff191660019081179091556031805462ff000019166201000017905542603355602a80547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff16600160a81b17905590517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15991613e6691901515815260200190565b60405180910390a15050565b613eab6040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b613ee46040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6000613eee6131ef565b9050613efa81866147ff565b6080830152831561400a576001600160a01b03861660009081526003602052604090205460ff1615613f3d57601454600e55601554600f55601654601055613f88565b6001600160a01b03871660009081526003602052604090205460ff1615613f7557601154600e55601254600f55601354601055613f88565b601754600e55601854600f556019546010555b601f54600e54613f9890876147ff565b613fa291906146ef565b6020830152601f54601054600f54613fba91906146d7565b613fc490876147ff565b613fce91906146ef565b604083018190526020830151613fe491906146d7565b613fee908661481e565b825260208201516140009082906147ff565b60a0830152614023565b6000602083018190526040830181905285835260a08301525b80826040015161403391906147ff565b8260a0015161404291906146d7565b8260800151614051919061481e565b60608301525095945050505050565b600061406a6131ef565b9050600061407882846147ff565b306000908152600160205260409020549091506140969082906146d7565b3060009081526001602090815260408083209390935560079052205460ff16156140e657306000908152600260205260409020546140d59084906146d7565b306000908152600260205260409020555b60405183815230906001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350505050565b8160235461413a919061481e565b60235560245461414b9082906146d7565b6024555050565b600082601f83011261416357600080fd5b81356020614178614173836146b3565b614682565b80838252828201915082860187848660051b890101111561419857600080fd5b60005b858110156141c05781356141ae81614903565b8452928401929084019060010161419b565b5090979650505050505050565b600082601f8301126141de57600080fd5b813560206141ee614173836146b3565b80838252828201915082860187848660051b890101111561420e57600080fd5b60005b858110156141c057813584529284019290840190600101614211565b8035801515811461423d57600080fd5b919050565b60006020828403121561425457600080fd5b81356113d481614903565b60006020828403121561427157600080fd5b81516113d481614903565b600080600080600060a0868803121561429457600080fd5b853561429f81614903565b9450602086013567ffffffffffffffff808211156142bc57600080fd5b6142c889838a01614152565b955060408801359150808211156142de57600080fd5b506142eb888289016141cd565b935050606086013560ff8116811461430257600080fd5b949793965091946080013592915050565b6000806040838503121561432657600080fd5b823561433181614903565b9150602083013561434181614903565b809150509250929050565b60008060006060848603121561436157600080fd5b833561436c81614903565b9250602084013561437c81614903565b929592945050506040919091013590565b600080604083850312156143a057600080fd5b82356143ab81614903565b91506143b96020840161422d565b90509250929050565b600080604083850312156143d557600080fd5b82356143e081614903565b946020939093013593505050565b6000806040838503121561440157600080fd5b823567ffffffffffffffff8082111561441957600080fd5b61442586838701614152565b9350602085013591508082111561443b57600080fd5b50614448858286016141cd565b9150509250929050565b6000806040838503121561446557600080fd5b823567ffffffffffffffff81111561447c57600080fd5b61448885828601614152565b9250506143b96020840161422d565b6000602082840312156144a957600080fd5b6113d48261422d565b6000806000606084860312156144c757600080fd5b6144d08461422d565b92506144de6020850161422d565b91506144ec6040850161422d565b90509250925092565b60006020828403121561450757600080fd5b5035919050565b6000806040838503121561452157600080fd5b50508035926020909101359150565b60008060006060848603121561454557600080fd5b505081359360208301359350604090920135919050565b60008060006060848603121561457157600080fd5b8351925060208401519150604084015190509250925092565b600080600080608085870312156145a057600080fd5b5050823594602084013594506040840135936060013592509050565b600060208083528351808285015260005b818110156145e9578581018301518582016040015282016145cd565b818111156145fb576000604083870101525b50601f01601f1916929092016040019392505050565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156146615784516001600160a01b03168352938301939183019160010161463c565b50506001600160a01b03969096166060850152505050608001529392505050565b604051601f8201601f1916810167ffffffffffffffff811182821017156146ab576146ab6148ed565b604052919050565b600067ffffffffffffffff8211156146cd576146cd6148ed565b5060051b60200190565b600082198211156146ea576146ea6148ab565b500190565b60008261470c57634e487b7160e01b600052601260045260246000fd5b500490565b600181815b8085111561474c578160001904821115614732576147326148ab565b8085161561473f57918102915b93841c9390800290614716565b509250929050565b60006113d460ff84168360008261476d57506001610d3e565b8161477a57506000610d3e565b8160018114614790576002811461479a576147b6565b6001915050610d3e565b60ff8411156147ab576147ab6148ab565b50506001821b610d3e565b5060208310610133831016604e8410600b84101617156147d9575081810a610d3e565b6147e38383614711565b80600019048211156147f7576147f76148ab565b029392505050565b6000816000190483118215151615614819576148196148ab565b500290565b600082821015614830576148306148ab565b500390565b600181811c9082168061484957607f821691505b6020821081141561486a57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415614884576148846148ab565b5060010190565b600060ff821660ff8114156148a2576148a26148ab565b60010192915050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146110d857600080fdfe4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a26469706673582212209d2abaa7c086bbd77cee8f9df0cd5819e9a9d4898e8c97b1232a4fcb149bb53b64736f6c63430008070033

Deployed Bytecode Sourcemap

13797:27360:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15794:64;;;;;;;;;;-1:-1:-1;15794:64:0;;;;-1:-1:-1;;;;;15794:64:0;;;;;;-1:-1:-1;;;;;8001:55:1;;;7983:74;;7971:2;7956:18;15794:64:0;;;;;;;;22825:71;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;15665:35::-;;;;;;;;;;-1:-1:-1;15665:35:0;;;;-1:-1:-1;;;;;15665:35:0;;;26383:154;;;;;;;;;;-1:-1:-1;26383:154:0;;;;;:::i;:::-;;:::i;:::-;;23501:161;;;;;;;;;;-1:-1:-1;23501:161:0;;;;;:::i;:::-;;:::i;:::-;;;9200:14:1;;9193:22;9175:41;;9163:2;9148:18;23501:161:0;9035:187:1;30655:87:0;;;;;;;;;;-1:-1:-1;30724:10:0;;30655:87;;;19449:25:1;;;19437:2;19422:18;30655:87:0;19303:177:1;29741:906:0;;;;;;;;;;-1:-1:-1;29741:906:0;;;;;:::i;:::-;;:::i;14578:30::-;;;;;;;;;;;;;;;;22578:83;;;;;;;;;;-1:-1:-1;22651:7:0;;22578:83;;40574:107;;;;;;;;;;;;;:::i;14656:34::-;;;;;;;;;;;;;;;;23798:266;;;;;;;;;;-1:-1:-1;23798:266:0;;;;;:::i;:::-;;:::i;28567:340::-;;;;;;;;;;-1:-1:-1;28567:340:0;;;;;:::i;:::-;;:::i;35748:373::-;;;;;;;;;;-1:-1:-1;35748:373:0;;;;;:::i;:::-;;:::i;31082:250::-;;;;;;;;;;-1:-1:-1;31082:250:0;;;;;:::i;:::-;;:::i;18686:1890::-;;;;;;;;;;-1:-1:-1;18686:1890:0;;;;;:::i;:::-;;:::i;22667:71::-;;;;;;;;;;-1:-1:-1;22726:9:0;;;22667:71;;22726:9;;;;20982:36:1;;20955:18;22667:71:0;20840:184:1;15319:36:0;;;;;;;;;;;;;;;;24072:215;;;;;;;;;;-1:-1:-1;24072:215:0;;;;;:::i;:::-;;:::i;28219:340::-;;;;;;;;;;-1:-1:-1;28219:340:0;;;;;:::i;:::-;;:::i;15707:21::-;;;;;;;;;;-1:-1:-1;15707:21:0;;;;-1:-1:-1;;;;;15707:21:0;;;14996:51;;;;;;;;;;;;;;;;16017:41;;;;;;;;;;-1:-1:-1;16017:41:0;;;;-1:-1:-1;;;16017:41:0;;;;;;15362:36;;;;;;;;;;;;;;;;21216:807;;;;;;;;;;-1:-1:-1;21216:807:0;;;;;:::i;:::-;;:::i;16369:36::-;;;;;;;;;;-1:-1:-1;16369:36:0;;;;;;;;;;;25649:123;;;;;;;;;;-1:-1:-1;25649:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;25737:27:0;25713:4;25737:27;;;:18;:27;;;;;;;;;25649:123;23670:120;;;;;;;;;;-1:-1:-1;23670:120:0;;;;;:::i;:::-;;:::i;27588:455::-;;;;;;;;;;-1:-1:-1;27588:455:0;;;;;:::i;:::-;;:::i;15865:64::-;;;;;;;;;;-1:-1:-1;15865:64:0;;;;-1:-1:-1;;;;;15865:64:0;;;29212:202;;;;;;;;;;-1:-1:-1;29212:202:0;;;;;:::i;:::-;;:::i;16106:28::-;;;;;;;;;;;;;;;;29601:132;;;;;;;;;;-1:-1:-1;29601:132:0;;;;;:::i;:::-;;:::i;28051:160::-;;;;;;;;;;-1:-1:-1;28051:160:0;;;;;:::i;:::-;;:::i;14615:34::-;;;;;;;;;;;;;;;;26698:435;;;;;;;;;;-1:-1:-1;26698:435:0;;;;;:::i;:::-;;:::i;15116:55::-;;;;;;;;;;;;;;;;25920:229;;;;;;;;;;-1:-1:-1;25920:229:0;;;;;:::i;:::-;;:::i;23120:198::-;;;;;;;;;;-1:-1:-1;23120:198:0;;;;;:::i;:::-;;:::i;22031:194::-;;;;;;;;;;;;;:::i;25089:424::-;;;;;;;;;;-1:-1:-1;25089:424:0;;;;;:::i;:::-;;:::i;14900:38::-;;;;;;;;;;;;;;;;25521:120;;;;;;;;;;-1:-1:-1;25521:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;25613:20:0;25589:4;25613:20;;;:11;:20;;;;;;;;;25521:120;22902:71;;;;;;;;;;-1:-1:-1;22945:7:0;21194:6;-1:-1:-1;;;;;21194:6:0;22902:71;;25780:132;;;;;;;;;;-1:-1:-1;25780:132:0;;;;;:::i;:::-;-1:-1:-1;;;;;25873:31:0;25849:4;25873:31;;;:22;:31;;;;;;;;;25780:132;35343:397;;;;;;;;;;;;;:::i;22744:75::-;;;;;;;;;;;;;:::i;24295:225::-;;;;;;;;;;-1:-1:-1;24295:225:0;;;;;:::i;:::-;;:::i;23326:167::-;;;;;;;;;;-1:-1:-1;23326:167:0;;;;;:::i;:::-;;:::i;26157:218::-;;;;;;;;;;-1:-1:-1;26157:218:0;;;;;:::i;:::-;;:::i;14859:34::-;;;;;;;;;;;;;;;;29422:171;;;;;;;;;;-1:-1:-1;29422:171:0;;;;;:::i;:::-;;:::i;14803:47::-;;;;;;;;;;;;;;;;14945:38;;;;;;;;;;;;;;;;14699:43;;;;;;;;;;;;;;;;15756:29;;;;;;;;;;-1:-1:-1;15756:29:0;;;;-1:-1:-1;;;;;15756:29:0;;;14749:47;;;;;;;;;;;;;;;;22979:133;;;;;;;;;;-1:-1:-1;22979:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;23081:19:0;;;23063:7;23081:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;22979:133;16530:32;;;;;;;;;;;;;;;;27141:439;;;;;;;;;;-1:-1:-1;27141:439:0;;;;;:::i;:::-;;:::i;15054:55::-;;;;;;;;;;;;;;;;24528:553;;;;;;;;;;-1:-1:-1;24528:553:0;;;;;:::i;:::-;;:::i;26545:141::-;;;;;;;;;;-1:-1:-1;26545:141:0;;;;;:::i;:::-;;:::i;16180:30::-;;;;;;;;;;;;;;;;28915:289;;;;;;;;;;-1:-1:-1;28915:289:0;;;;;:::i;:::-;;:::i;22825:71::-;22864:13;22888:5;22881:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22825:71;:::o;26383:154::-;17346:6;;-1:-1:-1;;;;;17346:6:0;5783:10;17346:22;17338:67;;;;-1:-1:-1;;;17338:67:0;;16790:2:1;17338:67:0;;;16772:21:1;;;16809:18;;;16802:30;-1:-1:-1;;;;;;;;;;;16848:18:1;;;16841:62;16920:18;;17338:67:0;;;;;;;;;26467:2:::1;26460:3;:9;;26452:38;;;::::0;-1:-1:-1;;;26452:38:0;;14583:2:1;26452:38:0::1;::::0;::::1;14565:21:1::0;14622:2;14602:18;;;14595:30;14661:18;14641;;;14634:46;14697:18;;26452:38:0::1;14381:340:1::0;26452:38:0::1;26517:12;:3:::0;26523:6:::1;26517:12;:::i;:::-;26501:13;:28:::0;-1:-1:-1;26383:154:0:o;23501:161::-;23576:4;23593:39;5783:10;23616:7;23625:6;23593:8;:39::i;:::-;-1:-1:-1;23650:4:0;23501:161;;;;;:::o;29741:906::-;17346:6;;-1:-1:-1;;;;;17346:6:0;5783:10;17346:22;17338:67;;;;-1:-1:-1;;;17338:67:0;;16790:2:1;17338:67:0;;;16772:21:1;;;16809:18;;;16802:30;-1:-1:-1;;;;;;;;;;;16848:18:1;;;16841:62;16920:18;;17338:67:0;16588:356:1;17338:67:0;29846:4:::1;29835:15:::0;::::1;;;29831:809;;;-1:-1:-1::0;;;;;29876:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;29875:21;29867:62;;;::::0;-1:-1:-1;;;29867:62:0;;15276:2:1;29867:62:0::1;::::0;::::1;15258:21:1::0;15315:2;15295:18;;;15288:30;15354;15334:18;;;15327:58;15402:18;;29867:62:0::1;15074:352:1::0;29867:62:0::1;-1:-1:-1::0;;;;;29947:16:0;::::1;29966:1;29947:16:::0;;;:7:::1;:16;::::0;;;;;:20;29944:116:::1;;-1:-1:-1::0;;;;;30027:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;30007:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;29988:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;29944:116:::1;-1:-1:-1::0;;;;;;30074:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;30074:27:0::1;30097:4;30074:27:::0;;::::1;::::0;;;30116:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;30116:23:0::1;::::0;;::::1;::::0;;29741:906::o;29831:809::-:1;30161:16:::0;30157:483:::1;;-1:-1:-1::0;;;;;30202:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;30194:61;;;::::0;-1:-1:-1;;;30194:61:0;;12624:2:1;30194:61:0::1;::::0;::::1;12606:21:1::0;12663:2;12643:18;;;12636:30;12702;12682:18;;;12675:58;12750:18;;30194:61:0::1;12422:352:1::0;30194:61:0::1;30275:9;30270:359;30294:9;:16:::0;30290:20;::::1;30270:359;;;30356:7;-1:-1:-1::0;;;;;30340:23:0::1;:9;30350:1;30340:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;30340:12:0::1;:23;30336:278;;;30403:9;30413:16:::0;;:20:::1;::::0;30432:1:::1;::::0;30413:20:::1;:::i;:::-;30403:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;30388:9:::1;:12:::0;;-1:-1:-1;;;;;30403:31:0;;::::1;::::0;30398:1;;30388:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;30388:46:0::1;-1:-1:-1::0;;;;;30388:46:0;;::::1;;::::0;;30457:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;30500:11:::1;:20:::0;;;;:28;;-1:-1:-1;;30500:28:0::1;::::0;;30551:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;30551:15:0;;;;;-1:-1:-1;;;;;;30551:15:0::1;::::0;;;;;30589:5:::1;;30336:278;30312:3:::0;::::1;::::0;::::1;:::i;:::-;;;;30270:359;;;;30157:483;29741:906:::0;;:::o;40574:107::-;17346:6;;-1:-1:-1;;;;;17346:6:0;5783:10;17346:22;17338:67;;;;-1:-1:-1;;;17338:67:0;;16790:2:1;17338:67:0;;;16772:21:1;;;16809:18;;;16802:30;-1:-1:-1;;;;;;;;;;;16848:18:1;;;16841:62;16920:18;;17338:67:0;16588:356:1;17338:67:0;21167:7;21194:6;;40625:48:::1;::::0;-1:-1:-1;;;;;21194:6:0;;;;40651:21:::1;40625:48:::0;::::1;;;::::0;40651:21;;40625:48;21167:7;40625:48;40651:21;21194:6;40625:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;40574:107::o:0;23798:266::-;23896:4;23913:36;23923:6;23931:9;23942:6;23913:9;:36::i;:::-;-1:-1:-1;;;;;;23991:19:0;;;;;;:11;:19;;;;;;;;5783:10;23991:33;;;;;;;;;23960:74;;23969:6;;23991:42;;24027:6;;23991:42;:::i;:::-;23960:8;:74::i;:::-;-1:-1:-1;24052:4:0;23798:266;;;;;:::o;28567:340::-;17346:6;;-1:-1:-1;;;;;17346:6:0;5783:10;17346:22;17338:67;;;;-1:-1:-1;;;17338:67:0;;16790:2:1;17338:67:0;;;16772:21:1;;;16809:18;;;16802:30;-1:-1:-1;;;;;;;;;;;16848:18:1;;;16841:62;16920:18;;17338:67:0;16588:356:1;17338:67:0;28657:13:::1;28695:7;28684;28674;;:17;;;;:::i;:::-;28673:29;;;;:::i;:::-;28657:45;;28741:4;28731:7;;:14;;;;:::i;:::-;28721:5;:25;;28713:88;;;::::0;-1:-1:-1;;;28713:88:0;;13811:2:1;28713:88:0::1;::::0;::::1;13793:21:1::0;13850:2;13830:18;;;13823:30;13889:34;13869:18;;;13862:62;13960:20;13940:18;;;13933:48;13998:19;;28713:88:0::1;13609:414:1::0;28713:88:0::1;28812:14;:22:::0;;;28864:14:::1;::::0;28892:7;;28864:24:::1;::::0;28881:7;;28864:24:::1;:::i;:::-;28863:36;;;;:::i;:::-;28845:15;:54:::0;-1:-1:-1;;;28567:340:0:o;35748:373::-;35873:7;:14;35854:8;:15;:33;35846:67;;;;-1:-1:-1;;;35846:67:0;;17561:2:1;35846:67:0;;;17543:21:1;17600:2;17580:18;;;17573:30;17639:23;17619:18;;;17612:51;17680:18;;35846:67:0;17359:345:1;35846:67:0;35929:7;35924:190;35946:8;:15;35942:1;:19;;;35924:190;;;36016:7;36024:1;36016:10;;;;;;;;;;:::i;:::-;;;;;;;35991:21;36001:10;35991:9;:21::i;:::-;:35;;35983:44;;;;;;36042:60;36052:10;36064:8;36073:1;36064:11;;;;;;;;;;:::i;:::-;;;;;;;;;;;;36092:9;;36088:13;;36092:9;;36088:2;:13;:::i;:::-;36077:7;36085:1;36077:10;;;;;;;;;;:::i;:::-;;;;;;;:24;;;;:::i;:::-;36042:9;:60::i;:::-;-1:-1:-1;35963:3:0;;;;:::i;:::-;;;;35924:190;;31082:250;31148:7;31187;;31176;:18;;31168:73;;;;-1:-1:-1;;;31168:73:0;;11045:2:1;31168:73:0;;;11027:21:1;11084:2;11064:18;;;11057:30;11123:34;11103:18;;;11096:62;11194:12;11174:18;;;11167:40;11224:19;;31168:73:0;10843:406:1;31168:73:0;31252:19;31275:10;:8;:10::i;:::-;31252:33;-1:-1:-1;31303:21:0;31252:33;31303:7;:21;:::i;:::-;31296:28;31082:250;-1:-1:-1;;;31082:250:0:o;18686:1890::-;17346:6;;-1:-1:-1;;;;;17346:6:0;5783:10;17346:22;17338:67;;;;-1:-1:-1;;;17338:67:0;;16790:2:1;17338:67:0;;;16772:21:1;;;16809:18;;;16802:30;-1:-1:-1;;;;;;;;;;;16848:18:1;;;16841:62;16920:18;;17338:67:0;16588:356:1;17338:67:0;18862:19:::1;::::0;::::1;;18861:20;18853:29;;;::::0;::::1;;18919:3;18901:8;:15;:21;18893:30;;;::::0;::::1;;18961:7;:14;18942:8;:15;:33;18934:42;;;::::0;::::1;;18995:13;::::0;:18;:40;::::1;;;-1:-1:-1::0;19017:13:0::1;::::0;:18;18995:40:::1;:61;;;;-1:-1:-1::0;19040:16:0::1;::::0;;;::::1;;;19039:17;18995:61;18987:70;;;::::0;::::1;;19083:2;19076:3;:9;;19068:38;;;::::0;-1:-1:-1;;;19068:38:0;;14583:2:1;19068:38:0::1;::::0;::::1;14565:21:1::0;14622:2;14602:18;;;14595:30;14661:18;14641;;;14634:46;14697:18;;19068:38:0::1;14381:340:1::0;19068:38:0::1;19119:16;:40:::0;;-1:-1:-1;;;;;19119:40:0;;::::1;-1:-1:-1::0;;;;;;19119:40:0;;::::1;;::::0;;;19203:14:::1;::::0;19172:9:::1;:46:::0;;;;::::1;19203:14:::0;::::1;19172:46:::0;;::::1;::::0;;19256:19:::1;::::0;;;;;;;:17:::1;::::0;:19:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;19203:14;19256:19;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19238:49:0::1;;19288:9;;;;;;;;;-1:-1:-1::0;;;;;19288:9:0::1;-1:-1:-1::0;;;;;19288:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19238:82;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;8321:15:1;;;19238:82:0::1;::::0;::::1;8303:34:1::0;19314:4:0::1;8353:18:1::0;;;8346:43;8215:18;;19238:82:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19229:6;:91:::0;;-1:-1:-1;;;;;;19229:91:0::1;-1:-1:-1::0;;;;;19229:91:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;19331:15:0;;;:7:::1;:15;::::0;;;;;;;:22;;-1:-1:-1;;19331:22:0::1;-1:-1:-1::0;19331:22:0::1;::::0;;19384:4:::1;19364:26:::0;;:11:::1;:26:::0;;;;;19399:9:::1;::::0;;;::::1;19364:46:::0;;;;;;-1:-1:-1;;19364:66:0;;19331:22:::1;19451::::0;::::1;:13;:22:::0;19500:12:::1;:3:::0;19506:6:::1;19500:12;:::i;:::-;19484:13;:28:::0;19539:7:::1;::::0;19557:6:::1;::::0;19539:14:::1;::::0;19549:4:::1;19539:14;:::i;:::-;19538:25;;;;:::i;:::-;19523:12;:40:::0;19591:14:::1;::::0;19616:6:::1;::::0;19591:21:::1;::::0;19608:4:::1;19591:21;:::i;:::-;19590:32;;;;:::i;:::-;19574:13;:48:::0;19651:7:::1;::::0;19667:4:::1;::::0;19651:12:::1;::::0;19661:2:::1;19651:12;:::i;:::-;19650:21;;;;:::i;:::-;19633:14;:38:::0;19701:14:::1;::::0;19724:4:::1;::::0;19701:19:::1;::::0;19718:2:::1;19701:19;:::i;:::-;19700:28;;;;:::i;:::-;19682:15;:46:::0;19756:7:::1;::::0;19771:5:::1;::::0;19756:11:::1;::::0;19766:1:::1;19756:11;:::i;:::-;19755:21;;;;:::i;:::-;19739:13;:37:::0;19801:7:::1;::::0;19816:4:::1;::::0;19801:11:::1;::::0;19811:1:::1;19801:11;:::i;:::-;19800:20;;;;:::i;:::-;19787:10;:33:::0;19841:14:::1;::::0;19833:42:::1;::::0;-1:-1:-1;;;;;19841:14:0::1;-1:-1:-1::0;;19833:7:0::1;:42::i;:::-;-1:-1:-1::0;19888:19:0::1;:26:::0;;-1:-1:-1;;19888:26:0::1;19910:4;19888:26:::0;;::::1;::::0;;;19944:7:::1;::::0;;19888:19:::1;19933:7;21167::::0;21194:6;-1:-1:-1;;;;;21194:6:0;;21129:79;19933:7:::1;-1:-1:-1::0;;;;;19925:16:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;19925:16:0;:26;19982:7:::1;21167::::0;21194:6;-1:-1:-1;;;;;21194:6:0;;21129:79;19982:7:::1;19976:4;::::0;19991:7:::1;::::0;19967:32:::1;::::0;19449:25:1;;;-1:-1:-1;;;;;19967:32:0;;::::1;::::0;19976:4;;::::1;::::0;19967:32:::1;::::0;19437:2:1;19422:18;19967:32:0::1;;;;;;;20044:9;::::0;20012:62:::1;::::0;20029:4:::1;::::0;-1:-1:-1;;;;;20044:9:0::1;-1:-1:-1::0;;20012:8:0::1;:62::i;:::-;20091:9;20087:168;20110:8;:15;20106:1;:19;20087:168;;;20180:9;::::0;20146:14:::1;::::0;20176:13:::1;::::0;20180:9:::1;;20176:2;:13;:::i;:::-;20163:7;20171:1;20163:10;;;;;;;;:::i;:::-;;;;;;;:26;;;;:::i;:::-;20146:43;;20204:39;20214:7;21167::::0;21194:6;-1:-1:-1;;;;;21194:6:0;;21129:79;20214:7:::1;20223:8;20232:1;20223:11;;;;;;;;:::i;:::-;;;;;;;20236:6;20204:9;:39::i;:::-;;20131:124;20127:3;;;;;:::i;:::-;;;;20087:168;;;;20267:53;20277:7;21167::::0;21194:6;-1:-1:-1;;;;;21194:6:0;;21129:79;20277:7:::1;20294:4;20301:18;20311:7;21167::::0;21194:6;-1:-1:-1;;;;;21194:6:0;;21129:79;20267:53:::1;-1:-1:-1::0;20347:9:0::1;::::0;-1:-1:-1;;;;;20347:9:0::1;:25;20380:21;20425:4;20445:24;20425:4:::0;20445:9:::1;:24::i;:::-;20484:1;20501::::0;20518:7:::1;21167::::0;21194:6;-1:-1:-1;;;;;21194:6:0;;21129:79;20518:7:::1;20347:219;::::0;::::1;::::0;;;;;;;-1:-1:-1;;;;;8782:15:1;;;20347:219:0::1;::::0;::::1;8764:34:1::0;8814:18;;;8807:34;;;;8857:18;;;8850:34;;;;8900:18;;;8893:34;8964:15;;;8943:19;;;8936:44;20540:15:0::1;8996:19:1::0;;;8989:35;8675:19;;20347:219:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;18686:1890:::0;;;;;:::o;24072:215::-;5783:10;24160:4;24209:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;24209:34:0;;;;;;;;;;24160:4;;24177:80;;24200:7;;24209:47;;24246:10;;24209:47;:::i;28219:340::-;17346:6;;-1:-1:-1;;;;;17346:6:0;5783:10;17346:22;17338:67;;;;-1:-1:-1;;;17338:67:0;;16790:2:1;17338:67:0;;;16772:21:1;;;16809:18;;;16802:30;-1:-1:-1;;;;;;;;;;;16848:18:1;;;16841:62;16920:18;;17338:67:0;16588:356:1;17338:67:0;28308:13:::1;28346:7;28335;28325;;:17;;;;:::i;:::-;28324:29;;;;:::i;:::-;28308:45;;28392:4;28382:7;;:14;;;;:::i;:::-;28372:5;:25;;28364:93;;;::::0;-1:-1:-1;;;28364:93:0;;12981:2:1;28364:93:0::1;::::0;::::1;12963:21:1::0;13020:2;13000:18;;;12993:30;13059:34;13039:18;;;13032:62;13130:25;13110:18;;;13103:53;13173:19;;28364:93:0::1;12779:419:1::0;28364:93:0::1;28468:12;:20:::0;;;28516:14:::1;::::0;28544:7;;28516:24:::1;::::0;28533:7;;28516:24:::1;:::i;:::-;28515:36;;;;:::i;:::-;28499:13;:52:::0;-1:-1:-1;;;28219:340:0:o;21216:807::-;17346:6;;-1:-1:-1;;;;;17346:6:0;5783:10;17346:22;17338:67;;;;-1:-1:-1;;;17338:67:0;;16790:2:1;17338:67:0;;;16772:21:1;;;16809:18;;;16802:30;-1:-1:-1;;;;;;;;;;;16848:18:1;;;16841:62;16920:18;;17338:67:0;16588:356:1;17338:67:0;-1:-1:-1;;;;;21297:22:0;::::1;21289:96;;;::::0;-1:-1:-1;;;21289:96:0;;19075:2:1;21289:96:0::1;::::0;::::1;19057:21:1::0;19114:2;19094:18;;;19087:30;19153:34;19133:18;;;19126:62;19224:31;19204:18;;;19197:59;19273:19;;21289:96:0::1;18873:425:1::0;21289:96:0::1;21416:4;::::0;-1:-1:-1;;;;;21404:16:0;;::::1;21416:4:::0;::::1;21404:16;;21396:90;;;::::0;-1:-1:-1;;;21396:90:0;;19075:2:1;21396:90:0::1;::::0;::::1;19057:21:1::0;19114:2;19094:18;;;19087:30;19153:34;19133:18;;;19126:62;19224:31;19204:18;;;19197:59;19273:19;;21396:90:0::1;18873:425:1::0;21396:90:0::1;21516:6;::::0;;21497:33:::1;::::0;-1:-1:-1;;;;;21516:6:0;;::::1;::::0;21497:18:::1;:33::i;:::-;21541:34;21560:8;21570:4;21541:18;:34::i;:::-;21586:37;21608:8;21618:4;21586:21;:37::i;:::-;21676:6;::::0;21648:16:::1;::::0;-1:-1:-1;;;;;21648:16:0;;::::1;21676:6:::0;::::1;21648:35;21644:90;;;21698:16;:36:::0;;-1:-1:-1;;;;;;21698:36:0::1;-1:-1:-1::0;;;;;21698:36:0;::::1;;::::0;;21644:90:::1;21797:6;::::0;21787:17:::1;::::0;-1:-1:-1;;;;;21797:6:0::1;21787:9;:17::i;:::-;21755:19;21767:6:::0;;-1:-1:-1;;;;;21767:6:0;;::::1;21755:19:::0;;:11:::1;:19;::::0;;;;;;;:29;;::::1;::::0;;;;;;;:49;;;;21828:6;;21755:19;;21818:17:::1;::::0;21828:6:::1;21818:9;:17::i;:::-;:21;21815:99;;;21866:6;::::0;21856:46:::1;::::0;-1:-1:-1;;;;;21866:6:0::1;21874:8:::0;21884:17:::1;21866:6:::0;21884:9:::1;:17::i;21856:46::-;;21815:99;21934:6;:17:::0;;-1:-1:-1;;;;;;21934:17:0::1;-1:-1:-1::0;;;;;21934:17:0;::::1;::::0;;::::1;::::0;;21967:38:::1;::::0;21934:17;;;;21967:38:::1;::::0;21934:6;21967:38:::1;21216:807:::0;:::o;23670:120::-;23723:4;23747:35;23755:7;-1:-1:-1;;23747:7:0;:35::i;27588:455::-;17346:6;;-1:-1:-1;;;;;17346:6:0;5783:10;17346:22;17338:67;;;;-1:-1:-1;;;17338:67:0;;16790:2:1;17338:67:0;;;16772:21:1;;;16809:18;;;16802:30;-1:-1:-1;;;;;;;;;;;16848:18:1;;;16841:62;16920:18;;17338:67:0;16588:356:1;17338:67:0;27718:13:::1;;27707:7;:24;;:73;;;;;27765:15;;27752:9;:28;;27707:73;:122;;;;;27814:15;;27801:9;:28;;27707:122;27699:149;;;::::0;::::1;;27902:4;27889:9:::0;27867:19:::1;27877:9:::0;27867:7;:19:::1;:::i;:::-;:31;;;;:::i;:::-;:39;;27859:48;;;::::0;::::1;;27918:19;:29:::0;;;;27958:21:::1;:33:::0;28002:21:::1;:33:::0;27588:455::o;29212:202::-;17346:6;;-1:-1:-1;;;;;17346:6:0;5783:10;17346:22;17338:67;;;;-1:-1:-1;;;17338:67:0;;16790:2:1;17338:67:0;;;16772:21:1;;;16809:18;;;16802:30;-1:-1:-1;;;;;;;;;;;16848:18:1;;;16841:62;16920:18;;17338:67:0;16588:356:1;17338:67:0;29305:16:::1;::::0;-1:-1:-1;;;;;29305:29:0;;::::1;:16:::0;::::1;:29;;29297:61;;;::::0;-1:-1:-1;;;29297:61:0;;14928:2:1;29297:61:0::1;::::0;::::1;14910:21:1::0;14967:2;14947:18;;;14940:30;15006:21;14986:18;;;14979:49;15045:18;;29297:61:0::1;14726:343:1::0;29297:61:0::1;29369:16;:37:::0;;-1:-1:-1;;;;;;29369:37:0::1;-1:-1:-1::0;;;;;29369:37:0;;;::::1;::::0;;;::::1;::::0;;29212:202::o;29601:132::-;17346:6;;-1:-1:-1;;;;;17346:6:0;5783:10;17346:22;17338:67;;;;-1:-1:-1;;;17338:67:0;;16790:2:1;17338:67:0;;;16772:21:1;;;16809:18;;;16802:30;-1:-1:-1;;;;;;;;;;;16848:18:1;;;16841:62;16920:18;;17338:67:0;16588:356:1;17338:67:0;-1:-1:-1;;;;;29688:27:0;;;::::1;;::::0;;;:18:::1;:27;::::0;;;;:37;;-1:-1:-1;;29688:37:0::1;::::0;::::1;;::::0;;;::::1;::::0;;29601:132::o;28051:160::-;17346:6;;-1:-1:-1;;;;;17346:6:0;5783:10;17346:22;17338:67;;;;-1:-1:-1;;;17338:67:0;;16790:2:1;17338:67:0;;;16772:21:1;;;16809:18;;;16802:30;-1:-1:-1;;;;;;;;;;;16848:18:1;;;16841:62;16920:18;;17338:67:0;16588:356:1;17338:67:0;28138:15:::1;:27:::0;;;;28176:15:::1;:27:::0;28051:160::o;26698:435::-;17346:6;;-1:-1:-1;;;;;17346:6:0;5783:10;17346:22;17338:67;;;;-1:-1:-1;;;17338:67:0;;16790:2:1;17338:67:0;;;16772:21:1;;;16809:18;;;16802:30;-1:-1:-1;;;;;;;;;;;16848:18:1;;;16841:62;16920:18;;17338:67:0;16588:356:1;17338:67:0;26823:13:::1;;26812:7;:24;;:73;;;;;26870:15;;26857:9;:28;;26812:73;:122;;;;;26919:15;;26906:9;:28;;26812:122;26804:149;;;::::0;::::1;;27007:4;26994:9:::0;26972:19:::1;26982:9:::0;26972:7;:19:::1;:::i;:::-;:31;;;;:::i;:::-;:39;;26964:48;;;::::0;::::1;;27023:14;:24:::0;;;;27058:16:::1;:28:::0;27097:16:::1;:28:::0;26698:435::o;25920:229::-;17346:6;;-1:-1:-1;;;;;17346:6:0;5783:10;17346:22;17338:67;;;;-1:-1:-1;;;17338:67:0;;16790:2:1;17338:67:0;;;16772:21:1;;;16809:18;;;16802:30;-1:-1:-1;;;;;;;;;;;16848:18:1;;;16841:62;16920:18;;17338:67:0;16588:356:1;17338:67:0;26034:6:::1;26029:113;26050:7;:14;26046:1;:18;26029:113;;;26123:7;26086:22;:34;26109:7;26117:1;26109:10;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;26086:34:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;26086:34:0;:44;;-1:-1:-1;;26086:44:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26066:3;::::1;::::0;::::1;:::i;:::-;;;;26029:113;;23120:198:::0;-1:-1:-1;;;;;23210:20:0;;23186:7;23210:20;;;:11;:20;;;;;;;;23206:49;;;-1:-1:-1;;;;;;23239:16:0;;;;;:7;:16;;;;;;;23120:198::o;23206:49::-;-1:-1:-1;;;;;23293:16:0;;;;;;:7;:16;;;;;;23273:37;;:19;:37::i;22031:194::-;17346:6;;-1:-1:-1;;;;;17346:6:0;5783:10;17346:22;17338:67;;;;-1:-1:-1;;;17338:67:0;;16790:2:1;17338:67:0;;;16772:21:1;;;16809:18;;;16802:30;-1:-1:-1;;;;;;;;;;;16848:18:1;;;16841:62;16920:18;;17338:67:0;16588:356:1;17338:67:0;22117:6:::1;::::0;;22098:33:::1;::::0;-1:-1:-1;;;;;22117:6:0;;::::1;::::0;22098:18:::1;:33::i;:::-;22159:1;22142:19:::0;;-1:-1:-1;;;;;;22142:19:0::1;::::0;;22177:40:::1;::::0;22159:1;;22177:40:::1;::::0;22159:1;;22177:40:::1;22031:194::o:0;25089:424::-;17346:6;;-1:-1:-1;;;;;17346:6:0;5783:10;17346:22;17338:67;;;;-1:-1:-1;;;17338:67:0;;16790:2:1;17338:67:0;;;16772:21:1;;;16809:18;;;16802:30;-1:-1:-1;;;;;;;;;;;16848:18:1;;;16841:62;16920:18;;17338:67:0;16588:356:1;17338:67:0;25170:16;25166:340:::1;;-1:-1:-1::0;;;;;;25203:13:0::1;25219:5;25203:13:::0;;;:7:::1;:13;::::0;;;;:21;;-1:-1:-1;;25203:21:0::1;::::0;;29741:906::o;25166:340::-:1;25261:17;::::0;:22;25257:153:::1;;25350:7;25330:17;;25312:15;:35;;;;:::i;:::-;:45;25304:90;;;::::0;-1:-1:-1;;;25304:90:0;;12263:2:1;25304:90:0::1;::::0;::::1;12245:21:1::0;;;12282:18;;;12275:30;12341:34;12321:18;;;12314:62;12393:18;;25304:90:0::1;12061:356:1::0;25304:90:0::1;-1:-1:-1::0;;;;;25424:13:0;::::1;;::::0;;;:7:::1;:13;::::0;;;;:20;;-1:-1:-1;;25424:20:0::1;25440:4;25424:20;::::0;;25479:15:::1;25459:17;:35:::0;25089:424;;:::o;35343:397::-;17346:6;;-1:-1:-1;;;;;17346:6:0;5783:10;17346:22;17338:67;;;;-1:-1:-1;;;17338:67:0;;16790:2:1;17338:67:0;;;16772:21:1;;;16809:18;;;16802:30;-1:-1:-1;;;;;;;;;;;16848:18:1;;;16841:62;16920:18;;17338:67:0;16588:356:1;17338:67:0;35405:14:::1;::::0;::::1;;35404:15;35396:52;;;::::0;-1:-1:-1;;;35396:52:0;;18722:2:1;35396:52:0::1;::::0;::::1;18704:21:1::0;18761:2;18741:18;;;18734:30;18800:26;18780:18;;;18773:54;18844:18;;35396:52:0::1;18520:348:1::0;35396:52:0::1;35459:42;35489:4;35496;35459:21;:42::i;:::-;35534:6;::::0;35512:35:::1;::::0;-1:-1:-1;;;;;35534:6:0::1;::::0;35512:21:::1;:35::i;:::-;35578:1;35562:13;;:17;35558:143;;;35611:18;:12;35626:3;35611:18;:::i;:::-;35596:12;:33:::0;35558:143:::1;;;35677:12;35662;:27:::0;35558:143:::1;35711:14;:21:::0;;-1:-1:-1;;35711:21:0::1;35728:4;35711:21;::::0;;35343:397::o;22744:75::-;22785:13;22809:7;22802:14;;;;;:::i;24295:225::-;5783:10;24388:4;24437:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;24437:34:0;;;;;;;;;;24388:4;;24405:85;;24428:7;;24437:52;;24474:15;;24437:52;:::i;23326:167::-;23404:4;23421:42;5783:10;23445:9;23456:6;23421:9;:42::i;26157:218::-;17346:6;;-1:-1:-1;;;;;17346:6:0;5783:10;17346:22;17338:67;;;;-1:-1:-1;;;17338:67:0;;16790:2:1;17338:67:0;;;16772:21:1;;;16809:18;;;16802:30;-1:-1:-1;;;;;;;;;;;16848:18:1;;;16841:62;16920:18;;17338:67:0;16588:356:1;17338:67:0;26266:16:::1;:28:::0;;;::::1;;;;-1:-1:-1::0;;26266:28:0;;::::1;::::0;;;::::1;::::0;;;26305:14:::1;:24:::0;;;::::1;;-1:-1:-1::0;;26305:24:0;;::::1;;::::0;;26340:15:::1;:27:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;26157:218::o;29422:171::-;17346:6;;-1:-1:-1;;;;;17346:6:0;5783:10;17346:22;17338:67;;;;-1:-1:-1;;;17338:67:0;;16790:2:1;17338:67:0;;;16772:21:1;;;16809:18;;;16802:30;-1:-1:-1;;;;;;;;;;;16848:18:1;;;16841:62;16920:18;;17338:67:0;16588:356:1;17338:67:0;29499:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;29499:32:0::1;::::0;;;::::1;;::::0;;29547:38:::1;::::0;::::1;::::0;::::1;::::0;29523:8;9200:14:1;9193:22;9175:41;;9163:2;9148:18;;9035:187;29547:38:0::1;;;;;;;;29422:171:::0;:::o;27141:439::-;17346:6;;-1:-1:-1;;;;;17346:6:0;5783:10;17346:22;17338:67;;;;-1:-1:-1;;;17338:67:0;;16790:2:1;17338:67:0;;;16772:21:1;;;16809:18;;;16802:30;-1:-1:-1;;;;;;;;;;;16848:18:1;;;16841:62;16920:18;;17338:67:0;16588:356:1;17338:67:0;27267:13:::1;;27256:7;:24;;:73;;;;;27314:15;;27301:9;:28;;27256:73;:122;;;;;27363:15;;27350:9;:28;;27256:122;27248:149;;;::::0;::::1;;27451:4;27438:9:::0;27416:19:::1;27426:9:::0;27416:7;:19:::1;:::i;:::-;:31;;;;:::i;:::-;:39;;27408:48;;;::::0;::::1;;27467:15;:25:::0;;;;27503:17:::1;:29:::0;27543:17:::1;:29:::0;27141:439::o;24528:553::-;17346:6;;-1:-1:-1;;;;;17346:6:0;5783:10;17346:22;17338:67;;;;-1:-1:-1;;;17338:67:0;;16790:2:1;17338:67:0;;;16772:21:1;;;16809:18;;;16802:30;-1:-1:-1;;;;;;;;;;;16848:18:1;;;16841:62;16920:18;;17338:67:0;16588:356:1;17338:67:0;24601:29:::1;24652:9;24601:61;;24673:16;24710:10;-1:-1:-1::0;;;;;24710:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;24692:47:0::1;;24748:4;24755:10;-1:-1:-1::0;;;;;24755:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24692:81;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;8321:15:1;;;24692:81:0::1;::::0;::::1;8303:34:1::0;8373:15;;8353:18;;;8346:43;8215:18;;24692:81:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24673:100:::0;-1:-1:-1;;;;;;24788:22:0;::::1;24784:207;;24854:10;-1:-1:-1::0;;;;;24854:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;24836:50:0::1;;24895:4;24902:10;-1:-1:-1::0;;;;;24902:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24836:84;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;8321:15:1;;;24836:84:0::1;::::0;::::1;8303:34:1::0;8373:15;;8353:18;;;8346:43;8215:18;;24836:84:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24827:6;:93:::0;;-1:-1:-1;;;;;;24827:93:0::1;-1:-1:-1::0;;;;;24827:93:0;;;::::1;::::0;;;::::1;::::0;;24784:207:::1;;;24962:6;:17:::0;;-1:-1:-1;;;;;;24962:17:0::1;-1:-1:-1::0;;;;;24962:17:0;::::1;;::::0;;24784:207:::1;25001:9;:22:::0;;-1:-1:-1;;;;;;25001:22:0::1;-1:-1:-1::0;;;;;25001:22:0;::::1;;::::0;;25034:39:::1;25051:4;25058:9:::0;-1:-1:-1;;25034:8:0::1;:39::i;26545:141::-:0;17346:6;;-1:-1:-1;;;;;17346:6:0;5783:10;17346:22;17338:67;;;;-1:-1:-1;;;17338:67:0;;16790:2:1;17338:67:0;;;16772:21:1;;;16809:18;;;16802:30;-1:-1:-1;;;;;;;;;;;16848:18:1;;;16841:62;16920:18;;17338:67:0;16588:356:1;17338:67:0;-1:-1:-1;;;;;26637:31:0;;;::::1;;::::0;;;:22:::1;:31;::::0;;;;:41;;-1:-1:-1;;26637:41:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26545:141::o;28915:289::-;17346:6;;-1:-1:-1;;;;;17346:6:0;5783:10;17346:22;17338:67;;;;-1:-1:-1;;;17338:67:0;;16790:2:1;17338:67:0;;;16772:21:1;;;16809:18;;;16802:30;-1:-1:-1;;;;;;;;;;;16848:18:1;;;16841:62;16920:18;;17338:67:0;16588:356:1;17338:67:0;29115:16:::1;29095;29085:7;;:26;;;;:::i;:::-;29084:47;;;;:::i;:::-;29068:13;:63:::0;29156:7:::1;::::0;29183:13;;29156:23:::1;::::0;29166:13;;29156:23:::1;:::i;:::-;29155:41;;;;:::i;:::-;29142:10;:54:::0;-1:-1:-1;;;;28915:289:0:o;31344:342::-;-1:-1:-1;;;;;31439:20:0;;31431:69;;;;-1:-1:-1;;;31431:69:0;;18317:2:1;31431:69:0;;;18299:21:1;18356:2;18336:18;;;18329:30;18395:34;18375:18;;;18368:62;18466:6;18446:18;;;18439:34;18490:19;;31431:69:0;18115:400:1;31431:69:0;-1:-1:-1;;;;;31519:21:0;;31511:68;;;;-1:-1:-1;;;31511:68:0;;11456:2:1;31511:68:0;;;11438:21:1;11495:2;11475:18;;;11468:30;11534:34;11514:18;;;11507:62;11605:4;11585:18;;;11578:32;11627:19;;31511:68:0;11254:398:1;31511:68:0;-1:-1:-1;;;;;31592:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;31645:33;;19449:25:1;;;31645:33:0;;19422:18:1;31645:33:0;;;;;;;31344:342;;;:::o;31694:1900::-;31773:4;-1:-1:-1;;;;;31798:18:0;;31790:68;;;;-1:-1:-1;;;31790:68:0;;17911:2:1;31790:68:0;;;17893:21:1;17950:2;17930:18;;;17923:30;17989:34;17969:18;;;17962:62;18060:7;18040:18;;;18033:35;18085:19;;31790:68:0;17709:401:1;31790:68:0;-1:-1:-1;;;;;31877:16:0;;31869:64;;;;-1:-1:-1;;;31869:64:0;;10288:2:1;31869:64:0;;;10270:21:1;10327:2;10307:18;;;10300:30;10366:34;10346:18;;;10339:62;10437:5;10417:18;;;10410:33;10460:19;;31869:64:0;10086:399:1;31869:64:0;31961:1;31952:6;:10;31944:64;;;;-1:-1:-1;;;31944:64:0;;17151:2:1;31944:64:0;;;17133:21:1;17190:2;17170:18;;;17163:30;17229:34;17209:18;;;17202:62;17300:11;17280:18;;;17273:39;17329:19;;31944:64:0;16949:405:1;31944:64:0;32023:14;;;;32019:112;;;32077:13;;32062:11;:28;;32054:65;;;;-1:-1:-1;;;32054:65:0;;14230:2:1;32054:65:0;;;14212:21:1;14269:2;14249:18;;;14242:30;14308:26;14288:18;;;14281:54;14352:18;;32054:65:0;14028:348:1;32054:65:0;32144:20;32155:4;32161:2;32144:10;:20::i;:::-;32141:776;;;32185:14;;;;32181:89;;32220:34;;-1:-1:-1;;;32220:34:0;;10692:2:1;32220:34:0;;;10674:21:1;10731:2;10711:18;;;10704:30;10770:26;10750:18;;;10743:54;10814:18;;32220:34:0;10490:348:1;32181:89:0;32288:15;;;;32284:347;;;-1:-1:-1;;;;;32328:13:0;;;;;;:7;:13;;;;;;;;32324:292;;;-1:-1:-1;;;;;32373:13:0;;;;;;:9;:13;;;;;;32390:12;32373:29;;32365:38;;;;;;-1:-1:-1;;;;;32426:13:0;;;;;;:9;:13;;;;;32442:12;32426:28;;32324:292;;;-1:-1:-1;;;;;32511:15:0;;;;;;:9;:15;;;;;;32530:12;32511:31;;32503:40;;;;;;-1:-1:-1;;;;;32566:15:0;;;;;;:9;:15;;;;;32584:12;32566:30;;32324:292;32663:12;;32653:6;:22;;32645:75;;;;-1:-1:-1;;;32645:75:0;;15970:2:1;32645:75:0;;;15952:21:1;16009:2;15989:18;;;15982:30;16048:34;16028:18;;;16021:62;16119:10;16099:18;;;16092:38;16147:19;;32645:75:0;15768:404:1;32645:75:0;32744:14;;-1:-1:-1;;;;;32738:20:0;;;32744:14;;32738:20;;;;:36;;-1:-1:-1;;;;;;32763:11:0;;;;;;:7;:11;;;;;;;;32762:12;32738:36;32735:171;;;32829:14;;32819:6;32803:13;32813:2;32803:9;:13::i;:::-;:22;;;;:::i;:::-;:40;;32795:95;;;;-1:-1:-1;;;32795:95:0;;16379:2:1;32795:95:0;;;16361:21:1;16418:2;16398:18;;;16391:30;16457:34;16437:18;;;16430:62;16528:12;16508:18;;;16501:40;16558:19;;32795:95:0;16177:406:1;32795:95:0;-1:-1:-1;;;;;32962:24:0;;32929:12;32962:24;;;:18;:24;;;;;;32944:4;;32962:24;;;:50;;-1:-1:-1;;;;;;32990:22:0;;;;;;:18;:22;;;;;;;;32962:50;32959:96;;;-1:-1:-1;33038:5:0;32959:96;-1:-1:-1;;;;;33071:11:0;;;;;;:7;:11;;;;;;;;33067:457;;;33104:16;;;;;;;33103:17;:59;;;;-1:-1:-1;33141:21:0;;-1:-1:-1;;;33141:21:0;;;;33103:59;33099:408;;;33197:28;33228:24;33246:4;33228:9;:24::i;:::-;33197:55;;33299:13;;33275:20;:37;33271:221;;33364:10;;33340:20;:34;33337:77;;-1:-1:-1;33401:10:0;;33337:77;33436:36;33451:20;33436:14;:36::i;:::-;33178:329;33099:408;33542:44;33560:4;33566:2;33570:6;33578:7;33542:17;:44::i;:::-;33535:51;31694:1900;-1:-1:-1;;;;;31694:1900:0:o;39695:161::-;39737:7;39758:15;39775;39794:19;:17;:19::i;:::-;39757:56;;-1:-1:-1;39757:56:0;-1:-1:-1;39831:17:0;39757:56;;39831:17;:::i;:::-;39824:24;;;;39695:161;:::o;30750:324::-;30819:4;21194:6;;-1:-1:-1;;;;;30843:15:0;;;21194:6;;30843:15;;;;:45;;-1:-1:-1;21167:7:0;21194:6;-1:-1:-1;;;;;30875:13:0;;;21194:6;;30875:13;;30843:45;:84;;;;-1:-1:-1;;;;;;30906:21:0;;;;;;:17;:21;;;;;;;;30905:22;30843:84;:125;;;;-1:-1:-1;;;;;;30945:23:0;;;;;;:17;:23;;;;;;;;30944:24;30843:125;:152;;;;-1:-1:-1;30991:4:0;;-1:-1:-1;;;;;30985:10:0;;;30991:4;;30985:10;;30843:152;:185;;;;-1:-1:-1;;;;;;31012:16:0;;;;30843:185;:223;;;;-1:-1:-1;;;;;;31045:21:0;;31061:4;31045:21;;30836:230;30750:324;-1:-1:-1;;;30750:324:0:o;33602:1278::-;17220:16;:23;;-1:-1:-1;;17220:23:0;;;;;33710:15:::1;::::0;33692::::1;::::0;:33:::1;::::0;33710:15;33692:33:::1;:::i;:::-;33688:64;;33745:7;;33688:64;33762:17;33865:1;33845:15;;33827;;:33;;;;:::i;:::-;33807:15;::::0;33784:38:::1;::::0;:20;:38:::1;:::i;:::-;33783:78;;;;:::i;:::-;33782:84;;;;:::i;:::-;33762:104:::0;-1:-1:-1;33879:20:0::1;33902:32;33762:104:::0;33902:20;:32:::1;:::i;:::-;33971:16;::::0;;33985:1:::1;33971:16:::0;;;;;::::1;::::0;;33879:55;;-1:-1:-1;33947:21:0::1;::::0;33971:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;33971:16:0::1;33947:40;;34016:4;33998;34003:1;33998:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;33998:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;34042:9:::1;::::0;:16:::1;::::0;;;;;;;:9;;;::::1;::::0;:14:::1;::::0;:16:::1;::::0;;::::1;::::0;33998:7;;34042:16;;;;;:9;:16;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34032:4;34037:1;34032:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;34032:26:0;;::::1;:7;::::0;;::::1;::::0;;;;;:26;34071:9:::1;::::0;:191:::1;::::0;;;;:9;::::1;::::0;:60:::1;::::0;:191:::1;::::0;34146:12;;34071:9:::1;::::0;34189:4;;34216::::1;::::0;34236:15:::1;::::0;34071:191:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;34277:24;34388:1;34368:15;;34350;;:33;;;;:::i;:::-;34330:15;::::0;34306:39:::1;::::0;:21:::1;:39;:::i;:::-;34305:79;;;;:::i;:::-;34304:85;;;;:::i;:::-;34277:112:::0;-1:-1:-1;34406:13:0;;34402:344:::1;;34436:9;::::0;34607:4:::1;::::0;34436:224:::1;::::0;;;;34513:4:::1;34436:224;::::0;::::1;8764:34:1::0;8814:18;;;8807:34;;;34436:9:0::1;8857:18:1::0;;;8850:34;;;8900:18;;;8893:34;-1:-1:-1;;;;;34607:4:0;;::::1;8943:19:1::0;;;8936:44;34630:15:0::1;8996:19:1::0;;;8989:35;34436:9:0;::::1;::::0;:25:::1;::::0;34469:16;;8675:19:1;;34436:224:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;34680:54:0::1;::::0;;20718:25:1;;;20774:2;20759:18;;20752:34;;;20802:18;;;20795:34;;;34680:54:0::1;::::0;-1:-1:-1;20706:2:1;20691:18;34680:54:0::1;;;;;;;34402:344;34795:1;34760:32;34783:9:::0;34760:20;:32:::1;:::i;:::-;:36;34756:117;;;34813:16;::::0;:48:::1;::::0;-1:-1:-1;;;;;34813:16:0;;::::1;::::0;34839:21:::1;34813:48:::0;::::1;;;::::0;:16:::1;:48:::0;:16;:48;34839:21;34813:16;:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;34756:117;33677:1203;;;;17254:1;-1:-1:-1::0;17266:16:0;:24;;-1:-1:-1;;17266:24:0;;;33602:1278::o;36335:1880::-;36458:16;;36437:4;;36458:16;;;;;36454:851;;;-1:-1:-1;;;;;25873:31:0;;25849:4;25873:31;;;:22;:31;;;;;;;;36494:56;;;-1:-1:-1;;;;;;25873:31:0;;25849:4;25873:31;;;:22;:31;;;;;;;;36525:25;36490:116;;;36571:19;;-1:-1:-1;;;36571:19:0;;15633:2:1;36571:19:0;;;15615:21:1;15672:1;15652:18;;;15645:29;15710:11;15690:18;;;15683:39;15739:18;;36571:19:0;15431:332:1;36490:116:0;36627:16;;;;;;;36622:672;;36664:28;36683:4;36689:2;36664:18;:28::i;:::-;36716:16;;;;;;;36715:17;:41;;;;;36736:20;36747:4;36753:2;36736:10;:20::i;:::-;36711:137;;;36781:47;;-1:-1:-1;;;36781:47:0;;13405:2:1;36781:47:0;;;13387:21:1;13444:2;13424:18;;;13417:30;13483:34;13463:18;;;13456:62;13554:7;13534:18;;;13527:35;13579:19;;36781:47:0;13203:401:1;36711:137:0;36622:672;;;36907:1;36892:12;;:16;:55;;;;-1:-1:-1;;;;;;36934:13:0;;;;;;:7;:13;;;;;;;;36892:55;:101;;;;;36973:20;36984:4;36990:2;36973:10;:20::i;:::-;36888:391;;;37070:13;;37055:12;;37040:27;;:12;:27;:::i;:::-;:43;37036:224;;;-1:-1:-1;;;;;37112:26:0;;;;;;:22;:26;;;;;:33;;-1:-1:-1;;37112:33:0;37141:4;37112:33;;;37172:13;:16;;;;;;:::i;:::-;;;;-1:-1:-1;;37220:16:0;;-1:-1:-1;;;;;8001:55:1;;7983:74;;37220:16:0;;7971:2:1;7956:18;37220:16:0;;;;;;;37036:224;37317:25;37345:38;37356:4;37362:2;37366:7;37375;37345:10;:38::i;:::-;37428:14;;;;-1:-1:-1;;;;;37412:13:0;;;;;;:7;:13;;;;;;37317:66;;-1:-1:-1;37412:30:0;;;:::i;:::-;-1:-1:-1;;;;;37396:13:0;;;;;;;:7;:13;;;;;;:46;;;;37481:22;;;;37467:11;;;;;;;;;;:36;;37481:22;37467:36;:::i;:::-;-1:-1:-1;;;;;37453:11:0;;;;;;;:7;:11;;;;;;;;:50;;;;37520:17;;;;;:11;:17;;;;;;;:37;;;;-1:-1:-1;;;;;;37542:15:0;;;;;;:11;:15;;;;;;;;37541:16;37520:37;37516:416;;;-1:-1:-1;;;;;37590:13:0;;;;;;:7;:13;;;;;;:23;;37606:7;;37590:23;:::i;:::-;-1:-1:-1;;;;;37574:13:0;;;;;;:7;:13;;;;;:39;37516:416;;;-1:-1:-1;;;;;37636:17:0;;;;;;:11;:17;;;;;;;;37635:18;:37;;;;-1:-1:-1;;;;;;37657:15:0;;;;;;:11;:15;;;;;;;;37635:37;37631:301;;;37717:22;;-1:-1:-1;;;;;37703:11:0;;37717:22;37703:11;;;:7;:11;;;;;;:36;;37717:22;37703:36;:::i;:::-;-1:-1:-1;;;;;37689:11:0;;;;;;:7;:11;;;;;:50;37631:301;;;-1:-1:-1;;;;;37763:17:0;;;;;;:11;:17;;;;;;;;:36;;;;-1:-1:-1;;;;;;37784:15:0;;;;;;:11;:15;;;;;;;;37763:36;37759:173;;;-1:-1:-1;;;;;37832:13:0;;;;;;:7;:13;;;;;;:23;;37848:7;;37832:23;:::i;:::-;-1:-1:-1;;;;;37816:13:0;;;;;;;:7;:13;;;;;;:39;;;;37898:22;;37884:11;;;;;;;;;;:36;;37898:22;37884:36;:::i;:::-;-1:-1:-1;;;;;37870:11:0;;;;;;:7;:11;;;;;:50;37759:173;37948:17;;;;:21;37944:79;;37984:39;37999:4;38005:6;:17;;;37984:14;:39::i;:::-;38052:1;38038:6;:11;;;:15;:34;;;;38071:1;38057:6;:11;;;:15;38038:34;38034:91;;;38087:38;38100:6;:11;;;38113:6;:11;;;38087:12;:38::i;:::-;38158:2;-1:-1:-1;;;;;38143:42:0;38152:4;-1:-1:-1;;;;;38143:42:0;;38162:6;:22;;;38143:42;;;;19449:25:1;;19437:2;19422:18;;19303:177;38143:42:0;;;;;;;;-1:-1:-1;38203:4:0;;36335:1880;-1:-1:-1;;;;;36335:1880:0:o;39864:547::-;39962:7;;39998;;39915;;;;;40016:283;40040:9;:16;40036:20;;40016:283;;;40106:7;40082;:21;40090:9;40100:1;40090:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;40090:12:0;40082:21;;;;;;;;;;;;;:31;;:66;;;40141:7;40117;:21;40125:9;40135:1;40125:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;40125:12:0;40117:21;;;;;;;;;;;;;:31;40082:66;40078:97;;;40158:7;;40167;;40150:25;;;;;;;39864:547;;:::o;40078:97::-;40210:7;:21;40218:9;40228:1;40218:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;40218:12:0;40210:21;;;;;;;;;;;;;40200:31;;:7;:31;:::i;:::-;40190:41;;40266:7;:21;40274:9;40284:1;40274:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;40274:12:0;40266:21;;;;;;;;;;;;;40256:31;;:7;:31;:::i;:::-;40246:41;-1:-1:-1;40058:3:0;;;;:::i;:::-;;;;40016:283;;;;40333:7;;40323;;:17;;;;:::i;:::-;40313:7;:27;40309:58;;;40350:7;;40359;;40342:25;;;;;;39864:547;;:::o;40309:58::-;40386:7;;40395;;-1:-1:-1;39864:547:0;-1:-1:-1;39864:547:0:o;34896:439::-;34979:16;;;;;;;34978:17;34970:65;;;;-1:-1:-1;;;34970:65:0;;11859:2:1;34970:65:0;;;11841:21:1;11898:2;11878:18;;;11871:30;11937:34;11917:18;;;11910:62;12008:5;11988:18;;;11981:33;12031:19;;34970:65:0;11657:399:1;34970:65:0;35051:20;35062:4;35068:2;35051:10;:20::i;:::-;35050:21;:37;;;;-1:-1:-1;35081:6:0;;-1:-1:-1;;;;;35075:12:0;;;35081:6;;35075:12;35050:37;35046:282;;;-1:-1:-1;;;;;35104:23:0;;;;;;:17;:23;;;;;;;:30;;-1:-1:-1;;35104:30:0;35130:4;35104:30;;;;;;35149:16;:23;;-1:-1:-1;;35149:23:0;;;;;35202:15;35187:12;:30;35234:21;:28;;;;-1:-1:-1;;;35234:28:0;;;35282:34;;;;;;9200:14:1;;9193:22;9175:41;;9163:2;9148:18;;9035:187;35282:34:0;;;;;;;;34896:439;;:::o;38223:1464::-;38318:18;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38318:18:0;38349:25;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38349:25:0;38385:19;38407:10;:8;:10::i;:::-;38385:32;-1:-1:-1;38447:21:0;38385:32;38447:7;:21;:::i;:::-;38430:14;;;:38;38481:1071;;;;-1:-1:-1;;;;;38512:11:0;;;;;;:7;:11;;;;;;;;38508:561;;;38558:15;;38544:11;:29;38608:17;;38592:13;:33;38660:17;;38644:13;:33;38508:561;;;-1:-1:-1;;;;;38703:13:0;;;;;;:7;:13;;;;;;;;38699:370;;;38751:14;;38737:11;:28;38800:16;;38784:13;:32;38851:16;;38835:13;:32;38699:370;;;38922:19;;38908:11;:33;38976:21;;38960:13;:37;39032:21;;39016:13;:37;38699:370;39125:16;;39110:11;;39100:21;;:7;:21;:::i;:::-;39099:42;;;;:::i;:::-;39085:11;;;:56;39222:16;;39204:13;;39188;;:29;;39204:13;39188:29;:::i;:::-;39177:41;;:7;:41;:::i;:::-;39176:62;;;;:::i;:::-;39156:17;;;:82;;;39289:11;;;;:31;;39156:82;39289:31;:::i;:::-;39278:43;;:7;:43;:::i;:::-;39253:68;;39352:11;;;;:25;;39366:11;;39352:25;:::i;:::-;39338:11;;;:39;38481:1071;;;39424:1;39410:11;;;:15;;;39440:17;;;:21;;;39476:32;;;39525:11;;;:15;38481:1071;39642:11;39622:6;:17;;;:31;;;;:::i;:::-;39607:6;:11;;;:47;;;;:::i;:::-;39589:6;:14;;;:66;;;;:::i;:::-;39564:22;;;:91;-1:-1:-1;39564:22:0;38223:1464;-1:-1:-1;;;;;38223:1464:0:o;40693:461::-;40773:19;40796:10;:8;:10::i;:::-;40773:33;-1:-1:-1;40817:18:0;40838:24;40773:33;40838:10;:24;:::i;:::-;40914:4;40898:22;;;;:7;:22;;;;;;40817:45;;-1:-1:-1;40898:35:0;;40817:45;;40898:35;:::i;:::-;40889:4;40873:22;;;;:7;:22;;;;;;;;:60;;;;40947:11;:26;;;;;;40944:104;;;41029:4;41013:22;;;;:7;:22;;;;;;:35;;41038:10;;41013:35;:::i;:::-;41004:4;40988:22;;;;:7;:22;;;;;:60;40944:104;41064:43;;19449:25:1;;;41089:4:0;;-1:-1:-1;;;;;41064:43:0;;;;;19437:2:1;19422:18;41064:43:0;;;;;;;40762:392;;40693:461;;:::o;40423:143::-;40513:4;40503:7;;:14;;;;:::i;:::-;40493:7;:24;40541:10;;:17;;40554:4;;40541:17;:::i;:::-;40528:10;:30;-1:-1:-1;;40423:143:0:o;14:748:1:-;68:5;121:3;114:4;106:6;102:17;98:27;88:55;;139:1;136;129:12;88:55;175:6;162:20;201:4;225:60;241:43;281:2;241:43;:::i;:::-;225:60;:::i;:::-;307:3;331:2;326:3;319:15;359:2;354:3;350:12;343:19;;394:2;386:6;382:15;446:3;441:2;435;432:1;428:10;420:6;416:23;412:32;409:41;406:61;;;463:1;460;453:12;406:61;485:1;495:238;509:2;506:1;503:9;495:238;;;580:3;567:17;597:31;622:5;597:31;:::i;:::-;641:18;;679:12;;;;711;;;;527:1;520:9;495:238;;;-1:-1:-1;751:5:1;;14:748;-1:-1:-1;;;;;;;14:748:1:o;767:673::-;821:5;874:3;867:4;859:6;855:17;851:27;841:55;;892:1;889;882:12;841:55;928:6;915:20;954:4;978:60;994:43;1034:2;994:43;:::i;978:60::-;1060:3;1084:2;1079:3;1072:15;1112:2;1107:3;1103:12;1096:19;;1147:2;1139:6;1135:15;1199:3;1194:2;1188;1185:1;1181:10;1173:6;1169:23;1165:32;1162:41;1159:61;;;1216:1;1213;1206:12;1159:61;1238:1;1248:163;1262:2;1259:1;1256:9;1248:163;;;1319:17;;1307:30;;1357:12;;;;1389;;;;1280:1;1273:9;1248:163;;1445:160;1510:20;;1566:13;;1559:21;1549:32;;1539:60;;1595:1;1592;1585:12;1539:60;1445:160;;;:::o;1610:247::-;1669:6;1722:2;1710:9;1701:7;1697:23;1693:32;1690:52;;;1738:1;1735;1728:12;1690:52;1777:9;1764:23;1796:31;1821:5;1796:31;:::i;1862:251::-;1932:6;1985:2;1973:9;1964:7;1960:23;1956:32;1953:52;;;2001:1;1998;1991:12;1953:52;2033:9;2027:16;2052:31;2077:5;2052:31;:::i;2378:973::-;2529:6;2537;2545;2553;2561;2614:3;2602:9;2593:7;2589:23;2585:33;2582:53;;;2631:1;2628;2621:12;2582:53;2670:9;2657:23;2689:31;2714:5;2689:31;:::i;:::-;2739:5;-1:-1:-1;2795:2:1;2780:18;;2767:32;2818:18;2848:14;;;2845:34;;;2875:1;2872;2865:12;2845:34;2898:61;2951:7;2942:6;2931:9;2927:22;2898:61;:::i;:::-;2888:71;;3012:2;3001:9;2997:18;2984:32;2968:48;;3041:2;3031:8;3028:16;3025:36;;;3057:1;3054;3047:12;3025:36;;3080:63;3135:7;3124:8;3113:9;3109:24;3080:63;:::i;:::-;3070:73;;;3195:2;3184:9;3180:18;3167:32;3243:4;3234:7;3230:18;3221:7;3218:31;3208:59;;3263:1;3260;3253:12;3208:59;2378:973;;;;-1:-1:-1;2378:973:1;;3340:3;3325:19;3312:33;;2378:973;-1:-1:-1;;2378:973:1:o;3356:388::-;3424:6;3432;3485:2;3473:9;3464:7;3460:23;3456:32;3453:52;;;3501:1;3498;3491:12;3453:52;3540:9;3527:23;3559:31;3584:5;3559:31;:::i;:::-;3609:5;-1:-1:-1;3666:2:1;3651:18;;3638:32;3679:33;3638:32;3679:33;:::i;:::-;3731:7;3721:17;;;3356:388;;;;;:::o;3749:456::-;3826:6;3834;3842;3895:2;3883:9;3874:7;3870:23;3866:32;3863:52;;;3911:1;3908;3901:12;3863:52;3950:9;3937:23;3969:31;3994:5;3969:31;:::i;:::-;4019:5;-1:-1:-1;4076:2:1;4061:18;;4048:32;4089:33;4048:32;4089:33;:::i;:::-;3749:456;;4141:7;;-1:-1:-1;;;4195:2:1;4180:18;;;;4167:32;;3749:456::o;4210:315::-;4275:6;4283;4336:2;4324:9;4315:7;4311:23;4307:32;4304:52;;;4352:1;4349;4342:12;4304:52;4391:9;4378:23;4410:31;4435:5;4410:31;:::i;:::-;4460:5;-1:-1:-1;4484:35:1;4515:2;4500:18;;4484:35;:::i;:::-;4474:45;;4210:315;;;;;:::o;4530:::-;4598:6;4606;4659:2;4647:9;4638:7;4634:23;4630:32;4627:52;;;4675:1;4672;4665:12;4627:52;4714:9;4701:23;4733:31;4758:5;4733:31;:::i;:::-;4783:5;4835:2;4820:18;;;;4807:32;;-1:-1:-1;;;4530:315:1:o;4850:595::-;4968:6;4976;5029:2;5017:9;5008:7;5004:23;5000:32;4997:52;;;5045:1;5042;5035:12;4997:52;5085:9;5072:23;5114:18;5155:2;5147:6;5144:14;5141:34;;;5171:1;5168;5161:12;5141:34;5194:61;5247:7;5238:6;5227:9;5223:22;5194:61;:::i;:::-;5184:71;;5308:2;5297:9;5293:18;5280:32;5264:48;;5337:2;5327:8;5324:16;5321:36;;;5353:1;5350;5343:12;5321:36;;5376:63;5431:7;5420:8;5409:9;5405:24;5376:63;:::i;:::-;5366:73;;;4850:595;;;;;:::o;5450:416::-;5540:6;5548;5601:2;5589:9;5580:7;5576:23;5572:32;5569:52;;;5617:1;5614;5607:12;5569:52;5657:9;5644:23;5690:18;5682:6;5679:30;5676:50;;;5722:1;5719;5712:12;5676:50;5745:61;5798:7;5789:6;5778:9;5774:22;5745:61;:::i;:::-;5735:71;;;5825:35;5856:2;5845:9;5841:18;5825:35;:::i;5871:180::-;5927:6;5980:2;5968:9;5959:7;5955:23;5951:32;5948:52;;;5996:1;5993;5986:12;5948:52;6019:26;6035:9;6019:26;:::i;6056:316::-;6124:6;6132;6140;6193:2;6181:9;6172:7;6168:23;6164:32;6161:52;;;6209:1;6206;6199:12;6161:52;6232:26;6248:9;6232:26;:::i;:::-;6222:36;;6277:35;6308:2;6297:9;6293:18;6277:35;:::i;:::-;6267:45;;6331:35;6362:2;6351:9;6347:18;6331:35;:::i;:::-;6321:45;;6056:316;;;;;:::o;6377:180::-;6436:6;6489:2;6477:9;6468:7;6464:23;6460:32;6457:52;;;6505:1;6502;6495:12;6457:52;-1:-1:-1;6528:23:1;;6377:180;-1:-1:-1;6377:180:1:o;6562:248::-;6630:6;6638;6691:2;6679:9;6670:7;6666:23;6662:32;6659:52;;;6707:1;6704;6697:12;6659:52;-1:-1:-1;;6730:23:1;;;6800:2;6785:18;;;6772:32;;-1:-1:-1;6562:248:1:o;6815:316::-;6892:6;6900;6908;6961:2;6949:9;6940:7;6936:23;6932:32;6929:52;;;6977:1;6974;6967:12;6929:52;-1:-1:-1;;7000:23:1;;;7070:2;7055:18;;7042:32;;-1:-1:-1;7121:2:1;7106:18;;;7093:32;;6815:316;-1:-1:-1;6815:316:1:o;7136:306::-;7224:6;7232;7240;7293:2;7281:9;7272:7;7268:23;7264:32;7261:52;;;7309:1;7306;7299:12;7261:52;7338:9;7332:16;7322:26;;7388:2;7377:9;7373:18;7367:25;7357:35;;7432:2;7421:9;7417:18;7411:25;7401:35;;7136:306;;;;;:::o;7447:385::-;7533:6;7541;7549;7557;7610:3;7598:9;7589:7;7585:23;7581:33;7578:53;;;7627:1;7624;7617:12;7578:53;-1:-1:-1;;7650:23:1;;;7720:2;7705:18;;7692:32;;-1:-1:-1;7771:2:1;7756:18;;7743:32;;7822:2;7807:18;7794:32;;-1:-1:-1;7447:385:1;-1:-1:-1;7447:385:1:o;9484:597::-;9596:4;9625:2;9654;9643:9;9636:21;9686:6;9680:13;9729:6;9724:2;9713:9;9709:18;9702:34;9754:1;9764:140;9778:6;9775:1;9772:13;9764:140;;;9873:14;;;9869:23;;9863:30;9839:17;;;9858:2;9835:26;9828:66;9793:10;;9764:140;;;9922:6;9919:1;9916:13;9913:91;;;9992:1;9987:2;9978:6;9967:9;9963:22;9959:31;9952:42;9913:91;-1:-1:-1;10065:2:1;10044:15;-1:-1:-1;;10040:29:1;10025:45;;;;10072:2;10021:54;;9484:597;-1:-1:-1;;;9484:597:1:o;19485:1026::-;19747:4;19795:3;19784:9;19780:19;19826:6;19815:9;19808:25;19852:2;19890:6;19885:2;19874:9;19870:18;19863:34;19933:3;19928:2;19917:9;19913:18;19906:31;19957:6;19992;19986:13;20023:6;20015;20008:22;20061:3;20050:9;20046:19;20039:26;;20100:2;20092:6;20088:15;20074:29;;20121:1;20131:218;20145:6;20142:1;20139:13;20131:218;;;20210:13;;-1:-1:-1;;;;;20206:62:1;20194:75;;20324:15;;;;20289:12;;;;20167:1;20160:9;20131:218;;;-1:-1:-1;;;;;;;20405:55:1;;;;20400:2;20385:18;;20378:83;-1:-1:-1;;;20492:3:1;20477:19;20470:35;20366:3;19485:1026;-1:-1:-1;;;19485:1026:1:o;21029:275::-;21100:2;21094:9;21165:2;21146:13;;-1:-1:-1;;21142:27:1;21130:40;;21200:18;21185:34;;21221:22;;;21182:62;21179:88;;;21247:18;;:::i;:::-;21283:2;21276:22;21029:275;;-1:-1:-1;21029:275:1:o;21309:183::-;21369:4;21402:18;21394:6;21391:30;21388:56;;;21424:18;;:::i;:::-;-1:-1:-1;21469:1:1;21465:14;21481:4;21461:25;;21309:183::o;21497:128::-;21537:3;21568:1;21564:6;21561:1;21558:13;21555:39;;;21574:18;;:::i;:::-;-1:-1:-1;21610:9:1;;21497:128::o;21630:274::-;21670:1;21696;21686:189;;-1:-1:-1;;;21728:1:1;21721:88;21832:4;21829:1;21822:15;21860:4;21857:1;21850:15;21686:189;-1:-1:-1;21889:9:1;;21630:274::o;21909:422::-;21998:1;22041:5;21998:1;22055:270;22076:7;22066:8;22063:21;22055:270;;;22135:4;22131:1;22127:6;22123:17;22117:4;22114:27;22111:53;;;22144:18;;:::i;:::-;22194:7;22184:8;22180:22;22177:55;;;22214:16;;;;22177:55;22293:22;;;;22253:15;;;;22055:270;;;22059:3;21909:422;;;;;:::o;22336:140::-;22394:5;22423:47;22464:4;22454:8;22450:19;22444:4;22530:5;22560:8;22550:80;;-1:-1:-1;22601:1:1;22615:5;;22550:80;22649:4;22639:76;;-1:-1:-1;22686:1:1;22700:5;;22639:76;22731:4;22749:1;22744:59;;;;22817:1;22812:130;;;;22724:218;;22744:59;22774:1;22765:10;;22788:5;;;22812:130;22849:3;22839:8;22836:17;22833:43;;;22856:18;;:::i;:::-;-1:-1:-1;;22912:1:1;22898:16;;22927:5;;22724:218;;23026:2;23016:8;23013:16;23007:3;23001:4;22998:13;22994:36;22988:2;22978:8;22975:16;22970:2;22964:4;22961:12;22957:35;22954:77;22951:159;;;-1:-1:-1;23063:19:1;;;23095:5;;22951:159;23142:34;23167:8;23161:4;23142:34;:::i;:::-;23212:6;23208:1;23204:6;23200:19;23191:7;23188:32;23185:58;;;23223:18;;:::i;:::-;23261:20;;22481:806;-1:-1:-1;;;22481:806:1:o;23292:168::-;23332:7;23398:1;23394;23390:6;23386:14;23383:1;23380:21;23375:1;23368:9;23361:17;23357:45;23354:71;;;23405:18;;:::i;:::-;-1:-1:-1;23445:9:1;;23292:168::o;23465:125::-;23505:4;23533:1;23530;23527:8;23524:34;;;23538:18;;:::i;:::-;-1:-1:-1;23575:9:1;;23465:125::o;23595:437::-;23674:1;23670:12;;;;23717;;;23738:61;;23792:4;23784:6;23780:17;23770:27;;23738:61;23845:2;23837:6;23834:14;23814:18;23811:38;23808:218;;;-1:-1:-1;;;23879:1:1;23872:88;23983:4;23980:1;23973:15;24011:4;24008:1;24001:15;23808:218;;23595:437;;;:::o;24037:135::-;24076:3;-1:-1:-1;;24097:17:1;;24094:43;;;24117:18;;:::i;:::-;-1:-1:-1;24164:1:1;24153:13;;24037:135::o;24177:175::-;24214:3;24258:4;24251:5;24247:16;24287:4;24278:7;24275:17;24272:43;;;24295:18;;:::i;:::-;24344:1;24331:15;;24177:175;-1:-1:-1;;24177:175:1:o;24357:184::-;-1:-1:-1;;;24406:1:1;24399:88;24506:4;24503:1;24496:15;24530:4;24527:1;24520:15;24546:184;-1:-1:-1;;;24595:1:1;24588:88;24695:4;24692:1;24685:15;24719:4;24716:1;24709:15;24735:184;-1:-1:-1;;;24784:1:1;24777:88;24884:4;24881:1;24874:15;24908:4;24905:1;24898:15;24924:184;-1:-1:-1;;;24973:1:1;24966:88;25073:4;25070:1;25063:15;25097:4;25094:1;25087:15;25113:154;-1:-1:-1;;;;;25192:5:1;25188:54;25181:5;25178:65;25168:93;;25257:1;25254;25247:12

Swarm Source

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