ETH Price: $2,733.51 (-2.63%)

Token

Alpha Coin (Alpha)
 

Overview

Max Total Supply

1,000,000,000 Alpha

Holders

19

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
12,384,312.156976302688434727 Alpha

Value
$0.00
0x5fE46c37dd43247c5D7CeE10329452C5F05c2939
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:
AlphaCoin

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-12-29
*/

/*
        Website: www.alphacoin.co
        Twitter: https://twitter.com/alphacoin22
        Instagram: https://bit.ly/33tc47q
        telegram: https://t.me/Alphacoinerc20

*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.9;

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;
    uint256 private _lockTime;

    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 getUnlockTime() public view returns (uint256) {
        return _lockTime;
    }

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


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

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);
    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint256) external view returns (address pair);
    function allPairsLength() external view returns (uint256);
    function createPair(address tokenA, address tokenB) external returns (address pair);
    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}


interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint256 value);
    event Transfer(address indexed from, address indexed to, uint256 value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint256);
    function balanceOf(address owner) external view returns (uint256);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 value) external returns (bool);
    function transfer(address to, uint256 value) external returns (bool);
    function transferFrom(address from, address to, uint256 value) external returns (bool);
    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint256);
    function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Burn(address indexed sender, uint256 amount0, uint256 amount1, address indexed to);
    event Swap(address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to);
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint256);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint256);
    function price1CumulativeLast() external view returns (uint256);
    function kLast() external view returns (uint256);

    function burn(address to) external returns (uint256 amount0, uint256 amount1);
    function swap(uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data) external;

    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

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

    function WETH() external pure returns (address);

    function addLiquidity(address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline) 
    external returns (uint256 amountA, uint256 amountB, uint256 liquidity);

    function addLiquidityETH(address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline) 
    external payable returns (uint256 amountToken, uint256 amountETH, uint256 liquidity);

    function removeLiquidity(address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline) 
    external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETH(address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline) 
    external returns (uint256 amountToken, uint256 amountETH);

    function removeLiquidityWithPermit(address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s) 
    external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETHWithPermit(address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s) 
    external returns (uint256 amountToken, uint256 amountETH);

    function swapExactTokensForTokens(uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline) 
    external returns (uint256[] memory amounts);

    function swapTokensForExactTokens(uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline) 
    external returns (uint256[] memory amounts);

    function swapExactETHForTokens(uint256 amountOutMin, address[] calldata path, address to, uint256 deadline) 
    external payable returns (uint256[] memory amounts);

    function swapTokensForExactETH(uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline) 
    external returns (uint256[] memory amounts);

    function swapExactTokensForETH(uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline) 
    external returns (uint256[] memory amounts);

    function swapETHForExactTokens(uint256 amountOut, address[] calldata path, address to, uint256 deadline) 
    external payable returns (uint256[] memory amounts);

    function quote(uint256 amountA, uint256 reserveA, uint256 reserveB) 
    external pure returns (uint256 amountB);

    function getAmountOut(uint256 amountIn, uint256 reserveIn, uint256 reserveOut)
    external pure returns (uint256 amountOut);

    function getAmountIn(uint256 amountOut, uint256 reserveIn, uint256 reserveOut) 
    external pure returns (uint256 amountIn);

    function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts);
    function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline) external returns (uint256 amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s) external returns (uint256 amountETH);
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(uint256 amountOutMin, address[] calldata path, address to, uint256 deadline) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline) external;
}

contract AlphaCoin is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

    address payable public marketingAddress = payable(0x428E2b36e806ccf6b2029b4B7776a6a818057A41);    
    address payable public teamAddress = payable(0x428E2b36e806ccf6b2029b4B7776a6a818057A41);   
    address payable private ownerAddress = payable(0x428E2b36e806ccf6b2029b4B7776a6a818057A41);    
    address payable liquidityAddress = payable(msg.sender);         
    address public immutable deadAddress = 0x000000000000000000000000000000000000dEaD; 
        
    mapping(address => uint256) private _rOwned;
    mapping(address => uint256) private _tOwned;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => bool) private _isExcludedFromFee;
    mapping(address => bool) private _isExcluded;
    address[] private _excluded;
    
    uint256 private constant MAX = ~uint256(0);
    uint256 private constant _tTotal = 1 * 1e9 * 1e18;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    bool public limitsInEffect = false;
    
    string private constant _name = "Alpha Coin";
    string private constant _symbol = "Alpha";
    
    uint8 private constant _decimals = 18;
    
    uint256 private constant BUY = 1;
    uint256 private constant SELL = 2;
    uint256 private constant TRANSFER = 3;
    uint256 private buyOrSellSwitch;

    // 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 _liquidityFee;
    uint256 private _previousLiquidityFee = _liquidityFee;

    uint256 public _buyMarketingFee = 4;
    uint256 public _buyTaxFee = 6;
    uint256 public _buyLiquidityFee = 2;
    uint256 public _buyTeamFee = 2;

    // This will be adjust to avoid dump in the first few minutes
    uint256 public _sellMarketingFee = 6;
    uint256 public _sellTaxFee = 8;
    uint256 public _sellLiquidityFee = 2;
    uint256 public _sellTeamFee = 2;
    
    uint256 public tradingActiveBlock = 0; // 0 means trading is not active
    mapping(address => bool) public boughtEarly;
    uint256 public earlyBuyPenaltyEnd; // determines when snipers/bots can sell without extra penalty
    
    uint256 private _liquidityTokensToSwap;
    uint256 private _marketingTokensToSwap;
    uint256 private _teamTokensToSwap;
    
    bool private gasLimitActive = false;
    uint256 private gasPriceLimit = 100 * 1 gwei; 
    uint256 private gasMaxLimit = 50000000; // gasLeft limit
    
    uint256 public maxTransactionAmount;
    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 = _tTotal * 5 / 10000; // 0.05%

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;

    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 marketingFee, uint256 liquidityFee, uint256 reflectFee, uint256 buybackFee);    
    event SetSellFee(uint256 marketingFee, uint256 liquidityFee, uint256 reflectFee, uint256 buybackFee);    
    event TransferForeignToken(address token, uint256 amount);    
    event UpdatedMarketingAddress(address marketing);    
    event UpdatedLiquidityAddress(address liquidity);    
    event UpdatedTeamAddress(address buyback);    
    event OwnerForcedSwapBack(uint256 timestamp);    
    event BoughtEarly(address indexed sniper);    
    event RemovedSniper(address indexed notsnipersupposedly);
    event UpdatedRouter(address indexed newrouter);

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

    constructor() {
        _rOwned[_msgSender()] = _rTotal;        
        
        uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), uniswapV2Router.WETH()); 
        
        _setAutomatedMarketMakerPair(uniswapV2Pair, true);
        
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[marketingAddress] = true;
        _isExcludedFromFee[liquidityAddress] = true;
        
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
 
        tradingActive = true;
        swapAndLiquifyEnabled = true;
        
        emit Transfer(address(0), _msgSender(), _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) external override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender,_msgSender(),_allowances[sender][_msgSender()].sub(amount,"ERC20: transfer amount exceeds allowance"));
        return true;
    }

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

     function clearStuckBalance(uint256 amountPercentage) external onlyOwner {
        uint256 amount = address(this).balance;
        payable(msg.sender).transfer(amount * amountPercentage / 100);
    }
    
    function decreaseAllowance(address spender, uint256 subtractedValue) external virtual returns (bool) {
        _approve(_msgSender(),spender,_allowances[_msgSender()][spender].sub(subtractedValue,"ERC20: decreased allowance below zero"));
        return true;
    }

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

    function totalFees() external view returns (uint256) {
        return _tFeeTotal;
    } 
    
    function minimumTokensBeforeSwapAmount() external view returns (uint256) {
        return minimumTokensBeforeSwap;
    }
    
    function setminimumTokensBeforeSwapAmount(uint256 ratio) external onlyOwner() {
        minimumTokensBeforeSwap = _tTotal * ratio / 10000;
    }
    
    function setAutomatedMarketMakerPair(address pair, bool value) external onlyOwner {
        require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs");
        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;
        excludeFromMaxTransaction(pair, value);
        if(value){excludeFromReward(pair);}
        if(!value){includeInReward(pair);}
        emit SetAutomatedMarketMakerPair(pair, value);
    }
    
    function setProtectionSettings(bool antiGas) external onlyOwner() {
        gasLimitActive = antiGas;
    }
    
    function setGasPriceLimit(uint256 gas) external onlyOwner {
        require(gas >= 75);
        gasPriceLimit = gas * 1 gwei;
    }
    
    function setGasMaxLimit(uint256 gas) external onlyOwner {
        require(gas >= 750000);
        gasMaxLimit = gas * gasPriceLimit;
    }
    
    // remove limits after token is stable - 30-60 minutes
    function removeLimits() external onlyOwner returns (bool){
        limitsInEffect = false;
        gasLimitActive = false;
        return true;
    }

    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.div(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 excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }
 
    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.");
        }
        
        if(limitsInEffect){
            if (from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !inSwapAndLiquify) {
                
                if(from != owner() && to != uniswapV2Pair && block.number == tradingActiveBlock) {
                    boughtEarly[to] = true;
                    emit BoughtEarly(to);
                }
                
                if (gasLimitActive && automatedMarketMakerPairs[from]) {
                    require(tx.gasprice <= gasPriceLimit, "Gas price exceeds limit.");
                }

                //only on buys
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                    require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
                }
            }
        }
        
        uint256 totalTokensToSwap = _liquidityTokensToSwap + _marketingTokensToSwap + _teamTokensToSwap;
        uint256 contractTokenBalance = balanceOf(address(this));
        bool overMinimumTokenBalance = contractTokenBalance >= minimumTokensBeforeSwap;

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

        bool takeFee = true;

        // If any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) {
            takeFee = false;
            buyOrSellSwitch = TRANSFER;
        } else {
            // Buy
            if (automatedMarketMakerPairs[from]) {
                removeAllFee();
                _taxFee = _buyTaxFee;
                _liquidityFee = _buyLiquidityFee + _buyMarketingFee + _buyTeamFee;
                buyOrSellSwitch = BUY;
            } 
            // Sell
            else if (automatedMarketMakerPairs[to]) {
                removeAllFee();
                _taxFee = _sellTaxFee;
                _liquidityFee = _sellLiquidityFee + _sellMarketingFee + _sellTeamFee;
                buyOrSellSwitch = SELL;
                // Tax if bought in the same block as trading active for 1 hours
                if(boughtEarly[from]  && earlyBuyPenaltyEnd <= block.number){
                    _taxFee = _taxFee * 2;
                    _liquidityFee = _liquidityFee * 2;
                }
            // Normal transfers do not get taxed
            } else {
                removeAllFee();
                buyOrSellSwitch = TRANSFER;
            }
        }

        _tokenTransfer(from, to, amount, takeFee);        
    }

    function swapBack() private lockTheSwap {
        uint256 contractBalance = balanceOf(address(this));        
        uint256 totalTokensToSwap = _liquidityTokensToSwap.add(_teamTokensToSwap).add(_marketingTokensToSwap);
        
        // Halve the amount of liquidity tokens
        uint256 tokensForLiquidity = _liquidityTokensToSwap.div(2);
        uint256 amountToSwapForCrypto = contractBalance.sub(tokensForLiquidity);
        
        uint256 initialCryptoBalance = address(this).balance;

        swapTokensForCrypto(amountToSwapForCrypto); 
        
        uint256 cryptoBalance = address(this).balance.sub(initialCryptoBalance);
        
        uint256 cryptoForMarketing = cryptoBalance.mul(3*_marketingTokensToSwap/4).div(totalTokensToSwap);
        uint256 cryptoForCharity = cryptoBalance.mul(_marketingTokensToSwap/4).div(totalTokensToSwap);
        uint256 cryptoForTeam1 = cryptoBalance.mul(_teamTokensToSwap/2).div(totalTokensToSwap);
        uint256 cryptoForTeam2 = cryptoBalance.mul(_teamTokensToSwap/2).div(totalTokensToSwap);
        
        uint256 cryptoForLiquidity = cryptoBalance.sub(cryptoForMarketing).sub(cryptoForTeam1).sub(cryptoForTeam2).sub(cryptoForCharity);

        _liquidityTokensToSwap = 0;
        _marketingTokensToSwap = 0;
        _teamTokensToSwap = 0;
        
        (bool success,) = address(ownerAddress).call{value: cryptoForTeam1}("");
        (success,) = address(marketingAddress).call{value: cryptoForCharity}("");
        (success,) = address(ownerAddress).call{value: cryptoForTeam2}("");
        (success,) = address(marketingAddress).call{value: cryptoForMarketing}("");
        
        
        addLiquidity(tokensForLiquidity, cryptoForLiquidity);
        emit SwapAndLiquify(amountToSwapForCrypto, cryptoForLiquidity, tokensForLiquidity);
        
        // Use leftover Crypto for buyback of token to burn
        if(address(this).balance > 0){
            swapETHForTokens(address(this).balance);
        }
    }
    
    function swapTokensForCrypto(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount, 0, path, address(this), block.timestamp);
    }
    
    function swapETHForTokens(uint256 amount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = uniswapV2Router.WETH();
        path[1] = address(this);

        // make the swap
        uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0, path,deadAddress, block.timestamp.add(300));
        
        emit SwapETHForTokens(amount, path);
    }
    
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.addLiquidityETH{ value: ethAmount }(address(this), tokenAmount, 0, 0, liquidityAddress, block.timestamp);
    }

    function _tokenTransfer(address sender, address recipient, uint256 amount, bool takeFee) private {
        if (!takeFee) removeAllFee();

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

        restoreAllFee();
    }

    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].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(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].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(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].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(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].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(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.sub(tFee).sub(tLiquidity);
        return (tTransferAmount, tFee, tLiquidity);
    }

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

    function _getRate() private view returns (uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(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.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }

    function _takeLiquidity(uint256 tLiquidity) private {
        if(buyOrSellSwitch == BUY){
            _liquidityTokensToSwap += tLiquidity * _buyLiquidityFee / _liquidityFee;
            _teamTokensToSwap += tLiquidity * _buyTeamFee / _liquidityFee;
            _marketingTokensToSwap += tLiquidity * _buyMarketingFee / _liquidityFee;
        } else if(buyOrSellSwitch == SELL){
            _liquidityTokensToSwap += tLiquidity * _sellLiquidityFee / _liquidityFee;
            _teamTokensToSwap += tLiquidity * _sellTeamFee / _liquidityFee;
            _marketingTokensToSwap += tLiquidity * _sellMarketingFee / _liquidityFee;
        }
        uint256 currentRate = _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if (_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
    }

    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_taxFee).div(10**2);
    }

    function calculateLiquidityFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_liquidityFee).div(10**2);
    }

    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 removeBoughtEarly(address account) external onlyOwner {
        boughtEarly[account] = false;
        emit RemovedSniper(account);
    }

    function setBuyFee(uint256 buyTaxFee, uint256 buyLiquidityFee, uint256 buyMarketingFee, uint256 buyTeamFee) external onlyOwner {
        _buyTaxFee = buyTaxFee;
        _buyLiquidityFee = buyLiquidityFee;
        _buyMarketingFee = buyMarketingFee;
        _buyTeamFee = buyTeamFee;
        emit SetBuyFee(buyMarketingFee, buyLiquidityFee, buyTaxFee, buyTeamFee);
    }

    function setSellFee(uint256 sellTaxFee, uint256 sellLiquidityFee, uint256 sellMarketingFee, uint256 sellTeamFee) external onlyOwner {
        _sellTaxFee = sellTaxFee;
        _sellLiquidityFee = sellLiquidityFee;
        _sellMarketingFee = sellMarketingFee;
        _sellTeamFee = sellTeamFee;
        emit SetSellFee(sellMarketingFee, sellLiquidityFee, sellTaxFee, sellTeamFee);
    }


    function setMarketingAddress(address _marketingAddress) external onlyOwner {
        require(_marketingAddress != address(0), "_marketingAddress address cannot be 0");
        marketingAddress = payable(_marketingAddress);
        _isExcludedFromFee[marketingAddress] = true;
        emit UpdatedMarketingAddress(_marketingAddress);
    }
    
    function setTeamAddress(address _teamAddress) external onlyOwner {
        require(_teamAddress != address(0), "_teamAddress address cannot be 0");
        teamAddress = payable(_teamAddress);
        _isExcludedFromFee[teamAddress] = true;
        emit UpdatedTeamAddress(teamAddress);
    }
    
    function setLiquidityAddress(address _liquidityAddress) external onlyOwner {
        require(_liquidityAddress != address(0), "_liquidityAddress address cannot be 0");
        liquidityAddress = payable(_liquidityAddress);
        _isExcludedFromFee[liquidityAddress] = true;
        emit UpdatedLiquidityAddress(_liquidityAddress);
    }

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

    function getPairAddress() external view onlyOwner returns (address) {
        return uniswapV2Pair;
    }

    function changeRouterVersion(address _router) external onlyOwner returns (address _pair) {
        require(_router != address(0), "_router address cannot be 0");
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(_router);

        _pair = IUniswapV2Factory(_uniswapV2Router.factory()).getPair(
            address(this),
            _uniswapV2Router.WETH()
        );
        if (_pair == address(0)) {
            // Pair doesn't exist
            _pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(
                address(this),
                _uniswapV2Router.WETH()
            );
        }
        uniswapV2Pair = _pair;

        // Set the router of the contract variables
        uniswapV2Router = _uniswapV2Router;
        emit UpdatedRouter(_router);
    }

    // To receive ETH from uniswapV2Router 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");
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        _sent = IERC20(_token).transfer(_to, _contractBalance);
        emit TransferForeignToken(_token, _contractBalance);
    }    
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","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":[{"indexed":true,"internalType":"address","name":"notsnipersupposedly","type":"address"}],"name":"RemovedSniper","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":"marketingFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reflectFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buybackFee","type":"uint256"}],"name":"SetBuyFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"marketingFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reflectFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buybackFee","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":[{"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":"liquidity","type":"address"}],"name":"UpdatedLiquidityAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"marketing","type":"address"}],"name":"UpdatedMarketingAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newrouter","type":"address"}],"name":"UpdatedRouter","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"buyback","type":"address"}],"name":"UpdatedTeamAddress","type":"event"},{"inputs":[],"name":"_buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyTeamFee","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":"_sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellTeamFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","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":[{"internalType":"address","name":"","type":"address"}],"name":"boughtEarly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"}],"name":"changeRouterVersion","outputs":[{"internalType":"address","name":"_pair","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountPercentage","type":"uint256"}],"name":"clearStuckBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"earlyBuyPenaltyEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"getPairAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUnlockTime","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":"marketingAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[{"internalType":"address","name":"account","type":"address"}],"name":"removeBoughtEarly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"buyMarketingFee","type":"uint256"},{"internalType":"uint256","name":"buyTeamFee","type":"uint256"}],"name":"setBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"setGasMaxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"setGasPriceLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_liquidityAddress","type":"address"}],"name":"setLiquidityAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingAddress","type":"address"}],"name":"setMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"antiGas","type":"bool"}],"name":"setProtectionSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"sellTaxFee","type":"uint256"},{"internalType":"uint256","name":"sellLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"sellMarketingFee","type":"uint256"},{"internalType":"uint256","name":"sellTeamFee","type":"uint256"}],"name":"setSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_teamAddress","type":"address"}],"name":"setTeamAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"ratio","type":"uint256"}],"name":"setminimumTokensBeforeSwapAmount","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":[],"name":"teamAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActiveBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_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":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a0604052600380546001600160a01b031990811673428e2b36e806ccf6b2029b4b7776a6a818057a4190811790925560048054821683179055600580548216909217909155600680549091163317905561dead608052620000706b033b2e3c9fd0803ce800000060001962000d85565b6200007e9060001962000db2565b600d55600f805460ff199081169091556011546012556013546014556004601555600660168190556002601781905560188190556019919091556008601a55601b819055601c556000601d5560238054909116905564174876e8006024556302faf080602555612710620001006b033b2e3c9fd0803ce8000000600562000dcc565b6200010c919062000dee565b602955602b805461ffff60a81b191690553480156200012a57600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600d543360009081526007602090815260409182902092909255602a80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d908117909155815163c45a015560e01b81529151909263c45a01559260048082019391829003018186803b158015620001e157600080fd5b505afa158015620001f6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200021c919062000e05565b6001600160a01b031663c9c6539630602a60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200027a57600080fd5b505afa1580156200028f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002b5919062000e05565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015620002fe57600080fd5b505af115801562000313573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000339919062000e05565b602b80546001600160a01b0319166001600160a01b03929092169182179055620003659060016200049f565b6001600a60006200037e6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055308152600a90935281832080548516600190811790915560035482168452828420805486168217905560065490911683529120805490921617905562000406620003fe6000546001600160a01b031690565b600162000539565b6200041330600162000539565b6200042261dead600162000539565b602b805461ffff60a81b191661010160a81b1790556200043f3390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6b033b2e3c9fd0803ce80000006040516200049191815260200190565b60405180910390a362000eed565b6001600160a01b0382166000908152602860205260409020805460ff1916821515179055620004cf828262000539565b8015620004e157620004e182620005b3565b80620004f257620004f282620007cb565b604080516001600160a01b038416815282151560208201527fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab910160405180910390a15050565b6000546001600160a01b03163314620005885760405162461bcd60e51b815260206004820181905260248201526000805160206200501d83398151915260448201526064015b60405180910390fd5b6001600160a01b03919091166000908152602760205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314620005fe5760405162461bcd60e51b815260206004820181905260248201526000805160206200501d83398151915260448201526064016200057f565b6001600160a01b0381166000908152600b602052604090205460ff1615620006695760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064016200057f565b600c546032906200067c90600162000e30565b1115620007085760405162461bcd60e51b815260206004820152604d60248201527f43616e6e6f74206578636c756465206d6f7265207468616e203530206163636f60448201527f756e74732e2020496e636c75646520612070726576696f75736c79206578636c60648201526c3ab232b21030b2323932b9b99760991b608482015260a4016200057f565b6001600160a01b0381166000908152600760205260409020541562000765576001600160a01b0381166000908152600760205260409020546200074b90620009b8565b6001600160a01b0382166000908152600860205260409020555b6001600160a01b03166000818152600b60205260408120805460ff19166001908117909155600c805491820181559091527fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c70180546001600160a01b0319169091179055565b6000546001600160a01b03163314620008165760405162461bcd60e51b815260206004820181905260248201526000805160206200501d83398151915260448201526064016200057f565b6001600160a01b0381166000908152600b602052604090205460ff16620008805760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c7564656400000000000000000060448201526064016200057f565b60005b600c54811015620009b457816001600160a01b0316600c8281548110620008ae57620008ae62000e4b565b6000918252602090912001546001600160a01b031614156200099f57600c8054620008dc9060019062000db2565b81548110620008ef57620008ef62000e4b565b600091825260209091200154600c80546001600160a01b0390921691839081106200091e576200091e62000e4b565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600882526040808220829055600b90925220805460ff19169055600c80548062000979576200097962000e61565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80620009ab8162000e77565b91505062000883565b5050565b6000600d5482111562000a215760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084016200057f565b600062000a2d62000a50565b905062000a49818462000a8360201b6200229b1790919060201c565b9392505050565b6000808062000a5e62000acd565b9150915062000a7c818362000a8360201b6200229b1790919060201c565b9250505090565b600062000a4983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525062000cb360201b60201c565b600d5460009081906b033b2e3c9fd0803ce8000000825b600c5481101562000c60578260076000600c848154811062000b0a5762000b0a62000e4b565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118062000b7957508160086000600c848154811062000b525762000b5262000e4b565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1562000b99575050600d54936b033b2e3c9fd0803ce80000009350915050565b62000bf060076000600c848154811062000bb75762000bb762000e4b565b60009182526020808320909101546001600160a01b031683528281019390935260409091019020548591620022dd62000cef821b17901c565b925062000c4960086000600c848154811062000c105762000c1062000e4b565b60009182526020808320909101546001600160a01b031683528281019390935260409091019020548491620022dd62000cef821b17901c565b91508062000c578162000e77565b91505062000ae4565b5062000c896b033b2e3c9fd0803ce8000000600d5462000a8360201b6200229b1790919060201c565b82101562000caa575050600d54926b033b2e3c9fd0803ce800000092509050565b90939092509050565b6000818362000cd75760405162461bcd60e51b81526004016200057f919062000e95565b50600062000ce6848662000dee565b95945050505050565b600062000a4983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525062000d3960201b60201c565b6000818484111562000d605760405162461bcd60e51b81526004016200057f919062000e95565b50600062000ce6848662000db2565b634e487b7160e01b600052601260045260246000fd5b60008262000d975762000d9762000d6f565b500690565b634e487b7160e01b600052601160045260246000fd5b60008282101562000dc75762000dc762000d9c565b500390565b600081600019048311821515161562000de95762000de962000d9c565b500290565b60008262000e005762000e0062000d6f565b500490565b60006020828403121562000e1857600080fd5b81516001600160a01b038116811462000a4957600080fd5b6000821982111562000e465762000e4662000d9c565b500190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b600060001982141562000e8e5762000e8e62000d9c565b5060010190565b600060208083528351808285015260005b8181101562000ec45785810183015185820160400152820162000ea6565b8181111562000ed7576000604083870101525b50601f01601f1916929092016040019392505050565b60805161410d62000f10600039600081816105c301526136e4015261410d6000f3fe6080604052600436106103dd5760003560e01c80637571336a116101fd578063a9059cbb11610118578063cab03471116100ab578063e653da081161007a578063e653da0814610bd7578063ea2f0b3714610bf7578063ee40166e14610c17578063efcc52de14610c2d578063f2fde38b14610c4357600080fd5b8063cab0347114610b45578063d00dc58914610b5b578063dc44b6a014610b7b578063dd62ed3e14610b9157600080fd5b8063c49b9a80116100e7578063c49b9a8014610ae3578063c5d2418914610b03578063c860795214610b19578063c8c8ebe414610b2f57600080fd5b8063a9059cbb14610a5c578063b62496f514610a7c578063bbc0c74214610aac578063c469b6dd14610acd57600080fd5b80638da5cb5b11610190578063a0263c891161015f578063a0263c89146109e7578063a073d37f14610a07578063a457c2d714610a1c578063a5ece94114610a3c57600080fd5b80638da5cb5b1461095b578063906e9dd01461097957806395d89b41146109995780639a7a23d6146109c757600080fd5b806388790a68116101cc57806388790a68146108d757806388f82020146108ed5780638c5a133d146109265780638d5f81e21461094657600080fd5b80637571336a146108475780637ad6c84d146108675780638366e79a1461088757806385ecfd28146108a757600080fd5b806339509351116102f85780635342acb41161028b578063602bc62b1161025a578063602bc62b146107c85780636690864e146107dd57806370a08231146107fd578063715018a61461081d578063751039fc1461083257600080fd5b80635342acb41461073c578063557ed1ba146107755780635881f3ef146107885780635bb988c9146107a857600080fd5b80634a62bb65116102c75780634a62bb65146106c15780634a74bb02146106db57806352390c02146106fc578063525fa81f1461071c57600080fd5b80633950935114610641578063437823ec146106615780634549b0391461068157806349bd5a5e146106a157600080fd5b80631da1db5e1161037057806327c8f8351161033f57806327c8f835146105b15780632d838119146105e5578063313ce567146106055780633685d4191461062157600080fd5b80631da1db5e146105455780631fc851bd14610565578063200a692d1461057b57806323b872dd1461059157600080fd5b806313114a9d116103ac57806313114a9d146104b05780631694505e146104cf57806318160ddd146105075780631c75f0851461052557600080fd5b806306fdde03146103e9578063092316021461042e578063095ea7b31461045057806310d5de531461048057600080fd5b366103e457005b600080fd5b3480156103f557600080fd5b5060408051808201909152600a81526920b63834309021b7b4b760b11b60208201525b6040516104259190613c38565b60405180910390f35b34801561043a57600080fd5b5061044e610449366004613c8d565b610c63565b005b34801561045c57600080fd5b5061047061046b366004613cbe565b610cb8565b6040519015158152602001610425565b34801561048c57600080fd5b5061047061049b366004613cea565b60276020526000908152604090205460ff1681565b3480156104bc57600080fd5b50600e545b604051908152602001610425565b3480156104db57600080fd5b50602a546104ef906001600160a01b031681565b6040516001600160a01b039091168152602001610425565b34801561051357600080fd5b50676765c793fa10079d601b1b6104c1565b34801561053157600080fd5b506004546104ef906001600160a01b031681565b34801561055157600080fd5b5061044e610560366004613c8d565b610ccf565b34801561057157600080fd5b506104c1601f5481565b34801561058757600080fd5b506104c1601a5481565b34801561059d57600080fd5b506104706105ac366004613d07565b610d41565b3480156105bd57600080fd5b506104ef7f000000000000000000000000000000000000000000000000000000000000000081565b3480156105f157600080fd5b506104c1610600366004613c8d565b610daa565b34801561061157600080fd5b5060405160128152602001610425565b34801561062d57600080fd5b5061044e61063c366004613cea565b610e2e565b34801561064d57600080fd5b5061047061065c366004613cbe565b610fe5565b34801561066d57600080fd5b5061044e61067c366004613cea565b61101b565b34801561068d57600080fd5b506104c161069c366004613d56565b6110a0565b3480156106ad57600080fd5b50602b546104ef906001600160a01b031681565b3480156106cd57600080fd5b50600f546104709060ff1681565b3480156106e757600080fd5b50602b5461047090600160a81b900460ff1681565b34801561070857600080fd5b5061044e610717366004613cea565b611136565b34801561072857600080fd5b5061044e610737366004613cea565b611324565b34801561074857600080fd5b50610470610757366004613cea565b6001600160a01b03166000908152600a602052604090205460ff1690565b34801561078157600080fd5b50426104c1565b34801561079457600080fd5b506104ef6107a3366004613cea565b61141a565b3480156107b457600080fd5b5061044e6107c3366004613cea565b6117f4565b3480156107d457600080fd5b506002546104c1565b3480156107e957600080fd5b5061044e6107f8366004613cea565b611867565b34801561080957600080fd5b506104c1610818366004613cea565b611952565b34801561082957600080fd5b5061044e6119b1565b34801561083e57600080fd5b50610470611a25565b34801561085357600080fd5b5061044e610862366004613d86565b611a6c565b34801561087357600080fd5b5061044e610882366004613c8d565b611ac1565b34801561089357600080fd5b506104706108a2366004613db4565b611b13565b3480156108b357600080fd5b506104706108c2366004613cea565b601e6020526000908152604090205460ff1681565b3480156108e357600080fd5b506104c1601b5481565b3480156108f957600080fd5b50610470610908366004613cea565b6001600160a01b03166000908152600b602052604090205460ff1690565b34801561093257600080fd5b5061044e610941366004613de2565b611ce0565b34801561095257600080fd5b506104ef611d6d565b34801561096757600080fd5b506000546001600160a01b03166104ef565b34801561098557600080fd5b5061044e610994366004613cea565b611da8565b3480156109a557600080fd5b50604080518082019091526005815264416c70686160d81b6020820152610418565b3480156109d357600080fd5b5061044e6109e2366004613d86565b611e9e565b3480156109f357600080fd5b5061044e610a02366004613e14565b611f56565b348015610a1357600080fd5b506029546104c1565b348015610a2857600080fd5b50610470610a37366004613cbe565b611f93565b348015610a4857600080fd5b506003546104ef906001600160a01b031681565b348015610a6857600080fd5b50610470610a77366004613cbe565b611fe2565b348015610a8857600080fd5b50610470610a97366004613cea565b60286020526000908152604090205460ff1681565b348015610ab857600080fd5b50602b5461047090600160b01b900460ff1681565b348015610ad957600080fd5b506104c160185481565b348015610aef57600080fd5b5061044e610afe366004613e14565b611fef565b348015610b0f57600080fd5b506104c160155481565b348015610b2557600080fd5b506104c160195481565b348015610b3b57600080fd5b506104c160265481565b348015610b5157600080fd5b506104c1601c5481565b348015610b6757600080fd5b5061044e610b76366004613c8d565b612066565b348015610b8757600080fd5b506104c160175481565b348015610b9d57600080fd5b506104c1610bac366004613db4565b6001600160a01b03918216600090815260096020908152604080832093909416825291909152205490565b348015610be357600080fd5b5061044e610bf2366004613de2565b6120b3565b348015610c0357600080fd5b5061044e610c12366004613cea565b612136565b348015610c2357600080fd5b506104c1601d5481565b348015610c3957600080fd5b506104c160165481565b348015610c4f57600080fd5b5061044e610c5e366004613cea565b6121b1565b6000546001600160a01b03163314610c965760405162461bcd60e51b8152600401610c8d90613e31565b60405180910390fd5b604b811015610ca457600080fd5b610cb281633b9aca00613e7c565b60245550565b6000610cc533848461231f565b5060015b92915050565b6000546001600160a01b03163314610cf95760405162461bcd60e51b8152600401610c8d90613e31565b47336108fc6064610d0a8585613e7c565b610d149190613e9b565b6040518115909202916000818181858888f19350505050158015610d3c573d6000803e3d6000fd5b505050565b6000610d4e848484612443565b610da08433610d9b8560405180606001604052806028815260200161408b602891396001600160a01b038a1660009081526009602090815260408083203384529091529020549190612ac8565b61231f565b5060019392505050565b6000600d54821115610e115760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610c8d565b6000610e1b612b02565b9050610e27838261229b565b9392505050565b6000546001600160a01b03163314610e585760405162461bcd60e51b8152600401610c8d90613e31565b6001600160a01b0381166000908152600b602052604090205460ff16610ec05760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610c8d565b60005b600c54811015610fe157816001600160a01b0316600c8281548110610eea57610eea613ebd565b6000918252602090912001546001600160a01b03161415610fcf57600c8054610f1590600190613ed3565b81548110610f2557610f25613ebd565b600091825260209091200154600c80546001600160a01b039092169183908110610f5157610f51613ebd565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600882526040808220829055600b90925220805460ff19169055600c805480610fa957610fa9613eea565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610fd981613f00565b915050610ec3565b5050565b3360008181526009602090815260408083206001600160a01b03871684529091528120549091610cc5918590610d9b9086612b25565b6000546001600160a01b031633146110455760405162461bcd60e51b8152600401610c8d90613e31565b6001600160a01b0381166000818152600a6020908152604091829020805460ff1916600117905590519182527f58c3e0504c69d3a92726966f152a771e0f8f6ad4daca1ae9055a38aba1fd2b6291015b60405180910390a150565b6000676765c793fa10079d601b1b8311156110fd5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610c8d565b8161111c57600061110d84612b84565b50939550610cc9945050505050565b600061112784612b84565b50929550610cc9945050505050565b6000546001600160a01b031633146111605760405162461bcd60e51b8152600401610c8d90613e31565b6001600160a01b0381166000908152600b602052604090205460ff16156111c95760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610c8d565b600c546032906111da906001613f1b565b11156112645760405162461bcd60e51b815260206004820152604d60248201527f43616e6e6f74206578636c756465206d6f7265207468616e203530206163636f60448201527f756e74732e2020496e636c75646520612070726576696f75736c79206578636c60648201526c3ab232b21030b2323932b9b99760991b608482015260a401610c8d565b6001600160a01b038116600090815260076020526040902054156112be576001600160a01b0381166000908152600760205260409020546112a490610daa565b6001600160a01b0382166000908152600860205260409020555b6001600160a01b03166000818152600b60205260408120805460ff19166001908117909155600c805491820181559091527fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c70180546001600160a01b0319169091179055565b6000546001600160a01b0316331461134e5760405162461bcd60e51b8152600401610c8d90613e31565b6001600160a01b0381166113b25760405162461bcd60e51b815260206004820152602560248201527f5f6c69717569646974794164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610c8d565b600680546001600160a01b0319166001600160a01b0383169081179091556000818152600a6020908152604091829020805460ff1916600117905590519182527f217742673c85d2f459a37c99960c860122cdadf529374b41418d2718cae7726f9101611095565b600080546001600160a01b031633146114455760405162461bcd60e51b8152600401610c8d90613e31565b6001600160a01b03821661149b5760405162461bcd60e51b815260206004820152601b60248201527f5f726f7574657220616464726573732063616e6e6f74206265203000000000006044820152606401610c8d565b6000829050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156114d957600080fd5b505afa1580156114ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115119190613f33565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561155957600080fd5b505afa15801561156d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115919190613f33565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b1580156115d757600080fd5b505afa1580156115eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061160f9190613f33565b91506001600160a01b03821661179357806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561165857600080fd5b505afa15801561166c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116909190613f33565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156116d857600080fd5b505afa1580156116ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117109190613f33565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b15801561175857600080fd5b505af115801561176c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117909190613f33565b91505b602b80546001600160a01b038085166001600160a01b031992831617909255602a80548484169216919091179055604051908416907f66fc0187dfabf79860e1b18e6c175c92baf9ed88c8a01d0bfdb97d1f0450f7f790600090a250919050565b6000546001600160a01b0316331461181e5760405162461bcd60e51b8152600401610c8d90613e31565b6001600160a01b0381166000818152601e6020526040808220805460ff19169055517fccaa6e1cfd4cf9506fa856fdc8e0a00894b2621ece1d60ab36209873305944989190a250565b6000546001600160a01b031633146118915760405162461bcd60e51b8152600401610c8d90613e31565b6001600160a01b0381166118e75760405162461bcd60e51b815260206004820181905260248201527f5f7465616d4164647265737320616464726573732063616e6e6f7420626520306044820152606401610c8d565b600480546001600160a01b0319166001600160a01b0383811691821783556000918252600a6020908152604092839020805460ff1916600117905592549151911681527f17d8dfa8312c8aa744fab84e6f3d67f24e7553ac1ff2be20269f1220002137569101611095565b6001600160a01b0381166000908152600b602052604081205460ff161561198f57506001600160a01b031660009081526008602052604090205490565b6001600160a01b038216600090815260076020526040902054610cc990610daa565b6000546001600160a01b031633146119db5760405162461bcd60e51b8152600401610c8d90613e31565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600080546001600160a01b03163314611a505760405162461bcd60e51b8152600401610c8d90613e31565b50600f805460ff19908116909155602380549091169055600190565b6000546001600160a01b03163314611a965760405162461bcd60e51b8152600401610c8d90613e31565b6001600160a01b03919091166000908152602760205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611aeb5760405162461bcd60e51b8152600401610c8d90613e31565b612710611b0382676765c793fa10079d601b1b613e7c565b611b0d9190613e9b565b60295550565b600080546001600160a01b03163314611b3e5760405162461bcd60e51b8152600401610c8d90613e31565b6001600160a01b038316611b945760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610c8d565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a082319060240160206040518083038186803b158015611bd657600080fd5b505afa158015611bea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c0e9190613f50565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb90604401602060405180830381600087803b158015611c5c57600080fd5b505af1158015611c70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c949190613f69565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6000546001600160a01b03163314611d0a5760405162461bcd60e51b8152600401610c8d90613e31565b60168490556017839055601582905560188190556040805183815260208101859052908101859052606081018290527f7e09f732e3c0d29138378fac770c27e86c9881459c60b3218337780e2dd176cf906080015b60405180910390a150505050565b600080546001600160a01b03163314611d985760405162461bcd60e51b8152600401610c8d90613e31565b50602b546001600160a01b031690565b6000546001600160a01b03163314611dd25760405162461bcd60e51b8152600401610c8d90613e31565b6001600160a01b038116611e365760405162461bcd60e51b815260206004820152602560248201527f5f6d61726b6574696e674164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610c8d565b600380546001600160a01b0319166001600160a01b0383169081179091556000818152600a6020908152604091829020805460ff1916600117905590519182527fd1e7d6a3390dd5008bd1c57798817b9f806e4c417264e7d3d67e42e784dc24a99101611095565b6000546001600160a01b03163314611ec85760405162461bcd60e51b8152600401610c8d90613e31565b602b546001600160a01b0383811691161415611f4c5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610c8d565b610fe18282612bd3565b6000546001600160a01b03163314611f805760405162461bcd60e51b8152600401610c8d90613e31565b6023805460ff1916911515919091179055565b6000610cc53384610d9b856040518060600160405280602581526020016140b3602591393360009081526009602090815260408083206001600160a01b038d1684529091529020549190612ac8565b6000610cc5338484612443565b6000546001600160a01b031633146120195760405162461bcd60e51b8152600401610c8d90613e31565b602b8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061109590831515815260200190565b6000546001600160a01b031633146120905760405162461bcd60e51b8152600401610c8d90613e31565b620b71b08110156120a057600080fd5b6024546120ad9082613e7c565b60255550565b6000546001600160a01b031633146120dd5760405162461bcd60e51b8152600401610c8d90613e31565b601a849055601b8390556019829055601c8190556040805183815260208101859052908101859052606081018290527fc35b083cad11ee3ca1c82068780b9916789cac19799d2fb148fcab9e643d56f990608001611d5f565b6000546001600160a01b031633146121605760405162461bcd60e51b8152600401610c8d90613e31565b6001600160a01b0381166000818152600a6020908152604091829020805460ff1916905590519182527f4f6a6b6efe34ec6478021aa9fb7f6980e78ea3a10c74074a8ce49d5d3ebf1f7e9101611095565b6000546001600160a01b031633146121db5760405162461bcd60e51b8152600401610c8d90613e31565b6001600160a01b0381166122405760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c8d565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000610e2783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612c66565b6000610e2783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612ac8565b6001600160a01b0383166123815760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c8d565b6001600160a01b0382166123e25760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c8d565b6001600160a01b0383811660008181526009602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166124a75760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c8d565b6001600160a01b0382166125095760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c8d565b6000811161256b5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610c8d565b602b54600160b01b900460ff16612607576001600160a01b0383166000908152600a602052604090205460ff16806125bb57506001600160a01b0382166000908152600a602052604090205460ff165b6126075760405162461bcd60e51b815260206004820152601a60248201527f54726164696e67206973206e6f7420616374697665207965742e0000000000006044820152606401610c8d565b600f5460ff1615612843576000546001600160a01b0384811691161480159061263e57506000546001600160a01b03838116911614155b801561265257506001600160a01b03821615155b801561266957506001600160a01b03821661dead14155b801561267f5750602b54600160a01b900460ff16155b15612843576000546001600160a01b038481169116148015906126b05750602b546001600160a01b03838116911614155b80156126bd5750601d5443145b1561270c576001600160a01b0382166000818152601e6020526040808220805460ff19166001179055517fb90badc1cf1c52268f4fa9afb5276aebf640bcca3300cdfc9cf37db17daa13e29190a25b60235460ff16801561273657506001600160a01b03831660009081526028602052604090205460ff165b1561278d576024543a111561278d5760405162461bcd60e51b815260206004820152601860248201527f4761732070726963652065786365656473206c696d69742e00000000000000006044820152606401610c8d565b6001600160a01b03831660009081526028602052604090205460ff1680156127ce57506001600160a01b03821660009081526027602052604090205460ff16155b15612843576026548111156128435760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610c8d565b60006022546021546020546128589190613f1b565b6128629190613f1b565b9050600061286f30611952565b602954602b5491925082101590600160a01b900460ff1615801561289c5750602b54600160a81b900460ff165b80156128bd5750602b546000906128bb906001600160a01b0316611952565b115b80156128c95750600083115b80156128ee57506001600160a01b0385166000908152600a602052604090205460ff16155b801561291357506001600160a01b0386166000908152600a602052604090205460ff16155b801561293757506001600160a01b03851660009081526028602052604090205460ff165b80156129405750805b1561294d5761294d612c94565b6001600160a01b0386166000908152600a602052604090205460019060ff168061298f57506001600160a01b0386166000908152600a602052604090205460ff165b156129a1575060036010556000612ab3565b6001600160a01b03871660009081526028602052604090205460ff16156129fa576129ca612fac565b6016546011556018546015546017546129e39190613f1b565b6129ed9190613f1b565b6013556001601055612ab3565b6001600160a01b03861660009081526028602052604090205460ff1615612aa557612a23612fac565b601a54601155601c54601954601b54612a3c9190613f1b565b612a469190613f1b565b60135560026010556001600160a01b0387166000908152601e602052604090205460ff168015612a78575043601f5411155b15612aa057601154612a8b906002613e7c565b601155601354612a9c906002613e7c565b6013555b612ab3565b612aad612fac565b60036010555b612abf87878784612fda565b50505050505050565b60008184841115612aec5760405162461bcd60e51b8152600401610c8d9190613c38565b506000612af98486613ed3565b95945050505050565b6000806000612b0f613100565b9092509050612b1e828261229b565b9250505090565b600080612b328385613f1b565b905083811015610e275760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610c8d565b6000806000806000806000806000612b9b8a6132a4565b9250925092506000806000612bb98d8686612bb4612b02565b6132e0565b919f909e50909c50959a5093985091965092945050505050565b6001600160a01b0382166000908152602860205260409020805460ff1916821515179055612c018282611a6c565b8015612c1057612c1082611136565b80612c1e57612c1e82610e2e565b604080516001600160a01b038416815282151560208201527fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91015b60405180910390a15050565b60008183612c875760405162461bcd60e51b8152600401610c8d9190613c38565b506000612af98486613e9b565b602b805460ff60a01b1916600160a01b1790556000612cb230611952565b90506000612cd9602154612cd3602254602054612b2590919063ffffffff16565b90612b25565b90506000612cf3600260205461229b90919063ffffffff16565b90506000612d0184836122dd565b905047612d0d82613330565b6000612d1947836122dd565b90506000612d4c86612d4660046021546003612d359190613e7c565b612d3f9190613e9b565b8590613499565b9061229b565b90506000612d6d87612d466004602154612d669190613e9b565b8690613499565b90506000612d8e88612d466002602254612d879190613e9b565b8790613499565b90506000612daf89612d466002602254612da89190613e9b565b8890613499565b90506000612dcb84612dc5848187818c8c6122dd565b906122dd565b600060208190556021819055602281905560055460405192935090916001600160a01b039091169085908381818185875af1925050503d8060008114612e2d576040519150601f19603f3d011682016040523d82523d6000602084013e612e32565b606091505b50506003546040519192506001600160a01b0316908690600081818185875af1925050503d8060008114612e82576040519150601f19603f3d011682016040523d82523d6000602084013e612e87565b606091505b50506005546040519192506001600160a01b0316908490600081818185875af1925050503d8060008114612ed7576040519150601f19603f3d011682016040523d82523d6000602084013e612edc565b606091505b50506003546040519192506001600160a01b0316908790600081818185875af1925050503d8060008114612f2c576040519150601f19603f3d011682016040523d82523d6000602084013e612f31565b606091505b505080915050612f418a83613518565b604080518a8152602081018490529081018b90527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a14715612f9157612f91476135db565b5050602b805460ff60a01b1916905550505050505050505050565b601154158015612fbc5750601354155b15612fc357565b601180546012556013805460145560009182905555565b80612fe757612fe7612fac565b6001600160a01b0384166000908152600b602052604090205460ff16801561302857506001600160a01b0383166000908152600b602052604090205460ff16155b1561303d57613038848484613791565b6130e9565b6001600160a01b0384166000908152600b602052604090205460ff1615801561307e57506001600160a01b0383166000908152600b602052604090205460ff165b1561308e576130388484846138b7565b6001600160a01b0384166000908152600b602052604090205460ff1680156130ce57506001600160a01b0383166000908152600b602052604090205460ff165b156130de57613038848484613960565b6130e98484846139d3565b6130fa601254601155601454601355565b50505050565b600d546000908190676765c793fa10079d601b1b825b600c54811015613263578260076000600c848154811061313857613138613ebd565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806131a357508160086000600c848154811061317c5761317c613ebd565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156131c1575050600d5493676765c793fa10079d601b1b9350915050565b61320760076000600c84815481106131db576131db613ebd565b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906122dd565b925061324f60086000600c848154811061322357613223613ebd565b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906122dd565b91508061325b81613f00565b915050613116565b50600d5461327c90676765c793fa10079d601b1b61229b565b82101561329b575050600d5492676765c793fa10079d601b1b92509050565b90939092509050565b6000806000806132b385613a17565b905060006132c086613a33565b905060006132d282612dc589866122dd565b979296509094509092505050565b60008080806132ef8886613499565b905060006132fd8887613499565b9050600061330b8888613499565b9050600061331d82612dc586866122dd565b939b939a50919850919650505050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061336557613365613ebd565b6001600160a01b03928316602091820292909201810191909152602a54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156133b957600080fd5b505afa1580156133cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133f19190613f33565b8160018151811061340457613404613ebd565b6001600160a01b039283166020918202929092010152602a5461342a913091168461231f565b602a5460405163791ac94760e01b81526001600160a01b039091169063791ac94790613463908590600090869030904290600401613fca565b600060405180830381600087803b15801561347d57600080fd5b505af1158015613491573d6000803e3d6000fd5b505050505050565b6000826134a857506000610cc9565b60006134b48385613e7c565b9050826134c18583613e9b565b14610e275760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610c8d565b602a546135309030906001600160a01b03168461231f565b602a5460065460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c4016060604051808303818588803b15801561359b57600080fd5b505af11580156135af573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906135d49190614006565b5050505050565b6040805160028082526060820183526000926020830190803683375050602a54604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b15801561364057600080fd5b505afa158015613654573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136789190613f33565b8160008151811061368b5761368b613ebd565b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106136bf576136bf613ebd565b6001600160a01b039283166020918202929092010152602a541663b6f9de95836000847f000000000000000000000000000000000000000000000000000000000000000061370f4261012c612b25565b6040518663ffffffff1660e01b815260040161372e9493929190614034565b6000604051808303818588803b15801561374757600080fd5b505af115801561375b573d6000803e3d6000fd5b50505050507f6fd378a9d8b7345c2e5b18229aaf1e39d32b177b501d0a0d26a0a858a23a96248282604051612c5a929190614069565b6000806000806000806137a387612b84565b6001600160a01b038f16600090815260086020526040902054959b509399509197509550935091506137d590886122dd565b6001600160a01b038a1660009081526008602090815260408083209390935560079052205461380490876122dd565b6001600160a01b03808b1660009081526007602052604080822093909355908a16815220546138339086612b25565b6001600160a01b03891660009081526007602052604090205561385581613a4f565b61385f8483613c14565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516138a491815260200190565b60405180910390a3505050505050505050565b6000806000806000806138c987612b84565b6001600160a01b038f16600090815260076020526040902054959b509399509197509550935091506138fb90876122dd565b6001600160a01b03808b16600090815260076020908152604080832094909455918b168152600890915220546139319084612b25565b6001600160a01b0389166000908152600860209081526040808320939093556007905220546138339086612b25565b60008060008060008061397287612b84565b6001600160a01b038f16600090815260086020526040902054959b509399509197509550935091506139a490886122dd565b6001600160a01b038a166000908152600860209081526040808320939093556007905220546138fb90876122dd565b6000806000806000806139e587612b84565b6001600160a01b038f16600090815260076020526040902054959b5093995091975095509350915061380490876122dd565b6000610cc96064612d466011548561349990919063ffffffff16565b6000610cc96064612d466013548561349990919063ffffffff16565b60016010541415613af057601354601754613a6a9083613e7c565b613a749190613e9b565b60206000828254613a859190613f1b565b9091555050601354601854613a9a9083613e7c565b613aa49190613e9b565b60226000828254613ab59190613f1b565b9091555050601354601554613aca9083613e7c565b613ad49190613e9b565b60216000828254613ae59190613f1b565b90915550613b8c9050565b60026010541415613b8c57601354601b54613b0b9083613e7c565b613b159190613e9b565b60206000828254613b269190613f1b565b9091555050601354601c54613b3b9083613e7c565b613b459190613e9b565b60226000828254613b569190613f1b565b9091555050601354601954613b6b9083613e7c565b613b759190613e9b565b60216000828254613b869190613f1b565b90915550505b6000613b96612b02565b90506000613ba48383613499565b30600090815260076020526040902054909150613bc19082612b25565b30600090815260076020908152604080832093909355600b9052205460ff1615610d3c5730600090815260086020526040902054613bff9084612b25565b30600090815260086020526040902055505050565b600d54613c2190836122dd565b600d55600e54613c319082612b25565b600e555050565b600060208083528351808285015260005b81811015613c6557858101830151858201604001528201613c49565b81811115613c77576000604083870101525b50601f01601f1916929092016040019392505050565b600060208284031215613c9f57600080fd5b5035919050565b6001600160a01b0381168114613cbb57600080fd5b50565b60008060408385031215613cd157600080fd5b8235613cdc81613ca6565b946020939093013593505050565b600060208284031215613cfc57600080fd5b8135610e2781613ca6565b600080600060608486031215613d1c57600080fd5b8335613d2781613ca6565b92506020840135613d3781613ca6565b929592945050506040919091013590565b8015158114613cbb57600080fd5b60008060408385031215613d6957600080fd5b823591506020830135613d7b81613d48565b809150509250929050565b60008060408385031215613d9957600080fd5b8235613da481613ca6565b91506020830135613d7b81613d48565b60008060408385031215613dc757600080fd5b8235613dd281613ca6565b91506020830135613d7b81613ca6565b60008060008060808587031215613df857600080fd5b5050823594602084013594506040840135936060013592509050565b600060208284031215613e2657600080fd5b8135610e2781613d48565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615613e9657613e96613e66565b500290565b600082613eb857634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b600082821015613ee557613ee5613e66565b500390565b634e487b7160e01b600052603160045260246000fd5b6000600019821415613f1457613f14613e66565b5060010190565b60008219821115613f2e57613f2e613e66565b500190565b600060208284031215613f4557600080fd5b8151610e2781613ca6565b600060208284031215613f6257600080fd5b5051919050565b600060208284031215613f7b57600080fd5b8151610e2781613d48565b600081518084526020808501945080840160005b83811015613fbf5781516001600160a01b031687529582019590820190600101613f9a565b509495945050505050565b85815284602082015260a060408201526000613fe960a0830186613f86565b6001600160a01b0394909416606083015250608001529392505050565b60008060006060848603121561401b57600080fd5b8351925060208401519150604084015190509250925092565b84815260806020820152600061404d6080830186613f86565b6001600160a01b03949094166040830152506060015292915050565b8281526040602082015260006140826040830184613f86565b94935050505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212203b8643e5878970e28c739b0235683b0401210ea32ee18da1bec36cd9ab11d3ad64736f6c634300080900334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572

Deployed Bytecode

0x6080604052600436106103dd5760003560e01c80637571336a116101fd578063a9059cbb11610118578063cab03471116100ab578063e653da081161007a578063e653da0814610bd7578063ea2f0b3714610bf7578063ee40166e14610c17578063efcc52de14610c2d578063f2fde38b14610c4357600080fd5b8063cab0347114610b45578063d00dc58914610b5b578063dc44b6a014610b7b578063dd62ed3e14610b9157600080fd5b8063c49b9a80116100e7578063c49b9a8014610ae3578063c5d2418914610b03578063c860795214610b19578063c8c8ebe414610b2f57600080fd5b8063a9059cbb14610a5c578063b62496f514610a7c578063bbc0c74214610aac578063c469b6dd14610acd57600080fd5b80638da5cb5b11610190578063a0263c891161015f578063a0263c89146109e7578063a073d37f14610a07578063a457c2d714610a1c578063a5ece94114610a3c57600080fd5b80638da5cb5b1461095b578063906e9dd01461097957806395d89b41146109995780639a7a23d6146109c757600080fd5b806388790a68116101cc57806388790a68146108d757806388f82020146108ed5780638c5a133d146109265780638d5f81e21461094657600080fd5b80637571336a146108475780637ad6c84d146108675780638366e79a1461088757806385ecfd28146108a757600080fd5b806339509351116102f85780635342acb41161028b578063602bc62b1161025a578063602bc62b146107c85780636690864e146107dd57806370a08231146107fd578063715018a61461081d578063751039fc1461083257600080fd5b80635342acb41461073c578063557ed1ba146107755780635881f3ef146107885780635bb988c9146107a857600080fd5b80634a62bb65116102c75780634a62bb65146106c15780634a74bb02146106db57806352390c02146106fc578063525fa81f1461071c57600080fd5b80633950935114610641578063437823ec146106615780634549b0391461068157806349bd5a5e146106a157600080fd5b80631da1db5e1161037057806327c8f8351161033f57806327c8f835146105b15780632d838119146105e5578063313ce567146106055780633685d4191461062157600080fd5b80631da1db5e146105455780631fc851bd14610565578063200a692d1461057b57806323b872dd1461059157600080fd5b806313114a9d116103ac57806313114a9d146104b05780631694505e146104cf57806318160ddd146105075780631c75f0851461052557600080fd5b806306fdde03146103e9578063092316021461042e578063095ea7b31461045057806310d5de531461048057600080fd5b366103e457005b600080fd5b3480156103f557600080fd5b5060408051808201909152600a81526920b63834309021b7b4b760b11b60208201525b6040516104259190613c38565b60405180910390f35b34801561043a57600080fd5b5061044e610449366004613c8d565b610c63565b005b34801561045c57600080fd5b5061047061046b366004613cbe565b610cb8565b6040519015158152602001610425565b34801561048c57600080fd5b5061047061049b366004613cea565b60276020526000908152604090205460ff1681565b3480156104bc57600080fd5b50600e545b604051908152602001610425565b3480156104db57600080fd5b50602a546104ef906001600160a01b031681565b6040516001600160a01b039091168152602001610425565b34801561051357600080fd5b50676765c793fa10079d601b1b6104c1565b34801561053157600080fd5b506004546104ef906001600160a01b031681565b34801561055157600080fd5b5061044e610560366004613c8d565b610ccf565b34801561057157600080fd5b506104c1601f5481565b34801561058757600080fd5b506104c1601a5481565b34801561059d57600080fd5b506104706105ac366004613d07565b610d41565b3480156105bd57600080fd5b506104ef7f000000000000000000000000000000000000000000000000000000000000dead81565b3480156105f157600080fd5b506104c1610600366004613c8d565b610daa565b34801561061157600080fd5b5060405160128152602001610425565b34801561062d57600080fd5b5061044e61063c366004613cea565b610e2e565b34801561064d57600080fd5b5061047061065c366004613cbe565b610fe5565b34801561066d57600080fd5b5061044e61067c366004613cea565b61101b565b34801561068d57600080fd5b506104c161069c366004613d56565b6110a0565b3480156106ad57600080fd5b50602b546104ef906001600160a01b031681565b3480156106cd57600080fd5b50600f546104709060ff1681565b3480156106e757600080fd5b50602b5461047090600160a81b900460ff1681565b34801561070857600080fd5b5061044e610717366004613cea565b611136565b34801561072857600080fd5b5061044e610737366004613cea565b611324565b34801561074857600080fd5b50610470610757366004613cea565b6001600160a01b03166000908152600a602052604090205460ff1690565b34801561078157600080fd5b50426104c1565b34801561079457600080fd5b506104ef6107a3366004613cea565b61141a565b3480156107b457600080fd5b5061044e6107c3366004613cea565b6117f4565b3480156107d457600080fd5b506002546104c1565b3480156107e957600080fd5b5061044e6107f8366004613cea565b611867565b34801561080957600080fd5b506104c1610818366004613cea565b611952565b34801561082957600080fd5b5061044e6119b1565b34801561083e57600080fd5b50610470611a25565b34801561085357600080fd5b5061044e610862366004613d86565b611a6c565b34801561087357600080fd5b5061044e610882366004613c8d565b611ac1565b34801561089357600080fd5b506104706108a2366004613db4565b611b13565b3480156108b357600080fd5b506104706108c2366004613cea565b601e6020526000908152604090205460ff1681565b3480156108e357600080fd5b506104c1601b5481565b3480156108f957600080fd5b50610470610908366004613cea565b6001600160a01b03166000908152600b602052604090205460ff1690565b34801561093257600080fd5b5061044e610941366004613de2565b611ce0565b34801561095257600080fd5b506104ef611d6d565b34801561096757600080fd5b506000546001600160a01b03166104ef565b34801561098557600080fd5b5061044e610994366004613cea565b611da8565b3480156109a557600080fd5b50604080518082019091526005815264416c70686160d81b6020820152610418565b3480156109d357600080fd5b5061044e6109e2366004613d86565b611e9e565b3480156109f357600080fd5b5061044e610a02366004613e14565b611f56565b348015610a1357600080fd5b506029546104c1565b348015610a2857600080fd5b50610470610a37366004613cbe565b611f93565b348015610a4857600080fd5b506003546104ef906001600160a01b031681565b348015610a6857600080fd5b50610470610a77366004613cbe565b611fe2565b348015610a8857600080fd5b50610470610a97366004613cea565b60286020526000908152604090205460ff1681565b348015610ab857600080fd5b50602b5461047090600160b01b900460ff1681565b348015610ad957600080fd5b506104c160185481565b348015610aef57600080fd5b5061044e610afe366004613e14565b611fef565b348015610b0f57600080fd5b506104c160155481565b348015610b2557600080fd5b506104c160195481565b348015610b3b57600080fd5b506104c160265481565b348015610b5157600080fd5b506104c1601c5481565b348015610b6757600080fd5b5061044e610b76366004613c8d565b612066565b348015610b8757600080fd5b506104c160175481565b348015610b9d57600080fd5b506104c1610bac366004613db4565b6001600160a01b03918216600090815260096020908152604080832093909416825291909152205490565b348015610be357600080fd5b5061044e610bf2366004613de2565b6120b3565b348015610c0357600080fd5b5061044e610c12366004613cea565b612136565b348015610c2357600080fd5b506104c1601d5481565b348015610c3957600080fd5b506104c160165481565b348015610c4f57600080fd5b5061044e610c5e366004613cea565b6121b1565b6000546001600160a01b03163314610c965760405162461bcd60e51b8152600401610c8d90613e31565b60405180910390fd5b604b811015610ca457600080fd5b610cb281633b9aca00613e7c565b60245550565b6000610cc533848461231f565b5060015b92915050565b6000546001600160a01b03163314610cf95760405162461bcd60e51b8152600401610c8d90613e31565b47336108fc6064610d0a8585613e7c565b610d149190613e9b565b6040518115909202916000818181858888f19350505050158015610d3c573d6000803e3d6000fd5b505050565b6000610d4e848484612443565b610da08433610d9b8560405180606001604052806028815260200161408b602891396001600160a01b038a1660009081526009602090815260408083203384529091529020549190612ac8565b61231f565b5060019392505050565b6000600d54821115610e115760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610c8d565b6000610e1b612b02565b9050610e27838261229b565b9392505050565b6000546001600160a01b03163314610e585760405162461bcd60e51b8152600401610c8d90613e31565b6001600160a01b0381166000908152600b602052604090205460ff16610ec05760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610c8d565b60005b600c54811015610fe157816001600160a01b0316600c8281548110610eea57610eea613ebd565b6000918252602090912001546001600160a01b03161415610fcf57600c8054610f1590600190613ed3565b81548110610f2557610f25613ebd565b600091825260209091200154600c80546001600160a01b039092169183908110610f5157610f51613ebd565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600882526040808220829055600b90925220805460ff19169055600c805480610fa957610fa9613eea565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610fd981613f00565b915050610ec3565b5050565b3360008181526009602090815260408083206001600160a01b03871684529091528120549091610cc5918590610d9b9086612b25565b6000546001600160a01b031633146110455760405162461bcd60e51b8152600401610c8d90613e31565b6001600160a01b0381166000818152600a6020908152604091829020805460ff1916600117905590519182527f58c3e0504c69d3a92726966f152a771e0f8f6ad4daca1ae9055a38aba1fd2b6291015b60405180910390a150565b6000676765c793fa10079d601b1b8311156110fd5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610c8d565b8161111c57600061110d84612b84565b50939550610cc9945050505050565b600061112784612b84565b50929550610cc9945050505050565b6000546001600160a01b031633146111605760405162461bcd60e51b8152600401610c8d90613e31565b6001600160a01b0381166000908152600b602052604090205460ff16156111c95760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610c8d565b600c546032906111da906001613f1b565b11156112645760405162461bcd60e51b815260206004820152604d60248201527f43616e6e6f74206578636c756465206d6f7265207468616e203530206163636f60448201527f756e74732e2020496e636c75646520612070726576696f75736c79206578636c60648201526c3ab232b21030b2323932b9b99760991b608482015260a401610c8d565b6001600160a01b038116600090815260076020526040902054156112be576001600160a01b0381166000908152600760205260409020546112a490610daa565b6001600160a01b0382166000908152600860205260409020555b6001600160a01b03166000818152600b60205260408120805460ff19166001908117909155600c805491820181559091527fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c70180546001600160a01b0319169091179055565b6000546001600160a01b0316331461134e5760405162461bcd60e51b8152600401610c8d90613e31565b6001600160a01b0381166113b25760405162461bcd60e51b815260206004820152602560248201527f5f6c69717569646974794164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610c8d565b600680546001600160a01b0319166001600160a01b0383169081179091556000818152600a6020908152604091829020805460ff1916600117905590519182527f217742673c85d2f459a37c99960c860122cdadf529374b41418d2718cae7726f9101611095565b600080546001600160a01b031633146114455760405162461bcd60e51b8152600401610c8d90613e31565b6001600160a01b03821661149b5760405162461bcd60e51b815260206004820152601b60248201527f5f726f7574657220616464726573732063616e6e6f74206265203000000000006044820152606401610c8d565b6000829050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156114d957600080fd5b505afa1580156114ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115119190613f33565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561155957600080fd5b505afa15801561156d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115919190613f33565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b1580156115d757600080fd5b505afa1580156115eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061160f9190613f33565b91506001600160a01b03821661179357806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561165857600080fd5b505afa15801561166c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116909190613f33565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156116d857600080fd5b505afa1580156116ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117109190613f33565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b15801561175857600080fd5b505af115801561176c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117909190613f33565b91505b602b80546001600160a01b038085166001600160a01b031992831617909255602a80548484169216919091179055604051908416907f66fc0187dfabf79860e1b18e6c175c92baf9ed88c8a01d0bfdb97d1f0450f7f790600090a250919050565b6000546001600160a01b0316331461181e5760405162461bcd60e51b8152600401610c8d90613e31565b6001600160a01b0381166000818152601e6020526040808220805460ff19169055517fccaa6e1cfd4cf9506fa856fdc8e0a00894b2621ece1d60ab36209873305944989190a250565b6000546001600160a01b031633146118915760405162461bcd60e51b8152600401610c8d90613e31565b6001600160a01b0381166118e75760405162461bcd60e51b815260206004820181905260248201527f5f7465616d4164647265737320616464726573732063616e6e6f7420626520306044820152606401610c8d565b600480546001600160a01b0319166001600160a01b0383811691821783556000918252600a6020908152604092839020805460ff1916600117905592549151911681527f17d8dfa8312c8aa744fab84e6f3d67f24e7553ac1ff2be20269f1220002137569101611095565b6001600160a01b0381166000908152600b602052604081205460ff161561198f57506001600160a01b031660009081526008602052604090205490565b6001600160a01b038216600090815260076020526040902054610cc990610daa565b6000546001600160a01b031633146119db5760405162461bcd60e51b8152600401610c8d90613e31565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600080546001600160a01b03163314611a505760405162461bcd60e51b8152600401610c8d90613e31565b50600f805460ff19908116909155602380549091169055600190565b6000546001600160a01b03163314611a965760405162461bcd60e51b8152600401610c8d90613e31565b6001600160a01b03919091166000908152602760205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611aeb5760405162461bcd60e51b8152600401610c8d90613e31565b612710611b0382676765c793fa10079d601b1b613e7c565b611b0d9190613e9b565b60295550565b600080546001600160a01b03163314611b3e5760405162461bcd60e51b8152600401610c8d90613e31565b6001600160a01b038316611b945760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610c8d565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a082319060240160206040518083038186803b158015611bd657600080fd5b505afa158015611bea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c0e9190613f50565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb90604401602060405180830381600087803b158015611c5c57600080fd5b505af1158015611c70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c949190613f69565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6000546001600160a01b03163314611d0a5760405162461bcd60e51b8152600401610c8d90613e31565b60168490556017839055601582905560188190556040805183815260208101859052908101859052606081018290527f7e09f732e3c0d29138378fac770c27e86c9881459c60b3218337780e2dd176cf906080015b60405180910390a150505050565b600080546001600160a01b03163314611d985760405162461bcd60e51b8152600401610c8d90613e31565b50602b546001600160a01b031690565b6000546001600160a01b03163314611dd25760405162461bcd60e51b8152600401610c8d90613e31565b6001600160a01b038116611e365760405162461bcd60e51b815260206004820152602560248201527f5f6d61726b6574696e674164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610c8d565b600380546001600160a01b0319166001600160a01b0383169081179091556000818152600a6020908152604091829020805460ff1916600117905590519182527fd1e7d6a3390dd5008bd1c57798817b9f806e4c417264e7d3d67e42e784dc24a99101611095565b6000546001600160a01b03163314611ec85760405162461bcd60e51b8152600401610c8d90613e31565b602b546001600160a01b0383811691161415611f4c5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610c8d565b610fe18282612bd3565b6000546001600160a01b03163314611f805760405162461bcd60e51b8152600401610c8d90613e31565b6023805460ff1916911515919091179055565b6000610cc53384610d9b856040518060600160405280602581526020016140b3602591393360009081526009602090815260408083206001600160a01b038d1684529091529020549190612ac8565b6000610cc5338484612443565b6000546001600160a01b031633146120195760405162461bcd60e51b8152600401610c8d90613e31565b602b8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061109590831515815260200190565b6000546001600160a01b031633146120905760405162461bcd60e51b8152600401610c8d90613e31565b620b71b08110156120a057600080fd5b6024546120ad9082613e7c565b60255550565b6000546001600160a01b031633146120dd5760405162461bcd60e51b8152600401610c8d90613e31565b601a849055601b8390556019829055601c8190556040805183815260208101859052908101859052606081018290527fc35b083cad11ee3ca1c82068780b9916789cac19799d2fb148fcab9e643d56f990608001611d5f565b6000546001600160a01b031633146121605760405162461bcd60e51b8152600401610c8d90613e31565b6001600160a01b0381166000818152600a6020908152604091829020805460ff1916905590519182527f4f6a6b6efe34ec6478021aa9fb7f6980e78ea3a10c74074a8ce49d5d3ebf1f7e9101611095565b6000546001600160a01b031633146121db5760405162461bcd60e51b8152600401610c8d90613e31565b6001600160a01b0381166122405760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c8d565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000610e2783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612c66565b6000610e2783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612ac8565b6001600160a01b0383166123815760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c8d565b6001600160a01b0382166123e25760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c8d565b6001600160a01b0383811660008181526009602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166124a75760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c8d565b6001600160a01b0382166125095760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c8d565b6000811161256b5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610c8d565b602b54600160b01b900460ff16612607576001600160a01b0383166000908152600a602052604090205460ff16806125bb57506001600160a01b0382166000908152600a602052604090205460ff165b6126075760405162461bcd60e51b815260206004820152601a60248201527f54726164696e67206973206e6f7420616374697665207965742e0000000000006044820152606401610c8d565b600f5460ff1615612843576000546001600160a01b0384811691161480159061263e57506000546001600160a01b03838116911614155b801561265257506001600160a01b03821615155b801561266957506001600160a01b03821661dead14155b801561267f5750602b54600160a01b900460ff16155b15612843576000546001600160a01b038481169116148015906126b05750602b546001600160a01b03838116911614155b80156126bd5750601d5443145b1561270c576001600160a01b0382166000818152601e6020526040808220805460ff19166001179055517fb90badc1cf1c52268f4fa9afb5276aebf640bcca3300cdfc9cf37db17daa13e29190a25b60235460ff16801561273657506001600160a01b03831660009081526028602052604090205460ff165b1561278d576024543a111561278d5760405162461bcd60e51b815260206004820152601860248201527f4761732070726963652065786365656473206c696d69742e00000000000000006044820152606401610c8d565b6001600160a01b03831660009081526028602052604090205460ff1680156127ce57506001600160a01b03821660009081526027602052604090205460ff16155b15612843576026548111156128435760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610c8d565b60006022546021546020546128589190613f1b565b6128629190613f1b565b9050600061286f30611952565b602954602b5491925082101590600160a01b900460ff1615801561289c5750602b54600160a81b900460ff165b80156128bd5750602b546000906128bb906001600160a01b0316611952565b115b80156128c95750600083115b80156128ee57506001600160a01b0385166000908152600a602052604090205460ff16155b801561291357506001600160a01b0386166000908152600a602052604090205460ff16155b801561293757506001600160a01b03851660009081526028602052604090205460ff165b80156129405750805b1561294d5761294d612c94565b6001600160a01b0386166000908152600a602052604090205460019060ff168061298f57506001600160a01b0386166000908152600a602052604090205460ff165b156129a1575060036010556000612ab3565b6001600160a01b03871660009081526028602052604090205460ff16156129fa576129ca612fac565b6016546011556018546015546017546129e39190613f1b565b6129ed9190613f1b565b6013556001601055612ab3565b6001600160a01b03861660009081526028602052604090205460ff1615612aa557612a23612fac565b601a54601155601c54601954601b54612a3c9190613f1b565b612a469190613f1b565b60135560026010556001600160a01b0387166000908152601e602052604090205460ff168015612a78575043601f5411155b15612aa057601154612a8b906002613e7c565b601155601354612a9c906002613e7c565b6013555b612ab3565b612aad612fac565b60036010555b612abf87878784612fda565b50505050505050565b60008184841115612aec5760405162461bcd60e51b8152600401610c8d9190613c38565b506000612af98486613ed3565b95945050505050565b6000806000612b0f613100565b9092509050612b1e828261229b565b9250505090565b600080612b328385613f1b565b905083811015610e275760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610c8d565b6000806000806000806000806000612b9b8a6132a4565b9250925092506000806000612bb98d8686612bb4612b02565b6132e0565b919f909e50909c50959a5093985091965092945050505050565b6001600160a01b0382166000908152602860205260409020805460ff1916821515179055612c018282611a6c565b8015612c1057612c1082611136565b80612c1e57612c1e82610e2e565b604080516001600160a01b038416815282151560208201527fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91015b60405180910390a15050565b60008183612c875760405162461bcd60e51b8152600401610c8d9190613c38565b506000612af98486613e9b565b602b805460ff60a01b1916600160a01b1790556000612cb230611952565b90506000612cd9602154612cd3602254602054612b2590919063ffffffff16565b90612b25565b90506000612cf3600260205461229b90919063ffffffff16565b90506000612d0184836122dd565b905047612d0d82613330565b6000612d1947836122dd565b90506000612d4c86612d4660046021546003612d359190613e7c565b612d3f9190613e9b565b8590613499565b9061229b565b90506000612d6d87612d466004602154612d669190613e9b565b8690613499565b90506000612d8e88612d466002602254612d879190613e9b565b8790613499565b90506000612daf89612d466002602254612da89190613e9b565b8890613499565b90506000612dcb84612dc5848187818c8c6122dd565b906122dd565b600060208190556021819055602281905560055460405192935090916001600160a01b039091169085908381818185875af1925050503d8060008114612e2d576040519150601f19603f3d011682016040523d82523d6000602084013e612e32565b606091505b50506003546040519192506001600160a01b0316908690600081818185875af1925050503d8060008114612e82576040519150601f19603f3d011682016040523d82523d6000602084013e612e87565b606091505b50506005546040519192506001600160a01b0316908490600081818185875af1925050503d8060008114612ed7576040519150601f19603f3d011682016040523d82523d6000602084013e612edc565b606091505b50506003546040519192506001600160a01b0316908790600081818185875af1925050503d8060008114612f2c576040519150601f19603f3d011682016040523d82523d6000602084013e612f31565b606091505b505080915050612f418a83613518565b604080518a8152602081018490529081018b90527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a14715612f9157612f91476135db565b5050602b805460ff60a01b1916905550505050505050505050565b601154158015612fbc5750601354155b15612fc357565b601180546012556013805460145560009182905555565b80612fe757612fe7612fac565b6001600160a01b0384166000908152600b602052604090205460ff16801561302857506001600160a01b0383166000908152600b602052604090205460ff16155b1561303d57613038848484613791565b6130e9565b6001600160a01b0384166000908152600b602052604090205460ff1615801561307e57506001600160a01b0383166000908152600b602052604090205460ff165b1561308e576130388484846138b7565b6001600160a01b0384166000908152600b602052604090205460ff1680156130ce57506001600160a01b0383166000908152600b602052604090205460ff165b156130de57613038848484613960565b6130e98484846139d3565b6130fa601254601155601454601355565b50505050565b600d546000908190676765c793fa10079d601b1b825b600c54811015613263578260076000600c848154811061313857613138613ebd565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806131a357508160086000600c848154811061317c5761317c613ebd565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156131c1575050600d5493676765c793fa10079d601b1b9350915050565b61320760076000600c84815481106131db576131db613ebd565b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906122dd565b925061324f60086000600c848154811061322357613223613ebd565b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906122dd565b91508061325b81613f00565b915050613116565b50600d5461327c90676765c793fa10079d601b1b61229b565b82101561329b575050600d5492676765c793fa10079d601b1b92509050565b90939092509050565b6000806000806132b385613a17565b905060006132c086613a33565b905060006132d282612dc589866122dd565b979296509094509092505050565b60008080806132ef8886613499565b905060006132fd8887613499565b9050600061330b8888613499565b9050600061331d82612dc586866122dd565b939b939a50919850919650505050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061336557613365613ebd565b6001600160a01b03928316602091820292909201810191909152602a54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156133b957600080fd5b505afa1580156133cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133f19190613f33565b8160018151811061340457613404613ebd565b6001600160a01b039283166020918202929092010152602a5461342a913091168461231f565b602a5460405163791ac94760e01b81526001600160a01b039091169063791ac94790613463908590600090869030904290600401613fca565b600060405180830381600087803b15801561347d57600080fd5b505af1158015613491573d6000803e3d6000fd5b505050505050565b6000826134a857506000610cc9565b60006134b48385613e7c565b9050826134c18583613e9b565b14610e275760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610c8d565b602a546135309030906001600160a01b03168461231f565b602a5460065460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c4016060604051808303818588803b15801561359b57600080fd5b505af11580156135af573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906135d49190614006565b5050505050565b6040805160028082526060820183526000926020830190803683375050602a54604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b15801561364057600080fd5b505afa158015613654573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136789190613f33565b8160008151811061368b5761368b613ebd565b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106136bf576136bf613ebd565b6001600160a01b039283166020918202929092010152602a541663b6f9de95836000847f000000000000000000000000000000000000000000000000000000000000dead61370f4261012c612b25565b6040518663ffffffff1660e01b815260040161372e9493929190614034565b6000604051808303818588803b15801561374757600080fd5b505af115801561375b573d6000803e3d6000fd5b50505050507f6fd378a9d8b7345c2e5b18229aaf1e39d32b177b501d0a0d26a0a858a23a96248282604051612c5a929190614069565b6000806000806000806137a387612b84565b6001600160a01b038f16600090815260086020526040902054959b509399509197509550935091506137d590886122dd565b6001600160a01b038a1660009081526008602090815260408083209390935560079052205461380490876122dd565b6001600160a01b03808b1660009081526007602052604080822093909355908a16815220546138339086612b25565b6001600160a01b03891660009081526007602052604090205561385581613a4f565b61385f8483613c14565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516138a491815260200190565b60405180910390a3505050505050505050565b6000806000806000806138c987612b84565b6001600160a01b038f16600090815260076020526040902054959b509399509197509550935091506138fb90876122dd565b6001600160a01b03808b16600090815260076020908152604080832094909455918b168152600890915220546139319084612b25565b6001600160a01b0389166000908152600860209081526040808320939093556007905220546138339086612b25565b60008060008060008061397287612b84565b6001600160a01b038f16600090815260086020526040902054959b509399509197509550935091506139a490886122dd565b6001600160a01b038a166000908152600860209081526040808320939093556007905220546138fb90876122dd565b6000806000806000806139e587612b84565b6001600160a01b038f16600090815260076020526040902054959b5093995091975095509350915061380490876122dd565b6000610cc96064612d466011548561349990919063ffffffff16565b6000610cc96064612d466013548561349990919063ffffffff16565b60016010541415613af057601354601754613a6a9083613e7c565b613a749190613e9b565b60206000828254613a859190613f1b565b9091555050601354601854613a9a9083613e7c565b613aa49190613e9b565b60226000828254613ab59190613f1b565b9091555050601354601554613aca9083613e7c565b613ad49190613e9b565b60216000828254613ae59190613f1b565b90915550613b8c9050565b60026010541415613b8c57601354601b54613b0b9083613e7c565b613b159190613e9b565b60206000828254613b269190613f1b565b9091555050601354601c54613b3b9083613e7c565b613b459190613e9b565b60226000828254613b569190613f1b565b9091555050601354601954613b6b9083613e7c565b613b759190613e9b565b60216000828254613b869190613f1b565b90915550505b6000613b96612b02565b90506000613ba48383613499565b30600090815260076020526040902054909150613bc19082612b25565b30600090815260076020908152604080832093909355600b9052205460ff1615610d3c5730600090815260086020526040902054613bff9084612b25565b30600090815260086020526040902055505050565b600d54613c2190836122dd565b600d55600e54613c319082612b25565b600e555050565b600060208083528351808285015260005b81811015613c6557858101830151858201604001528201613c49565b81811115613c77576000604083870101525b50601f01601f1916929092016040019392505050565b600060208284031215613c9f57600080fd5b5035919050565b6001600160a01b0381168114613cbb57600080fd5b50565b60008060408385031215613cd157600080fd5b8235613cdc81613ca6565b946020939093013593505050565b600060208284031215613cfc57600080fd5b8135610e2781613ca6565b600080600060608486031215613d1c57600080fd5b8335613d2781613ca6565b92506020840135613d3781613ca6565b929592945050506040919091013590565b8015158114613cbb57600080fd5b60008060408385031215613d6957600080fd5b823591506020830135613d7b81613d48565b809150509250929050565b60008060408385031215613d9957600080fd5b8235613da481613ca6565b91506020830135613d7b81613d48565b60008060408385031215613dc757600080fd5b8235613dd281613ca6565b91506020830135613d7b81613ca6565b60008060008060808587031215613df857600080fd5b5050823594602084013594506040840135936060013592509050565b600060208284031215613e2657600080fd5b8135610e2781613d48565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615613e9657613e96613e66565b500290565b600082613eb857634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b600082821015613ee557613ee5613e66565b500390565b634e487b7160e01b600052603160045260246000fd5b6000600019821415613f1457613f14613e66565b5060010190565b60008219821115613f2e57613f2e613e66565b500190565b600060208284031215613f4557600080fd5b8151610e2781613ca6565b600060208284031215613f6257600080fd5b5051919050565b600060208284031215613f7b57600080fd5b8151610e2781613d48565b600081518084526020808501945080840160005b83811015613fbf5781516001600160a01b031687529582019590820190600101613f9a565b509495945050505050565b85815284602082015260a060408201526000613fe960a0830186613f86565b6001600160a01b0394909416606083015250608001529392505050565b60008060006060848603121561401b57600080fd5b8351925060208401519150604084015190509250925092565b84815260806020820152600061404d6080830186613f86565b6001600160a01b03949094166040830152506060015292915050565b8281526040602082015260006140826040830184613f86565b94935050505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212203b8643e5878970e28c739b0235683b0401210ea32ee18da1bec36cd9ab11d3ad64736f6c63430008090033

Deployed Bytecode Sourcemap

14186:28937:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19814:85;;;;;;;;;;-1:-1:-1;19886:5:0;;;;;;;;;;;;-1:-1:-1;;;19886:5:0;;;;19814:85;;;;;;;:::i;:::-;;;;;;;;23178:134;;;;;;;;;;-1:-1:-1;23178:134:0;;;;;:::i;:::-;;:::i;:::-;;20738:163;;;;;;;;;;-1:-1:-1;20738:163:0;;;;;:::i;:::-;;:::i;:::-;;;1422:14:1;;1415:22;1397:41;;1385:2;1370:18;20738:163:0;1257:187:1;16966:64:0;;;;;;;;;;-1:-1:-1;16966:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;22075:89;;;;;;;;;;-1:-1:-1;22146:10:0;;22075:89;;;1847:25:1;;;1835:2;1820:18;22075:89:0;1701:177:1;17338:41:0;;;;;;;;;;-1:-1:-1;17338:41:0;;;;-1:-1:-1;;;;;17338:41:0;;;;;;-1:-1:-1;;;;;2074:32:1;;;2056:51;;2044:2;2029:18;17338:41:0;1883:230:1;20097:97:0;;;;;;;;;;-1:-1:-1;;;;20097:97:0;;14411:88;;;;;;;;;;-1:-1:-1;14411:88:0;;;;-1:-1:-1;;;;;14411:88:0;;;21456:201;;;;;;;;;;-1:-1:-1;21456:201:0;;;;;:::i;:::-;;:::i;16517:33::-;;;;;;;;;;;;;;;;16266:30;;;;;;;;;;;;;;;;20909:312;;;;;;;;;;-1:-1:-1;20909:312:0;;;;;:::i;:::-;;:::i;14680:81::-;;;;;;;;;;;;;;;24155:253;;;;;;;;;;-1:-1:-1;24155:253:0;;;;;:::i;:::-;;:::i;20004:85::-;;;;;;;;;;-1:-1:-1;20004:85:0;;15485:2;3153:36:1;;3141:2;3126:18;20004:85:0;3011:184:1;24883:471:0;;;;;;;;;;-1:-1:-1;24883:471:0;;;;;:::i;:::-;;:::i;21229:218::-;;;;;;;;;;-1:-1:-1;21229:218:0;;;;;:::i;:::-;;:::i;39244:152::-;;;;;;;;;;-1:-1:-1;39244:152:0;;;;;:::i;:::-;;:::i;23698:449::-;;;;;;;;;;-1:-1:-1;23698:449:0;;;;;:::i;:::-;;:::i;17386:28::-;;;;;;;;;;-1:-1:-1;17386:28:0;;;;-1:-1:-1;;;;;17386:28:0;;;15298:34;;;;;;;;;;-1:-1:-1;15298:34:0;;;;;;;;17451:41;;;;;;;;;;-1:-1:-1;17451:41:0;;;;-1:-1:-1;;;17451:41:0;;;;;;24416:459;;;;;;;;;;-1:-1:-1;24416:459:0;;;;;:::i;:::-;;:::i;41171:343::-;;;;;;;;;;-1:-1:-1;41171:343:0;;;;;:::i;:::-;;:::i;39110:126::-;;;;;;;;;;-1:-1:-1;39110:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;39201:27:0;39177:4;39201:27;;;:18;:27;;;;;;;;;39110:126;6732:90;;;;;;;;;;-1:-1:-1;6799:15:0;6732:90;;41816:816;;;;;;;;;;-1:-1:-1;41816:816:0;;;;;:::i;:::-;;:::i;39565:148::-;;;;;;;;;;-1:-1:-1;39565:148:0;;;;;:::i;:::-;;:::i;6634:90::-;;;;;;;;;;-1:-1:-1;6707:9:0;;6634:90;;40862:297;;;;;;;;;;-1:-1:-1;40862:297:0;;;;;:::i;:::-;;:::i;20202:198::-;;;;;;;;;;-1:-1:-1;20202:198:0;;;;;:::i;:::-;;:::i;6185:150::-;;;;;;;;;;;;;:::i;23537:153::-;;;;;;;;;;;;;:::i;25366:144::-;;;;;;;;;;-1:-1:-1;25366:144:0;;;;;:::i;:::-;;:::i;22311:146::-;;;;;;;;;;-1:-1:-1;22311:146:0;;;;;:::i;:::-;;:::i;42735:381::-;;;;;;;;;;-1:-1:-1;42735:381:0;;;;;:::i;:::-;;:::i;16467:43::-;;;;;;;;;;-1:-1:-1;16467:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;16303:36;;;;;;;;;;;;;;;;21945:122;;;;;;;;;;-1:-1:-1;21945:122:0;;;;;:::i;:::-;-1:-1:-1;;;;;22039:20:0;22015:4;22039:20;;;:11;:20;;;;;;;;;21945:122;39721:375;;;;;;;;;;-1:-1:-1;39721:375:0;;;;;:::i;:::-;;:::i;41701:107::-;;;;;;;;;;;;;:::i;5971:79::-;;;;;;;;;;-1:-1:-1;6009:7:0;6036:6;-1:-1:-1;;;;;6036:6:0;5971:79;;40507:343;;;;;;;;;;-1:-1:-1;40507:343:0;;;;;:::i;:::-;;:::i;19907:89::-;;;;;;;;;;-1:-1:-1;19981:7:0;;;;;;;;;;;;-1:-1:-1;;;19981:7:0;;;;19907:89;;22469:244;;;;;;;;;;-1:-1:-1;22469:244:0;;;;;:::i;:::-;;:::i;23057:109::-;;;;;;;;;;-1:-1:-1;23057:109:0;;;;;:::i;:::-;;:::i;22177:122::-;;;;;;;;;;-1:-1:-1;22268:23:0;;22177:122;;21669:268;;;;;;;;;;-1:-1:-1;21669:268:0;;;;;:::i;:::-;;:::i;14307:93::-;;;;;;;;;;-1:-1:-1;14307:93:0;;;;-1:-1:-1;;;;;14307:93:0;;;20408:169;;;;;;;;;;-1:-1:-1;20408:169:0;;;;;:::i;:::-;;:::i;17192:58::-;;;;;;;;;;-1:-1:-1;17192:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;17499:33;;;;;;;;;;-1:-1:-1;17499:33:0;;;;-1:-1:-1;;;17499:33:0;;;;;;16117:30;;;;;;;;;;;;;;;;41522:171;;;;;;;;;;-1:-1:-1;41522:171:0;;;;;:::i;:::-;;:::i;15997:35::-;;;;;;;;;;;;;;;;16223:36;;;;;;;;;;;;;;;;16924:35;;;;;;;;;;;;;;;;16346:31;;;;;;;;;;;;;;;;23324:141;;;;;;;;;;-1:-1:-1;23324:141:0;;;;;:::i;:::-;;:::i;16075:35::-;;;;;;;;;;;;;;;;20585:145;;;;;;;;;;-1:-1:-1;20585:145:0;;;;;:::i;:::-;-1:-1:-1;;;;;20695:18:0;;;20668:7;20695:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;20585:145;40104:393;;;;;;;;;;-1:-1:-1;40104:393:0;;;;;:::i;:::-;;:::i;39404:149::-;;;;;;;;;;-1:-1:-1;39404:149:0;;;;;:::i;:::-;;:::i;16390:37::-;;;;;;;;;;;;;;;;16039:29;;;;;;;;;;;;;;;;6343:283;;;;;;;;;;-1:-1:-1;6343:283:0;;;;;:::i;:::-;;:::i;23178:134::-;6098:6;;-1:-1:-1;;;;;6098:6:0;377:10;6098:22;6090:67;;;;-1:-1:-1;;;6090:67:0;;;;;;;:::i;:::-;;;;;;;;;23262:2:::1;23255:3;:9;;23247:18;;;::::0;::::1;;23292:12;:3:::0;23298:6:::1;23292:12;:::i;:::-;23276:13;:28:::0;-1:-1:-1;23178:134:0:o;20738:163::-;20815:4;20832:39;377:10;20855:7;20864:6;20832:8;:39::i;:::-;-1:-1:-1;20889:4:0;20738:163;;;;;:::o;21456:201::-;6098:6;;-1:-1:-1;;;;;6098:6:0;377:10;6098:22;6090:67;;;;-1:-1:-1;;;6090:67:0;;;;;;;:::i;:::-;21556:21:::1;21596:10;21588:61;21645:3;21617:25;21626:16:::0;21556:21;21617:25:::1;:::i;:::-;:31;;;;:::i;:::-;21588:61;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;21528:129;21456:201:::0;:::o;20909:312::-;21009:4;21026:36;21036:6;21044:9;21055:6;21026:9;:36::i;:::-;21073:118;21082:6;377:10;21102:88;21140:6;21102:88;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21102:19:0;;;;;;:11;:19;;;;;;;;377:10;21102:33;;;;;;;;;;:37;:88::i;:::-;21073:8;:118::i;:::-;-1:-1:-1;21209:4:0;20909:312;;;;;:::o;24155:253::-;24222:7;24261;;24250;:18;;24242:73;;;;-1:-1:-1;;;24242:73:0;;6143:2:1;24242:73:0;;;6125:21:1;6182:2;6162:18;;;6155:30;6221:34;6201:18;;;6194:62;-1:-1:-1;;;6272:18:1;;;6265:40;6322:19;;24242:73:0;5941:406:1;24242:73:0;24326:19;24348:10;:8;:10::i;:::-;24326:32;-1:-1:-1;24376:24:0;:7;24326:32;24376:11;:24::i;:::-;24369:31;24155:253;-1:-1:-1;;;24155:253:0:o;24883:471::-;6098:6;;-1:-1:-1;;;;;6098:6:0;377:10;6098:22;6090:67;;;;-1:-1:-1;;;6090:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24961:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;24953:56;;;::::0;-1:-1:-1;;;24953:56:0;;6554:2:1;24953:56:0::1;::::0;::::1;6536:21:1::0;6593:2;6573:18;;;6566:30;6632:25;6612:18;;;6605:53;6675:18;;24953:56:0::1;6352:347:1::0;24953:56:0::1;25025:9;25020:327;25044:9;:16:::0;25040:20;::::1;25020:327;;;25102:7;-1:-1:-1::0;;;;;25086:23:0::1;:9;25096:1;25086:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;25086:12:0::1;:23;25082:254;;;25145:9;25155:16:::0;;:20:::1;::::0;25174:1:::1;::::0;25155:20:::1;:::i;:::-;25145:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;25130:9:::1;:12:::0;;-1:-1:-1;;;;;25145:31:0;;::::1;::::0;25140:1;;25130:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;25130:46:0::1;-1:-1:-1::0;;;;;25130:46:0;;::::1;;::::0;;25195:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;25234:11:::1;:20:::0;;;;:28;;-1:-1:-1;;25234:28:0::1;::::0;;25281:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;25281:15:0;;;;;-1:-1:-1;;;;;;25281:15:0::1;::::0;;;;;25020:327:::1;24883:471:::0;:::o;25082:254::-:1;25062:3:::0;::::1;::::0;::::1;:::i;:::-;;;;25020:327;;;;24883:471:::0;:::o;21229:218::-;377:10;21319:4;21366:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;21366:34:0;;;;;;;;;;21319:4;;21336:81;;21358:7;;21366:50;;21405:10;21366:38;:50::i;39244:152::-;6098:6;;-1:-1:-1;;;;;6098:6:0;377:10;6098:22;6090:67;;;;-1:-1:-1;;;6090:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39315:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;:34;;-1:-1:-1;;39315:34:0::1;39345:4;39315:34;::::0;;39365:23;;2056:51:1;;;39365:23:0::1;::::0;2029:18:1;39365:23:0::1;;;;;;;;39244:152:::0;:::o;23698:449::-;23791:7;-1:-1:-1;;;23819:7:0;:18;;23811:62;;;;-1:-1:-1;;;23811:62:0;;7440:2:1;23811:62:0;;;7422:21:1;7479:2;7459:18;;;7452:30;7518:33;7498:18;;;7491:61;7569:18;;23811:62:0;7238:355:1;23811:62:0;23889:17;23884:256;;23924:15;23953:19;23964:7;23953:10;:19::i;:::-;-1:-1:-1;23923:49:0;;-1:-1:-1;23987:14:0;;-1:-1:-1;;;;;23987:14:0;23884:256;24037:23;24072:19;24083:7;24072:10;:19::i;:::-;-1:-1:-1;24034:57:0;;-1:-1:-1;24106:22:0;;-1:-1:-1;;;;;24106:22:0;24416:459;6098:6;;-1:-1:-1;;;;;6098:6:0;377:10;6098:22;6090:67;;;;-1:-1:-1;;;6090:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24497:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;24496:21;24488:61;;;::::0;-1:-1:-1;;;24488:61:0;;7800:2:1;24488:61:0::1;::::0;::::1;7782:21:1::0;7839:2;7819:18;;;7812:30;7878:29;7858:18;;;7851:57;7925:18;;24488:61:0::1;7598:351:1::0;24488:61:0::1;24568:9;:16:::0;24592:2:::1;::::0;24568:20:::1;::::0;24587:1:::1;24568:20;:::i;:::-;:26;;24560:116;;;::::0;-1:-1:-1;;;24560:116:0;;8289:2:1;24560:116:0::1;::::0;::::1;8271:21:1::0;8328:2;8308:18;;;8301:30;8367:34;8347:18;;;8340:62;8438:34;8418:18;;;8411:62;-1:-1:-1;;;8489:19:1;;;8482:44;8543:19;;24560:116:0::1;8087:481:1::0;24560:116:0::1;-1:-1:-1::0;;;;;24691:16:0;::::1;24710:1;24691:16:::0;;;:7:::1;:16;::::0;;;;;:20;24687:109:::1;;-1:-1:-1::0;;;;;24767:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;24747:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;24728:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;24687:109:::1;-1:-1:-1::0;;;;;24806:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;24806:27:0::1;24829:4;24806:27:::0;;::::1;::::0;;;24844:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;24844:23:0::1;::::0;;::::1;::::0;;24416:459::o;41171:343::-;6098:6;;-1:-1:-1;;;;;6098:6:0;377:10;6098:22;6090:67;;;;-1:-1:-1;;;6090:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;41265:31:0;::::1;41257:81;;;::::0;-1:-1:-1;;;41257:81:0;;8775:2:1;41257:81:0::1;::::0;::::1;8757:21:1::0;8814:2;8794:18;;;8787:30;8853:34;8833:18;;;8826:62;-1:-1:-1;;;8904:18:1;;;8897:35;8949:19;;41257:81:0::1;8573:401:1::0;41257:81:0::1;41349:16;:45:::0;;-1:-1:-1;;;;;;41349:45:0::1;-1:-1:-1::0;;;;;41349:45:0;::::1;::::0;;::::1;::::0;;;-1:-1:-1;41405:36:0;;;:18:::1;:36;::::0;;;;;;;;:43;;-1:-1:-1;;41405:43:0::1;-1:-1:-1::0;41405:43:0::1;::::0;;41464:42;;2056:51:1;;;41464:42:0::1;::::0;2029:18:1;41464:42:0::1;1883:230:1::0;41816:816:0;41890:13;6098:6;;-1:-1:-1;;;;;6098:6:0;377:10;6098:22;6090:67;;;;-1:-1:-1;;;6090:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;41924:21:0;::::1;41916:61;;;::::0;-1:-1:-1;;;41916:61:0;;9181:2:1;41916:61:0::1;::::0;::::1;9163:21:1::0;9220:2;9200:18;;;9193:30;9259:29;9239:18;;;9232:57;9306:18;;41916:61:0::1;8979:351:1::0;41916:61:0::1;41988:35;42045:7;41988:65;;42092:16;-1:-1:-1::0;;;;;42092:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;42074:53:0::1;;42150:4;42170:16;-1:-1:-1::0;;;;;42170:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42074:130;::::0;-1:-1:-1;;;;;;42074:130:0::1;::::0;;;;;;-1:-1:-1;;;;;9821:15:1;;;42074:130:0::1;::::0;::::1;9803:34:1::0;9873:15;;9853:18;;;9846:43;9738:18;;42074:130:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42066:138:::0;-1:-1:-1;;;;;;42219:19:0;::::1;42215:240;;42316:16;-1:-1:-1::0;;;;;42316:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;42298:56:0::1;;42381:4;42405:16;-1:-1:-1::0;;;;;42405:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42298:145;::::0;-1:-1:-1;;;;;;42298:145:0::1;::::0;;;;;;-1:-1:-1;;;;;9821:15:1;;;42298:145:0::1;::::0;::::1;9803:34:1::0;9873:15;;9853:18;;;9846:43;9738:18;;42298:145:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42290:153;;42215:240;42465:13;:21:::0;;-1:-1:-1;;;;;42465:21:0;;::::1;-1:-1:-1::0;;;;;;42465:21:0;;::::1;;::::0;;;42552:15:::1;:34:::0;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;42602:22:::1;::::0;;;::::1;::::0;::::1;::::0;42465:13:::1;::::0;42602:22:::1;41905:727;41816:816:::0;;;:::o;39565:148::-;6098:6;;-1:-1:-1;;;;;6098:6:0;377:10;6098:22;6090:67;;;;-1:-1:-1;;;6090:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39639:20:0;::::1;39662:5;39639:20:::0;;;:11:::1;:20;::::0;;;;;:28;;-1:-1:-1;;39639:28:0::1;::::0;;39683:22;::::1;::::0;39662:5;39683:22:::1;39565:148:::0;:::o;40862:297::-;6098:6;;-1:-1:-1;;;;;6098:6:0;377:10;6098:22;6090:67;;;;-1:-1:-1;;;6090:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;40946:26:0;::::1;40938:71;;;::::0;-1:-1:-1;;;40938:71:0;;10102:2:1;40938:71:0::1;::::0;::::1;10084:21:1::0;;;10121:18;;;10114:30;10180:34;10160:18;;;10153:62;10232:18;;40938:71:0::1;9900:356:1::0;40938:71:0::1;41020:11;:35:::0;;-1:-1:-1;;;;;;41020:35:0::1;-1:-1:-1::0;;;;;41020:35:0;;::::1;::::0;;::::1;::::0;;-1:-1:-1;41066:31:0;;;:18:::1;:31;::::0;;;;;;;;:38;;-1:-1:-1;;41066:38:0::1;-1:-1:-1::0;41066:38:0::1;::::0;;41139:11;;41120:31;;41139:11;::::1;2056:51:1::0;;41120:31:0::1;::::0;2029:18:1;41120:31:0::1;1883:230:1::0;20202:198:0;-1:-1:-1;;;;;20292:20:0;;20268:7;20292:20;;;:11;:20;;;;;;;;20288:49;;;-1:-1:-1;;;;;;20321:16:0;;;;;:7;:16;;;;;;;20202:198::o;20288:49::-;-1:-1:-1;;;;;20375:16:0;;;;;;:7;:16;;;;;;20355:37;;:19;:37::i;6185:150::-;6098:6;;-1:-1:-1;;;;;6098:6:0;377:10;6098:22;6090:67;;;;-1:-1:-1;;;6090:67:0;;;;;;;:::i;:::-;6294:1:::1;6278:6:::0;;6257:40:::1;::::0;-1:-1:-1;;;;;6278:6:0;;::::1;::::0;6257:40:::1;::::0;6294:1;;6257:40:::1;6325:1;6308:19:::0;;-1:-1:-1;;;;;;6308:19:0::1;::::0;;6185:150::o;23537:153::-;23589:4;6098:6;;-1:-1:-1;;;;;6098:6:0;377:10;6098:22;6090:67;;;;-1:-1:-1;;;6090:67:0;;;;;;;:::i;:::-;-1:-1:-1;23605:14:0::1;:22:::0;;-1:-1:-1;;23605:22:0;;::::1;::::0;;;23638:14:::1;:22:::0;;;;::::1;::::0;;23605;23537:153;:::o;25366:144::-;6098:6;;-1:-1:-1;;;;;6098:6:0;377:10;6098:22;6090:67;;;;-1:-1:-1;;;6090:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25456:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;25456:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25366:144::o;22311:146::-;6098:6;;-1:-1:-1;;;;;6098:6:0;377:10;6098:22;6090:67;;;;-1:-1:-1;;;6090:67:0;;;;;;;:::i;:::-;22444:5:::1;22426:15;22436:5:::0;-1:-1:-1;;;22426:15:0::1;:::i;:::-;:23;;;;:::i;:::-;22400;:49:::0;-1:-1:-1;22311:146:0:o;42735:381::-;42822:10;6098:6;;-1:-1:-1;;;;;6098:6:0;377:10;6098:22;6090:67;;;;-1:-1:-1;;;6090:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;42853:20:0;::::1;42845:59;;;::::0;-1:-1:-1;;;42845:59:0;;10679:2:1;42845:59:0::1;::::0;::::1;10661:21:1::0;10718:2;10698:18;;;10691:30;10757:28;10737:18;;;10730:56;10803:18;;42845:59:0::1;10477:350:1::0;42845:59:0::1;42942:39;::::0;-1:-1:-1;;;42942:39:0;;42975:4:::1;42942:39;::::0;::::1;2056:51:1::0;42915:24:0::1;::::0;-1:-1:-1;;;;;42942:24:0;::::1;::::0;::::1;::::0;2029:18:1;;42942:39:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43000:46;::::0;-1:-1:-1;;;43000:46:0;;-1:-1:-1;;;;;11213:32:1;;;43000:46:0::1;::::0;::::1;11195:51:1::0;11262:18;;;11255:34;;;42915:66:0;;-1:-1:-1;43000:23:0;;::::1;::::0;::::1;::::0;11168:18:1;;43000:46:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43062;::::0;;-1:-1:-1;;;;;11213:32:1;;11195:51;;11277:2;11262:18;;11255:34;;;42992:54:0;;-1:-1:-1;43062:46:0::1;::::0;11168:18:1;43062:46:0::1;;;;;;;42834:282;42735:381:::0;;;;:::o;39721:375::-;6098:6;;-1:-1:-1;;;;;6098:6:0;377:10;6098:22;6090:67;;;;-1:-1:-1;;;6090:67:0;;;;;;;:::i;:::-;39859:10:::1;:22:::0;;;39892:16:::1;:34:::0;;;39937:16:::1;:34:::0;;;39982:11:::1;:24:::0;;;40022:66:::1;::::0;;11781:25:1;;;11837:2;11822:18;;11815:34;;;11865:18;;;11858:34;;;11923:2;11908:18;;11901:34;;;40022:66:0::1;::::0;11768:3:1;11753:19;40022:66:0::1;;;;;;;;39721:375:::0;;;;:::o;41701:107::-;41760:7;6098:6;;-1:-1:-1;;;;;6098:6:0;377:10;6098:22;6090:67;;;;-1:-1:-1;;;6090:67:0;;;;;;;:::i;:::-;-1:-1:-1;41787:13:0::1;::::0;-1:-1:-1;;;;;41787:13:0::1;41701:107:::0;:::o;40507:343::-;6098:6;;-1:-1:-1;;;;;6098:6:0;377:10;6098:22;6090:67;;;;-1:-1:-1;;;6090:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;40601:31:0;::::1;40593:81;;;::::0;-1:-1:-1;;;40593:81:0;;12148:2:1;40593:81:0::1;::::0;::::1;12130:21:1::0;12187:2;12167:18;;;12160:30;12226:34;12206:18;;;12199:62;-1:-1:-1;;;12277:18:1;;;12270:35;12322:19;;40593:81:0::1;11946:401:1::0;40593:81:0::1;40685:16;:45:::0;;-1:-1:-1;;;;;;40685:45:0::1;-1:-1:-1::0;;;;;40685:45:0;::::1;::::0;;::::1;::::0;;;-1:-1:-1;40741:36:0;;;:18:::1;:36;::::0;;;;;;;;:43;;-1:-1:-1;;40741:43:0::1;-1:-1:-1::0;40741:43:0::1;::::0;;40800:42;;2056:51:1;;;40800:42:0::1;::::0;2029:18:1;40800:42:0::1;1883:230:1::0;22469:244:0;6098:6;;-1:-1:-1;;;;;6098:6:0;377:10;6098:22;6090:67;;;;-1:-1:-1;;;6090:67:0;;;;;;;:::i;:::-;22578:13:::1;::::0;-1:-1:-1;;;;;22570:21:0;;::::1;22578:13:::0;::::1;22570:21;;22562:91;;;::::0;-1:-1:-1;;;22562:91:0;;12554:2:1;22562:91:0::1;::::0;::::1;12536:21:1::0;12593:2;12573:18;;;12566:30;12632:34;12612:18;;;12605:62;12703:27;12683:18;;;12676:55;12748:19;;22562:91:0::1;12352:421:1::0;22562:91:0::1;22664:41;22693:4;22699:5;22664:28;:41::i;23057:109::-:0;6098:6;;-1:-1:-1;;;;;6098:6:0;377:10;6098:22;6090:67;;;;-1:-1:-1;;;6090:67:0;;;;;;;:::i;:::-;23134:14:::1;:24:::0;;-1:-1:-1;;23134:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;23057:109::o;21669:268::-;21764:4;21781:126;377:10;21803:7;21811:95;21850:15;21811:95;;;;;;;;;;;;;;;;;377:10;21811:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;21811:34:0;;;;;;;;;;;;:38;:95::i;20408:169::-;20488:4;20505:42;377:10;20529:9;20540:6;20505:9;:42::i;41522:171::-;6098:6;;-1:-1:-1;;;;;6098:6:0;377:10;6098:22;6090:67;;;;-1:-1:-1;;;6090:67:0;;;;;;;:::i;:::-;41599:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;41599:32:0::1;-1:-1:-1::0;;;;41599:32:0;;::::1;;::::0;;41647:38:::1;::::0;::::1;::::0;::::1;::::0;41623:8;1422:14:1;1415:22;1397:41;;1385:2;1370:18;;1257:187;23324:141:0;6098:6;;-1:-1:-1;;;;;6098:6:0;377:10;6098:22;6090:67;;;;-1:-1:-1;;;6090:67:0;;;;;;;:::i;:::-;23406:6:::1;23399:3;:13;;23391:22;;;::::0;::::1;;23444:13;::::0;23438:19:::1;::::0;:3;:19:::1;:::i;:::-;23424:11;:33:::0;-1:-1:-1;23324:141:0:o;40104:393::-;6098:6;;-1:-1:-1;;;;;6098:6:0;377:10;6098:22;6090:67;;;;-1:-1:-1;;;6090:67:0;;;;;;;:::i;:::-;40247:11:::1;:24:::0;;;40282:17:::1;:36:::0;;;40329:17:::1;:36:::0;;;40376:12:::1;:26:::0;;;40418:71:::1;::::0;;11781:25:1;;;11837:2;11822:18;;11815:34;;;11865:18;;;11858:34;;;11923:2;11908:18;;11901:34;;;40418:71:0::1;::::0;11768:3:1;11753:19;40418:71:0::1;11550:391:1::0;39404:149:0;6098:6;;-1:-1:-1;;;;;6098:6:0;377:10;6098:22;6090:67;;;;-1:-1:-1;;;6090:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39473:27:0;::::1;39503:5;39473:27:::0;;;:18:::1;:27;::::0;;;;;;;;:35;;-1:-1:-1;;39473:35:0::1;::::0;;39524:21;;2056:51:1;;;39524:21:0::1;::::0;2029:18:1;39524:21:0::1;1883:230:1::0;6343:283:0;6098:6;;-1:-1:-1;;;;;6098:6:0;377:10;6098:22;6090:67;;;;-1:-1:-1;;;6090:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6448:22:0;::::1;6426:110;;;::::0;-1:-1:-1;;;6426:110:0;;12980:2:1;6426:110:0::1;::::0;::::1;12962:21:1::0;13019:2;12999:18;;;12992:30;13058:34;13038:18;;;13031:62;-1:-1:-1;;;13109:18:1;;;13102:36;13155:19;;6426:110:0::1;12778:402:1::0;6426:110:0::1;6573:6;::::0;;6552:38:::1;::::0;-1:-1:-1;;;;;6552:38:0;;::::1;::::0;6573:6;::::1;::::0;6552:38:::1;::::0;::::1;6601:6;:17:::0;;-1:-1:-1;;;;;;6601:17:0::1;-1:-1:-1::0;;;;;6601:17:0;;;::::1;::::0;;;::::1;::::0;;6343:283::o;2136:132::-;2194:7;2221:39;2225:1;2228;2221:39;;;;;;;;;;;;;;;;;:3;:39::i;1538:136::-;1596:7;1623:43;1627:1;1630;1623:43;;;;;;;;;;;;;;;;;:3;:43::i;25519:337::-;-1:-1:-1;;;;;25612:19:0;;25604:68;;;;-1:-1:-1;;;25604:68:0;;13387:2:1;25604:68:0;;;13369:21:1;13426:2;13406:18;;;13399:30;13465:34;13445:18;;;13438:62;-1:-1:-1;;;13516:18:1;;;13509:34;13560:19;;25604:68:0;13185:400:1;25604:68:0;-1:-1:-1;;;;;25691:21:0;;25683:68;;;;-1:-1:-1;;;25683:68:0;;13792:2:1;25683:68:0;;;13774:21:1;13831:2;13811:18;;;13804:30;13870:34;13850:18;;;13843:62;-1:-1:-1;;;13921:18:1;;;13914:32;13963:19;;25683:68:0;13590:398:1;25683:68:0;-1:-1:-1;;;;;25764:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;25816:32;;1847:25:1;;;25816:32:0;;1820:18:1;25816:32:0;;;;;;;25519:337;;;:::o;25864:3351::-;-1:-1:-1;;;;;25952:18:0;;25944:68;;;;-1:-1:-1;;;25944:68:0;;14195:2:1;25944:68:0;;;14177:21:1;14234:2;14214:18;;;14207:30;14273:34;14253:18;;;14246:62;-1:-1:-1;;;14324:18:1;;;14317:35;14369:19;;25944:68:0;13993:401:1;25944:68:0;-1:-1:-1;;;;;26031:16:0;;26023:64;;;;-1:-1:-1;;;26023:64:0;;14601:2:1;26023:64:0;;;14583:21:1;14640:2;14620:18;;;14613:30;14679:34;14659:18;;;14652:62;-1:-1:-1;;;14730:18:1;;;14723:33;14773:19;;26023:64:0;14399:399:1;26023:64:0;26115:1;26106:6;:10;26098:64;;;;-1:-1:-1;;;26098:64:0;;15005:2:1;26098:64:0;;;14987:21:1;15044:2;15024:18;;;15017:30;15083:34;15063:18;;;15056:62;-1:-1:-1;;;15134:18:1;;;15127:39;15183:19;;26098:64:0;14803:405:1;26098:64:0;26187:13;;-1:-1:-1;;;26187:13:0;;;;26183:134;;-1:-1:-1;;;;;26224:24:0;;;;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;26252:22:0;;;;;;:18;:22;;;;;;;;26224:50;26216:89;;;;-1:-1:-1;;;26216:89:0;;15415:2:1;26216:89:0;;;15397:21:1;15454:2;15434:18;;;15427:30;15493:28;15473:18;;;15466:56;15539:18;;26216:89:0;15213:350:1;26216:89:0;26340:14;;;;26337:856;;;6009:7;6036:6;-1:-1:-1;;;;;26374:15:0;;;6036:6;;26374:15;;;;:32;;-1:-1:-1;6009:7:0;6036:6;-1:-1:-1;;;;;26393:13:0;;;6036:6;;26393:13;;26374:32;:52;;;;-1:-1:-1;;;;;;26410:16:0;;;;26374:52;:77;;;;-1:-1:-1;;;;;;26430:21:0;;26444:6;26430:21;;26374:77;:98;;;;-1:-1:-1;26456:16:0;;-1:-1:-1;;;26456:16:0;;;;26455:17;26374:98;26370:812;;;6009:7;6036:6;-1:-1:-1;;;;;26514:15:0;;;6036:6;;26514:15;;;;:38;;-1:-1:-1;26539:13:0;;-1:-1:-1;;;;;26533:19:0;;;26539:13;;26533:19;;26514:38;:76;;;;;26572:18;;26556:12;:34;26514:76;26511:189;;;-1:-1:-1;;;;;26615:15:0;;;;;;:11;:15;;;;;;:22;;-1:-1:-1;;26615:22:0;26633:4;26615:22;;;26665:15;;;26615;26665;26511:189;26740:14;;;;:49;;;;-1:-1:-1;;;;;;26758:31:0;;;;;;:25;:31;;;;;;;;26740:49;26736:163;;;26837:13;;26822:11;:28;;26814:65;;;;-1:-1:-1;;;26814:65:0;;15770:2:1;26814:65:0;;;15752:21:1;15809:2;15789:18;;;15782:30;15848:26;15828:18;;;15821:54;15892:18;;26814:65:0;15568:348:1;26814:65:0;-1:-1:-1;;;;;26955:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;26991:35:0;;;;;;:31;:35;;;;;;;;26990:36;26955:71;26951:216;;;27069:20;;27059:6;:30;;27051:96;;;;-1:-1:-1;;;27051:96:0;;16123:2:1;27051:96:0;;;16105:21:1;16162:2;16142:18;;;16135:30;16201:34;16181:18;;;16174:62;-1:-1:-1;;;16252:18:1;;;16245:51;16313:19;;27051:96:0;15921:417:1;27051:96:0;27213:25;27291:17;;27266:22;;27241;;:47;;;;:::i;:::-;:67;;;;:::i;:::-;27213:95;;27319:28;27350:24;27368:4;27350:9;:24::i;:::-;27440:23;;27510:16;;27319:55;;-1:-1:-1;27416:47:0;;;;-1:-1:-1;;;27510:16:0;;;;27509:17;:55;;;;-1:-1:-1;27543:21:0;;-1:-1:-1;;;27543:21:0;;;;27509:55;:100;;;;-1:-1:-1;27591:13:0;;27608:1;;27581:24;;-1:-1:-1;;;;;27591:13:0;27581:9;:24::i;:::-;:28;27509:100;:138;;;;;27646:1;27626:17;:21;27509:138;:178;;;;-1:-1:-1;;;;;;27665:22:0;;;;;;:18;:22;;;;;;;;27664:23;27509:178;:220;;;;-1:-1:-1;;;;;;27705:24:0;;;;;;:18;:24;;;;;;;;27704:25;27509:220;:266;;;;-1:-1:-1;;;;;;27746:29:0;;;;;;:25;:29;;;;;;;;27509:266;:306;;;;;27792:23;27509:306;27505:349;;;27832:10;:8;:10::i;:::-;-1:-1:-1;;;;;27987:24:0;;27866:12;27987:24;;;:18;:24;;;;;;27881:4;;27987:24;;;:50;;-1:-1:-1;;;;;;28015:22:0;;;;;;:18;:22;;;;;;;;27987:50;27983:1163;;;-1:-1:-1;15615:1:0;28084:15;:26;28064:5;27983:1163;;;-1:-1:-1;;;;;28167:31:0;;;;;;:25;:31;;;;;;;;28163:972;;;28219:14;:12;:14::i;:::-;28262:10;;28252:7;:20;28345:11;;28326:16;;28307;;:35;;28326:16;28307:35;:::i;:::-;:49;;;;:::i;:::-;28291:13;:65;15531:1;28375:15;:21;28163:972;;;-1:-1:-1;;;;;28457:29:0;;;;;;:25;:29;;;;;;;;28453:682;;;28507:14;:12;:14::i;:::-;28550:11;;28540:7;:21;28636:12;;28616:17;;28596;;:37;;28616:17;28596:37;:::i;:::-;:52;;;;:::i;:::-;28580:13;:68;15571:1;28667:15;:22;-1:-1:-1;;;;;28793:17:0;;-1:-1:-1;28793:17:0;;;:11;:17;;;;;;;;:56;;;;;28837:12;28815:18;;:34;;28793:56;28790:180;;;28883:7;;:11;;28893:1;28883:11;:::i;:::-;28873:7;:21;28933:13;;:17;;28949:1;28933:17;:::i;:::-;28917:13;:33;28790:180;28453:682;;;29060:14;:12;:14::i;:::-;15615:1;29093:15;:26;28453:682;29158:41;29173:4;29179:2;29183:6;29191:7;29158:14;:41::i;:::-;25933:3282;;;;25864:3351;;;:::o;1682:190::-;1768:7;1804:12;1796:6;;;;1788:29;;;;-1:-1:-1;;;1788:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1828:9:0;1840:5;1844:1;1840;:5;:::i;:::-;1828:17;1682:190;-1:-1:-1;;;;;1682:190:0:o;36755:164::-;36797:7;36818:15;36835;36854:19;:17;:19::i;:::-;36817:56;;-1:-1:-1;36817:56:0;-1:-1:-1;36891:20:0;36817:56;;36891:11;:20::i;:::-;36884:27;;;;36755:164;:::o;1351:179::-;1409:7;;1441:5;1445:1;1441;:5;:::i;:::-;1429:17;;1470:1;1465;:6;;1457:46;;;;-1:-1:-1;;;1457:46:0;;16545:2:1;1457:46:0;;;16527:21:1;16584:2;16564:18;;;16557:30;16623:29;16603:18;;;16596:57;16670:18;;1457:46:0;16343:351:1;35558:414:0;35617:7;35626;35635;35644;35653;35662;35683:23;35708:12;35722:18;35744:20;35756:7;35744:11;:20::i;:::-;35682:82;;;;;;35776:15;35793:23;35818:12;35834:50;35846:7;35855:4;35861:10;35873;:8;:10::i;:::-;35834:11;:50::i;:::-;35775:109;;;;-1:-1:-1;35775:109:0;;-1:-1:-1;35932:15:0;;-1:-1:-1;35948:4:0;;-1:-1:-1;35953:10:0;;-1:-1:-1;35558:414:0;;-1:-1:-1;;;;;35558:414:0:o;22721:324::-;-1:-1:-1;;;;;22804:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;22804:39:0;;;;;;;22854:38;22804:31;:39;22854:25;:38::i;:::-;22906:5;22903:35;;;22913:23;22931:4;22913:17;:23::i;:::-;22952:5;22948:34;;22959:21;22975:4;22959:15;:21::i;:::-;22997:40;;;-1:-1:-1;;;;;16885:32:1;;16867:51;;16961:14;;16954:22;16949:2;16934:18;;16927:50;22997:40:0;;16840:18:1;22997:40:0;;;;;;;;22721:324;;:::o;2276:276::-;2362:7;2397:12;2390:5;2382:28;;;;-1:-1:-1;;;2382:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2421:9:0;2433:5;2437:1;2433;:5;:::i;29223:2022::-;18840:16;:23;;-1:-1:-1;;;;18840:23:0;-1:-1:-1;;;18840:23:0;;;;29300:24:::1;29318:4;29300:9;:24::i;:::-;29274:50;;29343:25;29371:73;29421:22;;29371:45;29398:17;;29371:22;;:26;;:45;;;;:::i;:::-;:49:::0;::::1;:73::i;:::-;29343:101;;29514:26;29543:29;29570:1;29543:22;;:26;;:29;;;;:::i;:::-;29514:58:::0;-1:-1:-1;29583:29:0::1;29615:39;:15:::0;29514:58;29615:19:::1;:39::i;:::-;29583:71:::0;-1:-1:-1;29706:21:0::1;29740:42;29583:71:::0;29740:19:::1;:42::i;:::-;29804:21;29828:47;:21;29854:20:::0;29828:25:::1;:47::i;:::-;29804:71;;29896:26;29925:68;29975:17;29925:45;29968:1;29945:22;;29943:1;:24;;;;:::i;:::-;:26;;;;:::i;:::-;29925:13:::0;;:17:::1;:45::i;:::-;:49:::0;::::1;:68::i;:::-;29896:97;;30004:24;30031:66;30079:17;30031:43;30072:1;30049:22;;:24;;;;:::i;:::-;30031:13:::0;;:17:::1;:43::i;:66::-;30004:93;;30108:22;30133:61;30176:17;30133:38;30169:1;30151:17;;:19;;;;:::i;:::-;30133:13:::0;;:17:::1;:38::i;:61::-;30108:86;;30205:22;30230:61;30273:17;30230:38;30266:1;30248:17;;:19;;;;:::i;:::-;30230:13:::0;;:17:::1;:38::i;:61::-;30205:86:::0;-1:-1:-1;30312:26:0::1;30341:99;30423:16:::0;30341:77:::1;30205:86:::0;30341:77;30383:14;30341:77;:13;30359:18;30341:17:::1;:37::i;:::-;:41:::0;::::1;:57::i;:99::-;30478:1;30453:22;:26:::0;;;30490:22:::1;:26:::0;;;30527:17:::1;:21:::0;;;30595:12:::1;::::0;30587:53:::1;::::0;30312:128;;-1:-1:-1;30478:1:0;;-1:-1:-1;;;;;30595:12:0;;::::1;::::0;30621:14;;30478:1;30587:53;30478:1;30587:53;30621:14;30595:12;30587:53:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;30672:16:0::1;::::0;30664:59:::1;::::0;30569:71;;-1:-1:-1;;;;;;30672:16:0::1;::::0;30702;;30664:59:::1;::::0;;;30702:16;30672;30664:59:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;30755:12:0::1;::::0;30747:53:::1;::::0;30651:72;;-1:-1:-1;;;;;;30755:12:0::1;::::0;30781:14;;30747:53:::1;::::0;;;30781:14;30755:12;30747:53:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;30832:16:0::1;::::0;30824:61:::1;::::0;30734:66;;-1:-1:-1;;;;;;30832:16:0::1;::::0;30862:18;;30824:61:::1;::::0;;;30862:18;30832:16;30824:61:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30811:74;;;;;30916:52;30929:18;30949;30916:12;:52::i;:::-;30984:77;::::0;;17400:25:1;;;17456:2;17441:18;;17434:34;;;17484:18;;;17477:34;;;30984:77:0::1;::::0;17388:2:1;17373:18;30984:77:0::1;;;;;;;31146:21;:25:::0;31143:95:::1;;31187:39;31204:21;31187:16;:39::i;:::-;-1:-1:-1::0;;18868:16:0;:24;;-1:-1:-1;;;;18868:24:0;;;-1:-1:-1;;;;;;;;;;29223:2022:0:o;38734:235::-;38781:7;;:12;:34;;;;-1:-1:-1;38797:13:0;;:18;38781:34;38777:47;;;38734:235::o;38777:47::-;38854:7;;;38836:15;:25;38896:13;;;38872:21;:37;-1:-1:-1;38922:11:0;;;;38944:17;38734:235::o;32438:651::-;32551:7;32546:28;;32560:14;:12;:14::i;:::-;-1:-1:-1;;;;;32591:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;32615:22:0;;;;;;:11;:22;;;;;;;;32614:23;32591:46;32587:467;;;32654:48;32676:6;32684:9;32695:6;32654:21;:48::i;:::-;32587:467;;;-1:-1:-1;;;;;32725:19:0;;;;;;:11;:19;;;;;;;;32724:20;:46;;;;-1:-1:-1;;;;;;32748:22:0;;;;;;:11;:22;;;;;;;;32724:46;32720:334;;;32787:46;32807:6;32815:9;32826:6;32787:19;:46::i;32720:334::-;-1:-1:-1;;;;;32855:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;32878:22:0;;;;;;:11;:22;;;;;;;;32855:45;32851:203;;;32917:48;32939:6;32947:9;32958:6;32917:21;:48::i;32851:203::-;32998:44;33016:6;33024:9;33035:6;32998:17;:44::i;:::-;33066:15;39031;;39021:7;:25;39073:21;;39057:13;:37;38977:125;33066:15;32438:651;;;;:::o;36927:556::-;37025:7;;36978;;;;-1:-1:-1;;;36978:7:0;37079:289;37103:9;:16;37099:20;;37079:289;;;37169:7;37145;:21;37153:9;37163:1;37153:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;37153:12:0;37145:21;;;;;;;;;;;;;:31;;:66;;;37204:7;37180;:21;37188:9;37198:1;37188:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;37188:12:0;37180:21;;;;;;;;;;;;;:31;37145:66;37141:97;;;-1:-1:-1;;37221:7:0;;;-1:-1:-1;;;15186:14:0;-1:-1:-1;36927:556:0;-1:-1:-1;;36927:556:0:o;37141:97::-;37263:34;37275:7;:21;37283:9;37293:1;37283:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;37283:12:0;37275:21;;;;;;;;;;;;;37263:7;;:11;:34::i;:::-;37253:44;;37322:34;37334:7;:21;37342:9;37352:1;37342:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;37342:12:0;37334:21;;;;;;;;;;;;;37322:7;;:11;:34::i;:::-;37312:44;-1:-1:-1;37121:3:0;;;;:::i;:::-;;;;37079:289;;;-1:-1:-1;37392:7:0;;:20;;-1:-1:-1;;;37392:11:0;:20::i;:::-;37382:7;:30;37378:61;;;-1:-1:-1;;37422:7:0;;;-1:-1:-1;;;15186:14:0;-1:-1:-1;36927:556:0;-1:-1:-1;36927:556:0:o;37378:61::-;37458:7;;37467;;-1:-1:-1;36927:556:0;-1:-1:-1;36927:556:0:o;35980:330::-;36040:7;36049;36058;36078:12;36093:24;36109:7;36093:15;:24::i;:::-;36078:39;;36128:18;36149:30;36171:7;36149:21;:30::i;:::-;36128:51;-1:-1:-1;36190:23:0;36216:33;36128:51;36216:17;:7;36228:4;36216:11;:17::i;:33::-;36190:59;36285:4;;-1:-1:-1;36291:10:0;;-1:-1:-1;35980:330:0;;-1:-1:-1;;;35980:330:0:o;36318:429::-;36433:7;;;;36489:24;:7;36501:11;36489;:24::i;:::-;36471:42;-1:-1:-1;36524:12:0;36539:21;:4;36548:11;36539:8;:21::i;:::-;36524:36;-1:-1:-1;36571:18:0;36592:27;:10;36607:11;36592:14;:27::i;:::-;36571:48;-1:-1:-1;36630:23:0;36656:33;36571:48;36656:17;:7;36668:4;36656:11;:17::i;:33::-;36708:7;;;;-1:-1:-1;36734:4:0;;-1:-1:-1;36318:429:0;;-1:-1:-1;;;;;;;36318:429:0:o;31257:398::-;31350:16;;;31364:1;31350:16;;;;;;;;31326:21;;31350:16;;;;;;;;;;-1:-1:-1;31350:16:0;31326:40;;31395:4;31377;31382:1;31377:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;31377:23:0;;;:7;;;;;;;;;;:23;;;;31421:15;;:22;;;-1:-1:-1;;;31421:22:0;;;;:15;;;;;:20;;:22;;;;;31377:7;;31421:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31411:4;31416:1;31411:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;31411:32:0;;;:7;;;;;;;;;:32;31486:15;;31454:62;;31471:4;;31486:15;31504:11;31454:8;:62::i;:::-;31527:15;;:120;;-1:-1:-1;;;31527:120:0;;-1:-1:-1;;;;;31527:15:0;;;;:66;;:120;;31594:11;;31527:15;;31610:4;;31624;;31631:15;;31527:120;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31315:340;31257:398;:::o;1880:248::-;1938:7;1962:6;1958:47;;-1:-1:-1;1992:1:0;1985:8;;1958:47;2017:9;2029:5;2033:1;2029;:5;:::i;:::-;2017:17;-1:-1:-1;2062:1:0;2053:5;2057:1;2017:17;2053:5;:::i;:::-;:10;2045:56;;;;-1:-1:-1;;;2045:56:0;;18909:2:1;2045:56:0;;;18891:21:1;18948:2;18928:18;;;18921:30;18987:34;18967:18;;;18960:62;-1:-1:-1;;;19038:18:1;;;19031:31;19079:19;;2045:56:0;18707:397:1;32148:282:0;32261:15;;32229:62;;32246:4;;-1:-1:-1;;;;;32261:15:0;32279:11;32229:8;:62::i;:::-;32302:15;;32388:16;;32302:120;;-1:-1:-1;;;32302:120:0;;32362:4;32302:120;;;19458:34:1;19508:18;;;19501:34;;;32302:15:0;19551:18:1;;;19544:34;;;19594:18;;;19587:34;-1:-1:-1;;;;;32388:16:0;;;19637:19:1;;;19630:44;32406:15:0;19690:19:1;;;19683:35;32302:15:0;;;:31;;32342:9;;19392:19:1;;32302:120:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;32148:282;;:::o;31667:469::-;31812:16;;;31826:1;31812:16;;;;;;;;31788:21;;31812:16;;;;;;;;-1:-1:-1;;31849:15:0;;:22;;;-1:-1:-1;;;31849:22:0;;;;31788:40;;-1:-1:-1;;;;;;31849:15:0;;;;:20;;-1:-1:-1;31849:22:0;;;;;;;;;;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31839:4;31844:1;31839:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;31839:32:0;;;-1:-1:-1;;;;;31839:32:0;;;;;31900:4;31882;31887:1;31882:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;31882:23:0;;;:7;;;;;;;;;:23;31944:15;;;:66;32018:6;31944:15;32029:4;32034:11;32047:24;:15;32067:3;32047:19;:24::i;:::-;31944:128;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32098:30;32115:6;32123:4;32098:30;;;;;;;:::i;34190:563::-;34293:15;34310:23;34335:12;34349:23;34374:12;34388:18;34410:19;34421:7;34410:10;:19::i;:::-;-1:-1:-1;;;;;34458:15:0;;;;;;:7;:15;;;;;;34292:137;;-1:-1:-1;34292:137:0;;-1:-1:-1;34292:137:0;;-1:-1:-1;34292:137:0;-1:-1:-1;34292:137:0;-1:-1:-1;34292:137:0;-1:-1:-1;34458:28:0;;34478:7;34458:19;:28::i;:::-;-1:-1:-1;;;;;34440:15:0;;;;;;:7;:15;;;;;;;;:46;;;;34515:7;:15;;;;:28;;34535:7;34515:19;:28::i;:::-;-1:-1:-1;;;;;34497:15:0;;;;;;;:7;:15;;;;;;:46;;;;34575:18;;;;;;;:39;;34598:15;34575:22;:39::i;:::-;-1:-1:-1;;;;;34554:18:0;;;;;;:7;:18;;;;;:60;34625:26;34640:10;34625:14;:26::i;:::-;34662:23;34674:4;34680;34662:11;:23::i;:::-;34718:9;-1:-1:-1;;;;;34701:44:0;34710:6;-1:-1:-1;;;;;34701:44:0;;34729:15;34701:44;;;;1847:25:1;;1835:2;1820:18;;1701:177;34701:44:0;;;;;;;;34281:472;;;;;;34190:563;;;:::o;33607:575::-;33708:15;33725:23;33750:12;33764:23;33789:12;33803:18;33825:19;33836:7;33825:10;:19::i;:::-;-1:-1:-1;;;;;33873:15:0;;;;;;:7;:15;;;;;;33707:137;;-1:-1:-1;33707:137:0;;-1:-1:-1;33707:137:0;;-1:-1:-1;33707:137:0;-1:-1:-1;33707:137:0;-1:-1:-1;33707:137:0;-1:-1:-1;33873:28:0;;33707:137;33873:19;:28::i;:::-;-1:-1:-1;;;;;33855:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;33933:18;;;;;:7;:18;;;;;:39;;33956:15;33933:22;:39::i;:::-;-1:-1:-1;;;;;33912:18:0;;;;;;:7;:18;;;;;;;;:60;;;;34004:7;:18;;;;:39;;34027:15;34004:22;:39::i;34761:634::-;34864:15;34881:23;34906:12;34920:23;34945:12;34959:18;34981:19;34992:7;34981:10;:19::i;:::-;-1:-1:-1;;;;;35029:15:0;;;;;;:7;:15;;;;;;34863:137;;-1:-1:-1;34863:137:0;;-1:-1:-1;34863:137:0;;-1:-1:-1;34863:137:0;-1:-1:-1;34863:137:0;-1:-1:-1;34863:137:0;-1:-1:-1;35029:28:0;;35049:7;35029:19;:28::i;:::-;-1:-1:-1;;;;;35011:15:0;;;;;;:7;:15;;;;;;;;:46;;;;35086:7;:15;;;;:28;;35106:7;35086:19;:28::i;33097:502::-;33196:15;33213:23;33238:12;33252:23;33277:12;33291:18;33313:19;33324:7;33313:10;:19::i;:::-;-1:-1:-1;;;;;33361:15:0;;;;;;:7;:15;;;;;;33195:137;;-1:-1:-1;33195:137:0;;-1:-1:-1;33195:137:0;;-1:-1:-1;33195:137:0;-1:-1:-1;33195:137:0;-1:-1:-1;33195:137:0;-1:-1:-1;33361:28:0;;33195:137;33361:19;:28::i;38446:130::-;38510:7;38537:31;38562:5;38537:20;38549:7;;38537;:11;;:20;;;;:::i;38584:142::-;38654:7;38681:37;38712:5;38681:26;38693:13;;38681:7;:11;;:26;;;;:::i;37491:947::-;15531:1;37557:15;;:22;37554:582;;;37653:13;;37634:16;;37621:29;;:10;:29;:::i;:::-;:45;;;;:::i;:::-;37595:22;;:71;;;;;;;:::i;:::-;;;;-1:-1:-1;;37729:13:0;;37715:11;;37702:24;;:10;:24;:::i;:::-;:40;;;;:::i;:::-;37681:17;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;37815:13:0;;37796:16;;37783:29;;:10;:29;:::i;:::-;:45;;;;:::i;:::-;37757:22;;:71;;;;;;;:::i;:::-;;;;-1:-1:-1;37554:582:0;;-1:-1:-1;37554:582:0;;15571:1;37849:15;;:23;37846:290;;;37947:13;;37927:17;;37914:30;;:10;:30;:::i;:::-;:46;;;;:::i;:::-;37888:22;;:72;;;;;;;:::i;:::-;;;;-1:-1:-1;;38024:13:0;;38009:12;;37996:25;;:10;:25;:::i;:::-;:41;;;;:::i;:::-;37975:17;;:62;;;;;;;:::i;:::-;;;;-1:-1:-1;;38111:13:0;;38091:17;;38078:30;;:10;:30;:::i;:::-;:46;;;;:::i;:::-;38052:22;;:72;;;;;;;:::i;:::-;;;;-1:-1:-1;;37846:290:0;38146:19;38168:10;:8;:10::i;:::-;38146:32;-1:-1:-1;38189:18:0;38210:27;:10;38146:32;38210:14;:27::i;:::-;38289:4;38273:22;;;;:7;:22;;;;;;38189:48;;-1:-1:-1;38273:38:0;;38189:48;38273:26;:38::i;:::-;38264:4;38248:22;;;;:7;:22;;;;;;;;:63;;;;38326:11;:26;;;;;;38322:108;;;38408:4;38392:22;;;;:7;:22;;;;;;:38;;38419:10;38392:26;:38::i;:::-;38383:4;38367:22;;;;:7;:22;;;;;:63;37543:895;;37491:947;:::o;35403:147::-;35481:7;;:17;;35493:4;35481:11;:17::i;:::-;35471:7;:27;35522:10;;:20;;35537:4;35522:14;:20::i;:::-;35509:10;:33;-1:-1:-1;;35403:147: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;616:180::-;675:6;728:2;716:9;707:7;703:23;699:32;696:52;;;744:1;741;734:12;696:52;-1:-1:-1;767:23:1;;616:180;-1:-1:-1;616:180:1:o;801:131::-;-1:-1:-1;;;;;876:31:1;;866:42;;856:70;;922:1;919;912:12;856:70;801:131;:::o;937:315::-;1005:6;1013;1066:2;1054:9;1045:7;1041:23;1037:32;1034:52;;;1082:1;1079;1072:12;1034:52;1121:9;1108:23;1140:31;1165:5;1140:31;:::i;:::-;1190:5;1242:2;1227:18;;;;1214:32;;-1:-1:-1;;;937:315:1:o;1449:247::-;1508:6;1561:2;1549:9;1540:7;1536:23;1532:32;1529:52;;;1577:1;1574;1567:12;1529:52;1616:9;1603:23;1635:31;1660:5;1635:31;:::i;2342:456::-;2419:6;2427;2435;2488:2;2476:9;2467:7;2463:23;2459:32;2456:52;;;2504:1;2501;2494:12;2456:52;2543:9;2530:23;2562:31;2587:5;2562:31;:::i;:::-;2612:5;-1:-1:-1;2669:2:1;2654:18;;2641:32;2682:33;2641:32;2682:33;:::i;:::-;2342:456;;2734:7;;-1:-1:-1;;;2788:2:1;2773:18;;;;2760:32;;2342:456::o;3200:118::-;3286:5;3279:13;3272:21;3265:5;3262:32;3252:60;;3308:1;3305;3298:12;3323:309;3388:6;3396;3449:2;3437:9;3428:7;3424:23;3420:32;3417:52;;;3465:1;3462;3455:12;3417:52;3501:9;3488:23;3478:33;;3561:2;3550:9;3546:18;3533:32;3574:28;3596:5;3574:28;:::i;:::-;3621:5;3611:15;;;3323:309;;;;;:::o;3637:382::-;3702:6;3710;3763:2;3751:9;3742:7;3738:23;3734:32;3731:52;;;3779:1;3776;3769:12;3731:52;3818:9;3805:23;3837:31;3862:5;3837:31;:::i;:::-;3887:5;-1:-1:-1;3944:2:1;3929:18;;3916:32;3957:30;3916:32;3957:30;:::i;4024:388::-;4092:6;4100;4153:2;4141:9;4132:7;4128:23;4124:32;4121:52;;;4169:1;4166;4159:12;4121:52;4208:9;4195:23;4227:31;4252:5;4227:31;:::i;:::-;4277:5;-1:-1:-1;4334:2:1;4319:18;;4306:32;4347:33;4306:32;4347:33;:::i;4417:385::-;4503:6;4511;4519;4527;4580:3;4568:9;4559:7;4555:23;4551:33;4548:53;;;4597:1;4594;4587:12;4548:53;-1:-1:-1;;4620:23:1;;;4690:2;4675:18;;4662:32;;-1:-1:-1;4741:2:1;4726:18;;4713:32;;4792:2;4777:18;4764:32;;-1:-1:-1;4417:385:1;-1:-1:-1;4417:385:1:o;4807:241::-;4863:6;4916:2;4904:9;4895:7;4891:23;4887:32;4884:52;;;4932:1;4929;4922:12;4884:52;4971:9;4958:23;4990:28;5012:5;4990:28;:::i;5053:356::-;5255:2;5237:21;;;5274:18;;;5267:30;5333:34;5328:2;5313:18;;5306:62;5400:2;5385:18;;5053:356::o;5414:127::-;5475:10;5470:3;5466:20;5463:1;5456:31;5506:4;5503:1;5496:15;5530:4;5527:1;5520:15;5546:168;5586:7;5652:1;5648;5644:6;5640:14;5637:1;5634:21;5629:1;5622:9;5615:17;5611:45;5608:71;;;5659:18;;:::i;:::-;-1:-1:-1;5699:9:1;;5546:168::o;5719:217::-;5759:1;5785;5775:132;;5829:10;5824:3;5820:20;5817:1;5810:31;5864:4;5861:1;5854:15;5892:4;5889:1;5882:15;5775:132;-1:-1:-1;5921:9:1;;5719:217::o;6704:127::-;6765:10;6760:3;6756:20;6753:1;6746:31;6796:4;6793:1;6786:15;6820:4;6817:1;6810:15;6836:125;6876:4;6904:1;6901;6898:8;6895:34;;;6909:18;;:::i;:::-;-1:-1:-1;6946:9:1;;6836:125::o;6966:127::-;7027:10;7022:3;7018:20;7015:1;7008:31;7058:4;7055:1;7048:15;7082:4;7079:1;7072:15;7098:135;7137:3;-1:-1:-1;;7158:17:1;;7155:43;;;7178:18;;:::i;:::-;-1:-1:-1;7225:1:1;7214:13;;7098:135::o;7954:128::-;7994:3;8025:1;8021:6;8018:1;8015:13;8012:39;;;8031:18;;:::i;:::-;-1:-1:-1;8067:9:1;;7954:128::o;9335:251::-;9405:6;9458:2;9446:9;9437:7;9433:23;9429:32;9426:52;;;9474:1;9471;9464:12;9426:52;9506:9;9500:16;9525:31;9550:5;9525:31;:::i;10832:184::-;10902:6;10955:2;10943:9;10934:7;10930:23;10926:32;10923:52;;;10971:1;10968;10961:12;10923:52;-1:-1:-1;10994:16:1;;10832:184;-1:-1:-1;10832:184:1:o;11300:245::-;11367:6;11420:2;11408:9;11399:7;11395:23;11391:32;11388:52;;;11436:1;11433;11426:12;11388:52;11468:9;11462:16;11487:28;11509:5;11487:28;:::i;17654:461::-;17707:3;17745:5;17739:12;17772:6;17767:3;17760:19;17798:4;17827:2;17822:3;17818:12;17811:19;;17864:2;17857:5;17853:14;17885:1;17895:195;17909:6;17906:1;17903:13;17895:195;;;17974:13;;-1:-1:-1;;;;;17970:39:1;17958:52;;18030:12;;;;18065:15;;;;18006:1;17924:9;17895:195;;;-1:-1:-1;18106:3:1;;17654:461;-1:-1:-1;;;;;17654:461:1:o;18120:582::-;18419:6;18408:9;18401:25;18462:6;18457:2;18446:9;18442:18;18435:34;18505:3;18500:2;18489:9;18485:18;18478:31;18382:4;18526:57;18578:3;18567:9;18563:19;18555:6;18526:57;:::i;:::-;-1:-1:-1;;;;;18619:32:1;;;;18614:2;18599:18;;18592:60;-1:-1:-1;18683:3:1;18668:19;18661:35;18518:65;18120:582;-1:-1:-1;;;18120:582:1:o;19729:306::-;19817:6;19825;19833;19886:2;19874:9;19865:7;19861:23;19857:32;19854:52;;;19902:1;19899;19892:12;19854:52;19931:9;19925:16;19915:26;;19981:2;19970:9;19966:18;19960:25;19950:35;;20025:2;20014:9;20010:18;20004:25;19994:35;;19729:306;;;;;:::o;20040:510::-;20311:6;20300:9;20293:25;20354:3;20349:2;20338:9;20334:18;20327:31;20274:4;20375:57;20427:3;20416:9;20412:19;20404:6;20375:57;:::i;:::-;-1:-1:-1;;;;;20468:32:1;;;;20463:2;20448:18;;20441:60;-1:-1:-1;20532:2:1;20517:18;20510:34;20367:65;20040:510;-1:-1:-1;;20040:510:1:o;20555:332::-;20762:6;20751:9;20744:25;20805:2;20800;20789:9;20785:18;20778:30;20725:4;20825:56;20877:2;20866:9;20862:18;20854:6;20825:56;:::i;:::-;20817:64;20555:332;-1:-1:-1;;;;20555:332:1:o

Swarm Source

ipfs://3b8643e5878970e28c739b0235683b0401210ea32ee18da1bec36cd9ab11d3ad
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.