ETH Price: $3,008.16 (+3.69%)
Gas: 5 Gwei

Token

MWS (MWS)
 

Overview

Max Total Supply

1,000,000 MWS

Holders

636

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
MWS

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-07-21
*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.11;

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

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

interface IERC20 {
    function totalSupply() external view returns (uint256);

    function balanceOf(address account) external view returns (uint256);

    function transfer(address recipient, uint256 amount)
        external
        returns (bool);

    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    function approve(address spender, uint256 amount) external returns (bool);

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
}

library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

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

        (bool success, bytes memory returndata) = target.call{value: weiValue}(
            data
        );
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

contract Ownable is Context {
    address private _owner;
    address private _previousOwner;

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

    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

    function renounceOwnership() external virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

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

    function getTime() public view returns (uint256) {
        return block.timestamp;
    }
}


interface IDexRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        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 addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountETH,
            uint256 liquidity
        );
        
}

interface IDexFactory {
    function createPair(address tokenA, address tokenB)
        external
        returns (address pair);
}

contract MWS is Context, IERC20, Ownable {
    using Address for address;

    address payable public marketingAddress;
        
    mapping(address => uint256) private _rOwned;
    mapping(address => uint256) private _tOwned;
    mapping(address => mapping(address => uint256)) private _allowances;
    
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
    bool public transferDelayEnabled = true;
    bool public limitsInEffect = true;

    mapping(address => bool) private _isExcludedFromFee;

    mapping(address => bool) private _isExcluded;
    address[] private _excluded;
    
    uint256 private constant MAX = ~uint256(0);
    uint256 private constant _tTotal = 1 * 1e6 * 1e18;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private constant _name = "MWS";
    string private constant _symbol = "MWS";
    uint8 private constant _decimals = 18;

    // these values are pretty much arbitrary since they get overwritten for every txn, but the placeholders make it easier to work with current contract.
    uint256 private _taxFee;
    uint256 private _previousTaxFee = _taxFee;

    uint256 private _operationsFee;
    
    uint256 private _liquidityFee;
    uint256 private _previousLiquidityFee = _liquidityFee;
    
    uint256 private constant BUY = 1;
    uint256 private constant SELL = 2;
    uint256 private constant TRANSFER = 3;
    uint256 private buyOrSellSwitch;

    uint256 public _buyTaxFee = 0;
    uint256 public _buyLiquidityFee = 0;
    uint256 public _buyOperationsFee = 20;

    uint256 public _sellTaxFee = 0;
    uint256 public _sellLiquidityFee = 0;
    uint256 public _sellOperationsFee = 50;
    
    uint256 public _liquidityTokensToSwap;
    uint256 public _marketingTokensToSwap;
    uint256 public _maxwallet = _tTotal/1000*15;

    mapping (address => bool) public _isExcludedMaxTransactionAmount;
    
    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping (address => bool) public automatedMarketMakerPairs;

    uint256 private minimumTokensBeforeSwap;

    IDexRouter public dexRouter;
    address public lpPair;

    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = false;
    bool public tradingActive = false;

    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    event SwapETHForTokens(uint256 amountIn, address[] path);

    event SwapTokensForETH(uint256 amountIn, address[] path);
    
    event SetAutomatedMarketMakerPair(address pair, bool value);
    
    event ExcludeFromReward(address excludedAddress);
    
    event IncludeInReward(address includedAddress);
    
    event ExcludeFromFee(address excludedAddress);
    
    event IncludeInFee(address includedAddress);
    
    event SetBuyFee(uint256 operationsFee, uint256 liquidityFee, uint256 reflectFee);
    
    event SetSellFee(uint256 operationsFee, uint256 liquidityFee, uint256 reflectFee);
    
    event TransferForeignToken(address token, uint256 amount);
    
    event UpdatedOperationsAddress(address operations);
    
    event OwnerForcedSwapBack(uint256 timestamp);

    event EnabledTrading();

    event RemovedLimits();
    
    event TransferDelayDisabled();


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

    constructor(address _marketAddress) payable {
        _rOwned[address(this)] = _rTotal/10*9;
        _rOwned[owner()] = _rTotal/10*1;
        minimumTokensBeforeSwap = _tTotal * 10 / 10000;
        
        marketingAddress = payable(_marketAddress); // marketing Address
        
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[marketingAddress] = true;
        
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        excludeFromMaxTransaction(marketingAddress, true);
        
        excludeFromReward(msg.sender);
        
        emit Transfer(address(0xdead), address(this), _tTotal);
    }

    function name() external pure returns (string memory) {
        return _name;
    }

    function symbol() external pure returns (string memory) {
        return _symbol;
    }

    function decimals() external pure returns (uint8) {
        return _decimals;
    }

    function totalSupply() external pure override returns (uint256) {
        return _tTotal;
    }

    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromReflection(_rOwned[account]);
    }

    function transfer(address recipient, uint256 amount)
        external
        override
        returns (bool)
    {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function allowance(address owner, address spender)
        external
        view
        override
        returns (uint256)
    {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount)
        public
        override
        returns (bool)
    {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public returns (bool) {
        _transfer(sender, recipient, amount);

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

        return true;
    }

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

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

        return true;
    }

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

    function totalFees() external view returns (uint256) {
        return _tFeeTotal;
    }
    
    // remove limits after token is stable - 30-60 minutes
    function removeLimits() external onlyOwner {
        limitsInEffect = false;
        transferDelayEnabled = false;
        emit RemovedLimits();
    }
    
    // disable Transfer delay
    function disableTransferDelay() external onlyOwner {
        transferDelayEnabled = false;
        emit TransferDelayDisabled();
    }
    

    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }
            
    function minimumTokensBeforeSwapAmount() external view returns (uint256) {
        return minimumTokensBeforeSwap;
    }

    function updateMarketingWallet(address newWallet) external onlyOwner {
        marketingAddress = payable(newWallet);
    }

    function updateMaxWallet(uint256 max) external onlyOwner {
        _maxwallet = max*1e18;
    }

    function manualswap() external onlyOwner() {
        uint256 contractBalance = balanceOf(address(this));
        swapTokensForETH(contractBalance);
    }

    function manualsend() external onlyOwner() {
        uint256 amount = address(this).balance;
        payable(marketingAddress).transfer(amount);
    }

     // change the minimum amount of tokens to sell from fees
    function updateMinimumTokensBeforeSwap(uint256 newAmount) external onlyOwner{
  	    require(newAmount >= _tTotal * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
  	    require(newAmount <= _tTotal * 5 / 1000, "Swap amount cannot be higher than 0.5% total supply.");
  	    minimumTokensBeforeSwap = newAmount;
  	}


    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        require(pair != lpPair, "The pair cannot be removed from automatedMarketMakerPairs");

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;
        _isExcludedMaxTransactionAmount[pair] = value;
        if(value){excludeFromReward(pair);}
        if(!value){includeInReward(pair);}
    }

    function reflectionFromToken(uint256 tAmount, bool deductTransferFee)
        external
        view
        returns (uint256)
    {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferFee) {
            (uint256 rAmount, , , , , ) = _getValues(tAmount);
            return rAmount;
        } else {
            (, uint256 rTransferAmount, , , , ) = _getValues(tAmount);
            return rTransferAmount;
        }
    }

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

    function excludeFromReward(address account) public onlyOwner {
        require(!_isExcluded[account], "Account is already excluded");
        require(_excluded.length + 1 <= 50, "Cannot exclude more than 50 accounts.  Include a previously excluded address.");
        if (_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeInReward(address account) public onlyOwner {
        require(_isExcluded[account], "Account is not excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }
 
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        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(!tradingActive){
            require(_isExcludedFromFee[from] || _isExcludedFromFee[to], "Trading is not active yet.");
        }


        uint256 contractTokenBalance = balanceOf(address(this));
        bool overMinimumTokenBalance = contractTokenBalance >= minimumTokensBeforeSwap;

        // swap and liquify
        if (
            !inSwapAndLiquify &&
            swapAndLiquifyEnabled &&
            balanceOf(lpPair) > 0 &&
            !_isExcludedFromFee[to] &&
            !_isExcludedFromFee[from] &&
            automatedMarketMakerPairs[to] &&
            overMinimumTokenBalance
        ) {
            swapBack();
        }

        removeAllFee();
        
        buyOrSellSwitch = TRANSFER;
        
        if (!_isExcludedFromFee[from] && !_isExcludedFromFee[to]) {
            // Buy
            if (automatedMarketMakerPairs[from]) {
                _taxFee = _buyTaxFee;
                _liquidityFee = _buyLiquidityFee + _buyOperationsFee;
                require(balanceOf(to) + amount <= _maxwallet, "Exceeds the maxWalletSize.");
                if(_liquidityFee > 0){
                    buyOrSellSwitch = BUY;
                }
            } 
            // Sell
            else if (automatedMarketMakerPairs[to]) {
                _taxFee = _sellTaxFee;
                _liquidityFee = _sellLiquidityFee + _sellOperationsFee;
                if(_liquidityFee > 0){
                    buyOrSellSwitch = SELL;
                }
            }
        }
        
        _tokenTransfer(from, to, amount);
        
        restoreAllFee();
        
    }


    function swapBack() private lockTheSwap {

        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = _liquidityTokensToSwap + _marketingTokensToSwap;
        bool success;

        // prevent overly large contract sells.
        if(contractBalance >= minimumTokensBeforeSwap * 20){
            contractBalance = minimumTokensBeforeSwap * 20;
        }

        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}
        
        // Halve the amount of liquidity tokens
        uint256 tokensForLiquidity = contractBalance * _liquidityTokensToSwap / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance-(tokensForLiquidity);
        
        swapTokensForETH(amountToSwapForETH);
        
        uint256 ethBalance = address(this).balance;
        
        uint256 ethForOperations = ethBalance* (_marketingTokensToSwap) / (totalTokensToSwap - (_liquidityTokensToSwap/2));
        
        uint256 ethForLiquidity = ethBalance - ethForOperations;

        _liquidityTokensToSwap = 0;
        _marketingTokensToSwap = 0;        
        
        if(tokensForLiquidity > 0 && ethForLiquidity > 0){
            addLiquidity(tokensForLiquidity, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }
        
        // send remainder to operations
        (success,) = address(marketingAddress).call{value: address(this).balance}("");
    }
    
    // force Swap back if slippage above 49% for launch.
    function forceSwapBack() external onlyOwner {
        uint256 contractBalance = balanceOf(address(this));
        require(contractBalance >= minimumTokensBeforeSwap, "Can only swap back if above the threshold.");
        swapBack();
        emit OwnerForcedSwapBack(block.timestamp);
    }
    
    function swapTokensForETH(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();
        _approve(address(this), address(dexRouter), tokenAmount);
        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

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

    function _tokenTransfer(
        address sender,
        address recipient,
        uint256 amount
    ) private {

        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }
    }

    function _transferStandard(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity
        ) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender] - rAmount;
        _rOwned[recipient] = _rOwned[recipient] + rTransferAmount;
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferToExcluded(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity
        ) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender] - (rAmount);
        _tOwned[recipient] = _tOwned[recipient] + (tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient] + (rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity
        ) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender]-(tAmount);
        _rOwned[sender] = _rOwned[sender]-(rAmount);
        _rOwned[recipient] = _rOwned[recipient]+(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferBothExcluded(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity
        ) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender]-(tAmount);
        _rOwned[sender] = _rOwned[sender]-(rAmount);
        _tOwned[recipient] = _tOwned[recipient]+(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient]+(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal-(rFee);
        _tFeeTotal = _tFeeTotal+(tFee);
    }

    function _getValues(uint256 tAmount)
        private
        view
        returns (
            uint256,
            uint256,
            uint256,
            uint256,
            uint256,
            uint256
        )
    {
        (
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity
        ) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(
            tAmount,
            tFee,
            tLiquidity,
            _getRate()
        );
        return (
            rAmount,
            rTransferAmount,
            rFee,
            tTransferAmount,
            tFee,
            tLiquidity
        );
    }

    function _getTValues(uint256 tAmount)
        private
        view
        returns (
            uint256,
            uint256,
            uint256
        )
    {
        uint256 tFee = calculateTaxFee(tAmount);
        uint256 tLiquidity = calculateLiquidityFee(tAmount);
        uint256 tTransferAmount = tAmount-(tFee)-(tLiquidity);
        return (tTransferAmount, tFee, tLiquidity);
    }

    function _getRValues(
        uint256 tAmount,
        uint256 tFee,
        uint256 tLiquidity,
        uint256 currentRate
    )
        private
        pure
        returns (
            uint256,
            uint256,
            uint256
        )
    {
        uint256 rAmount = tAmount*(currentRate);
        uint256 rFee = tFee*(currentRate);
        uint256 rLiquidity = tLiquidity*(currentRate);
        uint256 rTransferAmount = rAmount-(rFee)-(rLiquidity);
        return (rAmount, rTransferAmount, rFee);
    }

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

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

    function _takeLiquidity(uint256 tLiquidity) private {
        if(buyOrSellSwitch == BUY){
            _liquidityTokensToSwap += tLiquidity * _buyLiquidityFee / _liquidityFee;
            _marketingTokensToSwap += tLiquidity * _buyOperationsFee / _liquidityFee;
        } else if(buyOrSellSwitch == SELL){
            _liquidityTokensToSwap += tLiquidity * _sellLiquidityFee / _liquidityFee;
            _marketingTokensToSwap += tLiquidity * _sellOperationsFee / _liquidityFee;
        }
        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;
    }

    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount * _taxFee / 10000;
    }

    function calculateLiquidityFee(uint256 _amount)
        private
        view
        returns (uint256)
    {
        return _amount * _liquidityFee / 10000;
    }

    function removeAllFee() private {
        if (_taxFee == 0 && _liquidityFee == 0) return;

        _previousTaxFee = _taxFee;
        _previousLiquidityFee = _liquidityFee;

        _taxFee = 0;
        _liquidityFee = 0;
    }

    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _liquidityFee = _previousLiquidityFee;
    }

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

    function excludeFromFee(address account) external onlyOwner {
        _isExcludedFromFee[account] = true;
        emit ExcludeFromFee(account);
    }

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

    function setBuyFee(uint256 buyTaxFee, uint256 buyLiquidityFee, uint256 buyOperationsFee)
        external
        onlyOwner
    {
        _buyTaxFee = buyTaxFee;
        _buyLiquidityFee = buyLiquidityFee;
        _buyOperationsFee = buyOperationsFee;
        require(_buyTaxFee + _buyLiquidityFee + _buyOperationsFee <= 4500, "Must keep buy taxes below 45%");
        emit SetBuyFee(buyOperationsFee, buyLiquidityFee, buyTaxFee);
    }

    function setSellFee(uint256 sellTaxFee, uint256 sellLiquidityFee, uint256 sellOperationsFee)
        external
        onlyOwner
    {
        _sellTaxFee = sellTaxFee;
        _sellLiquidityFee = sellLiquidityFee;
        _sellOperationsFee = sellOperationsFee;
        require(_sellTaxFee + _sellLiquidityFee + _sellOperationsFee <= 5000, "Must keep sell taxes below 50%");
        emit SetSellFee(sellOperationsFee, sellLiquidityFee, sellTaxFee);
    }
    
    function setOperationsAddress(address _marketingAddress) external onlyOwner {
        require(_marketingAddress != address(0), "_operationsAddress address cannot be 0");
        _isExcludedFromFee[marketingAddress] = false;
        marketingAddress = payable(_marketingAddress);
        _isExcludedFromFee[marketingAddress] = true;
        emit UpdatedOperationsAddress(_marketingAddress);
    }

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

    // To receive ETH from dexRouter when swapping
    receive() external payable {}

    function transferForeignToken(address _token, address _to)
        external
        onlyOwner
        returns (bool _sent)
    {
        require(_token != address(0), "_token address cannot be 0");
        require(_token != address(this), "Can't withdraw native tokens");
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        _sent = IERC20(_token).transfer(_to, _contractBalance);
        emit TransferForeignToken(_token, _contractBalance);
    }
    
    function withdrawStuckETH() external onlyOwner {
        bool success;
        (success,) = address(msg.sender).call{value: address(this).balance}("");
    }

    function addliquidity() external onlyOwner {
        require(!tradingActive, "Trading is already active, cannot relaunch.");

        removeAllFee();

        //standard enable trading
        tradingActive = true;
        swapAndLiquifyEnabled = true;
        emit EnabledTrading();

        // initialize router
        IDexRouter _dexRouter = IDexRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        dexRouter = _dexRouter;

        // create pair
        lpPair = IDexFactory(_dexRouter.factory()).createPair(address(this), _dexRouter.WETH());
        excludeFromMaxTransaction(address(lpPair), true);
        _setAutomatedMarketMakerPair(address(lpPair), true);

        // transfer tokens to deployer


   
        // add the liquidity

        require(address(this).balance > 0, "Must have ETH on contract to launch");

        require(balanceOf(address(this)) > 0, "Must have Tokens on contract to launch");

        _approve(address(this), address(dexRouter), balanceOf(address(this)));
        dexRouter.addLiquidityETH{value: address(this).balance}(
            address(this),
            balanceOf(address(this)),
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            msg.sender,
            block.timestamp
        );
        restoreAllFee();
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_marketAddress","type":"address"}],"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":[],"name":"EnabledTrading","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"excludedAddress","type":"address"}],"name":"ExcludeFromFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"excludedAddress","type":"address"}],"name":"ExcludeFromReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"includedAddress","type":"address"}],"name":"IncludeInFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"includedAddress","type":"address"}],"name":"IncludeInReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"OwnerForcedSwapBack","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":[],"name":"RemovedLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"pair","type":"address"},{"indexed":false,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"operationsFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reflectFee","type":"uint256"}],"name":"SetBuyFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"operationsFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reflectFee","type":"uint256"}],"name":"SetSellFee","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":"tokensIntoLiquidity","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":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","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"},{"anonymous":false,"inputs":[],"name":"TransferDelayDisabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferForeignToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"operations","type":"address"}],"name":"UpdatedOperationsAddress","type":"event"},{"inputs":[],"name":"_buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityTokensToSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingTokensToSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxwallet","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":"_sellOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"addliquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","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":"manualsend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualswap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyTaxFee","type":"uint256"},{"internalType":"uint256","name":"buyLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"buyOperationsFee","type":"uint256"}],"name":"setBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingAddress","type":"address"}],"name":"setOperationsAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"sellTaxFee","type":"uint256"},{"internalType":"uint256","name":"sellLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"sellOperationsFee","type":"uint256"}],"name":"setSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferForeignToken","outputs":[{"internalType":"bool","name":"_sent","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"max","type":"uint256"}],"name":"updateMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateMinimumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526007805461ffff19166101011790556200002b69d3c21bcecceda1000000600019620007ed565b62000039906000196200081a565b600b55600d54600e556010546011556000601355600060145560146015556000601655600060175560326018556103e869d3c21bcecceda100000062000080919062000834565b6200008d90600f6200084b565b601b556020805461ffff60a81b19169055604051620041e538819003908190833981016040819052620000c0916200086d565b600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600a600b5462000112919062000834565b6200011f9060096200084b565b30600090815260036020526040902055600b546200014090600a9062000834565b6200014d9060016200084b565b60036000620001646000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020556127106200019869d3c21bcecceda1000000600a6200084b565b620001a4919062000834565b601e55600280546001600160a01b0319166001600160a01b038316179055600160086000620001db6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055308152600890935281832080548516600190811790915560025490911683529120805490921617905562000251620002496000546001600160a01b031690565b6001620002db565b6200025e306001620002db565b6200026d61dead6001620002db565b60025462000286906001600160a01b03166001620002db565b620002913362000355565b60405169d3c21bcecceda10000008152309061dead907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350620008e7565b6000546001600160a01b031633146200032a5760405162461bcd60e51b81526020600482018190526024820152600080516020620041c583398151915260448201526064015b60405180910390fd5b6001600160a01b03919091166000908152601c60205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314620003a05760405162461bcd60e51b81526020600482018190526024820152600080516020620041c5833981519152604482015260640162000321565b6001600160a01b03811660009081526009602052604090205460ff16156200040b5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015260640162000321565b600a546032906200041e90600162000898565b1115620004aa5760405162461bcd60e51b815260206004820152604d60248201527f43616e6e6f74206578636c756465206d6f7265207468616e203530206163636f60448201527f756e74732e2020496e636c75646520612070726576696f75736c79206578636c60648201526c3ab232b21030b2323932b9b99760991b608482015260a40162000321565b6001600160a01b0381166000908152600360205260409020541562000507576001600160a01b038116600090815260036020526040902054620004ed906200056d565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600960205260408120805460ff19166001908117909155600a805491820181559091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b0319169091179055565b6000600b54821115620005d65760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b606482015260840162000321565b6000620005e2620005f7565b9050620005f0818462000834565b9392505050565b60008080620006056200061d565b909250905062000616818362000834565b9250505090565b600b54600090819069d3c21bcecceda1000000825b600a5481101562000794578260036000600a8481548110620006585762000658620008b3565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180620006c757508160046000600a8481548110620006a057620006a0620008b3565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15620006e5575050600b549369d3c21bcecceda10000009350915050565b60036000600a8381548110620006ff57620006ff620008b3565b60009182526020808320909101546001600160a01b031683528201929092526040019020546200073090846200081a565b925060046000600a83815481106200074c576200074c620008b3565b60009182526020808320909101546001600160a01b031683528201929092526040019020546200077d90836200081a565b9150806200078b81620008c9565b91505062000632565b5069d3c21bcecceda1000000600b54620007af919062000834565b821015620007ce575050600b549269d3c21bcecceda100000092509050565b90939092509050565b634e487b7160e01b600052601260045260246000fd5b600082620007ff57620007ff620007d7565b500690565b634e487b7160e01b600052601160045260246000fd5b6000828210156200082f576200082f62000804565b500390565b600082620008465762000846620007d7565b500490565b600081600019048311821515161562000868576200086862000804565b500290565b6000602082840312156200088057600080fd5b81516001600160a01b0381168114620005f057600080fd5b60008219821115620008ae57620008ae62000804565b500190565b634e487b7160e01b600052603260045260246000fd5b6000600019821415620008e057620008e062000804565b5060010190565b6138ce80620008f76000396000f3fe60806040526004361061039b5760003560e01c8063557ed1ba116101dc578063a9059cbb11610102578063dc44b6a0116100a0578063ea2f0b371161006f578063ea2f0b3714610a84578063efcc52de14610aa4578063f2fde38b14610aba578063f5648a4f14610ada57600080fd5b8063dc44b6a0146109fd578063dd62ed3e14610a13578063e82a416d14610a59578063e884f26014610a6f57600080fd5b8063bbc0c742116100dc578063bbc0c7421461098d578063c3c8cd80146109ae578063c49b9a80146109c3578063c876d0b9146109e357600080fd5b8063a9059cbb1461091d578063aacebbe31461093d578063b62496f51461095d57600080fd5b806388790a681161017a5780639a7a23d6116101495780639a7a23d6146108a8578063a073d37f146108c8578063a457c2d7146108dd578063a5ece941146108fd57600080fd5b806388790a681461083b57806388f82020146108515780638da5cb5b1461088a57806395d89b41146103a757600080fd5b8063715018a6116101b6578063715018a6146107d1578063751039fc146107e65780637571336a146107fb5780638366e79a1461081b57600080fd5b8063557ed1ba146107895780636fc3eaec1461079c57806370a08231146107b157600080fd5b80632d838119116102c1578063452ed4f11161025f5780634a74bb021161022e5780634a74bb02146106fa57806351f205e41461071b57806352390c02146107305780635342acb41461075057600080fd5b8063452ed4f11461067b5780634549b0391461069b578063499b8394146106bb5780634a62bb65146106db57600080fd5b8063395093511161029b57806339509351146106105780634047ea3e1461063057806342e99d1a14610646578063437823ec1461065b57600080fd5b80632d838119146105b4578063313ce567146105d45780633685d419146105f057600080fd5b806318160ddd11610339578063200a692d11610308578063200a692d1461054857806323b872dd1461055e57806324171f321461057e57806325519cf21461059457600080fd5b806318160ddd146104d55780631c499ab0146104f25780631c68372d146105125780631d865c301461052857600080fd5b8063095ea7b311610375578063095ea7b31461043c57806309e72cf61461046c57806310d5de531461049057806313114a9d146104c057600080fd5b806306fdde03146103a75780630758d924146103e2578063080437511461041a57600080fd5b366103a257005b600080fd5b3480156103b357600080fd5b5060408051808201825260038152624d575360e81b602082015290516103d99190613479565b60405180910390f35b3480156103ee57600080fd5b50601f54610402906001600160a01b031681565b6040516001600160a01b0390911681526020016103d9565b34801561042657600080fd5b5061043a6104353660046134ce565b610aef565b005b34801561044857600080fd5b5061045c6104573660046134fc565b610c45565b60405190151581526020016103d9565b34801561047857600080fd5b50610482601b5481565b6040519081526020016103d9565b34801561049c57600080fd5b5061045c6104ab366004613528565b601c6020526000908152604090205460ff1681565b3480156104cc57600080fd5b50600c54610482565b3480156104e157600080fd5b5069d3c21bcecceda1000000610482565b3480156104fe57600080fd5b5061043a61050d3660046134ce565b610c5c565b34801561051e57600080fd5b5061048260185481565b34801561053457600080fd5b5061043a610543366004613545565b610c9e565b34801561055457600080fd5b5061048260165481565b34801561056a57600080fd5b5061045c610579366004613571565b610d84565b34801561058a57600080fd5b50610482601a5481565b3480156105a057600080fd5b5061043a6105af366004613545565b610e2e565b3480156105c057600080fd5b506104826105cf3660046134ce565b610f0b565b3480156105e057600080fd5b50604051601281526020016103d9565b3480156105fc57600080fd5b5061043a61060b366004613528565b610f8f565b34801561061c57600080fd5b5061045c61062b3660046134fc565b611146565b34801561063c57600080fd5b5061048260195481565b34801561065257600080fd5b5061043a611182565b34801561066757600080fd5b5061043a610676366004613528565b611586565b34801561068757600080fd5b50602054610402906001600160a01b031681565b3480156106a757600080fd5b506104826106b63660046135c0565b61160b565b3480156106c757600080fd5b5061043a6106d6366004613528565b6116a0565b3480156106e757600080fd5b5060075461045c90610100900460ff1681565b34801561070657600080fd5b5060205461045c90600160a81b900460ff1681565b34801561072757600080fd5b5061043a6117ad565b34801561073c57600080fd5b5061043a61074b366004613528565b611881565b34801561075c57600080fd5b5061045c61076b366004613528565b6001600160a01b031660009081526008602052604090205460ff1690565b34801561079557600080fd5b5042610482565b3480156107a857600080fd5b5061043a611a6f565b3480156107bd57600080fd5b506104826107cc366004613528565b611ad3565b3480156107dd57600080fd5b5061043a611b32565b3480156107f257600080fd5b5061043a611ba6565b34801561080757600080fd5b5061043a6108163660046135f0565b611c06565b34801561082757600080fd5b5061045c61083636600461361e565b611c5b565b34801561084757600080fd5b5061048260175481565b34801561085d57600080fd5b5061045c61086c366004613528565b6001600160a01b031660009081526009602052604090205460ff1690565b34801561089657600080fd5b506000546001600160a01b0316610402565b3480156108b457600080fd5b5061043a6108c33660046135f0565b611e63565b3480156108d457600080fd5b50601e54610482565b3480156108e957600080fd5b5061045c6108f83660046134fc565b611f1b565b34801561090957600080fd5b50600254610402906001600160a01b031681565b34801561092957600080fd5b5061045c6109383660046134fc565b611fb4565b34801561094957600080fd5b5061043a610958366004613528565b611fc1565b34801561096957600080fd5b5061045c610978366004613528565b601d6020526000908152604090205460ff1681565b34801561099957600080fd5b5060205461045c90600160b01b900460ff1681565b3480156109ba57600080fd5b5061043a61200d565b3480156109cf57600080fd5b5061043a6109de36600461364c565b61204d565b3480156109ef57600080fd5b5060075461045c9060ff1681565b348015610a0957600080fd5b5061048260145481565b348015610a1f57600080fd5b50610482610a2e36600461361e565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610a6557600080fd5b5061048260155481565b348015610a7b57600080fd5b5061043a6120c1565b348015610a9057600080fd5b5061043a610a9f366004613528565b612120565b348015610ab057600080fd5b5061048260135481565b348015610ac657600080fd5b5061043a610ad5366004613528565b61219b565b348015610ae657600080fd5b5061043a612285565b6000546001600160a01b03163314610b225760405162461bcd60e51b8152600401610b1990613669565b60405180910390fd5b620186a0610b3b69d3c21bcecceda100000060016136b4565b610b4591906136d3565b811015610bb25760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610b19565b6103e8610bca69d3c21bcecceda100000060056136b4565b610bd491906136d3565b811115610c405760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610b19565b601e55565b6000610c523384846122fc565b5060015b92915050565b6000546001600160a01b03163314610c865760405162461bcd60e51b8152600401610b1990613669565b610c9881670de0b6b3a76400006136b4565b601b5550565b6000546001600160a01b03163314610cc85760405162461bcd60e51b8152600401610b1990613669565b60168390556017829055601881905561138881610ce584866136f5565b610cef91906136f5565b1115610d3d5760405162461bcd60e51b815260206004820152601e60248201527f4d757374206b6565702073656c6c2074617865732062656c6f772035302500006044820152606401610b19565b60408051828152602081018490529081018490527f5ff33e060dbf96ff8c11eeadaaa320b34884dc8af8156d77ab6134d2bece22c3906060015b60405180910390a1505050565b6000610d91848484612420565b6001600160a01b038416600090815260056020908152604080832033845290915290205482811015610e165760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610b19565b610e2385338584036122fc565b506001949350505050565b6000546001600160a01b03163314610e585760405162461bcd60e51b8152600401610b1990613669565b60138390556014829055601581905561119481610e7584866136f5565b610e7f91906136f5565b1115610ecd5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206275792074617865732062656c6f77203435250000006044820152606401610b19565b60408051828152602081018490529081018490527f4b44023290188702187818a2359a9d40279e516e5e9bbade40c321936a77362090606001610d77565b6000600b54821115610f725760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610b19565b6000610f7c612831565b9050610f8881846136d3565b9392505050565b6000546001600160a01b03163314610fb95760405162461bcd60e51b8152600401610b1990613669565b6001600160a01b03811660009081526009602052604090205460ff166110215760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610b19565b60005b600a5481101561114257816001600160a01b0316600a828154811061104b5761104b61370d565b6000918252602090912001546001600160a01b0316141561113057600a805461107690600190613723565b815481106110865761108661370d565b600091825260209091200154600a80546001600160a01b0390921691839081106110b2576110b261370d565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600990925220805460ff19169055600a80548061110a5761110a61373a565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b8061113a81613750565b915050611024565b5050565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610c5291859061117d9086906136f5565b6122fc565b6000546001600160a01b031633146111ac5760405162461bcd60e51b8152600401610b1990613669565b602054600160b01b900460ff161561121a5760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610b19565b611222612854565b6020805461ffff60a81b191661010160a81b1790556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1601f80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b81529051829163c45a01559160048083019260209291908290030181865afa1580156112c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e9919061376b565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611336573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061135a919061376b565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156113a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113cb919061376b565b602080546001600160a01b0319166001600160a01b039290921691821790556113f5906001611c06565b60205461140c906001600160a01b03166001612882565b600047116114685760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401610b19565b600061147330611ad3565b116114cf5760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610b19565b601f546114ea9030906001600160a01b031661117d82611ad3565b601f546001600160a01b031663f305d719473061150681611ad3565b60008033426040518863ffffffff1660e01b815260040161152c96959493929190613788565b60606040518083038185885af115801561154a573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061156f91906137c3565b505050611583600e54600d55601154601055565b50565b6000546001600160a01b031633146115b05760405162461bcd60e51b8152600401610b1990613669565b6001600160a01b038116600081815260086020908152604091829020805460ff1916600117905590519182527f58c3e0504c69d3a92726966f152a771e0f8f6ad4daca1ae9055a38aba1fd2b6291015b60405180910390a150565b600069d3c21bcecceda10000008311156116675760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610b19565b81611686576000611677846128dd565b50939550610c56945050505050565b6000611691846128dd565b50929550610c56945050505050565b6000546001600160a01b031633146116ca5760405162461bcd60e51b8152600401610b1990613669565b6001600160a01b03811661172f5760405162461bcd60e51b815260206004820152602660248201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60448201526507420626520360d41b6064820152608401610b19565b600280546001600160a01b039081166000908152600860209081526040808320805460ff1990811690915585546001600160a01b031916948716948517909555838352918290208054909416600117909355519081527f4efa56652237561d0f1fd31311aeaaa41f3b754a461545ed3cf6ced5876d29829101611600565b6000546001600160a01b031633146117d75760405162461bcd60e51b8152600401610b1990613669565b60006117e230611ad3565b9050601e548110156118495760405162461bcd60e51b815260206004820152602a60248201527f43616e206f6e6c792073776170206261636b2069662061626f766520746865206044820152693a343932b9b437b6321760b11b6064820152608401610b19565b61185161292c565b6040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb3290602001611600565b6000546001600160a01b031633146118ab5760405162461bcd60e51b8152600401610b1990613669565b6001600160a01b03811660009081526009602052604090205460ff16156119145760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610b19565b600a546032906119259060016136f5565b11156119af5760405162461bcd60e51b815260206004820152604d60248201527f43616e6e6f74206578636c756465206d6f7265207468616e203530206163636f60448201527f756e74732e2020496e636c75646520612070726576696f75736c79206578636c60648201526c3ab232b21030b2323932b9b99760991b608482015260a401610b19565b6001600160a01b03811660009081526003602052604090205415611a09576001600160a01b0381166000908152600360205260409020546119ef90610f0b565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600960205260408120805460ff19166001908117909155600a805491820181559091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b0319169091179055565b6000546001600160a01b03163314611a995760405162461bcd60e51b8152600401610b1990613669565b60025460405147916001600160a01b03169082156108fc029083906000818181858888f19350505050158015611142573d6000803e3d6000fd5b6001600160a01b03811660009081526009602052604081205460ff1615611b1057506001600160a01b031660009081526004602052604090205490565b6001600160a01b038216600090815260036020526040902054610c5690610f0b565b6000546001600160a01b03163314611b5c5760405162461bcd60e51b8152600401610b1990613669565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314611bd05760405162461bcd60e51b8152600401610b1990613669565b6007805461ffff191690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6000546001600160a01b03163314611c305760405162461bcd60e51b8152600401610b1990613669565b6001600160a01b03919091166000908152601c60205260409020805460ff1916911515919091179055565b600080546001600160a01b03163314611c865760405162461bcd60e51b8152600401610b1990613669565b6001600160a01b038316611cdc5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610b19565b6001600160a01b038316301415611d355760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e73000000006044820152606401610b19565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611d7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611da091906137f1565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af1158015611df3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e17919061380a565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6000546001600160a01b03163314611e8d5760405162461bcd60e51b8152600401610b1990613669565b6020546001600160a01b0383811691161415611f115760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610b19565b6111428282612882565b3360009081526005602090815260408083206001600160a01b038616845290915281205482811015611f9d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b19565b611faa33858584036122fc565b5060019392505050565b6000610c52338484612420565b6000546001600160a01b03163314611feb5760405162461bcd60e51b8152600401610b1990613669565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146120375760405162461bcd60e51b8152600401610b1990613669565b600061204230611ad3565b905061158381612afc565b6000546001600160a01b031633146120775760405162461bcd60e51b8152600401610b1990613669565b6020805460ff60a81b1916600160a81b8315159081029190911782556040519081527f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599101611600565b6000546001600160a01b031633146120eb5760405162461bcd60e51b8152600401610b1990613669565b6007805460ff191690556040517fa29c2b578a5a679452d146ddd35ea04a2e7c57fe555cc7a3d91b3b8b06e6103d90600090a1565b6000546001600160a01b0316331461214a5760405162461bcd60e51b8152600401610b1990613669565b6001600160a01b038116600081815260086020908152604091829020805460ff1916905590519182527f4f6a6b6efe34ec6478021aa9fb7f6980e78ea3a10c74074a8ce49d5d3ebf1f7e9101611600565b6000546001600160a01b031633146121c55760405162461bcd60e51b8152600401610b1990613669565b6001600160a01b03811661222a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b19565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146122af5760405162461bcd60e51b8152600401610b1990613669565b604051600090339047908381818185875af1925050503d80600081146122f1576040519150601f19603f3d011682016040523d82523d6000602084013e6122f6565b606091505b50505050565b6001600160a01b03831661235e5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b19565b6001600160a01b0382166123bf5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b19565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166124845760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b19565b6001600160a01b0382166124e65760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b19565b600081116125485760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610b19565b602054600160b01b900460ff166125e4576001600160a01b03831660009081526008602052604090205460ff168061259857506001600160a01b03821660009081526008602052604090205460ff165b6125e45760405162461bcd60e51b815260206004820152601a60248201527f54726164696e67206973206e6f7420616374697665207965742e0000000000006044820152606401610b19565b60006125ef30611ad3565b601e5460205491925082101590600160a01b900460ff1615801561261c5750602054600160a81b900460ff165b801561263d575060205460009061263b906001600160a01b0316611ad3565b115b801561266257506001600160a01b03841660009081526008602052604090205460ff16155b801561268757506001600160a01b03851660009081526008602052604090205460ff16155b80156126ab57506001600160a01b0384166000908152601d602052604090205460ff165b80156126b45750805b156126c1576126c161292c565b6126c9612854565b60036012556001600160a01b03851660009081526008602052604090205460ff1615801561271057506001600160a01b03841660009081526008602052604090205460ff16155b1561280e576001600160a01b0385166000908152601d602052604090205460ff16156127c757601354600d5560155460145461274c91906136f5565b601055601b548361275c86611ad3565b61276691906136f5565b11156127b45760405162461bcd60e51b815260206004820152601a60248201527f4578636565647320746865206d617857616c6c657453697a652e0000000000006044820152606401610b19565b601054156127c25760016012555b61280e565b6001600160a01b0384166000908152601d602052604090205460ff161561280e57601654600d556018546017546127fe91906136f5565b60108190551561280e5760026012555b612819858585612c56565b61282a600e54600d55601154601055565b5050505050565b600080600061283e612d58565b909250905061284d81836136d3565b9250505090565b600d541580156128645750601054155b1561286b57565b600d8054600e556010805460115560009182905555565b6001600160a01b0382166000908152601d6020908152604080832080548515801560ff199283168117909355601c9094529190932080549091169092179091556128cf576128cf82611881565b806111425761114282610f8f565b60008060008060008060008060006128f48a612ef9565b92509250925060008060006129128d868661290d612831565b612f3c565b919f909e50909c50959a5093985091965092945050505050565b6020805460ff60a01b1916600160a01b179055600061294a30611ad3565b90506000601a5460195461295e91906136f5565b90506000601e54601461297191906136b4565b831061298857601e546129859060146136b4565b92505b821580612993575081155b156129a057505050612aed565b6000600283601954866129b391906136b4565b6129bd91906136d3565b6129c791906136d3565b905060006129d58286613723565b90506129e081612afc565b60195447906000906129f4906002906136d3565b6129fe9087613723565b601a54612a0b90846136b4565b612a1591906136d3565b90506000612a238284613723565b60006019819055601a5590508415801590612a3e5750600081115b15612a8f57612a4d8582612f93565b60408051858152602081018390529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b6002546040516001600160a01b03909116904790600081818185875af1925050503d8060008114612adc576040519150601f19603f3d011682016040523d82523d6000602084013e612ae1565b606091505b50505050505050505050505b6020805460ff60a01b19169055565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612b3157612b3161370d565b6001600160a01b03928316602091820292909201810191909152601f54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612b8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bae919061376b565b81600181518110612bc157612bc161370d565b6001600160a01b039283166020918202929092010152601f54612be791309116846122fc565b601f5460405163791ac94760e01b81526001600160a01b039091169063791ac94790612c20908590600090869030904290600401613827565b600060405180830381600087803b158015612c3a57600080fd5b505af1158015612c4e573d6000803e3d6000fd5b505050505050565b6001600160a01b03831660009081526009602052604090205460ff168015612c9757506001600160a01b03821660009081526009602052604090205460ff16155b15612cac57612ca783838361302d565b505050565b6001600160a01b03831660009081526009602052604090205460ff16158015612ced57506001600160a01b03821660009081526009602052604090205460ff165b15612cfd57612ca7838383613156565b6001600160a01b03831660009081526009602052604090205460ff168015612d3d57506001600160a01b03821660009081526009602052604090205460ff165b15612d4d57612ca7838383613202565b612ca7838383613277565b600b54600090819069d3c21bcecceda1000000825b600a54811015612eb9578260036000600a8481548110612d8f57612d8f61370d565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612dfa57508160046000600a8481548110612dd357612dd361370d565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612e17575050600b549369d3c21bcecceda10000009350915050565b60036000600a8381548110612e2e57612e2e61370d565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612e5d9084613723565b925060046000600a8381548110612e7657612e7661370d565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612ea59083613723565b915080612eb181613750565b915050612d6d565b5069d3c21bcecceda1000000600b54612ed291906136d3565b821015612ef0575050600b549269d3c21bcecceda100000092509050565b90939092509050565b600080600080612f08856132bc565b90506000612f15866132d9565b9050600081612f248489613723565b612f2e9190613723565b979296509094509092505050565b6000808080612f4b85896136b4565b90506000612f5986896136b4565b90506000612f6787896136b4565b9050600081612f768486613723565b612f809190613723565b939b939a50919850919650505050505050565b601f54612fab9030906001600160a01b0316846122fc565b601f5460405163f305d71960e01b81526001600160a01b039091169063f305d719908390612fea9030908790600090819061dead904290600401613788565b60606040518083038185885af1158015613008573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061282a91906137c3565b60008060008060008061303f876128dd565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150613072908890613723565b6001600160a01b038a166000908152600460209081526040808320939093556003905220546130a2908790613723565b6001600160a01b03808b1660009081526003602052604080822093909355908a16815220546130d29086906136f5565b6001600160a01b0389166000908152600360205260409020556130f4816132ec565b6130fe8483613453565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161314391815260200190565b60405180910390a3505050505050505050565b600080600080600080613168876128dd565b6001600160a01b038f16600090815260036020526040902054959b5093995091975095509350915061319b908790613723565b6001600160a01b03808b16600090815260036020908152604080832094909455918b168152600490915220546131d29084906136f5565b6001600160a01b0389166000908152600460209081526040808320939093556003905220546130d29086906136f5565b600080600080600080613214876128dd565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150613247908890613723565b6001600160a01b038a1660009081526004602090815260408083209390935560039052205461319b908790613723565b600080600080600080613289876128dd565b6001600160a01b038f16600090815260036020526040902054959b509399509197509550935091506130a2908790613723565b6000612710600d54836132cf91906136b4565b610c5691906136d3565b6000612710601054836132cf91906136b4565b6001601254141561335d5760105460145461330790836136b4565b61331191906136d3565b6019600082825461332291906136f5565b909155505060105460155461333790836136b4565b61334191906136d3565b601a600082825461335291906136f5565b909155506133c99050565b600260125414156133c95760105460175461337890836136b4565b61338291906136d3565b6019600082825461339391906136f5565b90915550506010546018546133a890836136b4565b6133b291906136d3565b601a60008282546133c391906136f5565b90915550505b60006133d3612831565b905060006133e182846136b4565b306000908152600360205260409020549091506133ff9082906136f5565b3060009081526003602090815260408083209390935560099052205460ff1615612ca7573060009081526004602052604090205461343e9084906136f5565b30600090815260046020526040902055505050565b81600b546134619190613723565b600b55600c546134729082906136f5565b600c555050565b600060208083528351808285015260005b818110156134a65785810183015185820160400152820161348a565b818111156134b8576000604083870101525b50601f01601f1916929092016040019392505050565b6000602082840312156134e057600080fd5b5035919050565b6001600160a01b038116811461158357600080fd5b6000806040838503121561350f57600080fd5b823561351a816134e7565b946020939093013593505050565b60006020828403121561353a57600080fd5b8135610f88816134e7565b60008060006060848603121561355a57600080fd5b505081359360208301359350604090920135919050565b60008060006060848603121561358657600080fd5b8335613591816134e7565b925060208401356135a1816134e7565b929592945050506040919091013590565b801515811461158357600080fd5b600080604083850312156135d357600080fd5b8235915060208301356135e5816135b2565b809150509250929050565b6000806040838503121561360357600080fd5b823561360e816134e7565b915060208301356135e5816135b2565b6000806040838503121561363157600080fd5b823561363c816134e7565b915060208301356135e5816134e7565b60006020828403121561365e57600080fd5b8135610f88816135b2565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156136ce576136ce61369e565b500290565b6000826136f057634e487b7160e01b600052601260045260246000fd5b500490565b600082198211156137085761370861369e565b500190565b634e487b7160e01b600052603260045260246000fd5b6000828210156137355761373561369e565b500390565b634e487b7160e01b600052603160045260246000fd5b60006000198214156137645761376461369e565b5060010190565b60006020828403121561377d57600080fd5b8151610f88816134e7565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b6000806000606084860312156137d857600080fd5b8351925060208401519150604084015190509250925092565b60006020828403121561380357600080fd5b5051919050565b60006020828403121561381c57600080fd5b8151610f88816135b2565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156138775784516001600160a01b031683529383019391830191600101613852565b50506001600160a01b0396909616606085015250505060800152939250505056fea264697066735822122076938132c31ce0b69a9c7e174354b8df93071e76dadd55c2f5dab1f071cc6d0a64736f6c634300080b00334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657200000000000000000000000032c1dff1e585cc93c9fc3969b32f0290af8f290c

Deployed Bytecode

0x60806040526004361061039b5760003560e01c8063557ed1ba116101dc578063a9059cbb11610102578063dc44b6a0116100a0578063ea2f0b371161006f578063ea2f0b3714610a84578063efcc52de14610aa4578063f2fde38b14610aba578063f5648a4f14610ada57600080fd5b8063dc44b6a0146109fd578063dd62ed3e14610a13578063e82a416d14610a59578063e884f26014610a6f57600080fd5b8063bbc0c742116100dc578063bbc0c7421461098d578063c3c8cd80146109ae578063c49b9a80146109c3578063c876d0b9146109e357600080fd5b8063a9059cbb1461091d578063aacebbe31461093d578063b62496f51461095d57600080fd5b806388790a681161017a5780639a7a23d6116101495780639a7a23d6146108a8578063a073d37f146108c8578063a457c2d7146108dd578063a5ece941146108fd57600080fd5b806388790a681461083b57806388f82020146108515780638da5cb5b1461088a57806395d89b41146103a757600080fd5b8063715018a6116101b6578063715018a6146107d1578063751039fc146107e65780637571336a146107fb5780638366e79a1461081b57600080fd5b8063557ed1ba146107895780636fc3eaec1461079c57806370a08231146107b157600080fd5b80632d838119116102c1578063452ed4f11161025f5780634a74bb021161022e5780634a74bb02146106fa57806351f205e41461071b57806352390c02146107305780635342acb41461075057600080fd5b8063452ed4f11461067b5780634549b0391461069b578063499b8394146106bb5780634a62bb65146106db57600080fd5b8063395093511161029b57806339509351146106105780634047ea3e1461063057806342e99d1a14610646578063437823ec1461065b57600080fd5b80632d838119146105b4578063313ce567146105d45780633685d419146105f057600080fd5b806318160ddd11610339578063200a692d11610308578063200a692d1461054857806323b872dd1461055e57806324171f321461057e57806325519cf21461059457600080fd5b806318160ddd146104d55780631c499ab0146104f25780631c68372d146105125780631d865c301461052857600080fd5b8063095ea7b311610375578063095ea7b31461043c57806309e72cf61461046c57806310d5de531461049057806313114a9d146104c057600080fd5b806306fdde03146103a75780630758d924146103e2578063080437511461041a57600080fd5b366103a257005b600080fd5b3480156103b357600080fd5b5060408051808201825260038152624d575360e81b602082015290516103d99190613479565b60405180910390f35b3480156103ee57600080fd5b50601f54610402906001600160a01b031681565b6040516001600160a01b0390911681526020016103d9565b34801561042657600080fd5b5061043a6104353660046134ce565b610aef565b005b34801561044857600080fd5b5061045c6104573660046134fc565b610c45565b60405190151581526020016103d9565b34801561047857600080fd5b50610482601b5481565b6040519081526020016103d9565b34801561049c57600080fd5b5061045c6104ab366004613528565b601c6020526000908152604090205460ff1681565b3480156104cc57600080fd5b50600c54610482565b3480156104e157600080fd5b5069d3c21bcecceda1000000610482565b3480156104fe57600080fd5b5061043a61050d3660046134ce565b610c5c565b34801561051e57600080fd5b5061048260185481565b34801561053457600080fd5b5061043a610543366004613545565b610c9e565b34801561055457600080fd5b5061048260165481565b34801561056a57600080fd5b5061045c610579366004613571565b610d84565b34801561058a57600080fd5b50610482601a5481565b3480156105a057600080fd5b5061043a6105af366004613545565b610e2e565b3480156105c057600080fd5b506104826105cf3660046134ce565b610f0b565b3480156105e057600080fd5b50604051601281526020016103d9565b3480156105fc57600080fd5b5061043a61060b366004613528565b610f8f565b34801561061c57600080fd5b5061045c61062b3660046134fc565b611146565b34801561063c57600080fd5b5061048260195481565b34801561065257600080fd5b5061043a611182565b34801561066757600080fd5b5061043a610676366004613528565b611586565b34801561068757600080fd5b50602054610402906001600160a01b031681565b3480156106a757600080fd5b506104826106b63660046135c0565b61160b565b3480156106c757600080fd5b5061043a6106d6366004613528565b6116a0565b3480156106e757600080fd5b5060075461045c90610100900460ff1681565b34801561070657600080fd5b5060205461045c90600160a81b900460ff1681565b34801561072757600080fd5b5061043a6117ad565b34801561073c57600080fd5b5061043a61074b366004613528565b611881565b34801561075c57600080fd5b5061045c61076b366004613528565b6001600160a01b031660009081526008602052604090205460ff1690565b34801561079557600080fd5b5042610482565b3480156107a857600080fd5b5061043a611a6f565b3480156107bd57600080fd5b506104826107cc366004613528565b611ad3565b3480156107dd57600080fd5b5061043a611b32565b3480156107f257600080fd5b5061043a611ba6565b34801561080757600080fd5b5061043a6108163660046135f0565b611c06565b34801561082757600080fd5b5061045c61083636600461361e565b611c5b565b34801561084757600080fd5b5061048260175481565b34801561085d57600080fd5b5061045c61086c366004613528565b6001600160a01b031660009081526009602052604090205460ff1690565b34801561089657600080fd5b506000546001600160a01b0316610402565b3480156108b457600080fd5b5061043a6108c33660046135f0565b611e63565b3480156108d457600080fd5b50601e54610482565b3480156108e957600080fd5b5061045c6108f83660046134fc565b611f1b565b34801561090957600080fd5b50600254610402906001600160a01b031681565b34801561092957600080fd5b5061045c6109383660046134fc565b611fb4565b34801561094957600080fd5b5061043a610958366004613528565b611fc1565b34801561096957600080fd5b5061045c610978366004613528565b601d6020526000908152604090205460ff1681565b34801561099957600080fd5b5060205461045c90600160b01b900460ff1681565b3480156109ba57600080fd5b5061043a61200d565b3480156109cf57600080fd5b5061043a6109de36600461364c565b61204d565b3480156109ef57600080fd5b5060075461045c9060ff1681565b348015610a0957600080fd5b5061048260145481565b348015610a1f57600080fd5b50610482610a2e36600461361e565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610a6557600080fd5b5061048260155481565b348015610a7b57600080fd5b5061043a6120c1565b348015610a9057600080fd5b5061043a610a9f366004613528565b612120565b348015610ab057600080fd5b5061048260135481565b348015610ac657600080fd5b5061043a610ad5366004613528565b61219b565b348015610ae657600080fd5b5061043a612285565b6000546001600160a01b03163314610b225760405162461bcd60e51b8152600401610b1990613669565b60405180910390fd5b620186a0610b3b69d3c21bcecceda100000060016136b4565b610b4591906136d3565b811015610bb25760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610b19565b6103e8610bca69d3c21bcecceda100000060056136b4565b610bd491906136d3565b811115610c405760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610b19565b601e55565b6000610c523384846122fc565b5060015b92915050565b6000546001600160a01b03163314610c865760405162461bcd60e51b8152600401610b1990613669565b610c9881670de0b6b3a76400006136b4565b601b5550565b6000546001600160a01b03163314610cc85760405162461bcd60e51b8152600401610b1990613669565b60168390556017829055601881905561138881610ce584866136f5565b610cef91906136f5565b1115610d3d5760405162461bcd60e51b815260206004820152601e60248201527f4d757374206b6565702073656c6c2074617865732062656c6f772035302500006044820152606401610b19565b60408051828152602081018490529081018490527f5ff33e060dbf96ff8c11eeadaaa320b34884dc8af8156d77ab6134d2bece22c3906060015b60405180910390a1505050565b6000610d91848484612420565b6001600160a01b038416600090815260056020908152604080832033845290915290205482811015610e165760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610b19565b610e2385338584036122fc565b506001949350505050565b6000546001600160a01b03163314610e585760405162461bcd60e51b8152600401610b1990613669565b60138390556014829055601581905561119481610e7584866136f5565b610e7f91906136f5565b1115610ecd5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206275792074617865732062656c6f77203435250000006044820152606401610b19565b60408051828152602081018490529081018490527f4b44023290188702187818a2359a9d40279e516e5e9bbade40c321936a77362090606001610d77565b6000600b54821115610f725760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610b19565b6000610f7c612831565b9050610f8881846136d3565b9392505050565b6000546001600160a01b03163314610fb95760405162461bcd60e51b8152600401610b1990613669565b6001600160a01b03811660009081526009602052604090205460ff166110215760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610b19565b60005b600a5481101561114257816001600160a01b0316600a828154811061104b5761104b61370d565b6000918252602090912001546001600160a01b0316141561113057600a805461107690600190613723565b815481106110865761108661370d565b600091825260209091200154600a80546001600160a01b0390921691839081106110b2576110b261370d565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600990925220805460ff19169055600a80548061110a5761110a61373a565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b8061113a81613750565b915050611024565b5050565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610c5291859061117d9086906136f5565b6122fc565b6000546001600160a01b031633146111ac5760405162461bcd60e51b8152600401610b1990613669565b602054600160b01b900460ff161561121a5760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610b19565b611222612854565b6020805461ffff60a81b191661010160a81b1790556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1601f80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b81529051829163c45a01559160048083019260209291908290030181865afa1580156112c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e9919061376b565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611336573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061135a919061376b565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156113a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113cb919061376b565b602080546001600160a01b0319166001600160a01b039290921691821790556113f5906001611c06565b60205461140c906001600160a01b03166001612882565b600047116114685760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401610b19565b600061147330611ad3565b116114cf5760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610b19565b601f546114ea9030906001600160a01b031661117d82611ad3565b601f546001600160a01b031663f305d719473061150681611ad3565b60008033426040518863ffffffff1660e01b815260040161152c96959493929190613788565b60606040518083038185885af115801561154a573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061156f91906137c3565b505050611583600e54600d55601154601055565b50565b6000546001600160a01b031633146115b05760405162461bcd60e51b8152600401610b1990613669565b6001600160a01b038116600081815260086020908152604091829020805460ff1916600117905590519182527f58c3e0504c69d3a92726966f152a771e0f8f6ad4daca1ae9055a38aba1fd2b6291015b60405180910390a150565b600069d3c21bcecceda10000008311156116675760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610b19565b81611686576000611677846128dd565b50939550610c56945050505050565b6000611691846128dd565b50929550610c56945050505050565b6000546001600160a01b031633146116ca5760405162461bcd60e51b8152600401610b1990613669565b6001600160a01b03811661172f5760405162461bcd60e51b815260206004820152602660248201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60448201526507420626520360d41b6064820152608401610b19565b600280546001600160a01b039081166000908152600860209081526040808320805460ff1990811690915585546001600160a01b031916948716948517909555838352918290208054909416600117909355519081527f4efa56652237561d0f1fd31311aeaaa41f3b754a461545ed3cf6ced5876d29829101611600565b6000546001600160a01b031633146117d75760405162461bcd60e51b8152600401610b1990613669565b60006117e230611ad3565b9050601e548110156118495760405162461bcd60e51b815260206004820152602a60248201527f43616e206f6e6c792073776170206261636b2069662061626f766520746865206044820152693a343932b9b437b6321760b11b6064820152608401610b19565b61185161292c565b6040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb3290602001611600565b6000546001600160a01b031633146118ab5760405162461bcd60e51b8152600401610b1990613669565b6001600160a01b03811660009081526009602052604090205460ff16156119145760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610b19565b600a546032906119259060016136f5565b11156119af5760405162461bcd60e51b815260206004820152604d60248201527f43616e6e6f74206578636c756465206d6f7265207468616e203530206163636f60448201527f756e74732e2020496e636c75646520612070726576696f75736c79206578636c60648201526c3ab232b21030b2323932b9b99760991b608482015260a401610b19565b6001600160a01b03811660009081526003602052604090205415611a09576001600160a01b0381166000908152600360205260409020546119ef90610f0b565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600960205260408120805460ff19166001908117909155600a805491820181559091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b0319169091179055565b6000546001600160a01b03163314611a995760405162461bcd60e51b8152600401610b1990613669565b60025460405147916001600160a01b03169082156108fc029083906000818181858888f19350505050158015611142573d6000803e3d6000fd5b6001600160a01b03811660009081526009602052604081205460ff1615611b1057506001600160a01b031660009081526004602052604090205490565b6001600160a01b038216600090815260036020526040902054610c5690610f0b565b6000546001600160a01b03163314611b5c5760405162461bcd60e51b8152600401610b1990613669565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314611bd05760405162461bcd60e51b8152600401610b1990613669565b6007805461ffff191690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6000546001600160a01b03163314611c305760405162461bcd60e51b8152600401610b1990613669565b6001600160a01b03919091166000908152601c60205260409020805460ff1916911515919091179055565b600080546001600160a01b03163314611c865760405162461bcd60e51b8152600401610b1990613669565b6001600160a01b038316611cdc5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610b19565b6001600160a01b038316301415611d355760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e73000000006044820152606401610b19565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611d7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611da091906137f1565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af1158015611df3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e17919061380a565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6000546001600160a01b03163314611e8d5760405162461bcd60e51b8152600401610b1990613669565b6020546001600160a01b0383811691161415611f115760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610b19565b6111428282612882565b3360009081526005602090815260408083206001600160a01b038616845290915281205482811015611f9d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b19565b611faa33858584036122fc565b5060019392505050565b6000610c52338484612420565b6000546001600160a01b03163314611feb5760405162461bcd60e51b8152600401610b1990613669565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146120375760405162461bcd60e51b8152600401610b1990613669565b600061204230611ad3565b905061158381612afc565b6000546001600160a01b031633146120775760405162461bcd60e51b8152600401610b1990613669565b6020805460ff60a81b1916600160a81b8315159081029190911782556040519081527f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599101611600565b6000546001600160a01b031633146120eb5760405162461bcd60e51b8152600401610b1990613669565b6007805460ff191690556040517fa29c2b578a5a679452d146ddd35ea04a2e7c57fe555cc7a3d91b3b8b06e6103d90600090a1565b6000546001600160a01b0316331461214a5760405162461bcd60e51b8152600401610b1990613669565b6001600160a01b038116600081815260086020908152604091829020805460ff1916905590519182527f4f6a6b6efe34ec6478021aa9fb7f6980e78ea3a10c74074a8ce49d5d3ebf1f7e9101611600565b6000546001600160a01b031633146121c55760405162461bcd60e51b8152600401610b1990613669565b6001600160a01b03811661222a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b19565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146122af5760405162461bcd60e51b8152600401610b1990613669565b604051600090339047908381818185875af1925050503d80600081146122f1576040519150601f19603f3d011682016040523d82523d6000602084013e6122f6565b606091505b50505050565b6001600160a01b03831661235e5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b19565b6001600160a01b0382166123bf5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b19565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166124845760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b19565b6001600160a01b0382166124e65760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b19565b600081116125485760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610b19565b602054600160b01b900460ff166125e4576001600160a01b03831660009081526008602052604090205460ff168061259857506001600160a01b03821660009081526008602052604090205460ff165b6125e45760405162461bcd60e51b815260206004820152601a60248201527f54726164696e67206973206e6f7420616374697665207965742e0000000000006044820152606401610b19565b60006125ef30611ad3565b601e5460205491925082101590600160a01b900460ff1615801561261c5750602054600160a81b900460ff165b801561263d575060205460009061263b906001600160a01b0316611ad3565b115b801561266257506001600160a01b03841660009081526008602052604090205460ff16155b801561268757506001600160a01b03851660009081526008602052604090205460ff16155b80156126ab57506001600160a01b0384166000908152601d602052604090205460ff165b80156126b45750805b156126c1576126c161292c565b6126c9612854565b60036012556001600160a01b03851660009081526008602052604090205460ff1615801561271057506001600160a01b03841660009081526008602052604090205460ff16155b1561280e576001600160a01b0385166000908152601d602052604090205460ff16156127c757601354600d5560155460145461274c91906136f5565b601055601b548361275c86611ad3565b61276691906136f5565b11156127b45760405162461bcd60e51b815260206004820152601a60248201527f4578636565647320746865206d617857616c6c657453697a652e0000000000006044820152606401610b19565b601054156127c25760016012555b61280e565b6001600160a01b0384166000908152601d602052604090205460ff161561280e57601654600d556018546017546127fe91906136f5565b60108190551561280e5760026012555b612819858585612c56565b61282a600e54600d55601154601055565b5050505050565b600080600061283e612d58565b909250905061284d81836136d3565b9250505090565b600d541580156128645750601054155b1561286b57565b600d8054600e556010805460115560009182905555565b6001600160a01b0382166000908152601d6020908152604080832080548515801560ff199283168117909355601c9094529190932080549091169092179091556128cf576128cf82611881565b806111425761114282610f8f565b60008060008060008060008060006128f48a612ef9565b92509250925060008060006129128d868661290d612831565b612f3c565b919f909e50909c50959a5093985091965092945050505050565b6020805460ff60a01b1916600160a01b179055600061294a30611ad3565b90506000601a5460195461295e91906136f5565b90506000601e54601461297191906136b4565b831061298857601e546129859060146136b4565b92505b821580612993575081155b156129a057505050612aed565b6000600283601954866129b391906136b4565b6129bd91906136d3565b6129c791906136d3565b905060006129d58286613723565b90506129e081612afc565b60195447906000906129f4906002906136d3565b6129fe9087613723565b601a54612a0b90846136b4565b612a1591906136d3565b90506000612a238284613723565b60006019819055601a5590508415801590612a3e5750600081115b15612a8f57612a4d8582612f93565b60408051858152602081018390529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b6002546040516001600160a01b03909116904790600081818185875af1925050503d8060008114612adc576040519150601f19603f3d011682016040523d82523d6000602084013e612ae1565b606091505b50505050505050505050505b6020805460ff60a01b19169055565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612b3157612b3161370d565b6001600160a01b03928316602091820292909201810191909152601f54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612b8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bae919061376b565b81600181518110612bc157612bc161370d565b6001600160a01b039283166020918202929092010152601f54612be791309116846122fc565b601f5460405163791ac94760e01b81526001600160a01b039091169063791ac94790612c20908590600090869030904290600401613827565b600060405180830381600087803b158015612c3a57600080fd5b505af1158015612c4e573d6000803e3d6000fd5b505050505050565b6001600160a01b03831660009081526009602052604090205460ff168015612c9757506001600160a01b03821660009081526009602052604090205460ff16155b15612cac57612ca783838361302d565b505050565b6001600160a01b03831660009081526009602052604090205460ff16158015612ced57506001600160a01b03821660009081526009602052604090205460ff165b15612cfd57612ca7838383613156565b6001600160a01b03831660009081526009602052604090205460ff168015612d3d57506001600160a01b03821660009081526009602052604090205460ff165b15612d4d57612ca7838383613202565b612ca7838383613277565b600b54600090819069d3c21bcecceda1000000825b600a54811015612eb9578260036000600a8481548110612d8f57612d8f61370d565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612dfa57508160046000600a8481548110612dd357612dd361370d565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612e17575050600b549369d3c21bcecceda10000009350915050565b60036000600a8381548110612e2e57612e2e61370d565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612e5d9084613723565b925060046000600a8381548110612e7657612e7661370d565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612ea59083613723565b915080612eb181613750565b915050612d6d565b5069d3c21bcecceda1000000600b54612ed291906136d3565b821015612ef0575050600b549269d3c21bcecceda100000092509050565b90939092509050565b600080600080612f08856132bc565b90506000612f15866132d9565b9050600081612f248489613723565b612f2e9190613723565b979296509094509092505050565b6000808080612f4b85896136b4565b90506000612f5986896136b4565b90506000612f6787896136b4565b9050600081612f768486613723565b612f809190613723565b939b939a50919850919650505050505050565b601f54612fab9030906001600160a01b0316846122fc565b601f5460405163f305d71960e01b81526001600160a01b039091169063f305d719908390612fea9030908790600090819061dead904290600401613788565b60606040518083038185885af1158015613008573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061282a91906137c3565b60008060008060008061303f876128dd565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150613072908890613723565b6001600160a01b038a166000908152600460209081526040808320939093556003905220546130a2908790613723565b6001600160a01b03808b1660009081526003602052604080822093909355908a16815220546130d29086906136f5565b6001600160a01b0389166000908152600360205260409020556130f4816132ec565b6130fe8483613453565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161314391815260200190565b60405180910390a3505050505050505050565b600080600080600080613168876128dd565b6001600160a01b038f16600090815260036020526040902054959b5093995091975095509350915061319b908790613723565b6001600160a01b03808b16600090815260036020908152604080832094909455918b168152600490915220546131d29084906136f5565b6001600160a01b0389166000908152600460209081526040808320939093556003905220546130d29086906136f5565b600080600080600080613214876128dd565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150613247908890613723565b6001600160a01b038a1660009081526004602090815260408083209390935560039052205461319b908790613723565b600080600080600080613289876128dd565b6001600160a01b038f16600090815260036020526040902054959b509399509197509550935091506130a2908790613723565b6000612710600d54836132cf91906136b4565b610c5691906136d3565b6000612710601054836132cf91906136b4565b6001601254141561335d5760105460145461330790836136b4565b61331191906136d3565b6019600082825461332291906136f5565b909155505060105460155461333790836136b4565b61334191906136d3565b601a600082825461335291906136f5565b909155506133c99050565b600260125414156133c95760105460175461337890836136b4565b61338291906136d3565b6019600082825461339391906136f5565b90915550506010546018546133a890836136b4565b6133b291906136d3565b601a60008282546133c391906136f5565b90915550505b60006133d3612831565b905060006133e182846136b4565b306000908152600360205260409020549091506133ff9082906136f5565b3060009081526003602090815260408083209390935560099052205460ff1615612ca7573060009081526004602052604090205461343e9084906136f5565b30600090815260046020526040902055505050565b81600b546134619190613723565b600b55600c546134729082906136f5565b600c555050565b600060208083528351808285015260005b818110156134a65785810183015185820160400152820161348a565b818111156134b8576000604083870101525b50601f01601f1916929092016040019392505050565b6000602082840312156134e057600080fd5b5035919050565b6001600160a01b038116811461158357600080fd5b6000806040838503121561350f57600080fd5b823561351a816134e7565b946020939093013593505050565b60006020828403121561353a57600080fd5b8135610f88816134e7565b60008060006060848603121561355a57600080fd5b505081359360208301359350604090920135919050565b60008060006060848603121561358657600080fd5b8335613591816134e7565b925060208401356135a1816134e7565b929592945050506040919091013590565b801515811461158357600080fd5b600080604083850312156135d357600080fd5b8235915060208301356135e5816135b2565b809150509250929050565b6000806040838503121561360357600080fd5b823561360e816134e7565b915060208301356135e5816135b2565b6000806040838503121561363157600080fd5b823561363c816134e7565b915060208301356135e5816134e7565b60006020828403121561365e57600080fd5b8135610f88816135b2565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156136ce576136ce61369e565b500290565b6000826136f057634e487b7160e01b600052601260045260246000fd5b500490565b600082198211156137085761370861369e565b500190565b634e487b7160e01b600052603260045260246000fd5b6000828210156137355761373561369e565b500390565b634e487b7160e01b600052603160045260246000fd5b60006000198214156137645761376461369e565b5060010190565b60006020828403121561377d57600080fd5b8151610f88816134e7565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b6000806000606084860312156137d857600080fd5b8351925060208401519150604084015190509250925092565b60006020828403121561380357600080fd5b5051919050565b60006020828403121561381c57600080fd5b8151610f88816135b2565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156138775784516001600160a01b031683529383019391830191600101613852565b50506001600160a01b0396909616606085015250505060800152939250505056fea264697066735822122076938132c31ce0b69a9c7e174354b8df93071e76dadd55c2f5dab1f071cc6d0a64736f6c634300080b0033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

00000000000000000000000032c1dff1e585cc93c9fc3969b32f0290af8f290c

-----Decoded View---------------
Arg [0] : _marketAddress (address): 0x32c1DfF1e585Cc93C9fC3969B32F0290af8f290C

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000032c1dff1e585cc93c9fc3969b32f0290af8f290c


Deployed Bytecode Sourcemap

8380:27824:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12896:85;;;;;;;;;;-1:-1:-1;12968:5:0;;;;;;;;;;;-1:-1:-1;;;12968:5:0;;;;12896:85;;;;12968:5;12896:85;:::i;:::-;;;;;;;;10672:27;;;;;;;;;;-1:-1:-1;10672:27:0;;;;-1:-1:-1;;;;;10672:27:0;;;;;;-1:-1:-1;;;;;798:32:1;;;780:51;;768:2;753:18;10672:27:0;616:221:1;16812:343:0;;;;;;;;;;-1:-1:-1;16812:343:0;;;;;:::i;:::-;;:::i;:::-;;13893:193;;;;;;;;;;-1:-1:-1;13893:193:0;;;;;:::i;:::-;;:::i;:::-;;;1648:14:1;;1641:22;1623:41;;1611:2;1596:18;13893:193:0;1483:187:1;10279:43:0;;;;;;;;;;;;;;;;;;;1821:25:1;;;1809:2;1794:18;10279:43:0;1675:177:1;10331:64:0;;;;;;;;;;-1:-1:-1;10331:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;15383:89;;;;;;;;;;-1:-1:-1;15454:10:0;;15383:89;;13179:97;;;;;;;;;;-1:-1:-1;9144:14:0;13179:97;;16319;;;;;;;;;;-1:-1:-1;16319:97:0;;;;;:::i;:::-;;:::i;10140:38::-;;;;;;;;;;;;;;;;33032:463;;;;;;;;;;-1:-1:-1;33032:463:0;;;;;:::i;:::-;;:::i;10060:30::-;;;;;;;;;;;;;;;;14094:475;;;;;;;;;;-1:-1:-1;14094:475:0;;;;;:::i;:::-;;:::i;10235:37::-;;;;;;;;;;;;;;;;32579:445;;;;;;;;;;-1:-1:-1;32579:445:0;;;;;:::i;:::-;;:::i;18182:321::-;;;;;;;;;;-1:-1:-1;18182:321:0;;;;;:::i;:::-;;:::i;13086:85::-;;;;;;;;;;-1:-1:-1;13086:85:0;;9381:2;3033:36:1;;3021:2;3006:18;13086:85:0;2891:184:1;18978:471:0;;;;;;;;;;-1:-1:-1;18978:471:0;;;;;:::i;:::-;;:::i;14577:215::-;;;;;;;;;;-1:-1:-1;14577:215:0;;;;;:::i;:::-;;:::i;10191:37::-;;;;;;;;;;;;;;;;34852:1349;;;;;;;;;;;;;:::i;32262:152::-;;;;;;;;;;-1:-1:-1;32262:152:0;;;;;:::i;:::-;;:::i;10706:21::-;;;;;;;;;;-1:-1:-1;10706:21:0;;;;-1:-1:-1;;;;;10706:21:0;;;17693:481;;;;;;;;;;-1:-1:-1;17693:481:0;;;;;:::i;:::-;;:::i;33507:401::-;;;;;;;;;;-1:-1:-1;33507:401:0;;;;;:::i;:::-;;:::i;8867:33::-;;;;;;;;;;-1:-1:-1;8867:33:0;;;;;;;;;;;10764:41;;;;;;;;;;-1:-1:-1;10764:41:0;;;;-1:-1:-1;;;10764:41:0;;;;;;23411:294;;;;;;;;;;;;;:::i;18511:459::-;;;;;;;;;;-1:-1:-1;18511:459:0;;;;;:::i;:::-;;:::i;32128:126::-;;;;;;;;;;-1:-1:-1;32128:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;32219:27:0;32195:4;32219:27;;;:18;:27;;;;;;;;;32128:126;7083:90;;;;;;;;;;-1:-1:-1;7150:15:0;7083:90;;16588:153;;;;;;;;;;;;;:::i;13284:198::-;;;;;;;;;;-1:-1:-1;13284:198:0;;;;;:::i;:::-;;:::i;6634:150::-;;;;;;;;;;;;;:::i;15544:154::-;;;;;;;;;;;;;:::i;15892:144::-;;;;;;;;;;-1:-1:-1;15892:144:0;;;;;:::i;:::-;;:::i;34184:488::-;;;;;;;;;;-1:-1:-1;34184:488:0;;;;;:::i;:::-;;:::i;10097:36::-;;;;;;;;;;;;;;;;15221:154;;;;;;;;;;-1:-1:-1;15221:154:0;;;;;:::i;:::-;-1:-1:-1;;;;;15347:20:0;15318:4;15347:20;;;:11;:20;;;;;;;;;15221:154;6420:79;;;;;;;;;;-1:-1:-1;6458:7:0;6485:6;-1:-1:-1;;;;;6485:6:0;6420:79;;17165:237;;;;;;;;;;-1:-1:-1;17165:237:0;;;;;:::i;:::-;;:::i;16056:122::-;;;;;;;;;;-1:-1:-1;16147:23:0;;16056:122;;14800:413;;;;;;;;;;-1:-1:-1;14800:413:0;;;;;:::i;:::-;;:::i;8462:39::-;;;;;;;;;;-1:-1:-1;8462:39:0;;;;-1:-1:-1;;;;;8462:39:0;;;13490:201;;;;;;;;;;-1:-1:-1;13490:201:0;;;;;:::i;:::-;;:::i;16186:125::-;;;;;;;;;;-1:-1:-1;16186:125:0;;;;;:::i;:::-;;:::i;10557:58::-;;;;;;;;;;-1:-1:-1;10557:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;10812:33;;;;;;;;;;-1:-1:-1;10812:33:0;;;;-1:-1:-1;;;10812:33:0;;;;;;16424:156;;;;;;;;;;;;;:::i;33916:171::-;;;;;;;;;;-1:-1:-1;33916:171:0;;;;;:::i;:::-;;:::i;8821:39::-;;;;;;;;;;-1:-1:-1;8821:39:0;;;;;;;;9972:35;;;;;;;;;;;;;;;;13699:186;;;;;;;;;;-1:-1:-1;13699:186:0;;;;;:::i;:::-;-1:-1:-1;;;;;13850:18:0;;;13818:7;13850:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;13699:186;10014:37;;;;;;;;;;;;;;;;15741:137;;;;;;;;;;;;;:::i;32422:149::-;;;;;;;;;;-1:-1:-1;32422:149:0;;;;;:::i;:::-;;:::i;9936:29::-;;;;;;;;;;;;;;;;6792:283;;;;;;;;;;-1:-1:-1;6792:283:0;;;;;:::i;:::-;;:::i;34684:160::-;;;;;;;;;;;;;:::i;16812:343::-;6547:6;;-1:-1:-1;;;;;6547:6:0;191:10;6547:22;6539:67;;;;-1:-1:-1;;;6539:67:0;;;;;;;:::i;:::-;;;;;;;;;16933:6:::1;16919:11;9144:14;16929:1;16919:11;:::i;:::-;:20;;;;:::i;:::-;16906:9;:33;;16898:99;;;::::0;-1:-1:-1;;;16898:99:0;;6065:2:1;16898:99:0::1;::::0;::::1;6047:21:1::0;6104:2;6084:18;;;6077:30;6143:34;6123:18;;;6116:62;-1:-1:-1;;;6194:18:1;;;6187:51;6255:19;;16898:99:0::1;5863:417:1::0;16898:99:0::1;17042:4;17028:11;9144:14;17038:1;17028:11;:::i;:::-;:18;;;;:::i;:::-;17015:9;:31;;17007:96;;;::::0;-1:-1:-1;;;17007:96:0;;6487:2:1;17007:96:0::1;::::0;::::1;6469:21:1::0;6526:2;6506:18;;;6499:30;6565:34;6545:18;;;6538:62;-1:-1:-1;;;6616:18:1;;;6609:50;6676:19;;17007:96:0::1;6285:416:1::0;17007:96:0::1;17113:23;:35:::0;16812:343::o;13893:193::-;13995:4;14017:39;191:10;14040:7;14049:6;14017:8;:39::i;:::-;-1:-1:-1;14074:4:0;13893:193;;;;;:::o;16319:97::-;6547:6;;-1:-1:-1;;;;;6547:6:0;191:10;6547:22;6539:67;;;;-1:-1:-1;;;6539:67:0;;;;;;;:::i;:::-;16400:8:::1;:3:::0;16404:4:::1;16400:8;:::i;:::-;16387:10;:21:::0;-1:-1:-1;16319:97:0:o;33032:463::-;6547:6;;-1:-1:-1;;;;;6547:6:0;191:10;6547:22;6539:67;;;;-1:-1:-1;;;6539:67:0;;;;;;;:::i;:::-;33178:11:::1;:24:::0;;;33213:17:::1;:36:::0;;;33260:18:::1;:38:::0;;;33373:4:::1;33281:17:::0;33317:31:::1;33233:16:::0;33192:10;33317:31:::1;:::i;:::-;:52;;;;:::i;:::-;:60;;33309:103;;;::::0;-1:-1:-1;;;33309:103:0;;7041:2:1;33309:103:0::1;::::0;::::1;7023:21:1::0;7080:2;7060:18;;;7053:30;7119:32;7099:18;;;7092:60;7169:18;;33309:103:0::1;6839:354:1::0;33309:103:0::1;33428:59;::::0;;7400:25:1;;;7456:2;7441:18;;7434:34;;;7484:18;;;7477:34;;;33428:59:0::1;::::0;7388:2:1;7373:18;33428:59:0::1;;;;;;;;33032:463:::0;;;:::o;14094:475::-;14217:4;14234:36;14244:6;14252:9;14263:6;14234:9;:36::i;:::-;-1:-1:-1;;;;;14310:19:0;;14283:24;14310:19;;;:11;:19;;;;;;;;191:10;14310:33;;;;;;;;14362:26;;;;14354:79;;;;-1:-1:-1;;;14354:79:0;;7724:2:1;14354:79:0;;;7706:21:1;7763:2;7743:18;;;7736:30;7802:34;7782:18;;;7775:62;-1:-1:-1;;;7853:18:1;;;7846:38;7901:19;;14354:79:0;7522:404:1;14354:79:0;14469:57;14478:6;191:10;14519:6;14500:16;:25;14469:8;:57::i;:::-;-1:-1:-1;14557:4:0;;14094:475;-1:-1:-1;;;;14094:475:0:o;32579:445::-;6547:6;;-1:-1:-1;;;;;6547:6:0;191:10;6547:22;6539:67;;;;-1:-1:-1;;;6539:67:0;;;;;;;:::i;:::-;32721:10:::1;:22:::0;;;32754:16:::1;:34:::0;;;32799:17:::1;:36:::0;;;32907:4:::1;32819:16:::0;32854:29:::1;32773:15:::0;32734:9;32854:29:::1;:::i;:::-;:49;;;;:::i;:::-;:57;;32846:99;;;::::0;-1:-1:-1;;;32846:99:0;;8133:2:1;32846:99:0::1;::::0;::::1;8115:21:1::0;8172:2;8152:18;;;8145:30;8211:31;8191:18;;;8184:59;8260:18;;32846:99:0::1;7931:353:1::0;32846:99:0::1;32961:55;::::0;;7400:25:1;;;7456:2;7441:18;;7434:34;;;7484:18;;;7477:34;;;32961:55:0::1;::::0;7388:2:1;7373:18;32961:55:0::1;7198:319:1::0;18182:321:0;18276:7;18334;;18323;:18;;18301:110;;;;-1:-1:-1;;;18301:110:0;;8491:2:1;18301:110:0;;;8473:21:1;8530:2;8510:18;;;8503:30;8569:34;8549:18;;;8542:62;-1:-1:-1;;;8620:18:1;;;8613:40;8670:19;;18301:110:0;8289:406:1;18301:110:0;18422:19;18444:10;:8;:10::i;:::-;18422:32;-1:-1:-1;18472:23:0;18422:32;18472:7;:23;:::i;:::-;18465:30;18182:321;-1:-1:-1;;;18182:321:0:o;18978:471::-;6547:6;;-1:-1:-1;;;;;6547:6:0;191:10;6547:22;6539:67;;;;-1:-1:-1;;;6539:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19056:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;19048:56;;;::::0;-1:-1:-1;;;19048:56:0;;8902:2:1;19048:56:0::1;::::0;::::1;8884:21:1::0;8941:2;8921:18;;;8914:30;8980:25;8960:18;;;8953:53;9023:18;;19048:56:0::1;8700:347:1::0;19048:56:0::1;19120:9;19115:327;19139:9;:16:::0;19135:20;::::1;19115:327;;;19197:7;-1:-1:-1::0;;;;;19181:23:0::1;:9;19191:1;19181:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;19181:12:0::1;:23;19177:254;;;19240:9;19250:16:::0;;:20:::1;::::0;19269:1:::1;::::0;19250:20:::1;:::i;:::-;19240:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;19225:9:::1;:12:::0;;-1:-1:-1;;;;;19240:31:0;;::::1;::::0;19235:1;;19225:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;19225:46:0::1;-1:-1:-1::0;;;;;19225:46:0;;::::1;;::::0;;19290:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;19329:11:::1;:20:::0;;;;:28;;-1:-1:-1;;19329:28:0::1;::::0;;19376:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;19376:15:0;;;;;-1:-1:-1;;;;;;19376:15:0::1;::::0;;;;;19115:327:::1;18978:471:::0;:::o;19177:254::-:1;19157:3:::0;::::1;::::0;::::1;:::i;:::-;;;;19115:327;;;;18978:471:::0;:::o;14577:215::-;191:10;14665:4;14714:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;14714:34:0;;;;;;;;;;14665:4;;14682:80;;14705:7;;14714:47;;14751:10;;14714:47;:::i;:::-;14682:8;:80::i;34852:1349::-;6547:6;;-1:-1:-1;;;;;6547:6:0;191:10;6547:22;6539:67;;;;-1:-1:-1;;;6539:67:0;;;;;;;:::i;:::-;34915:13:::1;::::0;-1:-1:-1;;;34915:13:0;::::1;;;34914:14;34906:70;;;::::0;-1:-1:-1;;;34906:70:0;;9788:2:1;34906:70:0::1;::::0;::::1;9770:21:1::0;9827:2;9807:18;;;9800:30;9866:34;9846:18;;;9839:62;-1:-1:-1;;;9917:18:1;;;9910:41;9968:19;;34906:70:0::1;9586:407:1::0;34906:70:0::1;34989:14;:12;:14::i;:::-;35051:13;:20:::0;;-1:-1:-1;;;;35082:28:0;-1:-1:-1;;;35082:28:0;;;35126:16:::1;::::0;::::1;::::0;-1:-1:-1;;35126:16:0::1;35274:9;:22:::0;;-1:-1:-1;;;;;;35274:22:0::1;35220:42;35274:22:::0;;::::1;::::0;;;35354:20:::1;::::0;;-1:-1:-1;;;35354:20:0;;;;35220:42;;35354:18:::1;::::0;:20:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;35220:42;35354:20:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;35342:44:0::1;;35395:4;35402:10;-1:-1:-1::0;;;;;35402:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35342:78;::::0;-1:-1:-1;;;;;;35342:78:0::1;::::0;;;;;;-1:-1:-1;;;;;10484:15:1;;;35342:78:0::1;::::0;::::1;10466:34:1::0;10536:15;;10516:18;;;10509:43;10401:18;;35342:78:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35333:6;:87:::0;;-1:-1:-1;;;;;;35333:87:0::1;-1:-1:-1::0;;;;;35333:87:0;;;::::1;::::0;;::::1;::::0;;35431:48:::1;::::0;-1:-1:-1;35431:25:0::1;:48::i;:::-;35527:6;::::0;35490:51:::1;::::0;-1:-1:-1;;;;;35527:6:0::1;::::0;35490:28:::1;:51::i;:::-;35667:1;35643:21;:25;35635:73;;;::::0;-1:-1:-1;;;35635:73:0;;10765:2:1;35635:73:0::1;::::0;::::1;10747:21:1::0;10804:2;10784:18;;;10777:30;10843:34;10823:18;;;10816:62;-1:-1:-1;;;10894:18:1;;;10887:33;10937:19;;35635:73:0::1;10563:399:1::0;35635:73:0::1;35756:1;35729:24;35747:4;35729:9;:24::i;:::-;:28;35721:79;;;::::0;-1:-1:-1;;;35721:79:0;;11169:2:1;35721:79:0::1;::::0;::::1;11151:21:1::0;11208:2;11188:18;;;11181:30;11247:34;11227:18;;;11220:62;-1:-1:-1;;;11298:18:1;;;11291:36;11344:19;;35721:79:0::1;10967:402:1::0;35721:79:0::1;35845:9;::::0;35813:69:::1;::::0;35830:4:::1;::::0;-1:-1:-1;;;;;35845:9:0::1;35857:24;35830:4:::0;35857:9:::1;:24::i;35813:69::-;35893:9;::::0;-1:-1:-1;;;;;35893:9:0::1;:25;35926:21;35971:4;35991:24;35971:4:::0;35991:9:::1;:24::i;:::-;36030:1;36073::::0;36116:10:::1;36141:15;35893:274;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;36178:15;32049::::0;;32039:7;:25;32091:21;;32075:13;:37;31995:125;36178:15:::1;34895:1306;34852:1349::o:0;32262:152::-;6547:6;;-1:-1:-1;;;;;6547:6:0;191:10;6547:22;6539:67;;;;-1:-1:-1;;;6539:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32333:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;:34;;-1:-1:-1;;32333:34:0::1;32363:4;32333:34;::::0;;32383:23;;780:51:1;;;32383:23:0::1;::::0;753:18:1;32383:23:0::1;;;;;;;;32262:152:::0;:::o;17693:481::-;17813:7;9144:14;17846:7;:18;;17838:62;;;;-1:-1:-1;;;17838:62:0;;12499:2:1;17838:62:0;;;12481:21:1;12538:2;12518:18;;;12511:30;12577:33;12557:18;;;12550:61;12628:18;;17838:62:0;12297:355:1;17838:62:0;17916:17;17911:256;;17951:15;17980:19;17991:7;17980:10;:19::i;:::-;-1:-1:-1;17950:49:0;;-1:-1:-1;18014:14:0;;-1:-1:-1;;;;;18014:14:0;17911:256;18064:23;18099:19;18110:7;18099:10;:19::i;:::-;-1:-1:-1;18061:57:0;;-1:-1:-1;18133:22:0;;-1:-1:-1;;;;;18133:22:0;33507:401;6547:6;;-1:-1:-1;;;;;6547:6:0;191:10;6547:22;6539:67;;;;-1:-1:-1;;;6539:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33602:31:0;::::1;33594:82;;;::::0;-1:-1:-1;;;33594:82:0;;12859:2:1;33594:82:0::1;::::0;::::1;12841:21:1::0;12898:2;12878:18;;;12871:30;12937:34;12917:18;;;12910:62;-1:-1:-1;;;12988:18:1;;;12981:36;13034:19;;33594:82:0::1;12657:402:1::0;33594:82:0::1;33706:16;::::0;;-1:-1:-1;;;;;33706:16:0;;::::1;33726:5;33687:36:::0;;;:18:::1;:36;::::0;;;;;;;:44;;-1:-1:-1;;33687:44:0;;::::1;::::0;;;33742:45;;-1:-1:-1;;;;;;33742:45:0::1;::::0;;::::1;::::0;;::::1;::::0;;;33798:36;;;;;;;:43;;;;::::1;-1:-1:-1::0;33798:43:0::1;::::0;;;33857;780:51:1;;;33857:43:0::1;::::0;753:18:1;33857:43:0::1;616:221:1::0;23411:294:0;6547:6;;-1:-1:-1;;;;;6547:6:0;191:10;6547:22;6539:67;;;;-1:-1:-1;;;6539:67:0;;;;;;;:::i;:::-;23466:23:::1;23492:24;23510:4;23492:9;:24::i;:::-;23466:50;;23554:23;;23535:15;:42;;23527:97;;;::::0;-1:-1:-1;;;23527:97:0;;13266:2:1;23527:97:0::1;::::0;::::1;13248:21:1::0;13305:2;13285:18;;;13278:30;13344:34;13324:18;;;13317:62;-1:-1:-1;;;13395:18:1;;;13388:40;13445:19;;23527:97:0::1;13064:406:1::0;23527:97:0::1;23635:10;:8;:10::i;:::-;23661:36;::::0;23681:15:::1;1821:25:1::0;;23661:36:0::1;::::0;1809:2:1;1794:18;23661:36:0::1;1675:177:1::0;18511:459:0;6547:6;;-1:-1:-1;;;;;6547:6:0;191:10;6547:22;6539:67;;;;-1:-1:-1;;;6539:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18592:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;18591:21;18583:61;;;::::0;-1:-1:-1;;;18583:61:0;;13677:2:1;18583:61:0::1;::::0;::::1;13659:21:1::0;13716:2;13696:18;;;13689:30;13755:29;13735:18;;;13728:57;13802:18;;18583:61:0::1;13475:351:1::0;18583:61:0::1;18663:9;:16:::0;18687:2:::1;::::0;18663:20:::1;::::0;18682:1:::1;18663:20;:::i;:::-;:26;;18655:116;;;::::0;-1:-1:-1;;;18655:116:0;;14033:2:1;18655:116:0::1;::::0;::::1;14015:21:1::0;14072:2;14052:18;;;14045:30;14111:34;14091:18;;;14084:62;14182:34;14162:18;;;14155:62;-1:-1:-1;;;14233:19:1;;;14226:44;14287:19;;18655:116:0::1;13831:481:1::0;18655:116:0::1;-1:-1:-1::0;;;;;18786:16:0;::::1;18805:1;18786:16:::0;;;:7:::1;:16;::::0;;;;;:20;18782:109:::1;;-1:-1:-1::0;;;;;18862:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;18842:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;18823:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;18782:109:::1;-1:-1:-1::0;;;;;18901:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;18901:27:0::1;18924:4;18901:27:::0;;::::1;::::0;;;18939:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;18939:23:0::1;::::0;;::::1;::::0;;18511:459::o;16588:153::-;6547:6;;-1:-1:-1;;;;;6547:6:0;191:10;6547:22;6539:67;;;;-1:-1:-1;;;6539:67:0;;;;;;;:::i;:::-;16699:16:::1;::::0;16691:42:::1;::::0;16659:21:::1;::::0;-1:-1:-1;;;;;16699:16:0::1;::::0;16691:42;::::1;;;::::0;16659:21;;16642:14:::1;16691:42:::0;16642:14;16691:42;16659:21;16699:16;16691:42;::::1;;;;;;;;;;;;;::::0;::::1;;;;13284:198:::0;-1:-1:-1;;;;;13374:20:0;;13350:7;13374:20;;;:11;:20;;;;;;;;13370:49;;;-1:-1:-1;;;;;;13403:16:0;;;;;:7;:16;;;;;;;13284:198::o;13370:49::-;-1:-1:-1;;;;;13457:16:0;;;;;;:7;:16;;;;;;13437:37;;:19;:37::i;6634:150::-;6547:6;;-1:-1:-1;;;;;6547:6:0;191:10;6547:22;6539:67;;;;-1:-1:-1;;;6539:67:0;;;;;;;:::i;:::-;6743:1:::1;6727:6:::0;;6706:40:::1;::::0;-1:-1:-1;;;;;6727:6:0;;::::1;::::0;6706:40:::1;::::0;6743:1;;6706:40:::1;6774:1;6757:19:::0;;-1:-1:-1;;;;;;6757:19:0::1;::::0;;6634:150::o;15544:154::-;6547:6;;-1:-1:-1;;;;;6547:6:0;191:10;6547:22;6539:67;;;;-1:-1:-1;;;6539:67:0;;;;;;;:::i;:::-;15598:14:::1;:22:::0;;-1:-1:-1;;15631:28:0;;;15675:15:::1;::::0;::::1;::::0;15615:5:::1;::::0;15675:15:::1;15544:154::o:0;15892:144::-;6547:6;;-1:-1:-1;;;;;6547:6:0;191:10;6547:22;6539:67;;;;-1:-1:-1;;;6539:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15982:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;15982:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;15892:144::o;34184:488::-;34298:10;6547:6;;-1:-1:-1;;;;;6547:6:0;191:10;6547:22;6539:67;;;;-1:-1:-1;;;6539:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34334:20:0;::::1;34326:59;;;::::0;-1:-1:-1;;;34326:59:0;;14519:2:1;34326:59:0::1;::::0;::::1;14501:21:1::0;14558:2;14538:18;;;14531:30;14597:28;14577:18;;;14570:56;14643:18;;34326:59:0::1;14317:350:1::0;34326:59:0::1;-1:-1:-1::0;;;;;34404:23:0;::::1;34422:4;34404:23;;34396:64;;;::::0;-1:-1:-1;;;34396:64:0;;14874:2:1;34396:64:0::1;::::0;::::1;14856:21:1::0;14913:2;14893:18;;;14886:30;14952;14932:18;;;14925:58;15000:18;;34396:64:0::1;14672:352:1::0;34396:64:0::1;34498:39;::::0;-1:-1:-1;;;34498:39:0;;34531:4:::1;34498:39;::::0;::::1;780:51:1::0;34471:24:0::1;::::0;-1:-1:-1;;;;;34498:24:0;::::1;::::0;::::1;::::0;753:18:1;;34498:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34556:46;::::0;-1:-1:-1;;;34556:46:0;;-1:-1:-1;;;;;15410:32:1;;;34556:46:0::1;::::0;::::1;15392:51:1::0;15459:18;;;15452:34;;;34471:66:0;;-1:-1:-1;34556:23:0;;::::1;::::0;::::1;::::0;15365:18:1;;34556:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34618;::::0;;-1:-1:-1;;;;;15410:32:1;;15392:51;;15474:2;15459:18;;15452:34;;;34548:54:0;;-1:-1:-1;34618:46:0::1;::::0;15365:18:1;34618:46:0::1;;;;;;;34315:357;34184:488:::0;;;;:::o;17165:237::-;6547:6;;-1:-1:-1;;;;;6547:6:0;191:10;6547:22;6539:67;;;;-1:-1:-1;;;6539:67:0;;;;;;;:::i;:::-;17272:6:::1;::::0;-1:-1:-1;;;;;17264:14:0;;::::1;17272:6:::0;::::1;17264:14;;17256:84;;;::::0;-1:-1:-1;;;17256:84:0;;15949:2:1;17256:84:0::1;::::0;::::1;15931:21:1::0;15988:2;15968:18;;;15961:30;16027:34;16007:18;;;16000:62;16098:27;16078:18;;;16071:55;16143:19;;17256:84:0::1;15747:421:1::0;17256:84:0::1;17353:41;17382:4;17388:5;17353:28;:41::i;14800:413::-:0;191:10;14893:4;14937:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;14937:34:0;;;;;;;;;;14990:35;;;;14982:85;;;;-1:-1:-1;;;14982:85:0;;16375:2:1;14982:85:0;;;16357:21:1;16414:2;16394:18;;;16387:30;16453:34;16433:18;;;16426:62;-1:-1:-1;;;16504:18:1;;;16497:35;16549:19;;14982:85:0;16173:401:1;14982:85:0;15103:67;191:10;15126:7;15154:15;15135:16;:34;15103:8;:67::i;:::-;-1:-1:-1;15201:4:0;;14800:413;-1:-1:-1;;;14800:413:0:o;13490:201::-;13597:4;13619:42;191:10;13643:9;13654:6;13619:9;:42::i;16186:125::-;6547:6;;-1:-1:-1;;;;;6547:6:0;191:10;6547:22;6539:67;;;;-1:-1:-1;;;6539:67:0;;;;;;;:::i;:::-;16266:16:::1;:37:::0;;-1:-1:-1;;;;;;16266:37:0::1;-1:-1:-1::0;;;;;16266:37:0;;;::::1;::::0;;;::::1;::::0;;16186:125::o;16424:156::-;6547:6;;-1:-1:-1;;;;;6547:6:0;191:10;6547:22;6539:67;;;;-1:-1:-1;;;6539:67:0;;;;;;;:::i;:::-;16478:23:::1;16504:24;16522:4;16504:9;:24::i;:::-;16478:50;;16539:33;16556:15;16539:16;:33::i;33916:171::-:0;6547:6;;-1:-1:-1;;;;;6547:6:0;191:10;6547:22;6539:67;;;;-1:-1:-1;;;6539:67:0;;;;;;;:::i;:::-;33993:21:::1;:32:::0;;-1:-1:-1;;;;33993:32:0::1;-1:-1:-1::0;;;33993:32:0;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;34041:38:::1;::::0;1623:41:1;;;34041:38:0::1;::::0;1596:18:1;34041:38:0::1;1483:187:1::0;15741:137:0;6547:6;;-1:-1:-1;;;;;6547:6:0;191:10;6547:22;6539:67;;;;-1:-1:-1;;;6539:67:0;;;;;;;:::i;:::-;15803:20:::1;:28:::0;;-1:-1:-1;;15803:28:0::1;::::0;;15847:23:::1;::::0;::::1;::::0;15826:5:::1;::::0;15847:23:::1;15741:137::o:0;32422:149::-;6547:6;;-1:-1:-1;;;;;6547:6:0;191:10;6547:22;6539:67;;;;-1:-1:-1;;;6539:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32491:27:0;::::1;32521:5;32491:27:::0;;;:18:::1;:27;::::0;;;;;;;;:35;;-1:-1:-1;;32491:35:0::1;::::0;;32542:21;;780:51:1;;;32542:21:0::1;::::0;753:18:1;32542:21:0::1;616:221:1::0;6792:283:0;6547:6;;-1:-1:-1;;;;;6547:6:0;191:10;6547:22;6539:67;;;;-1:-1:-1;;;6539:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6897:22:0;::::1;6875:110;;;::::0;-1:-1:-1;;;6875:110:0;;16781:2:1;6875:110:0::1;::::0;::::1;16763:21:1::0;16820:2;16800:18;;;16793:30;16859:34;16839:18;;;16832:62;-1:-1:-1;;;16910:18:1;;;16903:36;16956:19;;6875:110:0::1;16579:402:1::0;6875:110:0::1;7022:6;::::0;;7001:38:::1;::::0;-1:-1:-1;;;;;7001:38:0;;::::1;::::0;7022:6;::::1;::::0;7001:38:::1;::::0;::::1;7050:6;:17:::0;;-1:-1:-1;;;;;;7050:17:0::1;-1:-1:-1::0;;;;;7050:17:0;;;::::1;::::0;;;::::1;::::0;;6792:283::o;34684:160::-;6547:6;;-1:-1:-1;;;;;6547:6:0;191:10;6547:22;6539:67;;;;-1:-1:-1;;;6539:67:0;;;;;;;:::i;:::-;34778:58:::1;::::0;34742:12:::1;::::0;34786:10:::1;::::0;34810:21:::1;::::0;34742:12;34778:58;34742:12;34778:58;34810:21;34786:10;34778:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;34684:160:0:o;19458:371::-;-1:-1:-1;;;;;19585:19:0;;19577:68;;;;-1:-1:-1;;;19577:68:0;;17398:2:1;19577:68:0;;;17380:21:1;17437:2;17417:18;;;17410:30;17476:34;17456:18;;;17449:62;-1:-1:-1;;;17527:18:1;;;17520:34;17571:19;;19577:68:0;17196:400:1;19577:68:0;-1:-1:-1;;;;;19664:21:0;;19656:68;;;;-1:-1:-1;;;19656:68:0;;17803:2:1;19656:68:0;;;17785:21:1;17842:2;17822:18;;;17815:30;17881:34;17861:18;;;17854:62;-1:-1:-1;;;17932:18:1;;;17925:32;17974:19;;19656:68:0;17601:398:1;19656:68:0;-1:-1:-1;;;;;19737:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;19789:32;;1821:25:1;;;19789:32:0;;1794:18:1;19789:32:0;;;;;;;19458:371;;;:::o;19837:1988::-;-1:-1:-1;;;;;19959:18:0;;19951:68;;;;-1:-1:-1;;;19951:68:0;;18206:2:1;19951:68:0;;;18188:21:1;18245:2;18225:18;;;18218:30;18284:34;18264:18;;;18257:62;-1:-1:-1;;;18335:18:1;;;18328:35;18380:19;;19951:68:0;18004:401:1;19951:68:0;-1:-1:-1;;;;;20038:16:0;;20030:64;;;;-1:-1:-1;;;20030:64:0;;18612:2:1;20030:64:0;;;18594:21:1;18651:2;18631:18;;;18624:30;18690:34;18670:18;;;18663:62;-1:-1:-1;;;18741:18:1;;;18734:33;18784:19;;20030:64:0;18410:399:1;20030:64:0;20122:1;20113:6;:10;20105:64;;;;-1:-1:-1;;;20105:64:0;;19016:2:1;20105:64:0;;;18998:21:1;19055:2;19035:18;;;19028:30;19094:34;19074:18;;;19067:62;-1:-1:-1;;;19145:18:1;;;19138:39;19194:19;;20105:64:0;18814:405:1;20105:64:0;20194:13;;-1:-1:-1;;;20194:13:0;;;;20190:134;;-1:-1:-1;;;;;20231:24:0;;;;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;20259:22:0;;;;;;:18;:22;;;;;;;;20231:50;20223:89;;;;-1:-1:-1;;;20223:89:0;;19426:2:1;20223:89:0;;;19408:21:1;19465:2;19445:18;;;19438:30;19504:28;19484:18;;;19477:56;19550:18;;20223:89:0;19224:350:1;20223:89:0;20338:28;20369:24;20387:4;20369:9;:24::i;:::-;20459:23;;20543:16;;20338:55;;-1:-1:-1;20435:47:0;;;;-1:-1:-1;;;20543:16:0;;;;20542:17;:55;;;;-1:-1:-1;20576:21:0;;-1:-1:-1;;;20576:21:0;;;;20542:55;:93;;;;-1:-1:-1;20624:6:0;;20634:1;;20614:17;;-1:-1:-1;;;;;20624:6:0;20614:9;:17::i;:::-;:21;20542:93;:133;;;;-1:-1:-1;;;;;;20653:22:0;;;;;;:18;:22;;;;;;;;20652:23;20542:133;:175;;;;-1:-1:-1;;;;;;20693:24:0;;;;;;:18;:24;;;;;;;;20692:25;20542:175;:221;;;;-1:-1:-1;;;;;;20734:29:0;;;;;;:25;:29;;;;;;;;20542:221;:261;;;;;20780:23;20542:261;20524:328;;;20830:10;:8;:10::i;:::-;20864:14;:12;:14::i;:::-;9888:1;20899:15;:26;-1:-1:-1;;;;;20951:24:0;;;;;;:18;:24;;;;;;;;20950:25;:52;;;;-1:-1:-1;;;;;;20980:22:0;;;;;;:18;:22;;;;;;;;20979:23;20950:52;20946:773;;;-1:-1:-1;;;;;21043:31:0;;;;;;:25;:31;;;;;;;;21039:669;;;21105:10;;21095:7;:20;21169:17;;21150:16;;:36;;21169:17;21150:36;:::i;:::-;21134:13;:52;21239:10;;21229:6;21213:13;21223:2;21213:9;:13::i;:::-;:22;;;;:::i;:::-;:36;;21205:75;;;;-1:-1:-1;;;21205:75:0;;19781:2:1;21205:75:0;;;19763:21:1;19820:2;19800:18;;;19793:30;19859:28;19839:18;;;19832:56;19905:18;;21205:75:0;19579:350:1;21205:75:0;21302:13;;:17;21299:85;;9804:1;21343:15;:21;21299:85;21039:669;;;-1:-1:-1;;;;;21444:29:0;;;;;;:25;:29;;;;;;;;21440:268;;;21504:11;;21494:7;:21;21570:18;;21550:17;;:38;;21570:18;21550:38;:::i;:::-;21534:13;:54;;;21610:17;21607:86;;9844:1;21651:15;:22;21607:86;21739:32;21754:4;21760:2;21764:6;21739:14;:32::i;:::-;21792:15;32049;;32039:7;:25;32091:21;;32075:13;:37;31995:125;21792:15;19940:1885;;19837:1988;;;:::o;29870:163::-;29912:7;29933:15;29950;29969:19;:17;:19::i;:::-;29932:56;;-1:-1:-1;29932:56:0;-1:-1:-1;30006:19:0;29932:56;;30006:19;:::i;:::-;29999:26;;;;29870:163;:::o;31752:235::-;31799:7;;:12;:34;;;;-1:-1:-1;31815:13:0;;:18;31799:34;31795:47;;;31752:235::o;31795:47::-;31872:7;;;31854:15;:25;31914:13;;;31890:21;:37;-1:-1:-1;31940:11:0;;;;31962:17;31752:235::o;17410:275::-;-1:-1:-1;;;;;17493:31:0;;;;;;:25;:31;;;;;;;;:39;;;;;;-1:-1:-1;;17493:39:0;;;;;;;;17543:31;:37;;;;;;;:45;;;;;;;;;;;17599:35;;17609:23;17627:4;17609:17;:23::i;:::-;17648:5;17644:34;;17655:21;17671:4;17655:15;:21::i;28159:742::-;28259:7;28281;28303;28325;28347;28369;28419:23;28457:12;28484:18;28516:20;28528:7;28516:11;:20::i;:::-;28404:132;;;;;;28548:15;28565:23;28590:12;28606:113;28632:7;28654:4;28673:10;28698;:8;:10::i;:::-;28606:11;:113::i;:::-;28547:172;;;;-1:-1:-1;28547:172:0;;-1:-1:-1;28823:15:0;;-1:-1:-1;28853:4:0;;-1:-1:-1;28872:10:0;;-1:-1:-1;28159:742:0;;-1:-1:-1;;;;;28159:742:0:o;21835:1506::-;11997:16;:23;;-1:-1:-1;;;;11997:23:0;-1:-1:-1;;;11997:23:0;;;;21914:24:::1;21932:4;21914:9;:24::i;:::-;21888:50;;21949:25;22002:22;;21977;;:47;;;;:::i;:::-;21949:75;;22035:12;22131:23;;22157:2;22131:28;;;;:::i;:::-;22112:15;:47;22109:124;;22193:23;::::0;:28:::1;::::0;22219:2:::1;22193:28;:::i;:::-;22175:46;;22109:124;22248:20:::0;;;:46:::1;;-1:-1:-1::0;22272:22:0;;22248:46:::1;22245:60;;;22297:7;;;;;22245:60;22374:26;22466:1;22446:17;22421:22;;22403:15;:40;;;;:::i;:::-;:60;;;;:::i;:::-;:64;;;;:::i;:::-;22374:93:::0;-1:-1:-1;22478:26:0::1;22507:36;22374:93:::0;22507:15;:36:::1;:::i;:::-;22478:65;;22564:36;22581:18;22564:16;:36::i;:::-;22772:22;::::0;22642:21:::1;::::0;22621:18:::1;::::0;22772:24:::1;::::0;22795:1:::1;::::0;22772:24:::1;:::i;:::-;22751:46;::::0;:17;:46:::1;:::i;:::-;22724:22;::::0;22711:36:::1;::::0;:10;:36:::1;:::i;:::-;:87;;;;:::i;:::-;22684:114:::0;-1:-1:-1;22819:23:0::1;22845:29;22684:114:::0;22845:10;:29:::1;:::i;:::-;22912:1;22887:22;:26:::0;;;22924:22:::1;:26:::0;22819:55;-1:-1:-1;22982:22:0;;;;;:45:::1;;;23026:1;23008:15;:19;22982:45;22979:216;;;23043:49;23056:18;23076:15;23043:12;:49::i;:::-;23112:71;::::0;;7400:25:1;;;7456:2;7441:18;;7434:34;;;7484:18;;;7477:34;;;23112:71:0::1;::::0;7388:2:1;7373:18;23112:71:0::1;;;;;;;22979:216;23277:16;::::0;23269:64:::1;::::0;-1:-1:-1;;;;;23277:16:0;;::::1;::::0;23307:21:::1;::::0;23269:64:::1;::::0;;;23307:21;23277:16;23269:64:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;;;;;;;12031:1:0::1;12043:16:::0;:24;;-1:-1:-1;;;;12043:24:0;;;21835:1506::o;23717:481::-;23807:16;;;23821:1;23807:16;;;;;;;;23783:21;;23807:16;;;;;;;;;;-1:-1:-1;23807:16:0;23783:40;;23852:4;23834;23839:1;23834:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;23834:23:0;;;:7;;;;;;;;;;:23;;;;23878:9;;:16;;;-1:-1:-1;;;23878:16:0;;;;:9;;;;;:14;;:16;;;;;23834:7;;23878:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23868:4;23873:1;23868:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;23868:26:0;;;:7;;;;;;;;;:26;23937:9;;23905:56;;23922:4;;23937:9;23949:11;23905:8;:56::i;:::-;23972:9;;:218;;-1:-1:-1;;;23972:218:0;;-1:-1:-1;;;;;23972:9:0;;;;:60;;:218;;24047:11;;23972:9;;24117:4;;24144;;24164:15;;23972:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23772:426;23717:481;:::o;24630:604::-;-1:-1:-1;;;;;24764:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;24788:22:0;;;;;;:11;:22;;;;;;;;24787:23;24764:46;24760:467;;;24827:48;24849:6;24857:9;24868:6;24827:21;:48::i;:::-;24630:604;;;:::o;24760:467::-;-1:-1:-1;;;;;24898:19:0;;;;;;:11;:19;;;;;;;;24897:20;:46;;;;-1:-1:-1;;;;;;24921:22:0;;;;;;:11;:22;;;;;;;;24897:46;24893:334;;;24960:46;24980:6;24988:9;24999:6;24960:19;:46::i;24893:334::-;-1:-1:-1;;;;;25028:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;25051:22:0;;;;;;:11;:22;;;;;;;;25028:45;25024:203;;;25090:48;25112:6;25120:9;25131:6;25090:21;:48::i;25024:203::-;25171:44;25189:6;25197:9;25208:6;25171:17;:44::i;30041:598::-;30139:7;;30092;;;;9144:14;30092:7;30193:332;30217:9;:16;30213:20;;30193:332;;;30301:7;30277;:21;30285:9;30295:1;30285:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;30285:12:0;30277:21;;;;;;;;;;;;;:31;;:83;;;30353:7;30329;:21;30337:9;30347:1;30337:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;30337:12:0;30329:21;;;;;;;;;;;;;:31;30277:83;30255:146;;;-1:-1:-1;;30384:7:0;;;9144:14;;-1:-1:-1;30041:598:0;-1:-1:-1;;30041:598:0:o;30255:146::-;30435:7;:21;30443:9;30453:1;30443:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;30443:12:0;30435:21;;;;;;;;;;;;;30426:31;;:7;:31;:::i;:::-;30416:41;;30491:7;:21;30499:9;30509:1;30499:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;30499:12:0;30491:21;;;;;;;;;;;;;30482:31;;:7;:31;:::i;:::-;30472:41;-1:-1:-1;30235:3:0;;;;:::i;:::-;;;;30193:332;;;;9144:14;30549:7;;:19;;;;:::i;:::-;30539:7;:29;30535:60;;;-1:-1:-1;;30578:7:0;;;9144:14;;-1:-1:-1;30041:598:0;-1:-1:-1;30041:598:0:o;30535:60::-;30614:7;;30623;;-1:-1:-1;30041:598:0;-1:-1:-1;30041:598:0:o;28909:406::-;29010:7;29032;29054;29089:12;29104:24;29120:7;29104:15;:24::i;:::-;29089:39;;29139:18;29160:30;29182:7;29160:21;:30::i;:::-;29139:51;-1:-1:-1;29201:23:0;29139:51;29227:14;29236:4;29227:7;:14;:::i;:::-;:27;;;;:::i;:::-;29201:53;29290:4;;-1:-1:-1;29296:10:0;;-1:-1:-1;28909:406:0;;-1:-1:-1;;;28909:406:0:o;29323:539::-;29522:7;;;;29619:21;29628:11;29619:7;:21;:::i;:::-;29601:39;-1:-1:-1;29651:12:0;29666:18;29672:11;29666:4;:18;:::i;:::-;29651:33;-1:-1:-1;29695:18:0;29716:24;29728:11;29716:10;:24;:::i;:::-;29695:45;-1:-1:-1;29751:23:0;29695:45;29777:14;29786:4;29777:7;:14;:::i;:::-;:27;;;;:::i;:::-;29823:7;;;;-1:-1:-1;29849:4:0;;-1:-1:-1;29323:539:0;;-1:-1:-1;;;;;;;29323:539:0:o;24212:410::-;24325:9;;24293:56;;24310:4;;-1:-1:-1;;;;;24325:9:0;24337:11;24293:8;:56::i;:::-;24360:9;;:254;;-1:-1:-1;;;24360:254:0;;-1:-1:-1;;;;;24360:9:0;;;;:25;;24393:9;;24360:254;;24426:4;;24446:11;;24360:9;;;;24566:6;;24588:15;;24360:254;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;26572:677::-;26723:15;26753:23;26791:12;26818:23;26856:12;26883:18;26915:19;26926:7;26915:10;:19::i;:::-;-1:-1:-1;;;;;26963:15:0;;;;;;:7;:15;;;;;;26708:226;;-1:-1:-1;26708:226:0;;-1:-1:-1;26708:226:0;;-1:-1:-1;26708:226:0;-1:-1:-1;26708:226:0;-1:-1:-1;26708:226:0;-1:-1:-1;26963:25:0;;26980:7;;26963:25;:::i;:::-;-1:-1:-1;;;;;26945:15:0;;;;;;:7;:15;;;;;;;;:43;;;;27017:7;:15;;;;:25;;27034:7;;27017:25;:::i;:::-;-1:-1:-1;;;;;26999:15:0;;;;;;;:7;:15;;;;;;:43;;;;27074:18;;;;;;;:36;;27094:15;;27074:36;:::i;:::-;-1:-1:-1;;;;;27053:18:0;;;;;;:7;:18;;;;;:57;27121:26;27136:10;27121:14;:26::i;:::-;27158:23;27170:4;27176;27158:11;:23::i;:::-;27214:9;-1:-1:-1;;;;;27197:44:0;27206:6;-1:-1:-1;;;;;27197:44:0;;27225:15;27197:44;;;;1821:25:1;;1809:2;1794:18;;1675:177;27197:44:0;;;;;;;;26697:552;;;;;;26572:677;;;:::o;25869:695::-;26018:15;26048:23;26086:12;26113:23;26151:12;26178:18;26210:19;26221:7;26210:10;:19::i;:::-;-1:-1:-1;;;;;26258:15:0;;;;;;:7;:15;;;;;;26003:226;;-1:-1:-1;26003:226:0;;-1:-1:-1;26003:226:0;;-1:-1:-1;26003:226:0;-1:-1:-1;26003:226:0;-1:-1:-1;26003:226:0;-1:-1:-1;26258:27:0;;26003:226;;26258:27;:::i;:::-;-1:-1:-1;;;;;26240:15:0;;;;;;;:7;:15;;;;;;;;:45;;;;26317:18;;;;;:7;:18;;;;;:38;;26339:15;;26317:38;:::i;:::-;-1:-1:-1;;;;;26296:18:0;;;;;;:7;:18;;;;;;;;:59;;;;26387:7;:18;;;;:38;;26409:15;;26387:38;:::i;27257:745::-;27408:15;27438:23;27476:12;27503:23;27541:12;27568:18;27600:19;27611:7;27600:10;:19::i;:::-;-1:-1:-1;;;;;27648:15:0;;;;;;:7;:15;;;;;;27393:226;;-1:-1:-1;27393:226:0;;-1:-1:-1;27393:226:0;;-1:-1:-1;27393:226:0;-1:-1:-1;27393:226:0;-1:-1:-1;27393:226:0;-1:-1:-1;27648:25:0;;27665:7;;27648:25;:::i;:::-;-1:-1:-1;;;;;27630:15:0;;;;;;:7;:15;;;;;;;;:43;;;;27702:7;:15;;;;:25;;27719:7;;27702:25;:::i;25242:619::-;25389:15;25419:23;25457:12;25484:23;25522:12;25549:18;25581:19;25592:7;25581:10;:19::i;:::-;-1:-1:-1;;;;;25629:15:0;;;;;;:7;:15;;;;;;25374:226;;-1:-1:-1;25374:226:0;;-1:-1:-1;25374:226:0;;-1:-1:-1;25374:226:0;-1:-1:-1;25374:226:0;-1:-1:-1;25374:226:0;-1:-1:-1;25629:25:0;;25374:226;;25629:25;:::i;31444:124::-;31508:7;31555:5;31545:7;;31535;:17;;;;:::i;:::-;:25;;;;:::i;31576:168::-;31673:7;31731:5;31715:13;;31705:7;:23;;;;:::i;30647:789::-;9804:1;30713:15;;:22;30710:431;;;30809:13;;30790:16;;30777:29;;:10;:29;:::i;:::-;:45;;;;:::i;:::-;30751:22;;:71;;;;;;;:::i;:::-;;;;-1:-1:-1;;30896:13:0;;30876:17;;30863:30;;:10;:30;:::i;:::-;:46;;;;:::i;:::-;30837:22;;:72;;;;;;;:::i;:::-;;;;-1:-1:-1;30710:431:0;;-1:-1:-1;30710:431:0;;9844:1;30930:15;;:23;30927:214;;;31028:13;;31008:17;;30995:30;;:10;:30;:::i;:::-;:46;;;;:::i;:::-;30969:22;;:72;;;;;;;:::i;:::-;;;;-1:-1:-1;;31116:13:0;;31095:18;;31082:31;;:10;:31;:::i;:::-;:47;;;;:::i;:::-;31056:22;;:73;;;;;;;:::i;:::-;;;;-1:-1:-1;;30927:214:0;31151:19;31173:10;:8;:10::i;:::-;31151:32;-1:-1:-1;31194:18:0;31215:26;31151:32;31215:10;:26;:::i;:::-;31293:4;31277:22;;;;:7;:22;;;;;;31194:47;;-1:-1:-1;31277:35:0;;31194:47;;31277:35;:::i;:::-;31268:4;31252:22;;;;:7;:22;;;;;;;;:60;;;;31327:11;:26;;;;;;31323:105;;;31409:4;31393:22;;;;:7;:22;;;;;;:35;;31418:10;;31393:35;:::i;:::-;31384:4;31368:22;;;;:7;:22;;;;;:60;30699:737;;30647:789;:::o;28010:141::-;28097:4;28088:7;;:14;;;;:::i;:::-;28078:7;:24;28126:10;;:17;;28138:4;;28126:17;:::i;:::-;28113:10;:30;-1:-1:-1;;28010:141:0:o;14:597:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:1;574:15;-1:-1:-1;;570:29:1;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:1:o;842:180::-;901:6;954:2;942:9;933:7;929:23;925:32;922:52;;;970:1;967;960:12;922:52;-1:-1:-1;993:23:1;;842:180;-1:-1:-1;842:180:1:o;1027:131::-;-1:-1:-1;;;;;1102:31:1;;1092:42;;1082:70;;1148:1;1145;1138:12;1163:315;1231:6;1239;1292:2;1280:9;1271:7;1267:23;1263:32;1260:52;;;1308:1;1305;1298:12;1260:52;1347:9;1334:23;1366:31;1391:5;1366:31;:::i;:::-;1416:5;1468:2;1453:18;;;;1440:32;;-1:-1:-1;;;1163:315:1:o;1857:247::-;1916:6;1969:2;1957:9;1948:7;1944:23;1940:32;1937:52;;;1985:1;1982;1975:12;1937:52;2024:9;2011:23;2043:31;2068:5;2043:31;:::i;2109:316::-;2186:6;2194;2202;2255:2;2243:9;2234:7;2230:23;2226:32;2223:52;;;2271:1;2268;2261:12;2223:52;-1:-1:-1;;2294:23:1;;;2364:2;2349:18;;2336:32;;-1:-1:-1;2415:2:1;2400:18;;;2387:32;;2109:316;-1:-1:-1;2109:316:1:o;2430:456::-;2507:6;2515;2523;2576:2;2564:9;2555:7;2551:23;2547:32;2544:52;;;2592:1;2589;2582:12;2544:52;2631:9;2618:23;2650:31;2675:5;2650:31;:::i;:::-;2700:5;-1:-1:-1;2757:2:1;2742:18;;2729:32;2770:33;2729:32;2770:33;:::i;:::-;2430:456;;2822:7;;-1:-1:-1;;;2876:2:1;2861:18;;;;2848:32;;2430:456::o;3288:118::-;3374:5;3367:13;3360:21;3353:5;3350:32;3340:60;;3396:1;3393;3386:12;3411:309;3476:6;3484;3537:2;3525:9;3516:7;3512:23;3508:32;3505:52;;;3553:1;3550;3543:12;3505:52;3589:9;3576:23;3566:33;;3649:2;3638:9;3634:18;3621:32;3662:28;3684:5;3662:28;:::i;:::-;3709:5;3699:15;;;3411:309;;;;;:::o;3725:382::-;3790:6;3798;3851:2;3839:9;3830:7;3826:23;3822:32;3819:52;;;3867:1;3864;3857:12;3819:52;3906:9;3893:23;3925:31;3950:5;3925:31;:::i;:::-;3975:5;-1:-1:-1;4032:2:1;4017:18;;4004:32;4045:30;4004:32;4045:30;:::i;4112:388::-;4180:6;4188;4241:2;4229:9;4220:7;4216:23;4212:32;4209:52;;;4257:1;4254;4247:12;4209:52;4296:9;4283:23;4315:31;4340:5;4315:31;:::i;:::-;4365:5;-1:-1:-1;4422:2:1;4407:18;;4394:32;4435:33;4394:32;4435:33;:::i;4729:241::-;4785:6;4838:2;4826:9;4817:7;4813:23;4809:32;4806:52;;;4854:1;4851;4844:12;4806:52;4893:9;4880:23;4912:28;4934:5;4912:28;:::i;4975:356::-;5177:2;5159:21;;;5196:18;;;5189:30;5255:34;5250:2;5235:18;;5228:62;5322:2;5307:18;;4975:356::o;5336:127::-;5397:10;5392:3;5388:20;5385:1;5378:31;5428:4;5425:1;5418:15;5452:4;5449:1;5442:15;5468:168;5508:7;5574:1;5570;5566:6;5562:14;5559:1;5556:21;5551:1;5544:9;5537:17;5533:45;5530:71;;;5581:18;;:::i;:::-;-1:-1:-1;5621:9:1;;5468:168::o;5641:217::-;5681:1;5707;5697:132;;5751:10;5746:3;5742:20;5739:1;5732:31;5786:4;5783:1;5776:15;5814:4;5811:1;5804:15;5697:132;-1:-1:-1;5843:9:1;;5641:217::o;6706:128::-;6746:3;6777:1;6773:6;6770:1;6767:13;6764:39;;;6783:18;;:::i;:::-;-1:-1:-1;6819:9:1;;6706:128::o;9052:127::-;9113:10;9108:3;9104:20;9101:1;9094:31;9144:4;9141:1;9134:15;9168:4;9165:1;9158:15;9184:125;9224:4;9252:1;9249;9246:8;9243:34;;;9257:18;;:::i;:::-;-1:-1:-1;9294:9:1;;9184:125::o;9314:127::-;9375:10;9370:3;9366:20;9363:1;9356:31;9406:4;9403:1;9396:15;9430:4;9427:1;9420:15;9446:135;9485:3;-1:-1:-1;;9506:17:1;;9503:43;;;9526:18;;:::i;:::-;-1:-1:-1;9573:1:1;9562:13;;9446:135::o;9998:251::-;10068:6;10121:2;10109:9;10100:7;10096:23;10092:32;10089:52;;;10137:1;10134;10127:12;10089:52;10169:9;10163:16;10188:31;10213:5;10188:31;:::i;11374:607::-;-1:-1:-1;;;;;11733:15:1;;;11715:34;;11780:2;11765:18;;11758:34;;;;11823:2;11808:18;;11801:34;;;;11866:2;11851:18;;11844:34;;;;11915:15;;;11909:3;11894:19;;11887:44;11695:3;11947:19;;11940:35;;;;11664:3;11649:19;;11374:607::o;11986:306::-;12074:6;12082;12090;12143:2;12131:9;12122:7;12118:23;12114:32;12111:52;;;12159:1;12156;12149:12;12111:52;12188:9;12182:16;12172:26;;12238:2;12227:9;12223:18;12217:25;12207:35;;12282:2;12271:9;12267:18;12261:25;12251:35;;11986:306;;;;;:::o;15029:184::-;15099:6;15152:2;15140:9;15131:7;15127:23;15123:32;15120:52;;;15168:1;15165;15158:12;15120:52;-1:-1:-1;15191:16:1;;15029:184;-1:-1:-1;15029:184:1:o;15497:245::-;15564:6;15617:2;15605:9;15596:7;15592:23;15588:32;15585:52;;;15633:1;15630;15623:12;15585:52;15665:9;15659:16;15684:28;15706:5;15684:28;:::i;20066:980::-;20328:4;20376:3;20365:9;20361:19;20407:6;20396:9;20389:25;20433:2;20471:6;20466:2;20455:9;20451:18;20444:34;20514:3;20509:2;20498:9;20494:18;20487:31;20538:6;20573;20567:13;20604:6;20596;20589:22;20642:3;20631:9;20627:19;20620:26;;20681:2;20673:6;20669:15;20655:29;;20702:1;20712:195;20726:6;20723:1;20720:13;20712:195;;;20791:13;;-1:-1:-1;;;;;20787:39:1;20775:52;;20882:15;;;;20847:12;;;;20823:1;20741:9;20712:195;;;-1:-1:-1;;;;;;;20963:32:1;;;;20958:2;20943:18;;20936:60;-1:-1:-1;;;21027:3:1;21012:19;21005:35;20924:3;20066:980;-1:-1:-1;;;20066:980:1:o

Swarm Source

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