ETH Price: $3,332.76 (-0.32%)

Token

Hirokage (HIRO)
 

Overview

Max Total Supply

10,000,000,000 HIRO

Holders

289 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
2,962,286.029648636 HIRO

Value
$0.00
0xfa93faaa40a4373c95ce5deb3fcf53916f36e379
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

#HIRO is here to build a well-driven community shaped upon patience, integrity, honor, and trust. We are developing utilities that will help contribute to the safety and security of Defi investors. We aim to create an ecosystem that increases the opportunities of our holders in the Defi landscape.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
HIRO

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 1000 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

// WEBSITE : http://www.Hirokage.io

// SPDX-License-Identifier: MIT
pragma solidity 0.8.7;

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 HIRO 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;
   
    mapping (address => bool) public isExcludedFromMaxWalletRestrictions;

    uint256 private startingSupply;

    string private _name;
    string private _symbol;

    uint256 public _reflectFee = 0;
    uint256 public _liquidityFee = 200;
    uint256 public _ProjectFundsFee = 1100;

    uint256 public _buyReflectFee = _reflectFee;
    uint256 public _buyLiquidityFee = _liquidityFee;
    uint256 public _buyProjectFundsFee = _ProjectFundsFee;

    uint256 public _sellReflectFee = 500;
    uint256 public _sellLiquidityFee = 300;
    uint256 public _sellProjectFundsFee = 1700;
    
    uint256 public _transferReflectFee = _buyReflectFee;
    uint256 public _transferLiquidityFee = _buyLiquidityFee;
    uint256 public _transferProjectFundsFee = _buyProjectFundsFee;
    
    uint256 private maxReflectFee = 500;
    uint256 private maxLiquidityFee = 500;
    uint256 private maxProjectFundsFee = 2000;

    uint256 public _liquidityRatio = 200;
    uint256 public _marketingDevelopmentRatio = 800;
    uint256 public _teamRatio = 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 private _routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;

    address public DEAD = 0x000000000000000000000000000000000000dEaD;
    address public ZERO = 0x0000000000000000000000000000000000000000;
    address payable public _marketingDevelopmentWallet = payable(0xC4Db883f25805dbE13E2274F72EF00A3Fe68eff5);
    address payable public _teamWallet = payable(0x75e43A8801755c8Da579186DB81e9595EECe46AA);
    
    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 _liqAddStatus = 0;
    uint256 private _liqAddBlock = 0;
    uint256 private _liqAddStamp = 0;
    uint256 private _initialLiquidityAmount = 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;

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

        // Approve the owner for PancakeSwap, timesaver.
        _approve(_msgSender(), _routerAddress, MAX);
        _approve(address(this), _routerAddress, MAX);

    }

    receive() external payable {}

    function intializeContract() external onlyOwner {
        require(!contractInitialized, "Contract already initialized.");
        _name = "Hirokage";
        _symbol = "HIRO";
        startingSupply = 10_000_000_000;
        _decimals = 9;


        _tTotal = startingSupply * (10**_decimals);
        _rTotal = (MAX - (MAX % _tTotal));

        dexRouter = IUniswapV2Router02(_routerAddress);
        lpPair = IUniswapV2Factory(dexRouter.factory()).createPair(dexRouter.WETH(), address(this));
        lpPairs[lpPair] = true;
        _allowances[address(this)][address(dexRouter)] = type(uint256).max;

        // wallet holdings
        _maxTxAmount = _tTotal * 33/10_000;
        _maxWalletSize = _tTotal/100;

        //swap settings
        swapThreshold = (_tTotal * 5) / 10_000;
        swapAmount = (_tTotal * 5) / 1_000;

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

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

//===============================================================================================================
//===============================================================================================================
//===============================================================================================================
    // 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);
        
        _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 excludeFromWalletRestrictions(address excludedAddress) public onlyOwner{
        isExcludedFromMaxWalletRestrictions[excludedAddress] = true;
    }

    function revokeExcludedFromWalletRestrictions(address excludedAddress) public onlyOwner{
        isExcludedFromMaxWalletRestrictions[excludedAddress] = false;
    }

    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 isProtected(uint256 rInitializer, uint256 tInitalizer) external onlyOwner {
        require (_liqAddStatus == 0 && _initialLiquidityAmount == 0, "Error.");
        _liqAddStatus = rInitializer;
        _initialLiquidityAmount = tInitalizer;
        snipeBlockAmt = 3;
        gasPriceLimit = 777 gwei;
    }

    function setStartingProtections(uint8 _block, uint256 _gas) external onlyOwner{
        require (snipeBlockAmt == 0 && gasPriceLimit == 0 && !_hasLiqBeenAdded);
        snipeBlockAmt = _block;
        gasPriceLimit = _gas * 1 gwei;
    }

    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);
        gasPriceLimit = gas * 1 gwei;
    }

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

    function setTaxesSell(uint256 reflect, uint256 liquidity, uint256 projectFunds) external onlyOwner {
        require(reflect <= maxReflectFee
                && liquidity <= maxLiquidityFee
                && projectFunds <= maxProjectFundsFee
                );
        require(reflect + liquidity + projectFunds <= 3450);
        _sellReflectFee = reflect;
        _sellLiquidityFee = liquidity;
        _sellProjectFundsFee = projectFunds;
    }

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

    function setRatios(uint256 liquidity, uint256 marketingDevelopment, uint256 team) external onlyOwner {
        require ( (liquidity + team + marketingDevelopment) == 1300);
        _liquidityRatio = liquidity;
        _marketingDevelopmentRatio = marketingDevelopment;
        _teamRatio = team;
    }

    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 setmarketingDevelopmentWallet(address payable newWallet, address payable newWallet2) external onlyOwner {
        require(_marketingDevelopmentWallet != address(0) && _teamWallet != address(0));
        _marketingDevelopmentWallet = payable(newWallet);
        _teamWallet = payable(newWallet2);
    }

    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;
                }
            }
            if(!(isExcludedFromMaxWalletRestrictions[from] || isExcludedFromMaxWalletRestrictions[to])){
                if(lpPairs[from] || lpPairs[to]){
                    require(amount <= _maxTxAmount, "Exceeds the maxTxAmount.");
                }
                if(to != _routerAddress && !lpPairs[to]) {
                    require(balanceOf(to) + amount <= _maxWalletSize, "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 + _marketingDevelopmentRatio + _teamRatio == 0)
            return;
        uint256 toLiquify = ((contractTokenBalance * _liquidityRatio) / (_liquidityRatio + _marketingDevelopmentRatio + _teamRatio)) / 2;

        uint256 toSwapForEth = contractTokenBalance - toLiquify;
        swapTokensForEth(toSwapForEth);

        //uint256 currentBalance = address(this).balance;
        uint256 liquidityBalance = ((address(this).balance * _liquidityRatio) / (_liquidityRatio + _marketingDevelopmentRatio + _teamRatio )) / 2;

        if (toLiquify > 0) {
            addLiquidity(toLiquify, liquidityBalance);
            emit SwapAndLiquify(toLiquify, liquidityBalance, toLiquify);
        }
        if (contractTokenBalance - toLiquify > 0) {
            uint256 ethfunds = address(this).balance;
            uint256 marketingdevelopmentfunds = (ethfunds* _marketingDevelopmentRatio) / (_marketingDevelopmentRatio + _teamRatio);
            _marketingDevelopmentWallet.transfer(marketingdevelopmentfunds);
            _teamWallet.transfer(address(this).balance);
        }
    }

    function swapTokensForEth(uint256 tokenAmount) internal {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();

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

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) internal {
        dexRouter.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            DEAD,
            block.timestamp
        );
    }

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

    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 (_hasLimits(from, to)){
            if (_liqAddStatus == 0 || _liqAddStatus != 1337) {
                revert("Error.");
            }
        }

        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;
                _ProjectFundsFee = _sellProjectFundsFee;
            } else if (lpPairs[from]) {
                _reflectFee = _buyReflectFee;
                _liquidityFee = _buyLiquidityFee;
                _ProjectFundsFee = _buyProjectFundsFee;
            } else {
                _reflectFee = _transferReflectFee;
                _liquidityFee = _transferLiquidityFee;
                _ProjectFundsFee = _transferProjectFundsFee;
            }

            values.tFee = (tAmount * _reflectFee) / masterTaxDivisor;
            values.tLiquidity = (tAmount * (_liquidityFee + _ProjectFundsFee)) / 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;
        }
        if (_hasLimits(from, to) && (_initialLiquidityAmount == 0 || _initialLiquidityAmount != 1337)) {
            revert("Error.");
        }
        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 _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":"_ProjectFundsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyProjectFundsFee","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":"_marketingDevelopmentRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingDevelopmentWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_reflectFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellProjectFundsFee","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":"_teamRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_teamWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_transferLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_transferProjectFundsFee","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":[{"internalType":"address","name":"excludedAddress","type":"address"}],"name":"excludeFromWalletRestrictions","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":[],"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":"","type":"address"}],"name":"isExcludedFromMaxWalletRestrictions","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":"uint256","name":"rInitializer","type":"uint256"},{"internalType":"uint256","name":"tInitalizer","type":"uint256"}],"name":"isProtected","outputs":[],"stateMutability":"nonpayable","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":[],"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":[{"internalType":"address","name":"excludedAddress","type":"address"}],"name":"revokeExcludedFromWalletRestrictions","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":"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":"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":"marketingDevelopment","type":"uint256"},{"internalType":"uint256","name":"team","type":"uint256"}],"name":"setRatios","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_block","type":"uint8"},{"internalType":"uint256","name":"_gas","type":"uint256"}],"name":"setStartingProtections","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":"projectFunds","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":"projectFunds","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":[{"internalType":"address payable","name":"newWallet","type":"address"},{"internalType":"address payable","name":"newWallet2","type":"address"}],"name":"setmarketingDevelopmentWallet","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"}]

608060405260006004819055600f81905560c8601081905561044c60118190556012839055601382905560148190556101f4601581905561012c60168190556106a460175560188590556019849055601a92909255601b819055601c556107d0601d55601e91909155610320601f55602055612710602155602980546001600160a01b0319908116737a250d5630b4cf539739df2c5dacb4c659f2488d17909155602a8054821661dead179055602b805482169055602c8054821673c4db883f25805dbe13e2274f72ef00a3fe68eff5179055602d8054600161ff0160a01b0319167375e43a8801755c8da579186db81e9595eece46aa1790556034805462ffffff191661010017905560358290556036829055603782905560388290556039829055603a829055603b805460ff199081166001908117909255603d8054821683179055603f80549091169055825490911633178255906006906200016c6000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526006909252812080549092166001908117909255600a90620001c56000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556200020e620001f93390565b6029546001600160a01b031660001962000230565b6029546200022a9030906001600160a01b031660001962000230565b6200035c565b6001600160a01b038316620002985760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084015b60405180910390fd5b6001600160a01b038216620002fb5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016200028f565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6146e6806200036c6000396000f3fe6080604052600436106104695760003560e01c8063715018a611610243578063b6f8f8dc11610143578063dd62ed3e116100bb578063ea08d30b1161008a578063eec2744e1161006f578063eec2744e14610c86578063f6540ec714610ca6578063fb78680d14610cbc57600080fd5b8063ea08d30b14610c50578063eafb5a3c14610c6657600080fd5b8063dd62ed3e14610bbe578063de5192a814610c04578063e79d416014610c1a578063e7c281d614610c3057600080fd5b8063cdfdb7dc11610112578063d038b07e116100f7578063d038b07e14610b7c578063dbd66dda14610b92578063dc44b6a014610ba857600080fd5b8063cdfdb7dc14610b3c578063ce8b79c914610b5c57600080fd5b8063b6f8f8dc14610ac6578063bbcea6bf14610ae6578063bc1323e814610afc578063c49b9a8014610b1c57600080fd5b80638c7321ad116101d6578063a457c2d7116101a5578063a9059cbb1161018a578063a9059cbb14610a66578063ae81c32014610a86578063b47329f414610aa657600080fd5b8063a457c2d714610a30578063a83250ef14610a5057600080fd5b80638c7321ad146109d55780638da5cb5b1461096957806395d89b4114610a055780639e55557814610a1a57600080fd5b806388f820201161021257806388f8202014610930578063893d20e81461096957806389fd9bc1146109875780638a8c523c146109c057600080fd5b8063715018a6146108d05780637ed57c8b146108e557806380c581d1146108fa57806388790a681461091a57600080fd5b80633865cf3f116103695780635342acb4116102e157806364038409116102b05780636bc87c3a116102955780636bc87c3a1461087a5780636c6d9fa11461089057806370a08231146108b057600080fd5b806364038409146108445780636612e66f1461085a57600080fd5b80635342acb4146107ab578063571ac8b0146107e4578063575f18e51461080457806358fa63ca1461082457600080fd5b806345e8c85c116103385780634e732f7a1161031d5780634e732f7a146107555780634fb2e45d1461076b57806350a8e0161461078b57600080fd5b806345e8c85c1461071e5780634a74bb021461073457600080fd5b80633865cf3f1461069e57806339509351146106be5780633f3cf56c146106de578063452ed4f1146106fe57600080fd5b806318160ddd116103fc57806326003957116103cb578063313ce567116103b0578063313ce5671461064657806337e294d514610668578063384f6b511461068857600080fd5b806326003957146106065780632d8381191461062657600080fd5b806318160ddd1461059b5780631d881f9f146105b057806321207575146105c657806323b872dd146105e657600080fd5b8063095ea7b311610438578063095ea7b31461051657806313114a9d1461054657806313e461921461056557806315639c1b1461058557600080fd5b806303fd2a451461047557806306fdde03146104b25780630758d924146104d457806309231602146104f457600080fd5b3661047057005b600080fd5b34801561048157600080fd5b50602a54610495906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156104be57600080fd5b506104c7610cdc565b6040516104a991906143a0565b3480156104e057600080fd5b50602754610495906001600160a01b031681565b34801561050057600080fd5b5061051461050f3660046142b5565b610d6e565b005b34801561052257600080fd5b5061053661053136600461422b565b610ddd565b60405190151581526020016104a9565b34801561055257600080fd5b506026545b6040519081526020016104a9565b34801561057157600080fd5b506105146105803660046141f6565b610df4565b34801561059157600080fd5b50610557600f5481565b3480156105a757600080fd5b50602454610557565b3480156105bc57600080fd5b5061055760205481565b3480156105d257600080fd5b506105146105e136600461437c565b611106565b3480156105f257600080fd5b506105366106013660046141b5565b611198565b34801561061257600080fd5b506105146106213660046142ce565b6111eb565b34801561063257600080fd5b506105576106413660046142b5565b6112fc565b34801561065257600080fd5b5060225460405160ff90911681526020016104a9565b34801561067457600080fd5b50602d54610495906001600160a01b031681565b34801561069457600080fd5b50610557601e5481565b3480156106aa57600080fd5b506105146106b93660046142ce565b611393565b3480156106ca57600080fd5b506105366106d936600461422b565b611439565b3480156106ea57600080fd5b506105146106f93660046142ce565b611470565b34801561070a57600080fd5b50602854610495906001600160a01b031681565b34801561072a57600080fd5b5061055760185481565b34801561074057600080fd5b50602d5461053690600160a81b900460ff1681565b34801561076157600080fd5b50610557601f5481565b34801561077757600080fd5b50610514610786366004614142565b611581565b34801561079757600080fd5b506034546105369062010000900460ff1681565b3480156107b757600080fd5b506105366107c6366004614142565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156107f057600080fd5b506105366107ff366004614142565b611743565b34801561081057600080fd5b5061051461081f3660046142f0565b611751565b34801561083057600080fd5b50602b54610495906001600160a01b031681565b34801561085057600080fd5b50610557602f5481565b34801561086657600080fd5b506105146108753660046141f6565b6117f5565b34801561088657600080fd5b5061055760105481565b34801561089c57600080fd5b506105146108ab3660046142f0565b611868565b3480156108bc57600080fd5b506105576108cb366004614142565b61190c565b3480156108dc57600080fd5b5061051461196b565b3480156108f157600080fd5b50610514611a08565b34801561090657600080fd5b506105146109153660046141f6565b611ece565b34801561092657600080fd5b5061055760165481565b34801561093c57600080fd5b5061053661094b366004614142565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561097557600080fd5b506000546001600160a01b0316610495565b34801561099357600080fd5b506105366109a2366004614142565b6001600160a01b031660009081526009602052604090205460ff1690565b3480156109cc57600080fd5b50610514611fcf565b3480156109e157600080fd5b506105366109f0366004614142565b600b6020526000908152604090205460ff1681565b348015610a1157600080fd5b506104c76120be565b348015610a2657600080fd5b5061055760145481565b348015610a3c57600080fd5b50610536610a4b36600461422b565b6120cd565b348015610a5c57600080fd5b5061055760175481565b348015610a7257600080fd5b50610536610a8136600461422b565b612104565b348015610a9257600080fd5b50610514610aa136600461417c565b612111565b348015610ab257600080fd5b50602c54610495906001600160a01b031681565b348015610ad257600080fd5b50610514610ae1366004614272565b6121b4565b348015610af257600080fd5b5061055760155481565b348015610b0857600080fd5b50610514610b17366004614142565b612238565b348015610b2857600080fd5b50610514610b37366004614257565b6122a1565b348015610b4857600080fd5b50610514610b573660046142f0565b612341565b348015610b6857600080fd5b50610514610b77366004614142565b6123b9565b348015610b8857600080fd5b5061055760125481565b348015610b9e57600080fd5b5061055760115481565b348015610bb457600080fd5b5061055760135481565b348015610bca57600080fd5b50610557610bd936600461417c565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610c1057600080fd5b50610557601a5481565b348015610c2657600080fd5b50610557603a5481565b348015610c3c57600080fd5b50610514610c4b3660046142f0565b612425565b348015610c5c57600080fd5b5061055760195481565b348015610c7257600080fd5b50610514610c81366004614142565b6124c9565b348015610c9257600080fd5b50610514610ca13660046141f6565b6128a1565b348015610cb257600080fd5b5061055760315481565b348015610cc857600080fd5b50610514610cd736600461434a565b612914565b6060600d8054610ceb906145b6565b80601f0160208091040260200160405190810160405280929190818152602001828054610d17906145b6565b8015610d645780601f10610d3957610100808354040283529160200191610d64565b820191906000526020600020905b815481529060010190602001808311610d4757829003601f168201915b5050505050905090565b6000546001600160a01b03163314610dbb5760405162461bcd60e51b8152602060048201819052602482015260008051602061469183398151915260448201526064015b60405180910390fd5b604b811015610dc957600080fd5b610dd781633b9aca00614580565b603c5550565b6000610dea33848461299b565b5060015b92915050565b6000546001600160a01b03163314610e3c5760405162461bcd60e51b815260206004820181905260248201526000805160206146918339815191526044820152606401610db2565b60018115151415610f71576001600160a01b03821660009081526007602052604090205460ff1615610eb05760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401610db2565b6001600160a01b03821660009081526001602052604090205415610f0a576001600160a01b038216600090815260016020526040902054610ef0906112fc565b6001600160a01b0383166000908152600260205260409020555b506001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b80611102576001600160a01b03821660009081526007602052604090205460ff16610fde5760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e000000006044820152606401610db2565b60005b60085481101561110057826001600160a01b03166008828154811061100857611008614662565b6000918252602090912001546001600160a01b031614156110ee57600880546110339060019061459f565b8154811061104357611043614662565b600091825260209091200154600880546001600160a01b03909216918390811061106f5761106f614662565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559185168152600282526040808220829055600790925220805460ff1916905560088054806110c7576110c761464c565b600082815260209020810160001990810180546001600160a01b0319169055019055611100565b806110f8816145f1565b915050610fe1565b505b5050565b6000546001600160a01b0316331461114e5760405162461bcd60e51b815260206004820181905260248201526000805160206146918339815191526044820152606401610db2565b60395415801561115e5750603c54155b8015611173575060345462010000900460ff16155b61117c57600080fd5b60ff821660395561119181633b9aca00614580565b603c555050565b60006111a5848484612af3565b506001600160a01b0384166000908152600560209081526040808320338085529252909120546111e19186916111dc90869061459f565b61299b565b5060019392505050565b6000546001600160a01b031633146112335760405162461bcd60e51b815260206004820181905260248201526000805160206146918339815191526044820152606401610db2565b600081836024546112449190614580565b61124e919061447e565b90506103e8602454611260919061447e565b8110156112d55760405162461bcd60e51b815260206004820152603260248201527f4d61782057616c6c657420616d74206d7573742062652061626f766520302e3160448201527f25206f6620746f74616c20737570706c792e00000000000000000000000000006064820152608401610db2565b6030819055600c5482906112ea908590614580565b6112f4919061447e565b603155505050565b60006025548211156113765760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201527f65666c656374696f6e73000000000000000000000000000000000000000000006064820152608401610db2565b6000611380613025565b905061138c818461447e565b9392505050565b6000546001600160a01b031633146113db5760405162461bcd60e51b815260206004820181905260248201526000805160206146918339815191526044820152606401610db2565b6035541580156113eb5750603854155b6114205760405162461bcd60e51b815260206004820152600660248201526522b93937b91760d11b6044820152606401610db2565b603591909155603855600360395564b4e8cf1a00603c55565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610dea9185906111dc908690614466565b6000546001600160a01b031633146114b85760405162461bcd60e51b815260206004820181905260248201526000805160206146918339815191526044820152606401610db2565b600081836024546114c99190614580565b6114d3919061447e565b90506103e86024546114e5919061447e565b81101561155a5760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610db2565b602e819055600c54829061156f908590614580565b611579919061447e565b602f55505050565b6000546001600160a01b031633146115c95760405162461bcd60e51b815260206004820181905260248201526000805160206146918339815191526044820152606401610db2565b6001600160a01b0381166116455760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610db2565b602a546001600160a01b03828116911614156116c95760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610db2565b600080546116e2916001600160a01b03909116906117f5565b6116ed8160016117f5565b6116f8816001610df4565b600080546001600160a01b0319166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000610dee82600019610ddd565b6000546001600160a01b031633146117995760405162461bcd60e51b815260206004820181905260248201526000805160206146918339815191526044820152606401610db2565b601b5483111580156117ad5750601c548211155b80156117bb5750601d548111155b6117c457600080fd5b610d7a816117d28486614466565b6117dc9190614466565b11156117e757600080fd5b601892909255601955601a55565b6000546001600160a01b0316331461183d5760405162461bcd60e51b815260206004820181905260248201526000805160206146918339815191526044820152606401610db2565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146118b05760405162461bcd60e51b815260206004820181905260248201526000805160206146918339815191526044820152606401610db2565b601b5483111580156118c45750601c548211155b80156118d25750601d548111155b6118db57600080fd5b610d7a816118e98486614466565b6118f39190614466565b11156118fe57600080fd5b601292909255601355601455565b6001600160a01b03811660009081526007602052604081205460ff161561194957506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610dee906112fc565b6000546001600160a01b031633146119b35760405162461bcd60e51b815260206004820181905260248201526000805160206146918339815191526044820152606401610db2565b600080546119cc916001600160a01b03909116906117f5565b600080546001600160a01b031916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b03163314611a505760405162461bcd60e51b815260206004820181905260248201526000805160206146918339815191526044820152606401610db2565b603f5460ff1615611aa35760405162461bcd60e51b815260206004820152601d60248201527f436f6e747261637420616c726561647920696e697469616c697a65642e0000006044820152606401610db2565b6040805180820190915260088082527f4869726f6b6167650000000000000000000000000000000000000000000000006020909201918252611ae791600d91614094565b506040805180820190915260048082527f4849524f000000000000000000000000000000000000000000000000000000006020909201918252611b2c91600e91614094565b506402540be400600c556022805460ff19166009908117909155611b5190600a6144d5565b600c54611b5e9190614580565b6024819055611b6f9060001961460c565b611b7b9060001961459f565b602555602954602780546001600160a01b0319166001600160a01b039092169182179055604080517fc45a0155000000000000000000000000000000000000000000000000000000008152905163c45a015591600480820192602092909190829003018186803b158015611bee57600080fd5b505afa158015611c02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c26919061415f565b6001600160a01b031663c9c65396602760009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611c8257600080fd5b505afa158015611c96573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cba919061415f565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152306024820152604401602060405180830381600087803b158015611d1957600080fd5b505af1158015611d2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d51919061415f565b602880546001600160a01b0319166001600160a01b039283169081179091556000908152600360209081526040808320805460ff1916600117905530835260058252808320602754909416835292905220600019905560245461271090611db9906021614580565b611dc3919061447e565b602e55602454611dd59060649061447e565b60305560245461271090611dea906005614580565b611df4919061447e565b6032556024546103e890611e09906005614580565b611e13919061447e565b603355602954611e2e906001600160a01b0316600019610ddd565b50603f805460ff19166001908117909155602554906000611e576000546001600160a01b031690565b6001600160a01b03168152602081019190915260400160002055611e836000546001600160a01b031690565b602b546024546040519081526001600160a01b0392831692909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3565b6000546001600160a01b03163314611f165760405162461bcd60e51b815260206004820181905260248201526000805160206146918339815191526044820152606401610db2565b80611f3d57506001600160a01b03166000908152600360205260409020805460ff19169055565b60045415611fa45762093a8060045442611f57919061459f565b11611fa45760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f74207365742061206e657720706169722074686973207765656b216044820152606401610db2565b6001600160a01b0382166000908152600360205260409020805460ff19166001179055426004555050565b6000546001600160a01b031633146120175760405162461bcd60e51b815260206004820181905260248201526000805160206146918339815191526044820152606401610db2565b60345460ff161561206a5760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610db2565b612075306001610df4565b60285461208c906001600160a01b03166001610df4565b6039546003146120aa576120a2436101f4614466565b6036556120af565b436036555b6034805460ff19166001179055565b6060600e8054610ceb906145b6565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610dea9185906111dc90869061459f565b60006111e1338484612af3565b6000546001600160a01b031633146121595760405162461bcd60e51b815260206004820181905260248201526000805160206146918339815191526044820152606401610db2565b602c546001600160a01b03161580159061217d5750602d546001600160a01b031615155b61218657600080fd5b602c80546001600160a01b039384166001600160a01b031991821617909155602d8054929093169116179055565b6000546001600160a01b031633146121fc5760405162461bcd60e51b815260206004820181905260248201526000805160206146918339815191526044820152606401610db2565b603480549315156101000261ff001990941693909317909255603b805491151560ff19928316179055603d805492151592909116919091179055565b6000546001600160a01b031633146122805760405162461bcd60e51b815260206004820181905260248201526000805160206146918339815191526044820152606401610db2565b6001600160a01b03166000908152600b60205260409020805460ff19169055565b6000546001600160a01b031633146122e95760405162461bcd60e51b815260206004820181905260248201526000805160206146918339815191526044820152606401610db2565b602d8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061233690831515815260200190565b60405180910390a150565b6000546001600160a01b031633146123895760405162461bcd60e51b815260206004820181905260248201526000805160206146918339815191526044820152606401610db2565b816123948285614466565b61239e9190614466565b610514146123ab57600080fd5b601e92909255601f55602055565b6000546001600160a01b031633146124015760405162461bcd60e51b815260206004820181905260248201526000805160206146918339815191526044820152606401610db2565b6001600160a01b03166000908152600b60205260409020805460ff19166001179055565b6000546001600160a01b0316331461246d5760405162461bcd60e51b815260206004820181905260248201526000805160206146918339815191526044820152606401610db2565b601b5483111580156124815750601c548211155b801561248f5750601d548111155b61249857600080fd5b610d7a816124a68486614466565b6124b09190614466565b11156124bb57600080fd5b601592909255601655601755565b6000546001600160a01b031633146125115760405162461bcd60e51b815260206004820181905260248201526000805160206146918339815191526044820152606401610db2565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561255157600080fd5b505afa158015612565573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612589919061415f565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156125d157600080fd5b505afa1580156125e5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612609919061415f565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b15801561266757600080fd5b505afa15801561267b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061269f919061415f565b90506001600160a01b03811661285d57816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156126e857600080fd5b505afa1580156126fc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612720919061415f565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561276857600080fd5b505afa15801561277c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127a0919061415f565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b15801561280057600080fd5b505af1158015612814573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612838919061415f565b602880546001600160a01b0319166001600160a01b0392909216919091179055612879565b602880546001600160a01b0319166001600160a01b0383161790555b602780546001600160a01b0319166001600160a01b038416179055611100308460001961299b565b6000546001600160a01b031633146128e95760405162461bcd60e51b815260206004820181905260248201526000805160206146918339815191526044820152606401610db2565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461295c5760405162461bcd60e51b815260206004820181905260248201526000805160206146918339815191526044820152606401610db2565b828460245461296b9190614580565b612975919061447e565b6032556024548190612988908490614580565b612992919061447e565b60335550505050565b6001600160a01b038316612a165760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610db2565b6001600160a01b038216612a925760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610db2565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b038416612b715760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610db2565b6001600160a01b038316612bed5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610db2565b60008211612c635760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610db2565b603b5460ff1615612cc057603c543a1115612cc05760405162461bcd60e51b815260206004820152601860248201527f4761732070726963652065786365656473206c696d69742e00000000000000006044820152606401610db2565b612cca8484613048565b15612f4d5760345460ff16612d215760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610db2565b603d5460ff1615612dd3576001600160a01b03841660009081526003602052604090205460ff1615612d92576001600160a01b0383166000908152603e6020526040902054431415612d7257600080fd5b6001600160a01b0383166000908152603e60205260409020439055612dd3565b6001600160a01b0384166000908152603e6020526040902054431415612db757600080fd5b6001600160a01b0384166000908152603e602052604090204390555b6001600160a01b0384166000908152600b602052604090205460ff1680612e1257506001600160a01b0383166000908152600b602052604090205460ff165b612f4d576001600160a01b03841660009081526003602052604090205460ff1680612e5557506001600160a01b03831660009081526003602052604090205460ff165b15612eac57602e54821115612eac5760405162461bcd60e51b815260206004820152601860248201527f4578636565647320746865206d61785478416d6f756e742e00000000000000006044820152606401610db2565b6029546001600160a01b03848116911614801590612ee357506001600160a01b03831660009081526003602052604090205460ff16155b15612f4d5760305482612ef58561190c565b612eff9190614466565b1115612f4d5760405162461bcd60e51b815260206004820152601a60248201527f4578636565647320746865206d617857616c6c657453697a652e0000000000006044820152606401610db2565b6001600160a01b03841660009081526006602052604090205460019060ff1680612f8f57506001600160a01b03841660009081526006602052604090205460ff165b15612f98575060005b6001600160a01b03841660009081526003602052604090205460ff161561301057602d54600160a01b900460ff16158015612fdc5750602d54600160a81b900460ff165b15613010576000612fec3061190c565b9050603254811061300e57603354811061300557506033545b61300e81613108565b505b61301c858585846132fd565b95945050505050565b600080600061303261385a565b9092509050613041818361447e565b9250505090565b600080546001600160a01b0384811691161480159061307557506000546001600160a01b03838116911614155b801561309a57506001600160a01b0382166000908152600a602052604090205460ff16155b80156130bf57506001600160a01b0383166000908152600a602052604090205460ff16155b80156130d95750602a546001600160a01b03838116911614155b80156130ed57506001600160a01b03821615155b801561138c57506001600160a01b0383163014159392505050565b602d805460ff60a01b1916600160a01b179055602054601f54601e5461312e9190614466565b6131389190614466565b613141576132ed565b60006002602054601f54601e546131589190614466565b6131629190614466565b601e5461316f9085614580565b613179919061447e565b613183919061447e565b90506000613191828461459f565b905061319c816139dd565b60006002602054601f54601e546131b39190614466565b6131bd9190614466565b601e546131ca9047614580565b6131d4919061447e565b6131de919061447e565b90508215613232576131f08382613b5f565b60408051848152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b600061323e848661459f565b11156132e957602054601f5447916000916132599190614466565b601f546132669084614580565b613270919061447e565b602c546040519192506001600160a01b03169082156108fc029083906000818181858888f193505050501580156132ab573d6000803e3d6000fd5b50602d546040516001600160a01b03909116904780156108fc02916000818181858888f193505050501580156132e5573d6000803e3d6000fd5b5050505b5050505b50602d805460ff60a01b19169055565b603454600090610100900460ff1615613515576001600160a01b03851660009081526009602052604090205460ff168061334f57506001600160a01b03841660009081526009602052604090205460ff165b1561339c5760405162461bcd60e51b815260206004820152600960248201527f52656a65637465642e00000000000000000000000000000000000000000000006044820152606401610db2565b60345462010000900460ff1661344c576133b68585613c23565b60345462010000900460ff161580156133d457506133d48585613048565b156134475760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060448201527f74696d652e0000000000000000000000000000000000000000000000000000006064820152608401610db2565b613515565b600060365411801561347657506001600160a01b03851660009081526003602052604090205460ff165b801561348757506134878585613048565b156135155760395460365461349c904361459f565b1015613515576001600160a01b0384166000908152600960205260408120805460ff19166001179055603a8054916134d3836145f1565b90915550506040516001600160a01b03851681527f18e6e5ce5c121466e41a954e72765d1ea02b8e6919043b61f0dab08b4c6572e59060200160405180910390a15b600061352386868686613d5a565b60808101516001600160a01b03881660009081526001602052604090205491925061354d9161459f565b6001600160a01b03808816600090815260016020526040808220939093556060840151918816815291909120546135849190614466565b6001600160a01b0380871660009081526001602090815260408083209490945591891681526007909152205460ff1680156135d857506001600160a01b03851660009081526007602052604090205460ff16155b1561361f576001600160a01b03861660009081526002602052604090205461360190859061459f565b6001600160a01b03871660009081526002602052604090205561375f565b6001600160a01b03861660009081526007602052604090205460ff1615801561366057506001600160a01b03851660009081526007602052604090205460ff165b156136a85780516001600160a01b03861660009081526002602052604090205461368a9190614466565b6001600160a01b03861660009081526002602052604090205561375f565b6001600160a01b03861660009081526007602052604090205460ff1680156136e857506001600160a01b03851660009081526007602052604090205460ff165b1561375f576001600160a01b03861660009081526002602052604090205461371190859061459f565b6001600160a01b03808816600090815260026020526040808220939093558351918816815291909120546137459190614466565b6001600160a01b0386166000908152600260205260409020555b6137698686613048565b156137b7576035541580613781575060355461053914155b156137b75760405162461bcd60e51b815260206004820152600660248201526522b93937b91760d11b6044820152606401610db2565b6040810151156137cf576137cf868260400151613fa2565b60008160a0015111806137e6575060008160200151115b156137fd576137fd8160a00151826020015161406e565b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836000015160405161384691815260200190565b60405180910390a350600195945050505050565b6025546024546000918291825b6008548110156139ac5782600160006008848154811061388957613889614662565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806138f457508160026000600884815481106138cd576138cd614662565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561390a57602554602454945094505050509091565b600160006008838154811061392157613921614662565b60009182526020808320909101546001600160a01b03168352820192909252604001902054613950908461459f565b9250600260006008838154811061396957613969614662565b60009182526020808320909101546001600160a01b03168352820192909252604001902054613998908361459f565b9150806139a4816145f1565b915050613867565b506024546025546139bd919061447e565b8210156139d4576025546024549350935050509091565b90939092509050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613a1257613a12614662565b6001600160a01b03928316602091820292909201810191909152602754604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c4648926004808301939192829003018186803b158015613a7f57600080fd5b505afa158015613a93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ab7919061415f565b81600181518110613aca57613aca614662565b6001600160a01b0392831660209182029290920101526027546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac94790613b299085906000908690309042906004016143f5565b600060405180830381600087803b158015613b4357600080fd5b505af1158015613b57573d6000803e3d6000fd5b505050505050565b602754602a546040517ff305d7190000000000000000000000000000000000000000000000000000000081523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c4016060604051808303818588803b158015613be357600080fd5b505af1158015613bf7573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613c1c919061431c565b5050505050565b60345462010000900460ff1615613ca25760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610db2565b613cac8282613048565b158015613cc657506028546001600160a01b038281169116145b15611102576001600160a01b0382166000908152600a602052604090819020805460ff191660019081179091556034805462ff000019166201000017905542603755602d805460ff60a81b1916600160a81b17905590517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15991613d4e91901515815260200190565b60405180910390a15050565b613d936040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b613dcc6040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6000613dd6613025565b9050613de28186614580565b60808301528315613ef2576001600160a01b03861660009081526003602052604090205460ff1615613e2557601554600f55601654601055601754601155613e70565b6001600160a01b03871660009081526003602052604090205460ff1615613e5d57601254600f55601354601055601454601155613e70565b601854600f55601954601055601a546011555b602154600f54613e809087614580565b613e8a919061447e565b6020830152602154601154601054613ea29190614466565b613eac9087614580565b613eb6919061447e565b604083018190526020830151613ecc9190614466565b613ed6908661459f565b82526020820151613ee8908290614580565b60a0830152613f0b565b6000602083018190526040830181905285835260a08301525b613f158787613048565b8015613f2f57506038541580613f2f575060385461053914155b15613f655760405162461bcd60e51b815260206004820152600660248201526522b93937b91760d11b6044820152606401610db2565b808260400151613f759190614580565b8260a00151613f849190614466565b8260800151613f93919061459f565b60608301525095945050505050565b6000613fac613025565b90506000613fba8284614580565b30600090815260016020526040902054909150613fd8908290614466565b3060009081526001602090815260408083209390935560079052205460ff16156140285730600090815260026020526040902054614017908490614466565b306000908152600260205260409020555b60405183815230906001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350505050565b8160255461407c919061459f565b60255560265461408d908290614466565b6026555050565b8280546140a0906145b6565b90600052602060002090601f0160209004810192826140c25760008555614108565b82601f106140db57805160ff1916838001178555614108565b82800160010185558215614108579182015b828111156141085782518255916020019190600101906140ed565b50614114929150614118565b5090565b5b808211156141145760008155600101614119565b8035801515811461413d57600080fd5b919050565b60006020828403121561415457600080fd5b813561138c81614678565b60006020828403121561417157600080fd5b815161138c81614678565b6000806040838503121561418f57600080fd5b823561419a81614678565b915060208301356141aa81614678565b809150509250929050565b6000806000606084860312156141ca57600080fd5b83356141d581614678565b925060208401356141e581614678565b929592945050506040919091013590565b6000806040838503121561420957600080fd5b823561421481614678565b91506142226020840161412d565b90509250929050565b6000806040838503121561423e57600080fd5b823561424981614678565b946020939093013593505050565b60006020828403121561426957600080fd5b61138c8261412d565b60008060006060848603121561428757600080fd5b6142908461412d565b925061429e6020850161412d565b91506142ac6040850161412d565b90509250925092565b6000602082840312156142c757600080fd5b5035919050565b600080604083850312156142e157600080fd5b50508035926020909101359150565b60008060006060848603121561430557600080fd5b505081359360208301359350604090920135919050565b60008060006060848603121561433157600080fd5b8351925060208401519150604084015190509250925092565b6000806000806080858703121561436057600080fd5b5050823594602084013594506040840135936060013592509050565b6000806040838503121561438f57600080fd5b823560ff8116811461424957600080fd5b600060208083528351808285015260005b818110156143cd578581018301518582016040015282016143b1565b818111156143df576000604083870101525b50601f01601f1916929092016040019392505050565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156144455784516001600160a01b031683529383019391830191600101614420565b50506001600160a01b03969096166060850152505050608001529392505050565b6000821982111561447957614479614620565b500190565b60008261448d5761448d614636565b500490565b600181815b808511156144cd5781600019048211156144b3576144b3614620565b808516156144c057918102915b93841c9390800290614497565b509250929050565b600061138c60ff8416836000826144ee57506001610dee565b816144fb57506000610dee565b8160018114614511576002811461451b57614537565b6001915050610dee565b60ff84111561452c5761452c614620565b50506001821b610dee565b5060208310610133831016604e8410600b841016171561455a575081810a610dee565b6145648383614492565b806000190482111561457857614578614620565b029392505050565b600081600019048311821515161561459a5761459a614620565b500290565b6000828210156145b1576145b1614620565b500390565b600181811c908216806145ca57607f821691505b602082108114156145eb57634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561460557614605614620565b5060010190565b60008261461b5761461b614636565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b038116811461468d57600080fd5b5056fe4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a2646970667358221220cb37423c01098cbd4bf149925f25b06cee5980fe63ba86b966585395e1a4e07364736f6c63430008070033

Deployed Bytecode

0x6080604052600436106104695760003560e01c8063715018a611610243578063b6f8f8dc11610143578063dd62ed3e116100bb578063ea08d30b1161008a578063eec2744e1161006f578063eec2744e14610c86578063f6540ec714610ca6578063fb78680d14610cbc57600080fd5b8063ea08d30b14610c50578063eafb5a3c14610c6657600080fd5b8063dd62ed3e14610bbe578063de5192a814610c04578063e79d416014610c1a578063e7c281d614610c3057600080fd5b8063cdfdb7dc11610112578063d038b07e116100f7578063d038b07e14610b7c578063dbd66dda14610b92578063dc44b6a014610ba857600080fd5b8063cdfdb7dc14610b3c578063ce8b79c914610b5c57600080fd5b8063b6f8f8dc14610ac6578063bbcea6bf14610ae6578063bc1323e814610afc578063c49b9a8014610b1c57600080fd5b80638c7321ad116101d6578063a457c2d7116101a5578063a9059cbb1161018a578063a9059cbb14610a66578063ae81c32014610a86578063b47329f414610aa657600080fd5b8063a457c2d714610a30578063a83250ef14610a5057600080fd5b80638c7321ad146109d55780638da5cb5b1461096957806395d89b4114610a055780639e55557814610a1a57600080fd5b806388f820201161021257806388f8202014610930578063893d20e81461096957806389fd9bc1146109875780638a8c523c146109c057600080fd5b8063715018a6146108d05780637ed57c8b146108e557806380c581d1146108fa57806388790a681461091a57600080fd5b80633865cf3f116103695780635342acb4116102e157806364038409116102b05780636bc87c3a116102955780636bc87c3a1461087a5780636c6d9fa11461089057806370a08231146108b057600080fd5b806364038409146108445780636612e66f1461085a57600080fd5b80635342acb4146107ab578063571ac8b0146107e4578063575f18e51461080457806358fa63ca1461082457600080fd5b806345e8c85c116103385780634e732f7a1161031d5780634e732f7a146107555780634fb2e45d1461076b57806350a8e0161461078b57600080fd5b806345e8c85c1461071e5780634a74bb021461073457600080fd5b80633865cf3f1461069e57806339509351146106be5780633f3cf56c146106de578063452ed4f1146106fe57600080fd5b806318160ddd116103fc57806326003957116103cb578063313ce567116103b0578063313ce5671461064657806337e294d514610668578063384f6b511461068857600080fd5b806326003957146106065780632d8381191461062657600080fd5b806318160ddd1461059b5780631d881f9f146105b057806321207575146105c657806323b872dd146105e657600080fd5b8063095ea7b311610438578063095ea7b31461051657806313114a9d1461054657806313e461921461056557806315639c1b1461058557600080fd5b806303fd2a451461047557806306fdde03146104b25780630758d924146104d457806309231602146104f457600080fd5b3661047057005b600080fd5b34801561048157600080fd5b50602a54610495906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156104be57600080fd5b506104c7610cdc565b6040516104a991906143a0565b3480156104e057600080fd5b50602754610495906001600160a01b031681565b34801561050057600080fd5b5061051461050f3660046142b5565b610d6e565b005b34801561052257600080fd5b5061053661053136600461422b565b610ddd565b60405190151581526020016104a9565b34801561055257600080fd5b506026545b6040519081526020016104a9565b34801561057157600080fd5b506105146105803660046141f6565b610df4565b34801561059157600080fd5b50610557600f5481565b3480156105a757600080fd5b50602454610557565b3480156105bc57600080fd5b5061055760205481565b3480156105d257600080fd5b506105146105e136600461437c565b611106565b3480156105f257600080fd5b506105366106013660046141b5565b611198565b34801561061257600080fd5b506105146106213660046142ce565b6111eb565b34801561063257600080fd5b506105576106413660046142b5565b6112fc565b34801561065257600080fd5b5060225460405160ff90911681526020016104a9565b34801561067457600080fd5b50602d54610495906001600160a01b031681565b34801561069457600080fd5b50610557601e5481565b3480156106aa57600080fd5b506105146106b93660046142ce565b611393565b3480156106ca57600080fd5b506105366106d936600461422b565b611439565b3480156106ea57600080fd5b506105146106f93660046142ce565b611470565b34801561070a57600080fd5b50602854610495906001600160a01b031681565b34801561072a57600080fd5b5061055760185481565b34801561074057600080fd5b50602d5461053690600160a81b900460ff1681565b34801561076157600080fd5b50610557601f5481565b34801561077757600080fd5b50610514610786366004614142565b611581565b34801561079757600080fd5b506034546105369062010000900460ff1681565b3480156107b757600080fd5b506105366107c6366004614142565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156107f057600080fd5b506105366107ff366004614142565b611743565b34801561081057600080fd5b5061051461081f3660046142f0565b611751565b34801561083057600080fd5b50602b54610495906001600160a01b031681565b34801561085057600080fd5b50610557602f5481565b34801561086657600080fd5b506105146108753660046141f6565b6117f5565b34801561088657600080fd5b5061055760105481565b34801561089c57600080fd5b506105146108ab3660046142f0565b611868565b3480156108bc57600080fd5b506105576108cb366004614142565b61190c565b3480156108dc57600080fd5b5061051461196b565b3480156108f157600080fd5b50610514611a08565b34801561090657600080fd5b506105146109153660046141f6565b611ece565b34801561092657600080fd5b5061055760165481565b34801561093c57600080fd5b5061053661094b366004614142565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561097557600080fd5b506000546001600160a01b0316610495565b34801561099357600080fd5b506105366109a2366004614142565b6001600160a01b031660009081526009602052604090205460ff1690565b3480156109cc57600080fd5b50610514611fcf565b3480156109e157600080fd5b506105366109f0366004614142565b600b6020526000908152604090205460ff1681565b348015610a1157600080fd5b506104c76120be565b348015610a2657600080fd5b5061055760145481565b348015610a3c57600080fd5b50610536610a4b36600461422b565b6120cd565b348015610a5c57600080fd5b5061055760175481565b348015610a7257600080fd5b50610536610a8136600461422b565b612104565b348015610a9257600080fd5b50610514610aa136600461417c565b612111565b348015610ab257600080fd5b50602c54610495906001600160a01b031681565b348015610ad257600080fd5b50610514610ae1366004614272565b6121b4565b348015610af257600080fd5b5061055760155481565b348015610b0857600080fd5b50610514610b17366004614142565b612238565b348015610b2857600080fd5b50610514610b37366004614257565b6122a1565b348015610b4857600080fd5b50610514610b573660046142f0565b612341565b348015610b6857600080fd5b50610514610b77366004614142565b6123b9565b348015610b8857600080fd5b5061055760125481565b348015610b9e57600080fd5b5061055760115481565b348015610bb457600080fd5b5061055760135481565b348015610bca57600080fd5b50610557610bd936600461417c565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610c1057600080fd5b50610557601a5481565b348015610c2657600080fd5b50610557603a5481565b348015610c3c57600080fd5b50610514610c4b3660046142f0565b612425565b348015610c5c57600080fd5b5061055760195481565b348015610c7257600080fd5b50610514610c81366004614142565b6124c9565b348015610c9257600080fd5b50610514610ca13660046141f6565b6128a1565b348015610cb257600080fd5b5061055760315481565b348015610cc857600080fd5b50610514610cd736600461434a565b612914565b6060600d8054610ceb906145b6565b80601f0160208091040260200160405190810160405280929190818152602001828054610d17906145b6565b8015610d645780601f10610d3957610100808354040283529160200191610d64565b820191906000526020600020905b815481529060010190602001808311610d4757829003601f168201915b5050505050905090565b6000546001600160a01b03163314610dbb5760405162461bcd60e51b8152602060048201819052602482015260008051602061469183398151915260448201526064015b60405180910390fd5b604b811015610dc957600080fd5b610dd781633b9aca00614580565b603c5550565b6000610dea33848461299b565b5060015b92915050565b6000546001600160a01b03163314610e3c5760405162461bcd60e51b815260206004820181905260248201526000805160206146918339815191526044820152606401610db2565b60018115151415610f71576001600160a01b03821660009081526007602052604090205460ff1615610eb05760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401610db2565b6001600160a01b03821660009081526001602052604090205415610f0a576001600160a01b038216600090815260016020526040902054610ef0906112fc565b6001600160a01b0383166000908152600260205260409020555b506001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b80611102576001600160a01b03821660009081526007602052604090205460ff16610fde5760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e000000006044820152606401610db2565b60005b60085481101561110057826001600160a01b03166008828154811061100857611008614662565b6000918252602090912001546001600160a01b031614156110ee57600880546110339060019061459f565b8154811061104357611043614662565b600091825260209091200154600880546001600160a01b03909216918390811061106f5761106f614662565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559185168152600282526040808220829055600790925220805460ff1916905560088054806110c7576110c761464c565b600082815260209020810160001990810180546001600160a01b0319169055019055611100565b806110f8816145f1565b915050610fe1565b505b5050565b6000546001600160a01b0316331461114e5760405162461bcd60e51b815260206004820181905260248201526000805160206146918339815191526044820152606401610db2565b60395415801561115e5750603c54155b8015611173575060345462010000900460ff16155b61117c57600080fd5b60ff821660395561119181633b9aca00614580565b603c555050565b60006111a5848484612af3565b506001600160a01b0384166000908152600560209081526040808320338085529252909120546111e19186916111dc90869061459f565b61299b565b5060019392505050565b6000546001600160a01b031633146112335760405162461bcd60e51b815260206004820181905260248201526000805160206146918339815191526044820152606401610db2565b600081836024546112449190614580565b61124e919061447e565b90506103e8602454611260919061447e565b8110156112d55760405162461bcd60e51b815260206004820152603260248201527f4d61782057616c6c657420616d74206d7573742062652061626f766520302e3160448201527f25206f6620746f74616c20737570706c792e00000000000000000000000000006064820152608401610db2565b6030819055600c5482906112ea908590614580565b6112f4919061447e565b603155505050565b60006025548211156113765760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201527f65666c656374696f6e73000000000000000000000000000000000000000000006064820152608401610db2565b6000611380613025565b905061138c818461447e565b9392505050565b6000546001600160a01b031633146113db5760405162461bcd60e51b815260206004820181905260248201526000805160206146918339815191526044820152606401610db2565b6035541580156113eb5750603854155b6114205760405162461bcd60e51b815260206004820152600660248201526522b93937b91760d11b6044820152606401610db2565b603591909155603855600360395564b4e8cf1a00603c55565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610dea9185906111dc908690614466565b6000546001600160a01b031633146114b85760405162461bcd60e51b815260206004820181905260248201526000805160206146918339815191526044820152606401610db2565b600081836024546114c99190614580565b6114d3919061447e565b90506103e86024546114e5919061447e565b81101561155a5760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610db2565b602e819055600c54829061156f908590614580565b611579919061447e565b602f55505050565b6000546001600160a01b031633146115c95760405162461bcd60e51b815260206004820181905260248201526000805160206146918339815191526044820152606401610db2565b6001600160a01b0381166116455760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610db2565b602a546001600160a01b03828116911614156116c95760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610db2565b600080546116e2916001600160a01b03909116906117f5565b6116ed8160016117f5565b6116f8816001610df4565b600080546001600160a01b0319166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000610dee82600019610ddd565b6000546001600160a01b031633146117995760405162461bcd60e51b815260206004820181905260248201526000805160206146918339815191526044820152606401610db2565b601b5483111580156117ad5750601c548211155b80156117bb5750601d548111155b6117c457600080fd5b610d7a816117d28486614466565b6117dc9190614466565b11156117e757600080fd5b601892909255601955601a55565b6000546001600160a01b0316331461183d5760405162461bcd60e51b815260206004820181905260248201526000805160206146918339815191526044820152606401610db2565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146118b05760405162461bcd60e51b815260206004820181905260248201526000805160206146918339815191526044820152606401610db2565b601b5483111580156118c45750601c548211155b80156118d25750601d548111155b6118db57600080fd5b610d7a816118e98486614466565b6118f39190614466565b11156118fe57600080fd5b601292909255601355601455565b6001600160a01b03811660009081526007602052604081205460ff161561194957506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610dee906112fc565b6000546001600160a01b031633146119b35760405162461bcd60e51b815260206004820181905260248201526000805160206146918339815191526044820152606401610db2565b600080546119cc916001600160a01b03909116906117f5565b600080546001600160a01b031916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b03163314611a505760405162461bcd60e51b815260206004820181905260248201526000805160206146918339815191526044820152606401610db2565b603f5460ff1615611aa35760405162461bcd60e51b815260206004820152601d60248201527f436f6e747261637420616c726561647920696e697469616c697a65642e0000006044820152606401610db2565b6040805180820190915260088082527f4869726f6b6167650000000000000000000000000000000000000000000000006020909201918252611ae791600d91614094565b506040805180820190915260048082527f4849524f000000000000000000000000000000000000000000000000000000006020909201918252611b2c91600e91614094565b506402540be400600c556022805460ff19166009908117909155611b5190600a6144d5565b600c54611b5e9190614580565b6024819055611b6f9060001961460c565b611b7b9060001961459f565b602555602954602780546001600160a01b0319166001600160a01b039092169182179055604080517fc45a0155000000000000000000000000000000000000000000000000000000008152905163c45a015591600480820192602092909190829003018186803b158015611bee57600080fd5b505afa158015611c02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c26919061415f565b6001600160a01b031663c9c65396602760009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611c8257600080fd5b505afa158015611c96573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cba919061415f565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152306024820152604401602060405180830381600087803b158015611d1957600080fd5b505af1158015611d2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d51919061415f565b602880546001600160a01b0319166001600160a01b039283169081179091556000908152600360209081526040808320805460ff1916600117905530835260058252808320602754909416835292905220600019905560245461271090611db9906021614580565b611dc3919061447e565b602e55602454611dd59060649061447e565b60305560245461271090611dea906005614580565b611df4919061447e565b6032556024546103e890611e09906005614580565b611e13919061447e565b603355602954611e2e906001600160a01b0316600019610ddd565b50603f805460ff19166001908117909155602554906000611e576000546001600160a01b031690565b6001600160a01b03168152602081019190915260400160002055611e836000546001600160a01b031690565b602b546024546040519081526001600160a01b0392831692909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3565b6000546001600160a01b03163314611f165760405162461bcd60e51b815260206004820181905260248201526000805160206146918339815191526044820152606401610db2565b80611f3d57506001600160a01b03166000908152600360205260409020805460ff19169055565b60045415611fa45762093a8060045442611f57919061459f565b11611fa45760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f74207365742061206e657720706169722074686973207765656b216044820152606401610db2565b6001600160a01b0382166000908152600360205260409020805460ff19166001179055426004555050565b6000546001600160a01b031633146120175760405162461bcd60e51b815260206004820181905260248201526000805160206146918339815191526044820152606401610db2565b60345460ff161561206a5760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610db2565b612075306001610df4565b60285461208c906001600160a01b03166001610df4565b6039546003146120aa576120a2436101f4614466565b6036556120af565b436036555b6034805460ff19166001179055565b6060600e8054610ceb906145b6565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610dea9185906111dc90869061459f565b60006111e1338484612af3565b6000546001600160a01b031633146121595760405162461bcd60e51b815260206004820181905260248201526000805160206146918339815191526044820152606401610db2565b602c546001600160a01b03161580159061217d5750602d546001600160a01b031615155b61218657600080fd5b602c80546001600160a01b039384166001600160a01b031991821617909155602d8054929093169116179055565b6000546001600160a01b031633146121fc5760405162461bcd60e51b815260206004820181905260248201526000805160206146918339815191526044820152606401610db2565b603480549315156101000261ff001990941693909317909255603b805491151560ff19928316179055603d805492151592909116919091179055565b6000546001600160a01b031633146122805760405162461bcd60e51b815260206004820181905260248201526000805160206146918339815191526044820152606401610db2565b6001600160a01b03166000908152600b60205260409020805460ff19169055565b6000546001600160a01b031633146122e95760405162461bcd60e51b815260206004820181905260248201526000805160206146918339815191526044820152606401610db2565b602d8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061233690831515815260200190565b60405180910390a150565b6000546001600160a01b031633146123895760405162461bcd60e51b815260206004820181905260248201526000805160206146918339815191526044820152606401610db2565b816123948285614466565b61239e9190614466565b610514146123ab57600080fd5b601e92909255601f55602055565b6000546001600160a01b031633146124015760405162461bcd60e51b815260206004820181905260248201526000805160206146918339815191526044820152606401610db2565b6001600160a01b03166000908152600b60205260409020805460ff19166001179055565b6000546001600160a01b0316331461246d5760405162461bcd60e51b815260206004820181905260248201526000805160206146918339815191526044820152606401610db2565b601b5483111580156124815750601c548211155b801561248f5750601d548111155b61249857600080fd5b610d7a816124a68486614466565b6124b09190614466565b11156124bb57600080fd5b601592909255601655601755565b6000546001600160a01b031633146125115760405162461bcd60e51b815260206004820181905260248201526000805160206146918339815191526044820152606401610db2565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561255157600080fd5b505afa158015612565573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612589919061415f565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156125d157600080fd5b505afa1580156125e5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612609919061415f565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b15801561266757600080fd5b505afa15801561267b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061269f919061415f565b90506001600160a01b03811661285d57816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156126e857600080fd5b505afa1580156126fc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612720919061415f565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561276857600080fd5b505afa15801561277c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127a0919061415f565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b15801561280057600080fd5b505af1158015612814573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612838919061415f565b602880546001600160a01b0319166001600160a01b0392909216919091179055612879565b602880546001600160a01b0319166001600160a01b0383161790555b602780546001600160a01b0319166001600160a01b038416179055611100308460001961299b565b6000546001600160a01b031633146128e95760405162461bcd60e51b815260206004820181905260248201526000805160206146918339815191526044820152606401610db2565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461295c5760405162461bcd60e51b815260206004820181905260248201526000805160206146918339815191526044820152606401610db2565b828460245461296b9190614580565b612975919061447e565b6032556024548190612988908490614580565b612992919061447e565b60335550505050565b6001600160a01b038316612a165760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610db2565b6001600160a01b038216612a925760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610db2565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b038416612b715760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610db2565b6001600160a01b038316612bed5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610db2565b60008211612c635760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610db2565b603b5460ff1615612cc057603c543a1115612cc05760405162461bcd60e51b815260206004820152601860248201527f4761732070726963652065786365656473206c696d69742e00000000000000006044820152606401610db2565b612cca8484613048565b15612f4d5760345460ff16612d215760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610db2565b603d5460ff1615612dd3576001600160a01b03841660009081526003602052604090205460ff1615612d92576001600160a01b0383166000908152603e6020526040902054431415612d7257600080fd5b6001600160a01b0383166000908152603e60205260409020439055612dd3565b6001600160a01b0384166000908152603e6020526040902054431415612db757600080fd5b6001600160a01b0384166000908152603e602052604090204390555b6001600160a01b0384166000908152600b602052604090205460ff1680612e1257506001600160a01b0383166000908152600b602052604090205460ff165b612f4d576001600160a01b03841660009081526003602052604090205460ff1680612e5557506001600160a01b03831660009081526003602052604090205460ff165b15612eac57602e54821115612eac5760405162461bcd60e51b815260206004820152601860248201527f4578636565647320746865206d61785478416d6f756e742e00000000000000006044820152606401610db2565b6029546001600160a01b03848116911614801590612ee357506001600160a01b03831660009081526003602052604090205460ff16155b15612f4d5760305482612ef58561190c565b612eff9190614466565b1115612f4d5760405162461bcd60e51b815260206004820152601a60248201527f4578636565647320746865206d617857616c6c657453697a652e0000000000006044820152606401610db2565b6001600160a01b03841660009081526006602052604090205460019060ff1680612f8f57506001600160a01b03841660009081526006602052604090205460ff165b15612f98575060005b6001600160a01b03841660009081526003602052604090205460ff161561301057602d54600160a01b900460ff16158015612fdc5750602d54600160a81b900460ff165b15613010576000612fec3061190c565b9050603254811061300e57603354811061300557506033545b61300e81613108565b505b61301c858585846132fd565b95945050505050565b600080600061303261385a565b9092509050613041818361447e565b9250505090565b600080546001600160a01b0384811691161480159061307557506000546001600160a01b03838116911614155b801561309a57506001600160a01b0382166000908152600a602052604090205460ff16155b80156130bf57506001600160a01b0383166000908152600a602052604090205460ff16155b80156130d95750602a546001600160a01b03838116911614155b80156130ed57506001600160a01b03821615155b801561138c57506001600160a01b0383163014159392505050565b602d805460ff60a01b1916600160a01b179055602054601f54601e5461312e9190614466565b6131389190614466565b613141576132ed565b60006002602054601f54601e546131589190614466565b6131629190614466565b601e5461316f9085614580565b613179919061447e565b613183919061447e565b90506000613191828461459f565b905061319c816139dd565b60006002602054601f54601e546131b39190614466565b6131bd9190614466565b601e546131ca9047614580565b6131d4919061447e565b6131de919061447e565b90508215613232576131f08382613b5f565b60408051848152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b600061323e848661459f565b11156132e957602054601f5447916000916132599190614466565b601f546132669084614580565b613270919061447e565b602c546040519192506001600160a01b03169082156108fc029083906000818181858888f193505050501580156132ab573d6000803e3d6000fd5b50602d546040516001600160a01b03909116904780156108fc02916000818181858888f193505050501580156132e5573d6000803e3d6000fd5b5050505b5050505b50602d805460ff60a01b19169055565b603454600090610100900460ff1615613515576001600160a01b03851660009081526009602052604090205460ff168061334f57506001600160a01b03841660009081526009602052604090205460ff165b1561339c5760405162461bcd60e51b815260206004820152600960248201527f52656a65637465642e00000000000000000000000000000000000000000000006044820152606401610db2565b60345462010000900460ff1661344c576133b68585613c23565b60345462010000900460ff161580156133d457506133d48585613048565b156134475760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060448201527f74696d652e0000000000000000000000000000000000000000000000000000006064820152608401610db2565b613515565b600060365411801561347657506001600160a01b03851660009081526003602052604090205460ff165b801561348757506134878585613048565b156135155760395460365461349c904361459f565b1015613515576001600160a01b0384166000908152600960205260408120805460ff19166001179055603a8054916134d3836145f1565b90915550506040516001600160a01b03851681527f18e6e5ce5c121466e41a954e72765d1ea02b8e6919043b61f0dab08b4c6572e59060200160405180910390a15b600061352386868686613d5a565b60808101516001600160a01b03881660009081526001602052604090205491925061354d9161459f565b6001600160a01b03808816600090815260016020526040808220939093556060840151918816815291909120546135849190614466565b6001600160a01b0380871660009081526001602090815260408083209490945591891681526007909152205460ff1680156135d857506001600160a01b03851660009081526007602052604090205460ff16155b1561361f576001600160a01b03861660009081526002602052604090205461360190859061459f565b6001600160a01b03871660009081526002602052604090205561375f565b6001600160a01b03861660009081526007602052604090205460ff1615801561366057506001600160a01b03851660009081526007602052604090205460ff165b156136a85780516001600160a01b03861660009081526002602052604090205461368a9190614466565b6001600160a01b03861660009081526002602052604090205561375f565b6001600160a01b03861660009081526007602052604090205460ff1680156136e857506001600160a01b03851660009081526007602052604090205460ff165b1561375f576001600160a01b03861660009081526002602052604090205461371190859061459f565b6001600160a01b03808816600090815260026020526040808220939093558351918816815291909120546137459190614466565b6001600160a01b0386166000908152600260205260409020555b6137698686613048565b156137b7576035541580613781575060355461053914155b156137b75760405162461bcd60e51b815260206004820152600660248201526522b93937b91760d11b6044820152606401610db2565b6040810151156137cf576137cf868260400151613fa2565b60008160a0015111806137e6575060008160200151115b156137fd576137fd8160a00151826020015161406e565b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836000015160405161384691815260200190565b60405180910390a350600195945050505050565b6025546024546000918291825b6008548110156139ac5782600160006008848154811061388957613889614662565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806138f457508160026000600884815481106138cd576138cd614662565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561390a57602554602454945094505050509091565b600160006008838154811061392157613921614662565b60009182526020808320909101546001600160a01b03168352820192909252604001902054613950908461459f565b9250600260006008838154811061396957613969614662565b60009182526020808320909101546001600160a01b03168352820192909252604001902054613998908361459f565b9150806139a4816145f1565b915050613867565b506024546025546139bd919061447e565b8210156139d4576025546024549350935050509091565b90939092509050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613a1257613a12614662565b6001600160a01b03928316602091820292909201810191909152602754604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c4648926004808301939192829003018186803b158015613a7f57600080fd5b505afa158015613a93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ab7919061415f565b81600181518110613aca57613aca614662565b6001600160a01b0392831660209182029290920101526027546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac94790613b299085906000908690309042906004016143f5565b600060405180830381600087803b158015613b4357600080fd5b505af1158015613b57573d6000803e3d6000fd5b505050505050565b602754602a546040517ff305d7190000000000000000000000000000000000000000000000000000000081523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c4016060604051808303818588803b158015613be357600080fd5b505af1158015613bf7573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613c1c919061431c565b5050505050565b60345462010000900460ff1615613ca25760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610db2565b613cac8282613048565b158015613cc657506028546001600160a01b038281169116145b15611102576001600160a01b0382166000908152600a602052604090819020805460ff191660019081179091556034805462ff000019166201000017905542603755602d805460ff60a81b1916600160a81b17905590517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15991613d4e91901515815260200190565b60405180910390a15050565b613d936040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b613dcc6040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6000613dd6613025565b9050613de28186614580565b60808301528315613ef2576001600160a01b03861660009081526003602052604090205460ff1615613e2557601554600f55601654601055601754601155613e70565b6001600160a01b03871660009081526003602052604090205460ff1615613e5d57601254600f55601354601055601454601155613e70565b601854600f55601954601055601a546011555b602154600f54613e809087614580565b613e8a919061447e565b6020830152602154601154601054613ea29190614466565b613eac9087614580565b613eb6919061447e565b604083018190526020830151613ecc9190614466565b613ed6908661459f565b82526020820151613ee8908290614580565b60a0830152613f0b565b6000602083018190526040830181905285835260a08301525b613f158787613048565b8015613f2f57506038541580613f2f575060385461053914155b15613f655760405162461bcd60e51b815260206004820152600660248201526522b93937b91760d11b6044820152606401610db2565b808260400151613f759190614580565b8260a00151613f849190614466565b8260800151613f93919061459f565b60608301525095945050505050565b6000613fac613025565b90506000613fba8284614580565b30600090815260016020526040902054909150613fd8908290614466565b3060009081526001602090815260408083209390935560079052205460ff16156140285730600090815260026020526040902054614017908490614466565b306000908152600260205260409020555b60405183815230906001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350505050565b8160255461407c919061459f565b60255560265461408d908290614466565b6026555050565b8280546140a0906145b6565b90600052602060002090601f0160209004810192826140c25760008555614108565b82601f106140db57805160ff1916838001178555614108565b82800160010185558215614108579182015b828111156141085782518255916020019190600101906140ed565b50614114929150614118565b5090565b5b808211156141145760008155600101614119565b8035801515811461413d57600080fd5b919050565b60006020828403121561415457600080fd5b813561138c81614678565b60006020828403121561417157600080fd5b815161138c81614678565b6000806040838503121561418f57600080fd5b823561419a81614678565b915060208301356141aa81614678565b809150509250929050565b6000806000606084860312156141ca57600080fd5b83356141d581614678565b925060208401356141e581614678565b929592945050506040919091013590565b6000806040838503121561420957600080fd5b823561421481614678565b91506142226020840161412d565b90509250929050565b6000806040838503121561423e57600080fd5b823561424981614678565b946020939093013593505050565b60006020828403121561426957600080fd5b61138c8261412d565b60008060006060848603121561428757600080fd5b6142908461412d565b925061429e6020850161412d565b91506142ac6040850161412d565b90509250925092565b6000602082840312156142c757600080fd5b5035919050565b600080604083850312156142e157600080fd5b50508035926020909101359150565b60008060006060848603121561430557600080fd5b505081359360208301359350604090920135919050565b60008060006060848603121561433157600080fd5b8351925060208401519150604084015190509250925092565b6000806000806080858703121561436057600080fd5b5050823594602084013594506040840135936060013592509050565b6000806040838503121561438f57600080fd5b823560ff8116811461424957600080fd5b600060208083528351808285015260005b818110156143cd578581018301518582016040015282016143b1565b818111156143df576000604083870101525b50601f01601f1916929092016040019392505050565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156144455784516001600160a01b031683529383019391830191600101614420565b50506001600160a01b03969096166060850152505050608001529392505050565b6000821982111561447957614479614620565b500190565b60008261448d5761448d614636565b500490565b600181815b808511156144cd5781600019048211156144b3576144b3614620565b808516156144c057918102915b93841c9390800290614497565b509250929050565b600061138c60ff8416836000826144ee57506001610dee565b816144fb57506000610dee565b8160018114614511576002811461451b57614537565b6001915050610dee565b60ff84111561452c5761452c614620565b50506001821b610dee565b5060208310610133831016604e8410600b841016171561455a575081810a610dee565b6145648383614492565b806000190482111561457857614578614620565b029392505050565b600081600019048311821515161561459a5761459a614620565b500290565b6000828210156145b1576145b1614620565b500390565b600181811c908216806145ca57607f821691505b602082108114156145eb57634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561460557614605614620565b5060010190565b60008261461b5761461b614636565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b038116811461468d57600080fd5b5056fe4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a2646970667358221220cb37423c01098cbd4bf149925f25b06cee5980fe63ba86b966585395e1a4e07364736f6c63430008070033

Deployed Bytecode Sourcemap

8233:27480:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10420:64;;;;;;;;;;-1:-1:-1;10420:64:0;;;;-1:-1:-1;;;;;10420:64:0;;;;;;-1:-1:-1;;;;;5062:55:1;;;5044:74;;5032:2;5017:18;10420:64:0;;;;;;;;15754:71;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;10245:35::-;;;;;;;;;;-1:-1:-1;10245:35:0;;;;-1:-1:-1;;;;;10245:35:0;;;19994:134;;;;;;;;;;-1:-1:-1;19994:134:0;;;;;:::i;:::-;;:::i;:::-;;16430:161;;;;;;;;;;-1:-1:-1;16430:161:0;;;;;:::i;:::-;;:::i;:::-;;;6508:14:1;;6501:22;6483:41;;6471:2;6456:18;16430:161:0;6343:187:1;24546:87:0;;;;;;;;;;-1:-1:-1;24615:10:0;;24546:87;;;16294:25:1;;;16282:2;16267:18;24546:87:0;16148:177:1;23632:906:0;;;;;;;;;;-1:-1:-1;23632:906:0;;;;;:::i;:::-;;:::i;9086:30::-;;;;;;;;;;;;;;;;15507:83;;;;;;;;;;-1:-1:-1;15580:7:0;;15507:83;;9947:31;;;;;;;;;;;;;;;;19519:241;;;;;;;;;;-1:-1:-1;19519:241:0;;;;;:::i;:::-;;:::i;16727:266::-;;;;;;;;;;-1:-1:-1;16727:266:0;;;;;:::i;:::-;;:::i;22346:340::-;;;;;;;;;;-1:-1:-1;22346:340:0;;;;;:::i;:::-;;:::i;24973:250::-;;;;;;;;;;-1:-1:-1;24973:250:0;;;;;:::i;:::-;;:::i;15596:71::-;;;;;;;;;;-1:-1:-1;15655:9:0;;15596:71;;15655:9;;;;17827:36:1;;17815:2;17800:18;15596:71:0;17685:184:1;10673:88:0;;;;;;;;;;-1:-1:-1;10673:88:0;;;;-1:-1:-1;;;;;10673:88:0;;;9850:36;;;;;;;;;;;;;;;;19189:322;;;;;;;;;;-1:-1:-1;19189:322:0;;;;;:::i;:::-;;:::i;17001:215::-;;;;;;;;;;-1:-1:-1;17001:215:0;;;;;:::i;:::-;;:::i;21998:340::-;;;;;;;;;;-1:-1:-1;21998:340:0;;;;;:::i;:::-;;:::i;10287:21::-;;;;;;;;;;-1:-1:-1;10287:21:0;;;;-1:-1:-1;;;;;10287:21:0;;;9520:51;;;;;;;;;;;;;;;;10802:41;;;;;;;;;;-1:-1:-1;10802:41:0;;;;-1:-1:-1;;;10802:41:0;;;;;;9893:47;;;;;;;;;;;;;;;;14435:517;;;;;;;;;;-1:-1:-1;14435:517:0;;;;;:::i;:::-;;:::i;11154:36::-;;;;;;;;;;-1:-1:-1;11154:36:0;;;;;;;;;;;18918:123;;;;;;;;;;-1:-1:-1;18918:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;19006:27:0;18982:4;19006:27;;;:18;:27;;;;;;;;;18918:123;16599:120;;;;;;;;;;-1:-1:-1;16599:120:0;;;;;:::i;:::-;;:::i;21215:461::-;;;;;;;;;;-1:-1:-1;21215:461:0;;;;;:::i;:::-;;:::i;10491:64::-;;;;;;;;;;-1:-1:-1;10491:64:0;;;;-1:-1:-1;;;;;10491:64:0;;;10891:28;;;;;;;;;;;;;;;;23492:132;;;;;;;;;;-1:-1:-1;23492:132:0;;;;;:::i;:::-;;:::i;9123:34::-;;;;;;;;;;;;;;;;20289:453;;;;;;;;;;-1:-1:-1;20289:453:0;;;;;:::i;:::-;;:::i;16049:198::-;;;;;;;;;;-1:-1:-1;16049:198:0;;;;;:::i;:::-;;:::i;14960:194::-;;;;;;;;;;;;;:::i;12758:1037::-;;;;;;;;;;;;;:::i;18018:424::-;;;;;;;;;;-1:-1:-1;18018:424:0;;;;;:::i;:::-;;:::i;9420:38::-;;;;;;;;;;;;;;;;18790:120;;;;;;;;;;-1:-1:-1;18790:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;18882:20:0;18858:4;18882:20;;;:11;:20;;;;;;;;;18790:120;15831:71;;;;;;;;;;-1:-1:-1;15874:7:0;14413:6;-1:-1:-1;;;;;14413:6:0;15831:71;;19049:132;;;;;;;;;;-1:-1:-1;19049:132:0;;;;;:::i;:::-;-1:-1:-1;;;;;19142:31:0;19118:4;19142:31;;;:22;:31;;;;;;;;;19049:132;30064:398;;;;;;;;;;;;;:::i;8912:68::-;;;;;;;;;;-1:-1:-1;8912:68:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;15673:75;;;;;;;;;;;;;:::i;9315:53::-;;;;;;;;;;;;;;;;17224:225;;;;;;;;;;-1:-1:-1;17224:225:0;;;;;:::i;:::-;;:::i;9465:42::-;;;;;;;;;;;;;;;;16255:167;;;;;;;;;;-1:-1:-1;16255:167:0;;;;;:::i;:::-;;:::i;22991:314::-;;;;;;;;;;-1:-1:-1;22991:314:0;;;;;:::i;:::-;;:::i;10562:104::-;;;;;;;;;;-1:-1:-1;10562:104:0;;;;-1:-1:-1;;;;;10562:104:0;;;19768:218;;;;;;;;;;-1:-1:-1;19768:218:0;;;;;:::i;:::-;;:::i;9377:36::-;;;;;;;;;;;;;;;;18616:166;;;;;;;;;;-1:-1:-1;18616:166:0;;;;;:::i;:::-;;:::i;23313:171::-;;;;;;;;;;-1:-1:-1;23313:171:0;;;;;:::i;:::-;;:::i;21684:306::-;;;;;;;;;;-1:-1:-1;21684:306:0;;;;;:::i;:::-;;:::i;18450:158::-;;;;;;;;;;-1:-1:-1;18450:158:0;;;;;:::i;:::-;;:::i;9211:43::-;;;;;;;;;;;;;;;;9164:38;;;;;;;;;;;;;;;;9261:47;;;;;;;;;;;;;;;;15908:133;;;;;;;;;;-1:-1:-1;15908:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;16010:19:0;;;15992:7;16010:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;15908:133;9640:61;;;;;;;;;;;;;;;;11405:32;;;;;;;;;;;;;;;;20750:457;;;;;;;;;;-1:-1:-1;20750:457:0;;;;;:::i;:::-;;:::i;9578:55::-;;;;;;;;;;;;;;;;17457:553;;;;;;;;;;-1:-1:-1;17457:553:0;;;;;:::i;:::-;;:::i;20136:141::-;;;;;;;;;;-1:-1:-1;20136:141:0;;;;;:::i;:::-;;:::i;10965:30::-;;;;;;;;;;;;;;;;22694:289;;;;;;;;;;-1:-1:-1;22694:289:0;;;;;:::i;:::-;;:::i;15754:71::-;15793:13;15817:5;15810:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15754:71;:::o;19994:134::-;12221:6;;-1:-1:-1;;;;;12221:6:0;219:10;12221:22;12213:67;;;;-1:-1:-1;;;12213:67:0;;12943:2:1;12213:67:0;;;12925:21:1;;;12962:18;;;12955:30;-1:-1:-1;;;;;;;;;;;13001:18:1;;;12994:62;13073:18;;12213:67:0;;;;;;;;;20078:2:::1;20071:3;:9;;20063:18;;;::::0;::::1;;20108:12;:3:::0;20114:6:::1;20108:12;:::i;:::-;20092:13;:28:::0;-1:-1:-1;19994:134:0:o;16430:161::-;16505:4;16522:39;219:10;16545:7;16554:6;16522:8;:39::i;:::-;-1:-1:-1;16579:4:0;16430:161;;;;;:::o;23632:906::-;12221:6;;-1:-1:-1;;;;;12221:6:0;219:10;12221:22;12213:67;;;;-1:-1:-1;;;12213:67:0;;12943:2:1;12213:67:0;;;12925:21:1;;;12962:18;;;12955:30;-1:-1:-1;;;;;;;;;;;13001:18:1;;;12994:62;13073:18;;12213:67:0;12741:356:1;12213:67:0;23737:4:::1;23726:15:::0;::::1;;;23722:809;;;-1:-1:-1::0;;;;;23767:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;23766:21;23758:62;;;::::0;-1:-1:-1;;;23758:62:0;;11891:2:1;23758:62:0::1;::::0;::::1;11873:21:1::0;11930:2;11910:18;;;11903:30;11969;11949:18;;;11942:58;12017:18;;23758:62:0::1;11689:352:1::0;23758:62:0::1;-1:-1:-1::0;;;;;23838:16:0;::::1;23857:1;23838:16:::0;;;:7:::1;:16;::::0;;;;;:20;23835:116:::1;;-1:-1:-1::0;;;;;23918:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;23898:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;23879:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;23835:116:::1;-1:-1:-1::0;;;;;;23965:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;23965:27:0::1;23988:4;23965:27:::0;;::::1;::::0;;;24007:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;24007:23:0::1;::::0;;::::1;::::0;;23632:906::o;23722:809::-:1;24052:16:::0;24048:483:::1;;-1:-1:-1::0;;;;;24093:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;24085:61;;;::::0;-1:-1:-1;;;24085:61:0;;9932:2:1;24085:61:0::1;::::0;::::1;9914:21:1::0;9971:2;9951:18;;;9944:30;10010;9990:18;;;9983:58;10058:18;;24085:61:0::1;9730:352:1::0;24085:61:0::1;24166:9;24161:359;24185:9;:16:::0;24181:20;::::1;24161:359;;;24247:7;-1:-1:-1::0;;;;;24231:23:0::1;:9;24241:1;24231:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;24231:12:0::1;:23;24227:278;;;24294:9;24304:16:::0;;:20:::1;::::0;24323:1:::1;::::0;24304:20:::1;:::i;:::-;24294:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;24279:9:::1;:12:::0;;-1:-1:-1;;;;;24294:31:0;;::::1;::::0;24289:1;;24279:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;24279:46:0::1;-1:-1:-1::0;;;;;24279:46:0;;::::1;;::::0;;24348:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;24391:11:::1;:20:::0;;;;:28;;-1:-1:-1;;24391:28:0::1;::::0;;24442:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;24442:15:0;;;;;-1:-1:-1;;;;;;24442:15:0::1;::::0;;;;;24480:5:::1;;24227:278;24203:3:::0;::::1;::::0;::::1;:::i;:::-;;;;24161:359;;;;24048:483;23632:906:::0;;:::o;19519:241::-;12221:6;;-1:-1:-1;;;;;12221:6:0;219:10;12221:22;12213:67;;;;-1:-1:-1;;;12213:67:0;;12943:2:1;12213:67:0;;;12925:21:1;;;12962:18;;;12955:30;-1:-1:-1;;;;;;;;;;;13001:18:1;;;12994:62;13073:18;;12213:67:0;12741:356:1;12213:67:0;19617:13:::1;::::0;:18;:40;::::1;;;-1:-1:-1::0;19639:13:0::1;::::0;:18;19617:40:::1;:61;;;;-1:-1:-1::0;19662:16:0::1;::::0;;;::::1;;;19661:17;19617:61;19608:71;;;::::0;::::1;;19690:22;::::0;::::1;:13;:22:::0;19739:13:::1;:4:::0;19746:6:::1;19739:13;:::i;:::-;19723;:29:::0;-1:-1:-1;;19519:241:0:o;16727:266::-;16825:4;16842:36;16852:6;16860:9;16871:6;16842:9;:36::i;:::-;-1:-1:-1;;;;;;16920:19:0;;;;;;:11;:19;;;;;;;;219:10;16920:33;;;;;;;;;16889:74;;16898:6;;16920:42;;16956:6;;16920:42;:::i;:::-;16889:8;:74::i;:::-;-1:-1:-1;16981:4:0;16727:266;;;;;:::o;22346:340::-;12221:6;;-1:-1:-1;;;;;12221:6:0;219:10;12221:22;12213:67;;;;-1:-1:-1;;;12213:67:0;;12943:2:1;12213:67:0;;;12925:21:1;;;12962:18;;;12955:30;-1:-1:-1;;;;;;;;;;;13001:18:1;;;12994:62;13073:18;;12213:67:0;12741:356:1;12213:67:0;22436:13:::1;22474:7;22463;22453;;:17;;;;:::i;:::-;22452:29;;;;:::i;:::-;22436:45;;22520:4;22510:7;;:14;;;;:::i;:::-;22500:5;:25;;22492:88;;;::::0;-1:-1:-1;;;22492:88:0;;11119:2:1;22492:88:0::1;::::0;::::1;11101:21:1::0;11158:2;11138:18;;;11131:30;11197:34;11177:18;;;11170:62;11268:20;11248:18;;;11241:48;11306:19;;22492:88:0::1;10917:414:1::0;22492:88:0::1;22591:14;:22:::0;;;22643:14:::1;::::0;22671:7;;22643:24:::1;::::0;22660:7;;22643:24:::1;:::i;:::-;22642:36;;;;:::i;:::-;22624:15;:54:::0;-1:-1:-1;;;22346:340:0:o;24973:250::-;25039:7;25078;;25067;:18;;25059:73;;;;-1:-1:-1;;;25059:73:0;;8353:2:1;25059:73:0;;;8335:21:1;8392:2;8372:18;;;8365:30;8431:34;8411:18;;;8404:62;8502:12;8482:18;;;8475:40;8532:19;;25059:73:0;8151:406:1;25059:73:0;25143:19;25166:10;:8;:10::i;:::-;25143:33;-1:-1:-1;25194:21:0;25143:33;25194:7;:21;:::i;:::-;25187:28;24973:250;-1:-1:-1;;;24973:250:0:o;19189:322::-;12221:6;;-1:-1:-1;;;;;12221:6:0;219:10;12221:22;12213:67;;;;-1:-1:-1;;;12213:67:0;;12943:2:1;12213:67:0;;;12925:21:1;;;12962:18;;;12955:30;-1:-1:-1;;;;;;;;;;;13001:18:1;;;12994:62;13073:18;;12213:67:0;12741:356:1;12213:67:0;19292:13:::1;::::0;:18;:50;::::1;;;-1:-1:-1::0;19314:23:0::1;::::0;:28;19292:50:::1;19283:70;;;::::0;-1:-1:-1;;;19283:70:0;;14120:2:1;19283:70:0::1;::::0;::::1;14102:21:1::0;14159:1;14139:18;;;14132:29;-1:-1:-1;;;14177:18:1;;;14170:36;14223:18;;19283:70:0::1;13918:329:1::0;19283:70:0::1;19364:13;:28:::0;;;;19403:23:::1;:37:::0;19467:1:::1;19451:13;:17:::0;19495:8:::1;19479:13;:24:::0;19189:322::o;17001:215::-;219:10;17089:4;17138:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;17138:34:0;;;;;;;;;;17089:4;;17106:80;;17129:7;;17138:47;;17175:10;;17138:47;:::i;21998:340::-;12221:6;;-1:-1:-1;;;;;12221:6:0;219:10;12221:22;12213:67;;;;-1:-1:-1;;;12213:67:0;;12943:2:1;12213:67:0;;;12925:21:1;;;12962:18;;;12955:30;-1:-1:-1;;;;;;;;;;;13001:18:1;;;12994:62;13073:18;;12213:67:0;12741:356:1;12213:67:0;22087:13:::1;22125:7;22114;22104;;:17;;;;:::i;:::-;22103:29;;;;:::i;:::-;22087:45;;22171:4;22161:7;;:14;;;;:::i;:::-;22151:5;:25;;22143:93;;;::::0;-1:-1:-1;;;22143:93:0;;10289:2:1;22143:93:0::1;::::0;::::1;10271:21:1::0;10328:2;10308:18;;;10301:30;10367:34;10347:18;;;10340:62;10438:25;10418:18;;;10411:53;10481:19;;22143:93:0::1;10087:419:1::0;22143:93:0::1;22247:12;:20:::0;;;22295:14:::1;::::0;22323:7;;22295:24:::1;::::0;22312:7;;22295:24:::1;:::i;:::-;22294:36;;;;:::i;:::-;22278:13;:52:::0;-1:-1:-1;;;21998:340:0:o;14435:517::-;12221:6;;-1:-1:-1;;;;;12221:6:0;219:10;12221:22;12213:67;;;;-1:-1:-1;;;12213:67:0;;12943:2:1;12213:67:0;;;12925:21:1;;;12962:18;;;12955:30;-1:-1:-1;;;;;;;;;;;13001:18:1;;;12994:62;13073:18;;12213:67:0;12741:356:1;12213:67:0;-1:-1:-1;;;;;14516:22:0;::::1;14508:96;;;::::0;-1:-1:-1;;;14508:96:0;;15920:2:1;14508:96:0::1;::::0;::::1;15902:21:1::0;15959:2;15939:18;;;15932:30;15998:34;15978:18;;;15971:62;16069:31;16049:18;;;16042:59;16118:19;;14508:96:0::1;15718:425:1::0;14508:96:0::1;14635:4;::::0;-1:-1:-1;;;;;14623:16:0;;::::1;14635:4:::0;::::1;14623:16;;14615:90;;;::::0;-1:-1:-1;;;14615:90:0;;15920:2:1;14615:90:0::1;::::0;::::1;15902:21:1::0;15959:2;15939:18;;;15932:30;15998:34;15978:18;;;15971:62;16069:31;16049:18;;;16042:59;16118:19;;14615:90:0::1;15718:425:1::0;14615:90:0::1;14735:6;::::0;;14716:33:::1;::::0;-1:-1:-1;;;;;14735:6:0;;::::1;::::0;14716:18:::1;:33::i;:::-;14760:34;14779:8;14789:4;14760:18;:34::i;:::-;14805:37;14827:8;14837:4;14805:21;:37::i;:::-;14863:6;:17:::0;;-1:-1:-1;;;;;;14863:17:0::1;-1:-1:-1::0;;;;;14863:17:0;::::1;::::0;;::::1;::::0;;14896:38:::1;::::0;14863:17;;;;14896:38:::1;::::0;14863:6;14896:38:::1;14435:517:::0;:::o;16599:120::-;16652:4;16676:35;16684:7;-1:-1:-1;;16676:7:0;:35::i;21215:461::-;12221:6;;-1:-1:-1;;;;;12221:6:0;219:10;12221:22;12213:67;;;;-1:-1:-1;;;12213:67:0;;12943:2:1;12213:67:0;;;12925:21:1;;;12962:18;;;12955:30;-1:-1:-1;;;;;;;;;;;13001:18:1;;;12994:62;13073:18;;12213:67:0;12741:356:1;12213:67:0;21345:13:::1;;21334:7;:24;;:73;;;;;21392:15;;21379:9;:28;;21334:73;:125;;;;;21441:18;;21428:9;:31;;21334:125;21326:152;;;::::0;::::1;;21532:4;21519:9:::0;21497:19:::1;21507:9:::0;21497:7;:19:::1;:::i;:::-;:31;;;;:::i;:::-;:39;;21489:48;;;::::0;::::1;;21548:19;:29:::0;;;;21588:21:::1;:33:::0;21632:24:::1;:36:::0;21215:461::o;23492:132::-;12221:6;;-1:-1:-1;;;;;12221:6:0;219:10;12221:22;12213:67;;;;-1:-1:-1;;;12213:67:0;;12943:2:1;12213:67:0;;;12925:21:1;;;12962:18;;;12955:30;-1:-1:-1;;;;;;;;;;;13001:18:1;;;12994:62;13073:18;;12213:67:0;12741:356:1;12213:67:0;-1:-1:-1;;;;;23579:27:0;;;::::1;;::::0;;;:18:::1;:27;::::0;;;;:37;;-1:-1:-1;;23579:37:0::1;::::0;::::1;;::::0;;;::::1;::::0;;23492:132::o;20289:453::-;12221:6;;-1:-1:-1;;;;;12221:6:0;219:10;12221:22;12213:67;;;;-1:-1:-1;;;12213:67:0;;12943:2:1;12213:67:0;;;12925:21:1;;;12962:18;;;12955:30;-1:-1:-1;;;;;;;;;;;13001:18:1;;;12994:62;13073:18;;12213:67:0;12741:356:1;12213:67:0;20417:13:::1;;20406:7;:24;;:73;;;;;20464:15;;20451:9;:28;;20406:73;:128;;;;;20516:18;;20500:12;:34;;20406:128;20398:155;;;::::0;::::1;;20610:4;20594:12:::0;20572:19:::1;20582:9:::0;20572:7;:19:::1;:::i;:::-;:34;;;;:::i;:::-;:42;;20564:51;;;::::0;::::1;;20626:14;:24:::0;;;;20661:16:::1;:28:::0;20700:19:::1;:34:::0;20289:453::o;16049:198::-;-1:-1:-1;;;;;16139:20:0;;16115:7;16139:20;;;:11;:20;;;;;;;;16135:49;;;-1:-1:-1;;;;;;16168:16:0;;;;;:7;:16;;;;;;;16049:198::o;16135:49::-;-1:-1:-1;;;;;16222:16:0;;;;;;:7;:16;;;;;;16202:37;;:19;:37::i;14960:194::-;12221:6;;-1:-1:-1;;;;;12221:6:0;219:10;12221:22;12213:67;;;;-1:-1:-1;;;12213:67:0;;12943:2:1;12213:67:0;;;12925:21:1;;;12962:18;;;12955:30;-1:-1:-1;;;;;;;;;;;13001:18:1;;;12994:62;13073:18;;12213:67:0;12741:356:1;12213:67:0;15046:6:::1;::::0;;15027:33:::1;::::0;-1:-1:-1;;;;;15046:6:0;;::::1;::::0;15027:18:::1;:33::i;:::-;15088:1;15071:19:::0;;-1:-1:-1;;;;;;15071:19:0::1;::::0;;15106:40:::1;::::0;15088:1;;15106:40:::1;::::0;15088:1;;15106:40:::1;14960:194::o:0;12758:1037::-;12221:6;;-1:-1:-1;;;;;12221:6:0;219:10;12221:22;12213:67;;;;-1:-1:-1;;;12213:67:0;;12943:2:1;12213:67:0;;;12925:21:1;;;12962:18;;;12955:30;-1:-1:-1;;;;;;;;;;;13001:18:1;;;12994:62;13073:18;;12213:67:0;12741:356:1;12213:67:0;12826:19:::1;::::0;::::1;;12825:20;12817:62;;;::::0;-1:-1:-1;;;12817:62:0;;12585:2:1;12817:62:0::1;::::0;::::1;12567:21:1::0;12624:2;12604:18;;;12597:30;12663:31;12643:18;;;12636:59;12712:18;;12817:62:0::1;12383:353:1::0;12817:62:0::1;12890:18;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;;::::0;;::::1;::::0;;;::::1;::::0;:5:::1;::::0;:18:::1;:::i;:::-;-1:-1:-1::0;12919:16:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;;::::0;;::::1;::::0;;;::::1;::::0;:7:::1;::::0;:16:::1;:::i;:::-;-1:-1:-1::0;12963:14:0::1;12946;:31:::0;12988:9:::1;:13:::0;;-1:-1:-1;;12988:13:0::1;13000:1;12988:13:::0;;::::1;::::0;;;13044::::1;::::0;:2:::1;:13;:::i;:::-;13026:14;;:32;;;;:::i;:::-;13016:7;:42:::0;;;13087:13:::1;::::0;-1:-1:-1;;13087:13:0::1;:::i;:::-;13080:21;::::0;-1:-1:-1;;13080:21:0::1;:::i;:::-;13069:7;:33:::0;13146:14:::1;::::0;13115:9:::1;:46:::0;;-1:-1:-1;;;;;;13115:46:0::1;-1:-1:-1::0;;;;;13146:14:0;;::::1;13115:46:::0;;::::1;::::0;;13199:19:::1;::::0;;;;;;;:17:::1;::::0;:19:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;13146:14;13199:19;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;13181:49:0::1;;13231:9;;;;;;;;;-1:-1:-1::0;;;;;13231:9:0::1;-1:-1:-1::0;;;;;13231:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13181:82;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;5629:15:1;;;13181:82:0::1;::::0;::::1;5611:34:1::0;13257:4:0::1;5661:18:1::0;;;5654:43;5523:18;;13181:82:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13172:6;:91:::0;;-1:-1:-1;;;;;;13172:91:0::1;-1:-1:-1::0;;;;;13172:91:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;13274:15:0;;;:7:::1;:15;::::0;;;;;;;:22;;-1:-1:-1;;13274:22:0::1;-1:-1:-1::0;13274:22:0::1;::::0;;13327:4:::1;13307:26:::0;;:11:::1;:26:::0;;;;;13342:9:::1;::::0;;;::::1;13307:46:::0;;;;;;-1:-1:-1;;13307:66:0;;13429:7:::1;::::0;13442:6:::1;::::0;13429:12:::1;::::0;13439:2:::1;13429:12;:::i;:::-;:19;;;;:::i;:::-;13414:12;:34:::0;13476:7:::1;::::0;:11:::1;::::0;13484:3:::1;::::0;13476:11:::1;:::i;:::-;13459:14;:28:::0;13542:7:::1;::::0;13557:6:::1;::::0;13542:11:::1;::::0;13552:1:::1;13542:11;:::i;:::-;13541:22;;;;:::i;:::-;13525:13;:38:::0;13588:7:::1;::::0;13603:5:::1;::::0;13588:11:::1;::::0;13598:1:::1;13588:11;:::i;:::-;13587:21;;;;:::i;:::-;13574:10;:34:::0;13629:14:::1;::::0;13621:42:::1;::::0;-1:-1:-1;;;;;13629:14:0::1;-1:-1:-1::0;;13621:7:0::1;:42::i;:::-;-1:-1:-1::0;13676:19:0::1;:26:::0;;-1:-1:-1;;13676:26:0::1;13698:4;13676:26:::0;;::::1;::::0;;;13732:7:::1;::::0;;13676:19:::1;13721:7;14386::::0;14413:6;-1:-1:-1;;;;;14413:6:0;;14348:79;13721:7:::1;-1:-1:-1::0;;;;;13713:16:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;13713:16:0;:26;13770:7:::1;14386::::0;14413:6;-1:-1:-1;;;;;14413:6:0;;14348:79;13770:7:::1;13764:4;::::0;13779:7:::1;::::0;13755:32:::1;::::0;16294:25:1;;;-1:-1:-1;;;;;13755:32:0;;::::1;::::0;13764:4;;::::1;::::0;13755:32:::1;::::0;16282:2:1;16267:18;13755:32:0::1;;;;;;;12758:1037::o:0;18018:424::-;12221:6;;-1:-1:-1;;;;;12221:6:0;219:10;12221:22;12213:67;;;;-1:-1:-1;;;12213:67:0;;12943:2:1;12213:67:0;;;12925:21:1;;;12962:18;;;12955:30;-1:-1:-1;;;;;;;;;;;13001:18:1;;;12994:62;13073:18;;12213:67:0;12741:356:1;12213:67:0;18099:16;18095:340:::1;;-1:-1:-1::0;;;;;;18132:13:0::1;18148:5;18132:13:::0;;;:7:::1;:13;::::0;;;;:21;;-1:-1:-1;;18132:21:0::1;::::0;;23632:906::o;18095:340::-:1;18190:17;::::0;:22;18186:153:::1;;18279:7;18259:17;;18241:15;:35;;;;:::i;:::-;:45;18233:90;;;::::0;-1:-1:-1;;;18233:90:0;;9571:2:1;18233:90:0::1;::::0;::::1;9553:21:1::0;;;9590:18;;;9583:30;9649:34;9629:18;;;9622:62;9701:18;;18233:90:0::1;9369:356:1::0;18233:90:0::1;-1:-1:-1::0;;;;;18353:13:0;::::1;;::::0;;;:7:::1;:13;::::0;;;;:20;;-1:-1:-1;;18353:20:0::1;18369:4;18353:20;::::0;;18408:15:::1;18388:17;:35:::0;18018:424;;:::o;30064:398::-;12221:6;;-1:-1:-1;;;;;12221:6:0;219:10;12221:22;12213:67;;;;-1:-1:-1;;;12213:67:0;;12943:2:1;12213:67:0;;;12925:21:1;;;12962:18;;;12955:30;-1:-1:-1;;;;;;;;;;;13001:18:1;;;12994:62;13073:18;;12213:67:0;12741:356:1;12213:67:0;30126:14:::1;::::0;::::1;;30125:15;30117:52;;;::::0;-1:-1:-1;;;30117:52:0;;15214:2:1;30117:52:0::1;::::0;::::1;15196:21:1::0;15253:2;15233:18;;;15226:30;15292:26;15272:18;;;15265:54;15336:18;;30117:52:0::1;15012:348:1::0;30117:52:0::1;30180:42;30210:4;30217;30180:21;:42::i;:::-;30255:6;::::0;30233:35:::1;::::0;-1:-1:-1;;;;;30255:6:0::1;::::0;30233:21:::1;:35::i;:::-;30283:13;;30300:1;30283:18;30279:144;;30333:18;:12;30348:3;30333:18;:::i;:::-;30318:12;:33:::0;30279:144:::1;;;30399:12;30384;:27:::0;30279:144:::1;30433:14;:21:::0;;-1:-1:-1;;30433:21:0::1;30450:4;30433:21;::::0;;30064:398::o;15673:75::-;15714:13;15738:7;15731:14;;;;;:::i;17224:225::-;219:10;17317:4;17366:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;17366:34:0;;;;;;;;;;17317:4;;17334:85;;17357:7;;17366:52;;17403:15;;17366:52;:::i;16255:167::-;16333:4;16350:42;219:10;16374:9;16385:6;16350:9;:42::i;22991:314::-;12221:6;;-1:-1:-1;;;;;12221:6:0;219:10;12221:22;12213:67;;;;-1:-1:-1;;;12213:67:0;;12943:2:1;12213:67:0;;;12925:21:1;;;12962:18;;;12955:30;-1:-1:-1;;;;;;;;;;;13001:18:1;;;12994:62;13073:18;;12213:67:0;12741:356:1;12213:67:0;23123:27:::1;::::0;-1:-1:-1;;;;;23123:27:0::1;:41:::0;;::::1;::::0;:70:::1;;-1:-1:-1::0;23168:11:0::1;::::0;-1:-1:-1;;;;;23168:11:0::1;:25:::0;::::1;23123:70;23115:79;;;::::0;::::1;;23205:27;:48:::0;;-1:-1:-1;;;;;23205:48:0;;::::1;-1:-1:-1::0;;;;;;23205:48:0;;::::1;;::::0;;;23264:11:::1;:33:::0;;;;;::::1;::::0;::::1;;::::0;;22991:314::o;19768:218::-;12221:6;;-1:-1:-1;;;;;12221:6:0;219:10;12221:22;12213:67;;;;-1:-1:-1;;;12213:67:0;;12943:2:1;12213:67:0;;;12925:21:1;;;12962:18;;;12955:30;-1:-1:-1;;;;;;;;;;;13001:18:1;;;12994:62;13073:18;;12213:67:0;12741:356:1;12213:67:0;19877:16:::1;:28:::0;;;::::1;;;;-1:-1:-1::0;;19877:28:0;;::::1;::::0;;;::::1;::::0;;;19916:14:::1;:24:::0;;;::::1;;-1:-1:-1::0;;19916:24:0;;::::1;;::::0;;19951:15:::1;:27:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;19768:218::o;18616:166::-;12221:6;;-1:-1:-1;;;;;12221:6:0;219:10;12221:22;12213:67;;;;-1:-1:-1;;;12213:67:0;;12943:2:1;12213:67:0;;;12925:21:1;;;12962:18;;;12955:30;-1:-1:-1;;;;;;;;;;;13001:18:1;;;12994:62;13073:18;;12213:67:0;12741:356:1;12213:67:0;-1:-1:-1;;;;;18714:52:0::1;18769:5;18714:52:::0;;;:35:::1;:52;::::0;;;;:60;;-1:-1:-1;;18714:60:0::1;::::0;;18616:166::o;23313:171::-;12221:6;;-1:-1:-1;;;;;12221:6:0;219:10;12221:22;12213:67;;;;-1:-1:-1;;;12213:67:0;;12943:2:1;12213:67:0;;;12925:21:1;;;12962:18;;;12955:30;-1:-1:-1;;;;;;;;;;;13001:18:1;;;12994:62;13073:18;;12213:67:0;12741:356:1;12213:67:0;23390:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;23390:32:0::1;-1:-1:-1::0;;;;23390:32:0;;::::1;;::::0;;23438:38:::1;::::0;::::1;::::0;::::1;::::0;23414:8;6508:14:1;6501:22;6483:41;;6471:2;6456:18;;6343:187;23438:38:0::1;;;;;;;;23313:171:::0;:::o;21684:306::-;12221:6;;-1:-1:-1;;;;;12221:6:0;219:10;12221:22;12213:67;;;;-1:-1:-1;;;12213:67:0;;12943:2:1;12213:67:0;;;12925:21:1;;;12962:18;;;12955:30;-1:-1:-1;;;;;;;;;;;13001:18:1;;;12994:62;13073:18;;12213:67:0;12741:356:1;12213:67:0;21826:20;21807:16:::1;21819:4:::0;21807:9;:16:::1;:::i;:::-;:39;;;;:::i;:::-;21851:4;21806:49;21796:60;;;::::0;::::1;;21867:15;:27:::0;;;;21905:26:::1;:49:::0;21965:10:::1;:17:::0;21684:306::o;18450:158::-;12221:6;;-1:-1:-1;;;;;12221:6:0;219:10;12221:22;12213:67;;;;-1:-1:-1;;;12213:67:0;;12943:2:1;12213:67:0;;;12925:21:1;;;12962:18;;;12955:30;-1:-1:-1;;;;;;;;;;;13001:18:1;;;12994:62;13073:18;;12213:67:0;12741:356:1;12213:67:0;-1:-1:-1;;;;;18541:52:0::1;;::::0;;;:35:::1;:52;::::0;;;;:59;;-1:-1:-1;;18541:59:0::1;18596:4;18541:59;::::0;;18450:158::o;20750:457::-;12221:6;;-1:-1:-1;;;;;12221:6:0;219:10;12221:22;12213:67;;;;-1:-1:-1;;;12213:67:0;;12943:2:1;12213:67:0;;;12925:21:1;;;12962:18;;;12955:30;-1:-1:-1;;;;;;;;;;;13001:18:1;;;12994:62;13073:18;;12213:67:0;12741:356:1;12213:67:0;20879:13:::1;;20868:7;:24;;:73;;;;;20926:15;;20913:9;:28;;20868:73;:128;;;;;20978:18;;20962:12;:34;;20868:128;20860:155;;;::::0;::::1;;21072:4;21056:12:::0;21034:19:::1;21044:9:::0;21034:7;:19:::1;:::i;:::-;:34;;;;:::i;:::-;:42;;21026:51;;;::::0;::::1;;21088:15;:25:::0;;;;21124:17:::1;:29:::0;21164:20:::1;:35:::0;20750:457::o;17457:553::-;12221:6;;-1:-1:-1;;;;;12221:6:0;219:10;12221:22;12213:67;;;;-1:-1:-1;;;12213:67:0;;12943:2:1;12213:67:0;;;12925:21:1;;;12962:18;;;12955:30;-1:-1:-1;;;;;;;;;;;13001:18:1;;;12994:62;13073:18;;12213:67:0;12741:356:1;12213:67:0;17530:29:::1;17581:9;17530:61;;17602:16;17639:10;-1:-1:-1::0;;;;;17639:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;17621:47:0::1;;17677:4;17684:10;-1:-1:-1::0;;;;;17684:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17621:81;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;5629:15:1;;;17621:81:0::1;::::0;::::1;5611:34:1::0;5681:15;;5661:18;;;5654:43;5523:18;;17621:81:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17602:100:::0;-1:-1:-1;;;;;;17717:22:0;::::1;17713:207;;17783:10;-1:-1:-1::0;;;;;17783:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;17765:50:0::1;;17824:4;17831:10;-1:-1:-1::0;;;;;17831:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17765:84;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;5629:15:1;;;17765:84:0::1;::::0;::::1;5611:34:1::0;5681:15;;5661:18;;;5654:43;5523:18;;17765:84:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17756:6;:93:::0;;-1:-1:-1;;;;;;17756:93:0::1;-1:-1:-1::0;;;;;17756:93:0;;;::::1;::::0;;;::::1;::::0;;17713:207:::1;;;17891:6;:17:::0;;-1:-1:-1;;;;;;17891:17:0::1;-1:-1:-1::0;;;;;17891:17:0;::::1;;::::0;;17713:207:::1;17930:9;:22:::0;;-1:-1:-1;;;;;;17930:22:0::1;-1:-1:-1::0;;;;;17930:22:0;::::1;;::::0;;17963:39:::1;17980:4;17987:9:::0;-1:-1:-1;;17963:8:0::1;:39::i;20136:141::-:0;12221:6;;-1:-1:-1;;;;;12221:6:0;219:10;12221:22;12213:67;;;;-1:-1:-1;;;12213:67:0;;12943:2:1;12213:67:0;;;12925:21:1;;;12962:18;;;12955:30;-1:-1:-1;;;;;;;;;;;13001:18:1;;;12994:62;13073:18;;12213:67:0;12741:356:1;12213:67:0;-1:-1:-1;;;;;20228:31:0;;;::::1;;::::0;;;:22:::1;:31;::::0;;;;:41;;-1:-1:-1;;20228:41:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20136:141::o;22694:289::-;12221:6;;-1:-1:-1;;;;;12221:6:0;219:10;12221:22;12213:67;;;;-1:-1:-1;;;12213:67:0;;12943:2:1;12213:67:0;;;12925:21:1;;;12962:18;;;12955:30;-1:-1:-1;;;;;;;;;;;13001:18:1;;;12994:62;13073:18;;12213:67:0;12741:356:1;12213:67:0;22894:16:::1;22874;22864:7;;:26;;;;:::i;:::-;22863:47;;;;:::i;:::-;22847:13;:63:::0;22935:7:::1;::::0;22962:13;;22935:23:::1;::::0;22945:13;;22935:23:::1;:::i;:::-;22934:41;;;;:::i;:::-;22921:10;:54:::0;-1:-1:-1;;;;22694:289:0:o;25235:342::-;-1:-1:-1;;;;;25330:20:0;;25322:69;;;;-1:-1:-1;;;25322:69:0;;14809:2:1;25322:69:0;;;14791:21:1;14848:2;14828:18;;;14821:30;14887:34;14867:18;;;14860:62;14958:6;14938:18;;;14931:34;14982:19;;25322:69:0;14607:400:1;25322:69:0;-1:-1:-1;;;;;25410:21:0;;25402:68;;;;-1:-1:-1;;;25402:68:0;;8764:2:1;25402:68:0;;;8746:21:1;8803:2;8783:18;;;8776:30;8842:34;8822:18;;;8815:62;8913:4;8893:18;;;8886:32;8935:19;;25402:68:0;8562:398:1;25402:68:0;-1:-1:-1;;;;;25483:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;25536:33;;16294:25:1;;;25536:33:0;;16267:18:1;25536:33:0;;;;;;;25235:342;;;:::o;25585:2079::-;25664:4;-1:-1:-1;;;;;25689:18:0;;25681:68;;;;-1:-1:-1;;;25681:68:0;;13714:2:1;25681:68:0;;;13696:21:1;13753:2;13733:18;;;13726:30;13792:34;13772:18;;;13765:62;13863:7;13843:18;;;13836:35;13888:19;;25681:68:0;13512:401:1;25681:68:0;-1:-1:-1;;;;;25768:16:0;;25760:64;;;;-1:-1:-1;;;25760:64:0;;7596:2:1;25760:64:0;;;7578:21:1;7635:2;7615:18;;;7608:30;7674:34;7654:18;;;7647:62;7745:5;7725:18;;;7718:33;7768:19;;25760:64:0;7394:399:1;25760:64:0;25852:1;25843:6;:10;25835:64;;;;-1:-1:-1;;;25835:64:0;;13304:2:1;25835:64:0;;;13286:21:1;13343:2;13323:18;;;13316:30;13382:34;13362:18;;;13355:62;13453:11;13433:18;;;13426:39;13482:19;;25835:64:0;13102:405:1;25835:64:0;25914:14;;;;25910:112;;;25968:13;;25953:11;:28;;25945:65;;;;-1:-1:-1;;;25945:65:0;;11538:2:1;25945:65:0;;;11520:21:1;11577:2;11557:18;;;11550:30;11616:26;11596:18;;;11589:54;11660:18;;25945:65:0;11336:348:1;25945:65:0;26035:20;26046:4;26052:2;26035:10;:20::i;:::-;26032:955;;;26076:14;;;;26072:89;;26111:34;;-1:-1:-1;;;26111:34:0;;8000:2:1;26111:34:0;;;7982:21:1;8039:2;8019:18;;;8012:30;8078:26;8058:18;;;8051:54;8122:18;;26111:34:0;7798:348:1;26072:89:0;26179:15;;;;26175:347;;;-1:-1:-1;;;;;26219:13:0;;;;;;:7;:13;;;;;;;;26215:292;;;-1:-1:-1;;;;;26264:13:0;;;;;;:9;:13;;;;;;26281:12;26264:29;;26256:38;;;;;;-1:-1:-1;;;;;26317:13:0;;;;;;:9;:13;;;;;26333:12;26317:28;;26215:292;;;-1:-1:-1;;;;;26402:15:0;;;;;;:9;:15;;;;;;26421:12;26402:31;;26394:40;;;;;;-1:-1:-1;;;;;26457:15:0;;;;;;:9;:15;;;;;26475:12;26457:30;;26215:292;-1:-1:-1;;;;;26541:41:0;;;;;;:35;:41;;;;;;;;;:84;;-1:-1:-1;;;;;;26586:39:0;;;;;;:35;:39;;;;;;;;26541:84;26536:440;;-1:-1:-1;;;;;26649:13:0;;;;;;:7;:13;;;;;;;;;:28;;-1:-1:-1;;;;;;26666:11:0;;;;;;:7;:11;;;;;;;;26649:28;26646:134;;;26719:12;;26709:6;:22;;26701:59;;;;-1:-1:-1;;;26701:59:0;;15567:2:1;26701:59:0;;;15549:21:1;15606:2;15586:18;;;15579:30;15645:26;15625:18;;;15618:54;15689:18;;26701:59:0;15365:348:1;26701:59:0;26807:14;;-1:-1:-1;;;;;26801:20:0;;;26807:14;;26801:20;;;;:36;;-1:-1:-1;;;;;;26826:11:0;;;;;;:7;:11;;;;;;;;26825:12;26801:36;26798:163;;;26896:14;;26886:6;26870:13;26880:2;26870:9;:13::i;:::-;:22;;;;:::i;:::-;:40;;26862:79;;;;-1:-1:-1;;;26862:79:0;;14454:2:1;26862:79:0;;;14436:21:1;14493:2;14473:18;;;14466:30;14532:28;14512:18;;;14505:56;14578:18;;26862:79:0;14252:350:1;26862:79:0;-1:-1:-1;;;;;27032:24:0;;26999:12;27032:24;;;:18;:24;;;;;;27014:4;;27032:24;;;:50;;-1:-1:-1;;;;;;27060:22:0;;;;;;:18;:22;;;;;;;;27032:50;27029:96;;;-1:-1:-1;27108:5:0;27029:96;-1:-1:-1;;;;;27141:11:0;;;;;;:7;:11;;;;;;;;27137:457;;;27174:16;;-1:-1:-1;;;27174:16:0;;;;27173:17;:59;;;;-1:-1:-1;27211:21:0;;-1:-1:-1;;;27211:21:0;;;;27173:59;27169:408;;;27267:28;27298:24;27316:4;27298:9;:24::i;:::-;27267:55;;27369:13;;27345:20;:37;27341:221;;27434:10;;27410:20;:34;27407:77;;-1:-1:-1;27471:10:0;;27407:77;27506:36;27521:20;27506:14;:36::i;:::-;27248:329;27169:408;27612:44;27630:4;27636:2;27640:6;27648:7;27612:17;:44::i;:::-;27605:51;25585:2079;-1:-1:-1;;;;;25585:2079:0:o;34366:161::-;34408:7;34429:15;34446;34465:19;:17;:19::i;:::-;34428:56;;-1:-1:-1;34428:56:0;-1:-1:-1;34502:17:0;34428:56;;34502:17;:::i;:::-;34495:24;;;;34366:161;:::o;24641:324::-;24710:4;14413:6;;-1:-1:-1;;;;;24734:15:0;;;14413:6;;24734:15;;;;:45;;-1:-1:-1;14386:7:0;14413:6;-1:-1:-1;;;;;24766:13:0;;;14413:6;;24766:13;;24734:45;:84;;;;-1:-1:-1;;;;;;24797:21:0;;;;;;:17;:21;;;;;;;;24796:22;24734:84;:125;;;;-1:-1:-1;;;;;;24836:23:0;;;;;;:17;:23;;;;;;;;24835:24;24734:125;:152;;;;-1:-1:-1;24882:4:0;;-1:-1:-1;;;;;24876:10:0;;;24882:4;;24876:10;;24734:152;:185;;;;-1:-1:-1;;;;;;24903:16:0;;;;24734:185;:223;;;;-1:-1:-1;;;;;;24936:21:0;;24952:4;24936:21;;24727:230;24641:324;-1:-1:-1;;;24641:324:0:o;27672:1199::-;12095:16;:23;;-1:-1:-1;;;;12095:23:0;-1:-1:-1;;;12095:23:0;;;27809:10:::1;::::0;27780:26:::1;::::0;27762:15:::1;::::0;:44:::1;::::0;27780:26;27762:44:::1;:::i;:::-;:57;;;;:::i;:::-;27758:88;;27839:7;;27758:88;27856:17;27983:1;27968:10;;27939:26;;27921:15;;:44;;;;:::i;:::-;:57;;;;:::i;:::-;27901:15;::::0;27878:38:::1;::::0;:20;:38:::1;:::i;:::-;27877:102;;;;:::i;:::-;27876:108;;;;:::i;:::-;27856:128:::0;-1:-1:-1;27997:20:0::1;28020:32;27856:128:::0;28020:20;:32:::1;:::i;:::-;27997:55;;28063:30;28080:12;28063:16;:30::i;:::-;28165:24;28301:1;28285:10;;28256:26;;28238:15;;:44;;;;:::i;:::-;:57;;;;:::i;:::-;28218:15;::::0;28194:39:::1;::::0;:21:::1;:39;:::i;:::-;28193:104;;;;:::i;:::-;28192:110;;;;:::i;:::-;28165:137:::0;-1:-1:-1;28319:13:0;;28315:161:::1;;28349:41;28362:9;28373:16;28349:12;:41::i;:::-;28410:54;::::0;;17563:25:1;;;17619:2;17604:18;;17597:34;;;17647:18;;;17640:34;;;28410:54:0::1;::::0;17551:2:1;17536:18;28410:54:0::1;;;;;;;28315:161;28525:1;28490:32;28513:9:::0;28490:20;:32:::1;:::i;:::-;:36;28486:378;;;28705:10;::::0;28676:26:::1;::::0;28562:21:::1;::::0;28543:16:::1;::::0;28676:39:::1;::::0;28705:10;28676:39:::1;:::i;:::-;28645:26;::::0;28635:36:::1;::::0;:8;:36:::1;:::i;:::-;28634:82;;;;:::i;:::-;28731:27;::::0;:63:::1;::::0;28598:118;;-1:-1:-1;;;;;;28731:27:0::1;::::0;:63;::::1;;;::::0;28598:118;;28731:27:::1;:63:::0;:27;:63;28598:118;28731:27;:63;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;28809:11:0::1;::::0;:43:::1;::::0;-1:-1:-1;;;;;28809:11:0;;::::1;::::0;28830:21:::1;28809:43:::0;::::1;;;::::0;:11:::1;:43:::0;:11;:43;28830:21;28809:11;:43;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;28528:336;;28486:378;27747:1124;;;12129:1;-1:-1:-1::0;12141:16:0;:24;;-1:-1:-1;;;;12141:24:0;;;27672:1199::o;30676:2043::-;30799:16;;30778:4;;30799:16;;;;;30795:851;;;-1:-1:-1;;;;;19142:31:0;;19118:4;19142:31;;;:22;:31;;;;;;;;30835:56;;;-1:-1:-1;;;;;;19142:31:0;;19118:4;19142:31;;;:22;:31;;;;;;;;30866:25;30831:116;;;30912:19;;-1:-1:-1;;;30912:19:0;;12248:2:1;30912:19:0;;;12230:21:1;12287:1;12267:18;;;12260:29;12325:11;12305:18;;;12298:39;12354:18;;30912:19:0;12046:332:1;30831:116:0;30968:16;;;;;;;30963:672;;31005:28;31024:4;31030:2;31005:18;:28::i;:::-;31057:16;;;;;;;31056:17;:41;;;;;31077:20;31088:4;31094:2;31077:10;:20::i;:::-;31052:137;;;31122:47;;-1:-1:-1;;;31122:47:0;;10713:2:1;31122:47:0;;;10695:21:1;10752:2;10732:18;;;10725:30;10791:34;10771:18;;;10764:62;10862:7;10842:18;;;10835:35;10887:19;;31122:47:0;10511:401:1;31052:137:0;30963:672;;;31248:1;31233:12;;:16;:55;;;;-1:-1:-1;;;;;;31275:13:0;;;;;;:7;:13;;;;;;;;31233:55;:101;;;;;31314:20;31325:4;31331:2;31314:10;:20::i;:::-;31229:391;;;31411:13;;31396:12;;31381:27;;:12;:27;:::i;:::-;:43;31377:224;;;-1:-1:-1;;;;;31453:26:0;;;;;;:22;:26;;;;;:33;;-1:-1:-1;;31453:33:0;31482:4;31453:33;;;31513:13;:16;;;;;;:::i;:::-;;;;-1:-1:-1;;31561:16:0;;-1:-1:-1;;;;;5062:55:1;;5044:74;;31561:16:0;;5032:2:1;5017:18;31561:16:0;;;;;;;31377:224;31658:25;31686:38;31697:4;31703:2;31707:7;31716;31686:10;:38::i;:::-;31769:14;;;;-1:-1:-1;;;;;31753:13:0;;;;;;:7;:13;;;;;;31658:66;;-1:-1:-1;31753:30:0;;;:::i;:::-;-1:-1:-1;;;;;31737:13:0;;;;;;;:7;:13;;;;;;:46;;;;31822:22;;;;31808:11;;;;;;;;;;:36;;31822:22;31808:36;:::i;:::-;-1:-1:-1;;;;;31794:11:0;;;;;;;:7;:11;;;;;;;;:50;;;;31861:17;;;;;:11;:17;;;;;;;:37;;;;-1:-1:-1;;;;;;31883:15:0;;;;;;:11;:15;;;;;;;;31882:16;31861:37;31857:416;;;-1:-1:-1;;;;;31931:13:0;;;;;;:7;:13;;;;;;:23;;31947:7;;31931:23;:::i;:::-;-1:-1:-1;;;;;31915:13:0;;;;;;:7;:13;;;;;:39;31857:416;;;-1:-1:-1;;;;;31977:17:0;;;;;;:11;:17;;;;;;;;31976:18;:37;;;;-1:-1:-1;;;;;;31998:15:0;;;;;;:11;:15;;;;;;;;31976:37;31972:301;;;32058:22;;-1:-1:-1;;;;;32044:11:0;;32058:22;32044:11;;;:7;:11;;;;;;:36;;32058:22;32044:36;:::i;:::-;-1:-1:-1;;;;;32030:11:0;;;;;;:7;:11;;;;;:50;31972:301;;;-1:-1:-1;;;;;32104:17:0;;;;;;:11;:17;;;;;;;;:36;;;;-1:-1:-1;;;;;;32125:15:0;;;;;;:11;:15;;;;;;;;32104:36;32100:173;;;-1:-1:-1;;;;;32173:13:0;;;;;;:7;:13;;;;;;:23;;32189:7;;32173:23;:::i;:::-;-1:-1:-1;;;;;32157:13:0;;;;;;;:7;:13;;;;;;:39;;;;32239:22;;32225:11;;;;;;;;;;:36;;32239:22;32225:36;:::i;:::-;-1:-1:-1;;;;;32211:11:0;;;;;;:7;:11;;;;;:50;32100:173;32289:20;32300:4;32306:2;32289:10;:20::i;:::-;32285:151;;;32329:13;;:18;;:43;;;32351:13;;32368:4;32351:21;;32329:43;32325:100;;;32393:16;;-1:-1:-1;;;32393:16:0;;14120:2:1;32393:16:0;;;14102:21:1;14159:1;14139:18;;;14132:29;-1:-1:-1;;;14177:18:1;;;14170:36;14223:18;;32393:16:0;13918:329:1;32325:100:0;32452:17;;;;:21;32448:79;;32488:39;32503:4;32509:6;:17;;;32488:14;:39::i;:::-;32556:1;32542:6;:11;;;:15;:34;;;;32575:1;32561:6;:11;;;:15;32542:34;32538:91;;;32591:38;32604:6;:11;;;32617:6;:11;;;32591:12;:38::i;:::-;32662:2;-1:-1:-1;;;;;32647:42:0;32656:4;-1:-1:-1;;;;;32647:42:0;;32666:6;:22;;;32647:42;;;;16294:25:1;;16282:2;16267:18;;16148:177;32647:42:0;;;;;;;;-1:-1:-1;32707:4:0;;30676:2043;-1:-1:-1;;;;;30676:2043:0:o;34535:547::-;34633:7;;34669;;34586;;;;;34687:283;34711:9;:16;34707:20;;34687:283;;;34777:7;34753;:21;34761:9;34771:1;34761:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;34761:12:0;34753:21;;;;;;;;;;;;;:31;;:66;;;34812:7;34788;:21;34796:9;34806:1;34796:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;34796:12:0;34788:21;;;;;;;;;;;;;:31;34753:66;34749:97;;;34829:7;;34838;;34821:25;;;;;;;34535:547;;:::o;34749:97::-;34881:7;:21;34889:9;34899:1;34889:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;34889:12:0;34881:21;;;;;;;;;;;;;34871:31;;:7;:31;:::i;:::-;34861:41;;34937:7;:21;34945:9;34955:1;34945:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;34945:12:0;34937:21;;;;;;;;;;;;;34927:31;;:7;:31;:::i;:::-;34917:41;-1:-1:-1;34729:3:0;;;;:::i;:::-;;;;34687:283;;;;35004:7;;34994;;:17;;;;:::i;:::-;34984:7;:27;34980:58;;;35021:7;;35030;;35013:25;;;;;;34535:547;;:::o;34980:58::-;35057:7;;35066;;-1:-1:-1;34535:547:0;-1:-1:-1;34535:547:0:o;28879:389::-;28970:16;;;28984:1;28970:16;;;;;;;;28946:21;;28970:16;;;;;;;;;;-1:-1:-1;28970:16:0;28946:40;;29015:4;28997;29002:1;28997:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28997:23:0;;;:7;;;;;;;;;;:23;;;;29041:9;;:16;;;;;;;;:9;;;;;:14;;:16;;;;;28997:7;;29041:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29031:4;29036:1;29031:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;29031:26:0;;;:7;;;;;;;;;:26;29070:9;;:190;;;;;:9;;;:60;;:190;;29145:11;;29070:9;;29187:4;;29214;;29234:15;;29070:190;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28935:333;28879:389;:::o;29276:333::-;29358:9;;29556:4;;29358:243;;;;;29424:4;29358:243;;;6072:34:1;6122:18;;;6115:34;;;29358:9:0;6165:18:1;;;6158:34;;;6208:18;;;6201:34;-1:-1:-1;;;;;29556:4:0;;;6251:19:1;;;6244:44;29575:15:0;6304:19:1;;;6297:35;29358:9:0;;;:25;;29391:9;;5983:19:1;;29358:243:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;29276:333;;:::o;29617:439::-;29700:16;;;;;;;29699:17;29691:65;;;;-1:-1:-1;;;29691:65:0;;9167:2:1;29691:65:0;;;9149:21:1;9206:2;9186:18;;;9179:30;9245:34;9225:18;;;9218:62;9316:5;9296:18;;;9289:33;9339:19;;29691:65:0;8965:399:1;29691:65:0;29772:20;29783:4;29789:2;29772:10;:20::i;:::-;29771:21;:37;;;;-1:-1:-1;29802:6:0;;-1:-1:-1;;;;;29796:12:0;;;29802:6;;29796:12;29771:37;29767:282;;;-1:-1:-1;;;;;29825:23:0;;;;;;:17;:23;;;;;;;:30;;-1:-1:-1;;29825:30:0;29851:4;29825:30;;;;;;29870:16;:23;;-1:-1:-1;;29870:23:0;;;;;29923:15;29908:12;:30;29955:21;:28;;-1:-1:-1;;;;29955:28:0;-1:-1:-1;;;29955:28:0;;;30003:34;;;;;;6508:14:1;;6501:22;6483:41;;6471:2;6456:18;;6343:187;30003:34:0;;;;;;;;29617:439;;:::o;32727:1631::-;32822:18;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32822:18:0;32853:25;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32853:25:0;32889:19;32911:10;:8;:10::i;:::-;32889:32;-1:-1:-1;32951:21:0;32889:32;32951:7;:21;:::i;:::-;32934:14;;;:38;32985:1092;;;;-1:-1:-1;;;;;33016:11:0;;;;;;:7;:11;;;;;;;;33012:579;;;33062:15;;33048:11;:29;33112:17;;33096:13;:33;33167:20;;33148:16;:39;33012:579;;;-1:-1:-1;;;;;33213:13:0;;;;;;:7;:13;;;;;;;;33209:382;;;33261:14;;33247:11;:28;33310:16;;33294:13;:32;33364:19;;33345:16;:38;33209:382;;;33438:19;;33424:11;:33;33492:21;;33476:13;:37;33551:24;;33532:16;:43;33209:382;33647:16;;33632:11;;33622:21;;:7;:21;:::i;:::-;33621:42;;;;:::i;:::-;33607:11;;;:56;33747:16;;33726;;33710:13;;:32;;33726:16;33710:32;:::i;:::-;33699:44;;:7;:44;:::i;:::-;33698:65;;;;:::i;:::-;33678:17;;;:85;;;33814:11;;;;:31;;33678:85;33814:31;:::i;:::-;33803:43;;:7;:43;:::i;:::-;33778:68;;33877:11;;;;:25;;33891:11;;33877:25;:::i;:::-;33863:11;;;:39;32985:1092;;;33949:1;33935:11;;;:15;;;33965:17;;;:21;;;34001:32;;;34050:11;;;:15;32985:1092;34091:20;34102:4;34108:2;34091:10;:20::i;:::-;:89;;;;-1:-1:-1;34116:23:0;;:28;;:63;;;34148:23;;34175:4;34148:31;;34116:63;34087:138;;;34197:16;;-1:-1:-1;;;34197:16:0;;14120:2:1;34197:16:0;;;14102:21:1;14159:1;14139:18;;;14132:29;-1:-1:-1;;;14177:18:1;;;14170:36;14223:18;;34197:16:0;13918:329:1;34087:138:0;34313:11;34293:6;:17;;;:31;;;;:::i;:::-;34278:6;:11;;;:47;;;;:::i;:::-;34260:6;:14;;;:66;;;;:::i;:::-;34235:22;;;:91;-1:-1:-1;34235:22:0;32727:1631;-1:-1:-1;;;;;32727:1631:0:o;35249:461::-;35329:19;35352:10;:8;:10::i;:::-;35329:33;-1:-1:-1;35373:18:0;35394:24;35329:33;35394:10;:24;:::i;:::-;35470:4;35454:22;;;;:7;:22;;;;;;35373:45;;-1:-1:-1;35454:35:0;;35373:45;;35454:35;:::i;:::-;35445:4;35429:22;;;;:7;:22;;;;;;;;:60;;;;35503:11;:26;;;;;;35500:104;;;35585:4;35569:22;;;;:7;:22;;;;;;:35;;35594:10;;35569:35;:::i;:::-;35560:4;35544:22;;;;:7;:22;;;;;:60;35500:104;35620:43;;16294:25:1;;;35645:4:0;;-1:-1:-1;;;;;35620:43:0;;;;;16282:2:1;16267:18;35620:43:0;;;;;;;35318:392;;35249:461;;:::o;35094:143::-;35184:4;35174:7;;:14;;;;:::i;:::-;35164:7;:24;35212:10;;:17;;35225:4;;35212:17;:::i;:::-;35199:10;:30;-1:-1:-1;;35094:143:0:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:160:1;79:20;;135:13;;128:21;118:32;;108:60;;164:1;161;154:12;108:60;14:160;;;:::o;179:247::-;238:6;291:2;279:9;270:7;266:23;262:32;259:52;;;307:1;304;297:12;259:52;346:9;333:23;365:31;390:5;365:31;:::i;431:251::-;501:6;554:2;542:9;533:7;529:23;525:32;522:52;;;570:1;567;560:12;522:52;602:9;596:16;621:31;646:5;621:31;:::i;687:404::-;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;-1:-1:-1;1013:2:1;998:18;;985:32;1026:33;985:32;1026:33;:::i;:::-;1078:7;1068:17;;;687:404;;;;;:::o;1489:456::-;1566:6;1574;1582;1635:2;1623:9;1614:7;1610:23;1606:32;1603:52;;;1651:1;1648;1641:12;1603:52;1690:9;1677:23;1709:31;1734:5;1709:31;:::i;:::-;1759:5;-1:-1:-1;1816:2:1;1801:18;;1788:32;1829:33;1788:32;1829:33;:::i;:::-;1489:456;;1881:7;;-1:-1:-1;;;1935:2:1;1920:18;;;;1907:32;;1489:456::o;1950:315::-;2015:6;2023;2076:2;2064:9;2055:7;2051:23;2047:32;2044:52;;;2092:1;2089;2082:12;2044:52;2131:9;2118:23;2150:31;2175:5;2150:31;:::i;:::-;2200:5;-1:-1:-1;2224:35:1;2255:2;2240:18;;2224:35;:::i;:::-;2214:45;;1950:315;;;;;:::o;2270:::-;2338:6;2346;2399:2;2387:9;2378:7;2374:23;2370:32;2367:52;;;2415:1;2412;2405:12;2367:52;2454:9;2441:23;2473:31;2498:5;2473:31;:::i;:::-;2523:5;2575:2;2560:18;;;;2547:32;;-1:-1:-1;;;2270:315:1:o;2590:180::-;2646:6;2699:2;2687:9;2678:7;2674:23;2670:32;2667:52;;;2715:1;2712;2705:12;2667:52;2738:26;2754:9;2738:26;:::i;2775:316::-;2843:6;2851;2859;2912:2;2900:9;2891:7;2887:23;2883:32;2880:52;;;2928:1;2925;2918:12;2880:52;2951:26;2967:9;2951:26;:::i;:::-;2941:36;;2996:35;3027:2;3016:9;3012:18;2996:35;:::i;:::-;2986:45;;3050:35;3081:2;3070:9;3066:18;3050:35;:::i;:::-;3040:45;;2775:316;;;;;:::o;3096:180::-;3155:6;3208:2;3196:9;3187:7;3183:23;3179:32;3176:52;;;3224:1;3221;3214:12;3176:52;-1:-1:-1;3247:23:1;;3096:180;-1:-1:-1;3096:180:1:o;3281:248::-;3349:6;3357;3410:2;3398:9;3389:7;3385:23;3381:32;3378:52;;;3426:1;3423;3416:12;3378:52;-1:-1:-1;;3449:23:1;;;3519:2;3504:18;;;3491:32;;-1:-1:-1;3281:248:1:o;3534:316::-;3611:6;3619;3627;3680:2;3668:9;3659:7;3655:23;3651:32;3648:52;;;3696:1;3693;3686:12;3648:52;-1:-1:-1;;3719:23:1;;;3789:2;3774:18;;3761:32;;-1:-1:-1;3840:2:1;3825:18;;;3812:32;;3534:316;-1:-1:-1;3534:316:1:o;3855:306::-;3943:6;3951;3959;4012:2;4000:9;3991:7;3987:23;3983:32;3980:52;;;4028:1;4025;4018:12;3980:52;4057:9;4051:16;4041:26;;4107:2;4096:9;4092:18;4086:25;4076:35;;4151:2;4140:9;4136:18;4130:25;4120:35;;3855:306;;;;;:::o;4166:385::-;4252:6;4260;4268;4276;4329:3;4317:9;4308:7;4304:23;4300:33;4297:53;;;4346:1;4343;4336:12;4297:53;-1:-1:-1;;4369:23:1;;;4439:2;4424:18;;4411:32;;-1:-1:-1;4490:2:1;4475:18;;4462:32;;4541:2;4526:18;4513:32;;-1:-1:-1;4166:385:1;-1:-1:-1;4166:385:1:o;4556:337::-;4622:6;4630;4683:2;4671:9;4662:7;4658:23;4654:32;4651:52;;;4699:1;4696;4689:12;4651:52;4738:9;4725:23;4788:4;4781:5;4777:16;4770:5;4767:27;4757:55;;4808:1;4805;4798:12;6792:597;6904:4;6933:2;6962;6951:9;6944:21;6994:6;6988:13;7037:6;7032:2;7021:9;7017:18;7010:34;7062:1;7072:140;7086:6;7083:1;7080:13;7072:140;;;7181:14;;;7177:23;;7171:30;7147:17;;;7166:2;7143:26;7136:66;7101:10;;7072:140;;;7230:6;7227:1;7224:13;7221:91;;;7300:1;7295:2;7286:6;7275:9;7271:22;7267:31;7260:42;7221:91;-1:-1:-1;7373:2:1;7352:15;-1:-1:-1;;7348:29:1;7333:45;;;;7380:2;7329:54;;6792:597;-1:-1:-1;;;6792:597:1:o;16330:1026::-;16592:4;16640:3;16629:9;16625:19;16671:6;16660:9;16653:25;16697:2;16735:6;16730:2;16719:9;16715:18;16708:34;16778:3;16773:2;16762:9;16758:18;16751:31;16802:6;16837;16831:13;16868:6;16860;16853:22;16906:3;16895:9;16891:19;16884:26;;16945:2;16937:6;16933:15;16919:29;;16966:1;16976:218;16990:6;16987:1;16984:13;16976:218;;;17055:13;;-1:-1:-1;;;;;17051:62:1;17039:75;;17169:15;;;;17134:12;;;;17012:1;17005:9;16976:218;;;-1:-1:-1;;;;;;;17250:55:1;;;;17245:2;17230:18;;17223:83;-1:-1:-1;;;17337:3:1;17322:19;17315:35;17211:3;16330:1026;-1:-1:-1;;;16330:1026:1:o;17874:128::-;17914:3;17945:1;17941:6;17938:1;17935:13;17932:39;;;17951:18;;:::i;:::-;-1:-1:-1;17987:9:1;;17874:128::o;18007:120::-;18047:1;18073;18063:35;;18078:18;;:::i;:::-;-1:-1:-1;18112:9:1;;18007:120::o;18132:422::-;18221:1;18264:5;18221:1;18278:270;18299:7;18289:8;18286:21;18278:270;;;18358:4;18354:1;18350:6;18346:17;18340:4;18337:27;18334:53;;;18367:18;;:::i;:::-;18417:7;18407:8;18403:22;18400:55;;;18437:16;;;;18400:55;18516:22;;;;18476:15;;;;18278:270;;;18282:3;18132:422;;;;;:::o;18559:140::-;18617:5;18646:47;18687:4;18677:8;18673:19;18667:4;18753:5;18783:8;18773:80;;-1:-1:-1;18824:1:1;18838:5;;18773:80;18872:4;18862:76;;-1:-1:-1;18909:1:1;18923:5;;18862:76;18954:4;18972:1;18967:59;;;;19040:1;19035:130;;;;18947:218;;18967:59;18997:1;18988:10;;19011:5;;;19035:130;19072:3;19062:8;19059:17;19056:43;;;19079:18;;:::i;:::-;-1:-1:-1;;19135:1:1;19121:16;;19150:5;;18947:218;;19249:2;19239:8;19236:16;19230:3;19224:4;19221:13;19217:36;19211:2;19201:8;19198:16;19193:2;19187:4;19184:12;19180:35;19177:77;19174:159;;;-1:-1:-1;19286:19:1;;;19318:5;;19174:159;19365:34;19390:8;19384:4;19365:34;:::i;:::-;19435:6;19431:1;19427:6;19423:19;19414:7;19411:32;19408:58;;;19446:18;;:::i;:::-;19484:20;;18704:806;-1:-1:-1;;;18704:806:1:o;19515:168::-;19555:7;19621:1;19617;19613:6;19609:14;19606:1;19603:21;19598:1;19591:9;19584:17;19580:45;19577:71;;;19628:18;;:::i;:::-;-1:-1:-1;19668:9:1;;19515:168::o;19688:125::-;19728:4;19756:1;19753;19750:8;19747:34;;;19761:18;;:::i;:::-;-1:-1:-1;19798:9:1;;19688:125::o;19818:437::-;19897:1;19893:12;;;;19940;;;19961:61;;20015:4;20007:6;20003:17;19993:27;;19961:61;20068:2;20060:6;20057:14;20037:18;20034:38;20031:218;;;-1:-1:-1;;;20102:1:1;20095:88;20206:4;20203:1;20196:15;20234:4;20231:1;20224:15;20031:218;;19818:437;;;:::o;20260:135::-;20299:3;-1:-1:-1;;20320:17:1;;20317:43;;;20340:18;;:::i;:::-;-1:-1:-1;20387:1:1;20376:13;;20260:135::o;20400:112::-;20432:1;20458;20448:35;;20463:18;;:::i;:::-;-1:-1:-1;20497:9:1;;20400:112::o;20517:184::-;-1:-1:-1;;;20566:1:1;20559:88;20666:4;20663:1;20656:15;20690:4;20687:1;20680:15;20706:184;-1:-1:-1;;;20755:1:1;20748:88;20855:4;20852:1;20845:15;20879:4;20876:1;20869:15;20895:184;-1:-1:-1;;;20944:1:1;20937:88;21044:4;21041:1;21034:15;21068:4;21065:1;21058:15;21084:184;-1:-1:-1;;;21133:1:1;21126:88;21233:4;21230:1;21223:15;21257:4;21254:1;21247:15;21462:154;-1:-1:-1;;;;;21541:5:1;21537:54;21530:5;21527:65;21517:93;;21606:1;21603;21596:12;21517:93;21462:154;:::o

Swarm Source

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