ETH Price: $3,277.61 (+0.38%)
Gas: 16 Gwei

Token

HarryFinkSourPatchPrinter69Inu (SAFEMOON)
 

Overview

Max Total Supply

1,000,000,000,000 SAFEMOON

Holders

57

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
9,011,800.582109762 SAFEMOON

Value
$0.00
0xede342596ebb2e957ba3f6d75af8a8f19843f2bb
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:
HarryFinkSourPatchPrinter69Inu

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-11-09
*/

/**
HarryFinkSourPatchPrinter69Inu in honor of $SAFEMOON. 2/2 to reflections for HODLERS. TEH right way TEH Safemoon way.

Website: www.hfspp69inu.com/
Telegram: t.me/HFSPP69I (http://t.me/HFSPP69I)
Twitter: twitter.com/HFSPP69I
*/

// SPDX-License-Identifier: NOLICENSE
pragma solidity ^0.8.20;

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

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

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

abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        _setOwner(_msgSender());
    }

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

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

    function renounceOwnership() public virtual onlyOwner {
        _setOwner(address(0));
    }

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

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

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

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

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

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

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }
}


contract HarryFinkSourPatchPrinter69Inu is Context, IERC20, Ownable {
    using Address for address payable;
    
    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private _isExcluded;
    mapping (address => bool) public allowedTransfer;
    mapping (address => bool) isTimelockExempt;

    address[] private _excluded;
    bool public swapEnabled;
    bool private swapping;
    

    IRouter public router;
    address public pair;

    uint8 private constant _decimals = 9;
    uint256 private constant MAX = ~uint256(0);

    uint256 private _tTotal = 1_000_000_000_000 * 10**_decimals;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));

    uint256 public swapTokensAtAmount = 20_000_000_000 * 10**9;
    uint256 public maxBuyLimit = 20_000_000_000 * 10**9;
    uint256 public maxSellLimit = 20_000_000_000 * 10**9;
    uint256 public maxWalletLimit = 20_000_000_000 * 10**9;

    bool public tradingOpen = false;
    uint256 launchBlock;
    
    address public MarketingWallet = 0xEb93Ecc2938a3A3Ab45D0bf7ea08022D01aD067d;
    address public TeamWallet = 0xEb93Ecc2938a3A3Ab45D0bf7ea08022D01aD067d;
    address public DevelopmentWallet = 0xAa6De51B55b700aD8C38a2c8779a3b66db500281;

    string private constant _name = "HarryFinkSourPatchPrinter69Inu";
    string private constant _symbol = "SAFEMOON";

    struct Taxes {
        uint256 Reflections;
        uint256 Marketing;
        uint256 Liquidity; 
        uint256 Team;
        uint256 Development;
    }

    Taxes public buyTaxes = Taxes(0, 30, 0, 0, 0);
    Taxes public sellTaxes = Taxes(0, 45, 0, 0, 0);

    struct TotFeesPaidStruct{
        uint256 Reflections;
        uint256 Marketing;
        uint256 Liquidity; 
        uint256 Team;
        uint256 Development;
    }
    
    TotFeesPaidStruct public totFeesPaid;

    struct valuesFromGetValues{
      uint256 rAmount;
      uint256 rTransferAmount;
      uint256 rReflections;
      uint256 rMarketing;
      uint256 rLiquidity;
      uint256 rTeam;
      uint256 rDevelopment;
      uint256 tAmount;
      uint256 tTransferAmount;
      uint256 tReflections;
      uint256 tMarketing;
      uint256 tLiquidity;
      uint256 tTeam;
      uint256 tDevelopment;
    }

    event FeesChanged();
    event UpdatedRouter(address oldRouter, address newRouter);

    modifier lockTheSwap {
        swapping = true;
        _;
        swapping = false;
    }

    constructor (address routerAddress) {
        IRouter _router = IRouter(routerAddress);
        address _pair = IFactory(_router.factory())
            .createPair(address(this), _router.WETH());

        router = _router;
        pair = _pair;
        
        excludeFromReward(pair);

        _tOwned[owner()] = _tTotal;
        _isExcluded[address(this)] = true;
        _isExcluded[owner()] = true;
        _isExcluded[MarketingWallet] = true;
        _isExcluded[TeamWallet] = true;
        _isExcluded[DevelopmentWallet] = true;

        _rOwned[owner()] = _rTotal;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[MarketingWallet] = true;
        _isExcludedFromFee[TeamWallet] = true;
        _isExcludedFromFee[DevelopmentWallet] = true;
        
        allowedTransfer[address(this)] = true;
        allowedTransfer[owner()] = true;
        allowedTransfer[pair] = true;
        allowedTransfer[MarketingWallet] = true;
        allowedTransfer[TeamWallet] = true;
        allowedTransfer[DevelopmentWallet] = true;

        isTimelockExempt[address(this)] = true;
        isTimelockExempt[pair] = true;
        isTimelockExempt[owner()] = true;

        emit Transfer(address(0), owner(), _tTotal);
    }

    //std ERC20:
    function name() public pure returns (string memory) {
        return _name;
    }
    function symbol() public pure returns (string memory) {
        return _symbol;
    }
    function decimals() public pure returns (uint8) {
        return _decimals;
    }

    //override ERC20:
    function totalSupply() public view override returns (uint256) {
        return _tTotal;
    }

    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromReflection(_rOwned[account]);
    }
    
    function allowance(address holder, address spender) external view override returns (uint256) { 
        return _allowances[holder][spender]; }

    function approve(address spender, uint256 amount) public  override  returns(bool) {
        _allowances[msg.sender][spender] = amount;
        _approve(_msgSender(), spender, amount);
        return true;
    }

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

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

        return true;
    }

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

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

        return true;
    }
    
    function transfer(address recipient, uint256 amount) public override returns (bool)
    { 
      _transfer(msg.sender, recipient, amount);
      return true;
    }

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

    function reflectionFromToken(uint256 tAmount, bool deductTransferReflections) public view returns(uint256) {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferReflections) {
            valuesFromGetValues memory s = _getValues(tAmount, true, false);
            return s.rAmount;
        } else {
            valuesFromGetValues memory s = _getValues(tAmount, true, false);
            return s.rTransferAmount;
        }
    }

    function launchtime() public onlyOwner {
        tradingOpen = true;
        launchBlock = block.number;
        swapEnabled = true;

    }

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

    //@Team kept original Reflections naming -> "reward" as in reflection
    function excludeFromReward(address account) public onlyOwner() {
        require(!_isExcluded[account], "Account is already excluded");
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeInReward(address account) external onlyOwner() {
        require(_isExcluded[account], "Account is not excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }


    function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }

    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }


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

    function setIsTimelockExempt(address holder, bool exempt) external onlyOwner {
        isTimelockExempt[holder] = exempt;
    }

    function setBuyTaxes(uint256 _Reflections, uint256 _Marketing, uint256 _Liquidity, uint256 _Team, uint256 _Development) public onlyOwner {
       require(_Reflections+(_Marketing)+(_Liquidity)+(_Team)+(_Development) <=25, "Buy Taxes cannot be higher than 25%");
       buyTaxes = Taxes(_Reflections,_Marketing,_Liquidity,_Team,_Development);
        emit FeesChanged();
    }
    
    function setSellTaxes(uint256 _Reflections, uint256 _Marketing, uint256 _Liquidity, uint256 _Team, uint256 _Development) public onlyOwner {
    require(_Reflections+(_Marketing)+(_Liquidity)+(_Team)+(_Development) <=25, "Sell Taxes cannot be higher than 25%");
        emit FeesChanged();
    }

    function _reflectReflections(uint256 rReflections, uint256 tReflections) private {
        _rTotal -=rReflections;
        totFeesPaid.Reflections +=tReflections;
    }

    function _takeLiquidity(uint256 rLiquidity, uint256 tLiquidity) private {
        totFeesPaid.Liquidity +=tLiquidity;

        if(_isExcluded[address(this)])
        {
            _tOwned[address(this)]+=tLiquidity;
        }
        _rOwned[address(this)] +=rLiquidity;
    }

    function _takeMarketing(uint256 rMarketing, uint256 tMarketing) private {
        totFeesPaid.Marketing +=tMarketing;

        if(_isExcluded[address(this)])
        {
            _tOwned[address(this)]+=tMarketing;
        }
        _rOwned[address(this)] +=rMarketing;
    }
    
    function _takeTeam(uint256 rTeam, uint256 tTeam) private {
        totFeesPaid.Team +=tTeam;

        if(_isExcluded[address(this)])
        {
            _tOwned[address(this)]+=tTeam;
        }
        _rOwned[address(this)] +=rTeam;
    }

    function _takeDevelopment(uint256 rDevelopment, uint256 tDevelopment) private {
        totFeesPaid.Development +=tDevelopment;

        if(_isExcluded[address(this)])
        {
            _tOwned[address(this)]+=tDevelopment;
        }
        _rOwned[address(this)] +=rDevelopment;
    }
    
    
    function _getValues(uint256 tAmount, bool takeFee, bool isSell) private view returns (valuesFromGetValues memory to_return) {
        to_return = _getTValues(tAmount, takeFee, isSell);
        (to_return.rAmount, to_return.rTransferAmount, to_return.rReflections, to_return.rMarketing, to_return.rLiquidity, to_return.rTeam, to_return.rDevelopment) = _getRValues(to_return, tAmount, takeFee, _getRate());
        return to_return;
    }

    function _getTValues(uint256 tAmount, bool takeFee, bool isSell) private view returns (valuesFromGetValues memory s) {

        if(!takeFee) {
          s.tTransferAmount = tAmount;
          return s;
        }
        Taxes memory temp;
        if(isSell) temp = sellTaxes;
        else temp = buyTaxes;
        
        s.tReflections = tAmount*temp.Reflections/100;
        s.tMarketing = tAmount*temp.Marketing/100;
        s.tLiquidity = tAmount*temp.Liquidity/100;
        s.tTeam = tAmount*temp.Team/100;
        s.tDevelopment = tAmount*temp.Development/100;
        s.tTransferAmount = tAmount-s.tReflections-s.tMarketing-s.tLiquidity-s.tTeam-s.tDevelopment;
        return s;
    }

    function _getRValues(valuesFromGetValues memory s, uint256 tAmount, bool takeFee, uint256 currentRate) private pure returns (uint256 rAmount, uint256 rTransferAmount, uint256 rReflections,uint256 rMarketing, uint256 rLiquidity, uint256 rTeam, uint256 rDevelopment){
        rAmount = tAmount*currentRate;

        if(!takeFee) {
          return(rAmount, rAmount, 0,0,0,0,0);
        }

        rReflections = s.tReflections*currentRate;
        rMarketing = s.tMarketing*currentRate;
        rLiquidity = s.tLiquidity*currentRate;
        rTeam = s.tTeam*currentRate;
        rDevelopment = s.tDevelopment*currentRate;
        rTransferAmount =  rAmount-rReflections-rMarketing-rLiquidity-rTeam-rDevelopment;
        return (rAmount, rTransferAmount, rReflections, rMarketing, rLiquidity, rTeam, rDevelopment);
    }

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

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

    function _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");
    require(amount <= balanceOf(from),"You are trying to transfer more than your balance");

    // Exclude wallet to wallet fees
    bool takeFee = true;
    if(from != pair && to != pair && !_isExcludedFromFee[from] && !_isExcludedFromFee[to]){
        takeFee = false;
          
    }

    if(!_isExcludedFromFee[from] && !_isExcludedFromFee[to]){
        require(tradingOpen,"Trading not open yet");

    }
    
    if(from == pair && !_isExcludedFromFee[to] && !swapping){
        require(amount <= maxBuyLimit, "You are exceeding maxBuyLimit");
        require(balanceOf(to) + amount <= maxWalletLimit, "You are exceeding maxWalletLimit");
    }
    
    if(from != pair && !_isExcludedFromFee[to] && !_isExcludedFromFee[from] && !swapping){
        require(amount <= maxSellLimit, "You are exceeding maxSellLimit");
        if(to != pair){
            require(balanceOf(to) + amount <= maxWalletLimit, "You are exceeding maxWalletLimit");
        }
    }  
    
    bool canSwap = balanceOf(address(this)) >= swapTokensAtAmount;
    if(!swapping && swapEnabled && canSwap && from != pair && !_isExcludedFromFee[from] && !_isExcludedFromFee[to]){
        if(to == pair)  swapAndLiquify(swapTokensAtAmount, sellTaxes);
        else  swapAndLiquify(swapTokensAtAmount, buyTaxes);
    }

    if(swapping || _isExcludedFromFee[from] || _isExcludedFromFee[to]) takeFee = false;
    
    _tokenTransfer(from, to, amount, takeFee, to == pair);
}


    //this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(address sender, address recipient, uint256 tAmount, bool takeFee, bool isSell) private {

        valuesFromGetValues memory s = _getValues(tAmount, takeFee, isSell);

        if (_isExcluded[sender] ) {  //from excluded
                _tOwned[sender] = _tOwned[sender]-tAmount;
        }
        if (_isExcluded[recipient]) { //to excluded
                _tOwned[recipient] = _tOwned[recipient]+s.tTransferAmount;
        }

        _rOwned[sender] = _rOwned[sender]-s.rAmount;
        _rOwned[recipient] = _rOwned[recipient]+s.rTransferAmount;
        
        if(s.rReflections > 0 || s.tReflections > 0) _reflectReflections(s.rReflections, s.tReflections);
        if(s.rLiquidity > 0 || s.tLiquidity > 0) {
            _takeLiquidity(s.rLiquidity,s.tLiquidity);
            emit Transfer(sender, address(this), s.tLiquidity + s.tMarketing + s.tTeam + s.tDevelopment);
        }
        if(s.rMarketing > 0 || s.tMarketing > 0) _takeMarketing(s.rMarketing, s.tMarketing);
        if(s.rTeam > 0 || s.tTeam > 0) _takeTeam(s.rTeam, s.tTeam);
        if(s.rDevelopment > 0 || s.tDevelopment > 0) _takeDevelopment(s.rDevelopment, s.tDevelopment);
        emit Transfer(sender, recipient, s.tTransferAmount);
        
    }

    function swapAndLiquify(uint256 contractBalance, Taxes memory temp) private lockTheSwap{
        uint256 denominator = (temp.Liquidity + temp.Marketing + temp.Team + temp.Development) * 2;
        uint256 tokensToAddLiquidityWith = contractBalance * temp.Liquidity / denominator;
        uint256 toSwap = contractBalance - tokensToAddLiquidityWith;

        uint256 initialBalance = address(this).balance;

        swapTokensForeth(toSwap);

        uint256 deltaBalance = address(this).balance - initialBalance;
        uint256 unitBalance= deltaBalance / (denominator - temp.Liquidity);
        uint256 ethToAddLiquidityWith = unitBalance * temp.Liquidity;

        if(ethToAddLiquidityWith > 0){
            // Add Liquidity to pancake
            addLiquidity(tokensToAddLiquidityWith, ethToAddLiquidityWith);
        }

        uint256 MarketingAmt = unitBalance * 2 * temp.Marketing;
        if(MarketingAmt > 0){
            payable(MarketingWallet).sendValue(MarketingAmt);
        }
        uint256 TeamAmt = unitBalance * 2 * temp.Team;
        if(TeamAmt > 0){
            payable(TeamWallet).sendValue(TeamAmt);
        }
        uint256 DevelopmentAmt = unitBalance * 2 * temp.Development;
        if(DevelopmentAmt > 0){
            payable(DevelopmentWallet).sendValue(DevelopmentAmt);
        }
            
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(router), tokenAmount);

        // add the Liquidity
        router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            owner(),
            block.timestamp
        );
    }

    function swapTokensForeth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();

        _approve(address(this), address(router), tokenAmount);

        // make the swap
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }
    
    
    function bulkExcludeFee(address[] memory accounts, bool state) external onlyOwner{
        for(uint256 i = 0; i < accounts.length; i++){
            _isExcludedFromFee[accounts[i]] = state;
        }
    }

    function updateMarketingWallet(address newWallet) external onlyOwner{
        MarketingWallet = newWallet;
    }
    
    function updateTeamWallet(address newWallet) external onlyOwner{
        TeamWallet = newWallet;
    }

    function updateDevelopmentWallet(address newWallet) external onlyOwner{
        DevelopmentWallet = newWallet;

    }

    function updateSwapTokensAtAmount(uint256 amount) external onlyOwner{
        swapTokensAtAmount = amount * 10**_decimals;
    }

    function updateSwapEnabled(bool _enabled) external onlyOwner{
        swapEnabled = _enabled;
    }
    
    function updateAllowedTransfer(address account, bool state) external onlyOwner{
        allowedTransfer[account] = state;
    }
    
    function setmaxTX(uint256 maxBuy, uint256 maxSell) external onlyOwner{
        maxBuyLimit = maxBuy * 10**decimals();
        maxSellLimit = maxSell * 10**decimals();
    }
    
    function setmaxWallet(uint256 amount) external onlyOwner{
        maxWalletLimit = amount * 10**decimals();
    }

    function updateRouterAndPair(address newRouter, address newPair) external onlyOwner{
        router = IRouter(newRouter);
        pair = newPair;
    }
    
    //Use this in case eth are sent to the contract by mistake
    function rescueeth(uint256 weiAmount) external onlyOwner{
        require(address(this).balance >= weiAmount, "insufficient eth balance");
        payable(msg.sender).transfer(weiAmount);
    }
    

    function rescueAnyERC20Tokens(address _tokenAddr, address _to, uint _amount) public onlyOwner {
        IERC20(_tokenAddr).transfer(_to, _amount);
    }

    receive() external payable{
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"routerAddress","type":"address"}],"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":[],"name":"FeesChanged","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":"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":"oldRouter","type":"address"},{"indexed":false,"internalType":"address","name":"newRouter","type":"address"}],"name":"UpdatedRouter","type":"event"},{"inputs":[],"name":"DevelopmentWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MarketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TeamWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"allowedTransfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"state","type":"bool"}],"name":"bulkExcludeFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyTaxes","outputs":[{"internalType":"uint256","name":"Reflections","type":"uint256"},{"internalType":"uint256","name":"Marketing","type":"uint256"},{"internalType":"uint256","name":"Liquidity","type":"uint256"},{"internalType":"uint256","name":"Team","type":"uint256"},{"internalType":"uint256","name":"Development","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"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":"launchtime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxBuyLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletLimit","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":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferReflections","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddr","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"rescueAnyERC20Tokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"weiAmount","type":"uint256"}],"name":"rescueeth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTaxes","outputs":[{"internalType":"uint256","name":"Reflections","type":"uint256"},{"internalType":"uint256","name":"Marketing","type":"uint256"},{"internalType":"uint256","name":"Liquidity","type":"uint256"},{"internalType":"uint256","name":"Team","type":"uint256"},{"internalType":"uint256","name":"Development","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_Reflections","type":"uint256"},{"internalType":"uint256","name":"_Marketing","type":"uint256"},{"internalType":"uint256","name":"_Liquidity","type":"uint256"},{"internalType":"uint256","name":"_Team","type":"uint256"},{"internalType":"uint256","name":"_Development","type":"uint256"}],"name":"setBuyTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTimelockExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_Reflections","type":"uint256"},{"internalType":"uint256","name":"_Marketing","type":"uint256"},{"internalType":"uint256","name":"_Liquidity","type":"uint256"},{"internalType":"uint256","name":"_Team","type":"uint256"},{"internalType":"uint256","name":"_Development","type":"uint256"}],"name":"setSellTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxBuy","type":"uint256"},{"internalType":"uint256","name":"maxSell","type":"uint256"}],"name":"setmaxTX","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setmaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totFeesPaid","outputs":[{"internalType":"uint256","name":"Reflections","type":"uint256"},{"internalType":"uint256","name":"Marketing","type":"uint256"},{"internalType":"uint256","name":"Liquidity","type":"uint256"},{"internalType":"uint256","name":"Team","type":"uint256"},{"internalType":"uint256","name":"Development","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"state","type":"bool"}],"name":"updateAllowedTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevelopmentWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"},{"internalType":"address","name":"newPair","type":"address"}],"name":"updateRouterAndPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateTeamWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052620000126009600a62000b53565b620000239064e8d4a5100062000b63565b600b81905562000035905f1962000b91565b62000042905f1962000ba7565b600c556801158e460913d00000600d819055600e819055600f8190556010556011805460ff19169055601380546001600160a01b031990811673eb93ecc2938a3a3ab45d0bf7ea08022d01ad067d9081179092556014805482169092179091556015805490911673aa6de51b55b700ad8c38a2c8779a3b66db5002811790556040805160a080820183525f808352601e6020808501829052848601839052606080860184905260809586018490526016849055601783905560188490556019849055601a84905586519485018752838552602d91850182905295840183905294830182905291909201829052601b829055601c92909255601d81905590819055601f5534801562000151575f80fd5b50604051620040de380380620040de833981016040819052620001749162000bbd565b6200017f336200062d565b5f8190505f816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001c1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001e7919062000bbd565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000233573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000259919062000bbd565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af1158015620002a4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002ca919062000bbd565b600980546001600160a01b03808616620100000262010000600160b01b031990921691909117909155600a80549183166001600160a01b03199092168217905590915062000318906200067c565b600b5460025f620003305f546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081015f908120939093553083526005918290528220805460ff19166001908117909155916200037d5f546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182015f908120805495151560ff19968716179055601354821681526005909352818320805485166001908117909155601454821684528284208054861682179055601554909116835290822080549093168117909255600c549190620004035f546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081015f908120939093553083526004918290528220805460ff1916600190811790915591620004505f546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182015f908120805495151560ff1996871617905560135482168152600484528281208054861660019081179091556014548316825283822080548716821790556015549092168152828120805486168317905530815260069384905291822080549094168117909355620004e45f546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182015f908120805495151560ff19968716179055600a80548316825260068552838220805487166001908117909155601354841683528483208054881682179055601454841683528483208054881682179055601554841683528483208054881682179055308352600795869052848320805488168217905590549092168152918220805490941681179093556200059c5f546001600160a01b031690565b6001600160a01b0316815260208101919091526040015f20805460ff1916911515919091179055620005d55f546001600160a01b031690565b6001600160a01b03165f6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600b546040516200061c91815260200190565b60405180910390a350505062000c2a565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f546001600160a01b03163314620006db5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6001600160a01b0381165f9081526005602052604090205460ff1615620007455760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401620006d2565b6001600160a01b0381165f90815260016020526040902054156200079f576001600160a01b0381165f90815260016020526040902054620007869062000804565b6001600160a01b0382165f908152600260205260409020555b6001600160a01b03165f818152600560205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b5f600c548211156200086c5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401620006d2565b5f620008776200088c565b905062000885818462000be5565b9392505050565b5f808062000899620008b1565b9092509050620008aa818362000be5565b9250505090565b600c54600b545f918291825b60085481101562000a10578260015f60088481548110620008e257620008e262000bfb565b5f9182526020808320909101546001600160a01b0316835282019290925260400190205411806200094e57508160025f6008848154811062000928576200092862000bfb565b5f9182526020808320909101546001600160a01b03168352820192909252604001902054115b156200096557600c54600b54945094505050509091565b60015f600883815481106200097e576200097e62000bfb565b5f9182526020808320909101546001600160a01b03168352820192909252604001902054620009ae908462000ba7565b925060025f60088381548110620009c957620009c962000bfb565b5f9182526020808320909101546001600160a01b03168352820192909252604001902054620009f9908362000ba7565b91508062000a078162000c0f565b915050620008bd565b50600b54600c5462000a23919062000be5565b82101562000a3b57600c54600b549350935050509091565b90939092509050565b634e487b7160e01b5f52601160045260245ffd5b600181815b8085111562000a9857815f190482111562000a7c5762000a7c62000a44565b8085161562000a8a57918102915b93841c939080029062000a5d565b509250929050565b5f8262000ab05750600162000b4d565b8162000abe57505f62000b4d565b816001811462000ad7576002811462000ae25762000b02565b600191505062000b4d565b60ff84111562000af65762000af662000a44565b50506001821b62000b4d565b5060208310610133831016604e8410600b841016171562000b27575081810a62000b4d565b62000b33838362000a58565b805f190482111562000b495762000b4962000a44565b0290505b92915050565b5f6200088560ff84168362000aa0565b808202811582820484141762000b4d5762000b4d62000a44565b634e487b7160e01b5f52601260045260245ffd5b5f8262000ba25762000ba262000b7d565b500690565b8181038181111562000b4d5762000b4d62000a44565b5f6020828403121562000bce575f80fd5b81516001600160a01b038116811462000885575f80fd5b5f8262000bf65762000bf662000b7d565b500490565b634e487b7160e01b5f52603260045260245ffd5b5f6001820162000c235762000c2362000a44565b5060010190565b6134a68062000c385f395ff3fe608060405260043610610310575f3560e01c806370a08231116101a3578063aacebbe3116100f2578063f023f57311610092578063f7085ec71161006d578063f7085ec7146109dd578063f887ea40146109f1578063fc6b151c14610a16578063ffb54a9914610a35575f80fd5b8063f023f57314610979578063f2fde38b14610998578063f66895a3146109b7575f80fd5b8063d257b34f116100cd578063d257b34f146108e2578063dd62ed3e14610901578063e2f4560514610945578063ea2f0b371461095a575f80fd5b8063aacebbe314610885578063b5c57145146108a4578063c791fc54146108c3575f80fd5b80638e2839ff1161015d5780639ba5e4d5116101385780639ba5e4d514610802578063a457c2d714610828578063a8aa1b3114610847578063a9059cbb14610866575f80fd5b80638e2839ff14610794578063924de9b7146107b357806395d89b41146107d2575f80fd5b806370a08231146106a1578063715018a6146106c05780637cb332bb146106d4578063864701a5146106f357806388f82020146107415780638da5cb5b14610778575f80fd5b806340b28c2f1161025f5780635342acb41161021957806366a88d96116101f457806366a88d961461063f578063677a8870146106545780636aa5b37f146106735780636ddd171314610688575f80fd5b80635342acb4146105c557806362695eae146105fc578063652e2f041461062a575f80fd5b806340b28c2f1461050b578063437823ec1461052a5780634549b039146105495780635024c16d1461056857806350db71fb1461058757806352390c02146105a6575f80fd5b806324c0f817116102ca578063313ce567116102a5578063313ce567146104935780633685d419146104ae57806339509351146104cd57806340ac48d3146104ec575f80fd5b806324c0f8171461041e5780632598cdb2146104555780632d83811914610474575f80fd5b80630613f9e11461031b57806306fdde031461033c578063095ea7b3146103935780630d65df9b146103c257806318160ddd146103e157806323b872dd146103ff575f80fd5b3661031757005b5f80fd5b348015610326575f80fd5b5061033a610335366004612ece565b610a4e565b005b348015610347575f80fd5b5060408051808201909152601e81527f486172727946696e6b536f757250617463685072696e7465723639496e75000060208201525b60405161038a9190612ee5565b60405180910390f35b34801561039e575f80fd5b506103b26103ad366004612f54565b610afe565b604051901515815260200161038a565b3480156103cd575f80fd5b5061033a6103dc366004612f7e565b610b3e565b3480156103ec575f80fd5b50600b545b60405190815260200161038a565b34801561040a575f80fd5b506103b2610419366004612f7e565b610bdd565b348015610429575f80fd5b5060155461043d906001600160a01b031681565b6040516001600160a01b03909116815260200161038a565b348015610460575f80fd5b5060135461043d906001600160a01b031681565b34801561047f575f80fd5b506103f161048e366004612ece565b610c8e565b34801561049e575f80fd5b506040516009815260200161038a565b3480156104b9575f80fd5b5061033a6104c8366004612fbc565b610d09565b3480156104d8575f80fd5b506103b26104e7366004612f54565b610eb3565b3480156104f7575f80fd5b5061033a610506366004612fd7565b610ee9565b348015610516575f80fd5b5061033a61052536600461300e565b611006565b348015610535575f80fd5b5061033a610544366004612fbc565b611069565b348015610554575f80fd5b506103f161056336600461305d565b6110b5565b348015610573575f80fd5b5061033a610582366004613080565b61113e565b348015610592575f80fd5b5061033a6105a13660046130a0565b61119d565b3480156105b1575f80fd5b5061033a6105c0366004612fbc565b6111f0565b3480156105d0575f80fd5b506103b26105df366004612fbc565b6001600160a01b03165f9081526004602052604090205460ff1690565b348015610607575f80fd5b506103b2610616366004612fbc565b60066020525f908152604090205460ff1681565b348015610635575f80fd5b506103f1600f5481565b34801561064a575f80fd5b506103f160105481565b34801561065f575f80fd5b5060145461043d906001600160a01b031681565b34801561067e575f80fd5b506103f1600e5481565b348015610693575f80fd5b506009546103b29060ff1681565b3480156106ac575f80fd5b506103f16106bb366004612fbc565b61133d565b3480156106cb575f80fd5b5061033a611399565b3480156106df575f80fd5b5061033a6106ee366004612fbc565b6113cd565b3480156106fe575f80fd5b50601654601754601854601954601a54610719949392919085565b604080519586526020860194909452928401919091526060830152608082015260a00161038a565b34801561074c575f80fd5b506103b261075b366004612fbc565b6001600160a01b03165f9081526005602052604090205460ff1690565b348015610783575f80fd5b505f546001600160a01b031661043d565b34801561079f575f80fd5b5061033a6107ae3660046130e0565b611418565b3480156107be575f80fd5b5061033a6107cd3660046131b2565b6114aa565b3480156107dd575f80fd5b5060408051808201909152600881526729a0a322a6a7a7a760c11b602082015261037d565b34801561080d575f80fd5b50602054602154602254602354602454610719949392919085565b348015610833575f80fd5b506103b2610842366004612f54565b6114e6565b348015610852575f80fd5b50600a5461043d906001600160a01b031681565b348015610871575f80fd5b506103b2610880366004612f54565b611580565b348015610890575f80fd5b5061033a61089f366004612fbc565b61158c565b3480156108af575f80fd5b5061033a6108be3660046130a0565b6115d7565b3480156108ce575f80fd5b5061033a6108dd366004612fd7565b61162a565b3480156108ed575f80fd5b5061033a6108fc366004612ece565b611709565b34801561090c575f80fd5b506103f161091b36600461300e565b6001600160a01b039182165f90815260036020908152604080832093909416825291909152205490565b348015610950575f80fd5b506103f1600d5481565b348015610965575f80fd5b5061033a610974366004612fbc565b61174e565b348015610984575f80fd5b5061033a610993366004612fbc565b611797565b3480156109a3575f80fd5b5061033a6109b2366004612fbc565b6117e2565b3480156109c2575f80fd5b50601b54601c54601d54601e54601f54610719949392919085565b3480156109e8575f80fd5b5061033a61187c565b3480156109fc575f80fd5b5060095461043d906201000090046001600160a01b031681565b348015610a21575f80fd5b5061033a610a30366004612ece565b6118c8565b348015610a40575f80fd5b506011546103b29060ff1681565b5f546001600160a01b03163314610a805760405162461bcd60e51b8152600401610a77906131cd565b60405180910390fd5b80471015610ad05760405162461bcd60e51b815260206004820152601860248201527f696e73756666696369656e74206574682062616c616e636500000000000000006044820152606401610a77565b604051339082156108fc029083905f818181858888f19350505050158015610afa573d5f803e3d5ffd5b5050565b335f9081526003602090815260408083206001600160a01b03861684529091528120829055610b34610b2d3390565b848461190d565b5060015b92915050565b5f546001600160a01b03163314610b675760405162461bcd60e51b8152600401610a77906131cd565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016020604051808303815f875af1158015610bb3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bd79190613202565b50505050565b5f610be9848484611a30565b6001600160a01b0384165f90815260036020908152604080832033845290915290205482811015610c6d5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610a77565b610c818533610c7c8685613231565b61190d565b60019150505b9392505050565b5f600c54821115610cf45760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610a77565b5f610cfd6120ce565b9050610c878184613244565b5f546001600160a01b03163314610d325760405162461bcd60e51b8152600401610a77906131cd565b6001600160a01b0381165f9081526005602052604090205460ff16610d995760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610a77565b5f5b600854811015610afa57816001600160a01b031660088281548110610dc257610dc2613263565b5f918252602090912001546001600160a01b031603610ea15760088054610deb90600190613231565b81548110610dfb57610dfb613263565b5f91825260209091200154600880546001600160a01b039092169183908110610e2657610e26613263565b5f91825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff191690556008805480610e7d57610e7d613277565b5f8281526020902081015f1990810180546001600160a01b03191690550190555050565b80610eab8161328b565b915050610d9b565b335f8181526003602090815260408083206001600160a01b03871684529091528120549091610b34918590610c7c9086906132a3565b5f546001600160a01b03163314610f125760405162461bcd60e51b8152600401610a77906131cd565b6019818385610f21888a6132a3565b610f2b91906132a3565b610f3591906132a3565b610f3f91906132a3565b1115610f995760405162461bcd60e51b815260206004820152602360248201527f4275792054617865732063616e6e6f7420626520686967686572207468616e2060448201526232352560e81b6064820152608401610a77565b6040805160a08101825286815260208101869052808201859052606081018490526080018290526016869055601785905560188490556019839055601a829055517f846206d6c3449ac0b05841dfb88bf28b55aef00f96152490c69c96238048de15905f90a15050505050565b5f546001600160a01b0316331461102f5760405162461bcd60e51b8152600401610a77906131cd565b6009805462010000600160b01b031916620100006001600160a01b0394851602179055600a80546001600160a01b03191691909216179055565b5f546001600160a01b031633146110925760405162461bcd60e51b8152600401610a77906131cd565b6001600160a01b03165f908152600460205260409020805460ff19166001179055565b5f600b548311156111085760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610a77565b81611124575f61111a8460015f6120ef565b519150610b389050565b5f6111318460015f6120ef565b602001519150610b389050565b5f546001600160a01b031633146111675760405162461bcd60e51b8152600401610a77906131cd565b6111736009600a613396565b61117d90836133a4565b600e5561118c6009600a613396565b61119690826133a4565b600f555050565b5f546001600160a01b031633146111c65760405162461bcd60e51b8152600401610a77906131cd565b6001600160a01b03919091165f908152600760205260409020805460ff1916911515919091179055565b5f546001600160a01b031633146112195760405162461bcd60e51b8152600401610a77906131cd565b6001600160a01b0381165f9081526005602052604090205460ff16156112815760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610a77565b6001600160a01b0381165f90815260016020526040902054156112d8576001600160a01b0381165f908152600160205260409020546112bf90610c8e565b6001600160a01b0382165f908152600260205260409020555b6001600160a01b03165f818152600560205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6001600160a01b0381165f9081526005602052604081205460ff161561137857506001600160a01b03165f9081526002602052604090205490565b6001600160a01b0382165f90815260016020526040902054610b3890610c8e565b5f546001600160a01b031633146113c25760405162461bcd60e51b8152600401610a77906131cd565b6113cb5f61213e565b565b5f546001600160a01b031633146113f65760405162461bcd60e51b8152600401610a77906131cd565b601480546001600160a01b0319166001600160a01b0392909216919091179055565b5f546001600160a01b031633146114415760405162461bcd60e51b8152600401610a77906131cd565b5f5b82518110156114a5578160045f85848151811061146257611462613263565b6020908102919091018101516001600160a01b031682528101919091526040015f20805460ff19169115159190911790558061149d8161328b565b915050611443565b505050565b5f546001600160a01b031633146114d35760405162461bcd60e51b8152600401610a77906131cd565b6009805460ff1916911515919091179055565b335f9081526003602090815260408083206001600160a01b0386168452909152812054828110156115675760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610a77565b6115763385610c7c8685613231565b5060019392505050565b5f610b34338484611a30565b5f546001600160a01b031633146115b55760405162461bcd60e51b8152600401610a77906131cd565b601380546001600160a01b0319166001600160a01b0392909216919091179055565b5f546001600160a01b031633146116005760405162461bcd60e51b8152600401610a77906131cd565b6001600160a01b03919091165f908152600660205260409020805460ff1916911515919091179055565b5f546001600160a01b031633146116535760405162461bcd60e51b8152600401610a77906131cd565b6019818385611662888a6132a3565b61166c91906132a3565b61167691906132a3565b61168091906132a3565b11156116da5760405162461bcd60e51b8152602060048201526024808201527f53656c6c2054617865732063616e6e6f7420626520686967686572207468616e6044820152632032352560e01b6064820152608401610a77565b6040517f846206d6c3449ac0b05841dfb88bf28b55aef00f96152490c69c96238048de15905f90a15050505050565b5f546001600160a01b031633146117325760405162461bcd60e51b8152600401610a77906131cd565b61173e6009600a613396565b61174890826133a4565b600d5550565b5f546001600160a01b031633146117775760405162461bcd60e51b8152600401610a77906131cd565b6001600160a01b03165f908152600460205260409020805460ff19169055565b5f546001600160a01b031633146117c05760405162461bcd60e51b8152600401610a77906131cd565b601580546001600160a01b0319166001600160a01b0392909216919091179055565b5f546001600160a01b0316331461180b5760405162461bcd60e51b8152600401610a77906131cd565b6001600160a01b0381166118705760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a77565b6118798161213e565b50565b5f546001600160a01b031633146118a55760405162461bcd60e51b8152600401610a77906131cd565b60118054600160ff19918216811790925543601255600980549091169091179055565b5f546001600160a01b031633146118f15760405162461bcd60e51b8152600401610a77906131cd565b6118fd6009600a613396565b61190790826133a4565b60105550565b6001600160a01b03831661196f5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a77565b6001600160a01b0382166119d05760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a77565b6001600160a01b038381165f8181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611a945760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610a77565b6001600160a01b038216611af65760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610a77565b5f8111611b575760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610a77565b611b608361133d565b811115611bc95760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b6064820152608401610a77565b600a546001906001600160a01b03858116911614801590611bf85750600a546001600160a01b03848116911614155b8015611c1c57506001600160a01b0384165f9081526004602052604090205460ff16155b8015611c4057506001600160a01b0383165f9081526004602052604090205460ff16155b15611c4857505f5b6001600160a01b0384165f9081526004602052604090205460ff16158015611c8857506001600160a01b0383165f9081526004602052604090205460ff16155b15611cd65760115460ff16611cd65760405162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b6044820152606401610a77565b600a546001600160a01b038581169116148015611d0b57506001600160a01b0383165f9081526004602052604090205460ff16155b8015611d1f5750600954610100900460ff16155b15611ddb57600e54821115611d765760405162461bcd60e51b815260206004820152601d60248201527f596f752061726520657863656564696e67206d61784275794c696d69740000006044820152606401610a77565b60105482611d838561133d565b611d8d91906132a3565b1115611ddb5760405162461bcd60e51b815260206004820181905260248201527f596f752061726520657863656564696e67206d617857616c6c65744c696d69746044820152606401610a77565b600a546001600160a01b03858116911614801590611e1157506001600160a01b0383165f9081526004602052604090205460ff16155b8015611e3557506001600160a01b0384165f9081526004602052604090205460ff16155b8015611e495750600954610100900460ff16155b15611f1a57600f54821115611ea05760405162461bcd60e51b815260206004820152601e60248201527f596f752061726520657863656564696e67206d617853656c6c4c696d697400006044820152606401610a77565b600a546001600160a01b03848116911614611f1a5760105482611ec28561133d565b611ecc91906132a3565b1115611f1a5760405162461bcd60e51b815260206004820181905260248201527f596f752061726520657863656564696e67206d617857616c6c65744c696d69746044820152606401610a77565b5f600d54611f273061133d565b6009549111159150610100900460ff16158015611f46575060095460ff165b8015611f4f5750805b8015611f695750600a546001600160a01b03868116911614155b8015611f8d57506001600160a01b0385165f9081526004602052604090205460ff16155b8015611fb157506001600160a01b0384165f9081526004602052604090205460ff16155b1561204d57600a546001600160a01b039081169085160361200f57600d546040805160a081018252601b548152601c546020820152601d5491810191909152601e546060820152601f54608082015261200a919061218d565b61204d565b600d546040805160a08101825260165481526017546020820152601854918101919091526019546060820152601a54608082015261204d919061218d565b600954610100900460ff168061207a57506001600160a01b0385165f9081526004602052604090205460ff165b8061209c57506001600160a01b0384165f9081526004602052604090205460ff165b156120a5575f91505b600a546120c79086908690869086906001600160a01b03808516911614612327565b5050505050565b5f805f6120d9612625565b90925090506120e88183613244565b9250505090565b6120f7612e6d565b61210284848461279f565b90506121178185856121126120ce565b612957565b60c088015260a0870152608086015260608501526040840152602083015281529392505050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6009805461ff00191661010017905560808101516060820151602083015160408401515f9392916121bd916132a3565b6121c791906132a3565b6121d191906132a3565b6121dc9060026133a4565b90505f818360400151856121f091906133a4565b6121fa9190613244565b90505f6122078286613231565b90504761221382612a2b565b5f61221e8247613231565b90505f8660400151866122319190613231565b61223b9083613244565b90505f87604001518261224e91906133a4565b90508015612260576122608682612ba0565b60208801515f906122728460026133a4565b61227c91906133a4565b9050801561229a5760135461229a906001600160a01b031682612c77565b60608901515f906122ac8560026133a4565b6122b691906133a4565b905080156122d4576014546122d4906001600160a01b031682612c77565b60808a01515f906122e68660026133a4565b6122f091906133a4565b9050801561230e5760155461230e906001600160a01b031682612c77565b50506009805461ff001916905550505050505050505050565b5f6123338484846120ef565b6001600160a01b0387165f9081526005602052604090205490915060ff1615612392576001600160a01b0386165f90815260026020526040902054612379908590613231565b6001600160a01b0387165f908152600260205260409020555b6001600160a01b0385165f9081526005602052604090205460ff16156123f3576101008101516001600160a01b0386165f908152600260205260409020546123da91906132a3565b6001600160a01b0386165f908152600260205260409020555b80516001600160a01b0387165f908152600160205260409020546124179190613231565b6001600160a01b038088165f908152600160209081526040808320949094558401519188168152919091205461244d91906132a3565b6001600160a01b0386165f90815260016020526040908190209190915581015115158061247e57505f816101200151115b15612496576124968160400151826101200151612d8c565b5f816080015111806124ac57505f816101600151115b15612541576124c48160800151826101600151612dbf565b306001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836101a0015184610180015185610140015186610160015161251b91906132a3565b61252591906132a3565b61252f91906132a3565b60405190815260200160405180910390a35b5f8160600151118061255757505f816101400151115b1561256f5761256f8160600151826101400151612e31565b5f8160a00151118061258557505f816101800151115b1561259d5761259d8160a00151826101800151612e45565b5f8160c0015111806125b357505f816101a00151115b156125cb576125cb8160c00151826101a00151612e59565b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83610100015160405161261591815260200190565b60405180910390a3505050505050565b600c54600b545f918291825b60085481101561276e578260015f6008848154811061265257612652613263565b5f9182526020808320909101546001600160a01b0316835282019290925260400190205411806126ba57508160025f6008848154811061269457612694613263565b5f9182526020808320909101546001600160a01b03168352820192909252604001902054115b156126d057600c54600b54945094505050509091565b60015f600883815481106126e6576126e6613263565b5f9182526020808320909101546001600160a01b031683528201929092526040019020546127149084613231565b925060025f6008838154811061272c5761272c613263565b5f9182526020808320909101546001600160a01b0316835282019290925260400190205461275a9083613231565b9150806127668161328b565b915050612631565b50600b54600c5461277f9190613244565b82101561279657600c54600b549350935050509091565b90939092509050565b6127a7612e6d565b826127b9576101008101849052610c87565b6127e66040518060a001604052805f81526020015f81526020015f81526020015f81526020015f81525090565b821561282357506040805160a081018252601b548152601c546020820152601d5491810191909152601e546060820152601f546080820152612856565b506040805160a08101825260165481526017546020820152601854918101919091526019546060820152601a5460808201525b805160649061286590876133a4565b61286f9190613244565b610120830152602081015160649061288790876133a4565b6128919190613244565b61014083015260408101516064906128a990876133a4565b6128b39190613244565b61016083015260608101516064906128cb90876133a4565b6128d59190613244565b61018083015260808101516064906128ed90876133a4565b6128f79190613244565b6101a08301819052610180830151610160840151610140850151610120860151612921908a613231565b61292b9190613231565b6129359190613231565b61293f9190613231565b6129499190613231565b610100830152509392505050565b5f808080808080612968888b6133a4565b96508861298557508594505f935083925082915081905080612a1d565b878b610120015161299691906133a4565b9450878b61014001516129a991906133a4565b9350878b61016001516129bc91906133a4565b9250878b61018001516129cf91906133a4565b9150878b6101a001516129e291906133a4565b9050808284866129f2898c613231565b6129fc9190613231565b612a069190613231565b612a109190613231565b612a1a9190613231565b95505b949950949992975094509450565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110612a5e57612a5e613263565b60200260200101906001600160a01b031690816001600160a01b031681525050600960029054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612acf573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612af391906133bb565b81600181518110612b0657612b06613263565b6001600160a01b039283166020918202929092010152600954612b32913091620100009004168461190d565b60095460405163791ac94760e01b8152620100009091046001600160a01b03169063791ac94790612b6f9085905f908690309042906004016133d6565b5f604051808303815f87803b158015612b86575f80fd5b505af1158015612b98573d5f803e3d5ffd5b505050505050565b600954612bbe9030906201000090046001600160a01b03168461190d565b6009546001600160a01b03620100009091041663f305d7198230855f80612bec5f546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015612c52573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906120c79190613445565b80471015612cc75760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610a77565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114612d10576040519150601f19603f3d011682016040523d82523d5f602084013e612d15565b606091505b50509050806114a55760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610a77565b81600c5f828254612d9d9190613231565b9091555050602080548291905f90612db69084906132a3565b90915550505050565b8060206002015f828254612dd391906132a3565b9091555050305f9081526005602052604090205460ff1615612e1357305f9081526002602052604081208054839290612e0d9084906132a3565b90915550505b305f9081526001602052604081208054849290612db69084906132a3565b8060206001015f828254612dd391906132a3565b8060206003015f828254612dd391906132a3565b8060206004015f828254612dd391906132a3565b604051806101c001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b5f60208284031215612ede575f80fd5b5035919050565b5f6020808352835180828501525f5b81811015612f1057858101830151858201604001528201612ef4565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611879575f80fd5b8035612f4f81612f30565b919050565b5f8060408385031215612f65575f80fd5b8235612f7081612f30565b946020939093013593505050565b5f805f60608486031215612f90575f80fd5b8335612f9b81612f30565b92506020840135612fab81612f30565b929592945050506040919091013590565b5f60208284031215612fcc575f80fd5b8135610c8781612f30565b5f805f805f60a08688031215612feb575f80fd5b505083359560208501359550604085013594606081013594506080013592509050565b5f806040838503121561301f575f80fd5b823561302a81612f30565b9150602083013561303a81612f30565b809150509250929050565b8015158114611879575f80fd5b8035612f4f81613045565b5f806040838503121561306e575f80fd5b82359150602083013561303a81613045565b5f8060408385031215613091575f80fd5b50508035926020909101359150565b5f80604083850312156130b1575f80fd5b82356130bc81612f30565b9150602083013561303a81613045565b634e487b7160e01b5f52604160045260245ffd5b5f80604083850312156130f1575f80fd5b823567ffffffffffffffff80821115613108575f80fd5b818501915085601f83011261311b575f80fd5b813560208282111561312f5761312f6130cc565b8160051b604051601f19603f83011681018181108682111715613154576131546130cc565b604052928352818301935084810182019289841115613171575f80fd5b948201945b838610156131965761318786612f44565b85529482019493820193613176565b96506131a59050878201613052565b9450505050509250929050565b5f602082840312156131c2575f80fd5b8135610c8781613045565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b5f60208284031215613212575f80fd5b8151610c8781613045565b634e487b7160e01b5f52601160045260245ffd5b81810381811115610b3857610b3861321d565b5f8261325e57634e487b7160e01b5f52601260045260245ffd5b500490565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52603160045260245ffd5b5f6001820161329c5761329c61321d565b5060010190565b80820180821115610b3857610b3861321d565b600181815b808511156132f057815f19048211156132d6576132d661321d565b808516156132e357918102915b93841c93908002906132bb565b509250929050565b5f8261330657506001610b38565b8161331257505f610b38565b816001811461332857600281146133325761334e565b6001915050610b38565b60ff8411156133435761334361321d565b50506001821b610b38565b5060208310610133831016604e8410600b8410161715613371575081810a610b38565b61337b83836132b6565b805f190482111561338e5761338e61321d565b029392505050565b5f610c8760ff8416836132f8565b8082028115828204841417610b3857610b3861321d565b5f602082840312156133cb575f80fd5b8151610c8781612f30565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b818110156134245784516001600160a01b0316835293830193918301916001016133ff565b50506001600160a01b03969096166060850152505050608001529392505050565b5f805f60608486031215613457575f80fd5b835192506020840151915060408401519050925092509256fea2646970667358221220d0ea74ceeaef015a01fd638de7028e1b72cc2f187579a3b99670fa234617ba8a64736f6c634300081400330000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d

Deployed Bytecode

0x608060405260043610610310575f3560e01c806370a08231116101a3578063aacebbe3116100f2578063f023f57311610092578063f7085ec71161006d578063f7085ec7146109dd578063f887ea40146109f1578063fc6b151c14610a16578063ffb54a9914610a35575f80fd5b8063f023f57314610979578063f2fde38b14610998578063f66895a3146109b7575f80fd5b8063d257b34f116100cd578063d257b34f146108e2578063dd62ed3e14610901578063e2f4560514610945578063ea2f0b371461095a575f80fd5b8063aacebbe314610885578063b5c57145146108a4578063c791fc54146108c3575f80fd5b80638e2839ff1161015d5780639ba5e4d5116101385780639ba5e4d514610802578063a457c2d714610828578063a8aa1b3114610847578063a9059cbb14610866575f80fd5b80638e2839ff14610794578063924de9b7146107b357806395d89b41146107d2575f80fd5b806370a08231146106a1578063715018a6146106c05780637cb332bb146106d4578063864701a5146106f357806388f82020146107415780638da5cb5b14610778575f80fd5b806340b28c2f1161025f5780635342acb41161021957806366a88d96116101f457806366a88d961461063f578063677a8870146106545780636aa5b37f146106735780636ddd171314610688575f80fd5b80635342acb4146105c557806362695eae146105fc578063652e2f041461062a575f80fd5b806340b28c2f1461050b578063437823ec1461052a5780634549b039146105495780635024c16d1461056857806350db71fb1461058757806352390c02146105a6575f80fd5b806324c0f817116102ca578063313ce567116102a5578063313ce567146104935780633685d419146104ae57806339509351146104cd57806340ac48d3146104ec575f80fd5b806324c0f8171461041e5780632598cdb2146104555780632d83811914610474575f80fd5b80630613f9e11461031b57806306fdde031461033c578063095ea7b3146103935780630d65df9b146103c257806318160ddd146103e157806323b872dd146103ff575f80fd5b3661031757005b5f80fd5b348015610326575f80fd5b5061033a610335366004612ece565b610a4e565b005b348015610347575f80fd5b5060408051808201909152601e81527f486172727946696e6b536f757250617463685072696e7465723639496e75000060208201525b60405161038a9190612ee5565b60405180910390f35b34801561039e575f80fd5b506103b26103ad366004612f54565b610afe565b604051901515815260200161038a565b3480156103cd575f80fd5b5061033a6103dc366004612f7e565b610b3e565b3480156103ec575f80fd5b50600b545b60405190815260200161038a565b34801561040a575f80fd5b506103b2610419366004612f7e565b610bdd565b348015610429575f80fd5b5060155461043d906001600160a01b031681565b6040516001600160a01b03909116815260200161038a565b348015610460575f80fd5b5060135461043d906001600160a01b031681565b34801561047f575f80fd5b506103f161048e366004612ece565b610c8e565b34801561049e575f80fd5b506040516009815260200161038a565b3480156104b9575f80fd5b5061033a6104c8366004612fbc565b610d09565b3480156104d8575f80fd5b506103b26104e7366004612f54565b610eb3565b3480156104f7575f80fd5b5061033a610506366004612fd7565b610ee9565b348015610516575f80fd5b5061033a61052536600461300e565b611006565b348015610535575f80fd5b5061033a610544366004612fbc565b611069565b348015610554575f80fd5b506103f161056336600461305d565b6110b5565b348015610573575f80fd5b5061033a610582366004613080565b61113e565b348015610592575f80fd5b5061033a6105a13660046130a0565b61119d565b3480156105b1575f80fd5b5061033a6105c0366004612fbc565b6111f0565b3480156105d0575f80fd5b506103b26105df366004612fbc565b6001600160a01b03165f9081526004602052604090205460ff1690565b348015610607575f80fd5b506103b2610616366004612fbc565b60066020525f908152604090205460ff1681565b348015610635575f80fd5b506103f1600f5481565b34801561064a575f80fd5b506103f160105481565b34801561065f575f80fd5b5060145461043d906001600160a01b031681565b34801561067e575f80fd5b506103f1600e5481565b348015610693575f80fd5b506009546103b29060ff1681565b3480156106ac575f80fd5b506103f16106bb366004612fbc565b61133d565b3480156106cb575f80fd5b5061033a611399565b3480156106df575f80fd5b5061033a6106ee366004612fbc565b6113cd565b3480156106fe575f80fd5b50601654601754601854601954601a54610719949392919085565b604080519586526020860194909452928401919091526060830152608082015260a00161038a565b34801561074c575f80fd5b506103b261075b366004612fbc565b6001600160a01b03165f9081526005602052604090205460ff1690565b348015610783575f80fd5b505f546001600160a01b031661043d565b34801561079f575f80fd5b5061033a6107ae3660046130e0565b611418565b3480156107be575f80fd5b5061033a6107cd3660046131b2565b6114aa565b3480156107dd575f80fd5b5060408051808201909152600881526729a0a322a6a7a7a760c11b602082015261037d565b34801561080d575f80fd5b50602054602154602254602354602454610719949392919085565b348015610833575f80fd5b506103b2610842366004612f54565b6114e6565b348015610852575f80fd5b50600a5461043d906001600160a01b031681565b348015610871575f80fd5b506103b2610880366004612f54565b611580565b348015610890575f80fd5b5061033a61089f366004612fbc565b61158c565b3480156108af575f80fd5b5061033a6108be3660046130a0565b6115d7565b3480156108ce575f80fd5b5061033a6108dd366004612fd7565b61162a565b3480156108ed575f80fd5b5061033a6108fc366004612ece565b611709565b34801561090c575f80fd5b506103f161091b36600461300e565b6001600160a01b039182165f90815260036020908152604080832093909416825291909152205490565b348015610950575f80fd5b506103f1600d5481565b348015610965575f80fd5b5061033a610974366004612fbc565b61174e565b348015610984575f80fd5b5061033a610993366004612fbc565b611797565b3480156109a3575f80fd5b5061033a6109b2366004612fbc565b6117e2565b3480156109c2575f80fd5b50601b54601c54601d54601e54601f54610719949392919085565b3480156109e8575f80fd5b5061033a61187c565b3480156109fc575f80fd5b5060095461043d906201000090046001600160a01b031681565b348015610a21575f80fd5b5061033a610a30366004612ece565b6118c8565b348015610a40575f80fd5b506011546103b29060ff1681565b5f546001600160a01b03163314610a805760405162461bcd60e51b8152600401610a77906131cd565b60405180910390fd5b80471015610ad05760405162461bcd60e51b815260206004820152601860248201527f696e73756666696369656e74206574682062616c616e636500000000000000006044820152606401610a77565b604051339082156108fc029083905f818181858888f19350505050158015610afa573d5f803e3d5ffd5b5050565b335f9081526003602090815260408083206001600160a01b03861684529091528120829055610b34610b2d3390565b848461190d565b5060015b92915050565b5f546001600160a01b03163314610b675760405162461bcd60e51b8152600401610a77906131cd565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016020604051808303815f875af1158015610bb3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bd79190613202565b50505050565b5f610be9848484611a30565b6001600160a01b0384165f90815260036020908152604080832033845290915290205482811015610c6d5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610a77565b610c818533610c7c8685613231565b61190d565b60019150505b9392505050565b5f600c54821115610cf45760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610a77565b5f610cfd6120ce565b9050610c878184613244565b5f546001600160a01b03163314610d325760405162461bcd60e51b8152600401610a77906131cd565b6001600160a01b0381165f9081526005602052604090205460ff16610d995760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610a77565b5f5b600854811015610afa57816001600160a01b031660088281548110610dc257610dc2613263565b5f918252602090912001546001600160a01b031603610ea15760088054610deb90600190613231565b81548110610dfb57610dfb613263565b5f91825260209091200154600880546001600160a01b039092169183908110610e2657610e26613263565b5f91825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff191690556008805480610e7d57610e7d613277565b5f8281526020902081015f1990810180546001600160a01b03191690550190555050565b80610eab8161328b565b915050610d9b565b335f8181526003602090815260408083206001600160a01b03871684529091528120549091610b34918590610c7c9086906132a3565b5f546001600160a01b03163314610f125760405162461bcd60e51b8152600401610a77906131cd565b6019818385610f21888a6132a3565b610f2b91906132a3565b610f3591906132a3565b610f3f91906132a3565b1115610f995760405162461bcd60e51b815260206004820152602360248201527f4275792054617865732063616e6e6f7420626520686967686572207468616e2060448201526232352560e81b6064820152608401610a77565b6040805160a08101825286815260208101869052808201859052606081018490526080018290526016869055601785905560188490556019839055601a829055517f846206d6c3449ac0b05841dfb88bf28b55aef00f96152490c69c96238048de15905f90a15050505050565b5f546001600160a01b0316331461102f5760405162461bcd60e51b8152600401610a77906131cd565b6009805462010000600160b01b031916620100006001600160a01b0394851602179055600a80546001600160a01b03191691909216179055565b5f546001600160a01b031633146110925760405162461bcd60e51b8152600401610a77906131cd565b6001600160a01b03165f908152600460205260409020805460ff19166001179055565b5f600b548311156111085760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610a77565b81611124575f61111a8460015f6120ef565b519150610b389050565b5f6111318460015f6120ef565b602001519150610b389050565b5f546001600160a01b031633146111675760405162461bcd60e51b8152600401610a77906131cd565b6111736009600a613396565b61117d90836133a4565b600e5561118c6009600a613396565b61119690826133a4565b600f555050565b5f546001600160a01b031633146111c65760405162461bcd60e51b8152600401610a77906131cd565b6001600160a01b03919091165f908152600760205260409020805460ff1916911515919091179055565b5f546001600160a01b031633146112195760405162461bcd60e51b8152600401610a77906131cd565b6001600160a01b0381165f9081526005602052604090205460ff16156112815760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610a77565b6001600160a01b0381165f90815260016020526040902054156112d8576001600160a01b0381165f908152600160205260409020546112bf90610c8e565b6001600160a01b0382165f908152600260205260409020555b6001600160a01b03165f818152600560205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6001600160a01b0381165f9081526005602052604081205460ff161561137857506001600160a01b03165f9081526002602052604090205490565b6001600160a01b0382165f90815260016020526040902054610b3890610c8e565b5f546001600160a01b031633146113c25760405162461bcd60e51b8152600401610a77906131cd565b6113cb5f61213e565b565b5f546001600160a01b031633146113f65760405162461bcd60e51b8152600401610a77906131cd565b601480546001600160a01b0319166001600160a01b0392909216919091179055565b5f546001600160a01b031633146114415760405162461bcd60e51b8152600401610a77906131cd565b5f5b82518110156114a5578160045f85848151811061146257611462613263565b6020908102919091018101516001600160a01b031682528101919091526040015f20805460ff19169115159190911790558061149d8161328b565b915050611443565b505050565b5f546001600160a01b031633146114d35760405162461bcd60e51b8152600401610a77906131cd565b6009805460ff1916911515919091179055565b335f9081526003602090815260408083206001600160a01b0386168452909152812054828110156115675760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610a77565b6115763385610c7c8685613231565b5060019392505050565b5f610b34338484611a30565b5f546001600160a01b031633146115b55760405162461bcd60e51b8152600401610a77906131cd565b601380546001600160a01b0319166001600160a01b0392909216919091179055565b5f546001600160a01b031633146116005760405162461bcd60e51b8152600401610a77906131cd565b6001600160a01b03919091165f908152600660205260409020805460ff1916911515919091179055565b5f546001600160a01b031633146116535760405162461bcd60e51b8152600401610a77906131cd565b6019818385611662888a6132a3565b61166c91906132a3565b61167691906132a3565b61168091906132a3565b11156116da5760405162461bcd60e51b8152602060048201526024808201527f53656c6c2054617865732063616e6e6f7420626520686967686572207468616e6044820152632032352560e01b6064820152608401610a77565b6040517f846206d6c3449ac0b05841dfb88bf28b55aef00f96152490c69c96238048de15905f90a15050505050565b5f546001600160a01b031633146117325760405162461bcd60e51b8152600401610a77906131cd565b61173e6009600a613396565b61174890826133a4565b600d5550565b5f546001600160a01b031633146117775760405162461bcd60e51b8152600401610a77906131cd565b6001600160a01b03165f908152600460205260409020805460ff19169055565b5f546001600160a01b031633146117c05760405162461bcd60e51b8152600401610a77906131cd565b601580546001600160a01b0319166001600160a01b0392909216919091179055565b5f546001600160a01b0316331461180b5760405162461bcd60e51b8152600401610a77906131cd565b6001600160a01b0381166118705760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a77565b6118798161213e565b50565b5f546001600160a01b031633146118a55760405162461bcd60e51b8152600401610a77906131cd565b60118054600160ff19918216811790925543601255600980549091169091179055565b5f546001600160a01b031633146118f15760405162461bcd60e51b8152600401610a77906131cd565b6118fd6009600a613396565b61190790826133a4565b60105550565b6001600160a01b03831661196f5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a77565b6001600160a01b0382166119d05760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a77565b6001600160a01b038381165f8181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611a945760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610a77565b6001600160a01b038216611af65760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610a77565b5f8111611b575760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610a77565b611b608361133d565b811115611bc95760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b6064820152608401610a77565b600a546001906001600160a01b03858116911614801590611bf85750600a546001600160a01b03848116911614155b8015611c1c57506001600160a01b0384165f9081526004602052604090205460ff16155b8015611c4057506001600160a01b0383165f9081526004602052604090205460ff16155b15611c4857505f5b6001600160a01b0384165f9081526004602052604090205460ff16158015611c8857506001600160a01b0383165f9081526004602052604090205460ff16155b15611cd65760115460ff16611cd65760405162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b6044820152606401610a77565b600a546001600160a01b038581169116148015611d0b57506001600160a01b0383165f9081526004602052604090205460ff16155b8015611d1f5750600954610100900460ff16155b15611ddb57600e54821115611d765760405162461bcd60e51b815260206004820152601d60248201527f596f752061726520657863656564696e67206d61784275794c696d69740000006044820152606401610a77565b60105482611d838561133d565b611d8d91906132a3565b1115611ddb5760405162461bcd60e51b815260206004820181905260248201527f596f752061726520657863656564696e67206d617857616c6c65744c696d69746044820152606401610a77565b600a546001600160a01b03858116911614801590611e1157506001600160a01b0383165f9081526004602052604090205460ff16155b8015611e3557506001600160a01b0384165f9081526004602052604090205460ff16155b8015611e495750600954610100900460ff16155b15611f1a57600f54821115611ea05760405162461bcd60e51b815260206004820152601e60248201527f596f752061726520657863656564696e67206d617853656c6c4c696d697400006044820152606401610a77565b600a546001600160a01b03848116911614611f1a5760105482611ec28561133d565b611ecc91906132a3565b1115611f1a5760405162461bcd60e51b815260206004820181905260248201527f596f752061726520657863656564696e67206d617857616c6c65744c696d69746044820152606401610a77565b5f600d54611f273061133d565b6009549111159150610100900460ff16158015611f46575060095460ff165b8015611f4f5750805b8015611f695750600a546001600160a01b03868116911614155b8015611f8d57506001600160a01b0385165f9081526004602052604090205460ff16155b8015611fb157506001600160a01b0384165f9081526004602052604090205460ff16155b1561204d57600a546001600160a01b039081169085160361200f57600d546040805160a081018252601b548152601c546020820152601d5491810191909152601e546060820152601f54608082015261200a919061218d565b61204d565b600d546040805160a08101825260165481526017546020820152601854918101919091526019546060820152601a54608082015261204d919061218d565b600954610100900460ff168061207a57506001600160a01b0385165f9081526004602052604090205460ff165b8061209c57506001600160a01b0384165f9081526004602052604090205460ff165b156120a5575f91505b600a546120c79086908690869086906001600160a01b03808516911614612327565b5050505050565b5f805f6120d9612625565b90925090506120e88183613244565b9250505090565b6120f7612e6d565b61210284848461279f565b90506121178185856121126120ce565b612957565b60c088015260a0870152608086015260608501526040840152602083015281529392505050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6009805461ff00191661010017905560808101516060820151602083015160408401515f9392916121bd916132a3565b6121c791906132a3565b6121d191906132a3565b6121dc9060026133a4565b90505f818360400151856121f091906133a4565b6121fa9190613244565b90505f6122078286613231565b90504761221382612a2b565b5f61221e8247613231565b90505f8660400151866122319190613231565b61223b9083613244565b90505f87604001518261224e91906133a4565b90508015612260576122608682612ba0565b60208801515f906122728460026133a4565b61227c91906133a4565b9050801561229a5760135461229a906001600160a01b031682612c77565b60608901515f906122ac8560026133a4565b6122b691906133a4565b905080156122d4576014546122d4906001600160a01b031682612c77565b60808a01515f906122e68660026133a4565b6122f091906133a4565b9050801561230e5760155461230e906001600160a01b031682612c77565b50506009805461ff001916905550505050505050505050565b5f6123338484846120ef565b6001600160a01b0387165f9081526005602052604090205490915060ff1615612392576001600160a01b0386165f90815260026020526040902054612379908590613231565b6001600160a01b0387165f908152600260205260409020555b6001600160a01b0385165f9081526005602052604090205460ff16156123f3576101008101516001600160a01b0386165f908152600260205260409020546123da91906132a3565b6001600160a01b0386165f908152600260205260409020555b80516001600160a01b0387165f908152600160205260409020546124179190613231565b6001600160a01b038088165f908152600160209081526040808320949094558401519188168152919091205461244d91906132a3565b6001600160a01b0386165f90815260016020526040908190209190915581015115158061247e57505f816101200151115b15612496576124968160400151826101200151612d8c565b5f816080015111806124ac57505f816101600151115b15612541576124c48160800151826101600151612dbf565b306001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836101a0015184610180015185610140015186610160015161251b91906132a3565b61252591906132a3565b61252f91906132a3565b60405190815260200160405180910390a35b5f8160600151118061255757505f816101400151115b1561256f5761256f8160600151826101400151612e31565b5f8160a00151118061258557505f816101800151115b1561259d5761259d8160a00151826101800151612e45565b5f8160c0015111806125b357505f816101a00151115b156125cb576125cb8160c00151826101a00151612e59565b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83610100015160405161261591815260200190565b60405180910390a3505050505050565b600c54600b545f918291825b60085481101561276e578260015f6008848154811061265257612652613263565b5f9182526020808320909101546001600160a01b0316835282019290925260400190205411806126ba57508160025f6008848154811061269457612694613263565b5f9182526020808320909101546001600160a01b03168352820192909252604001902054115b156126d057600c54600b54945094505050509091565b60015f600883815481106126e6576126e6613263565b5f9182526020808320909101546001600160a01b031683528201929092526040019020546127149084613231565b925060025f6008838154811061272c5761272c613263565b5f9182526020808320909101546001600160a01b0316835282019290925260400190205461275a9083613231565b9150806127668161328b565b915050612631565b50600b54600c5461277f9190613244565b82101561279657600c54600b549350935050509091565b90939092509050565b6127a7612e6d565b826127b9576101008101849052610c87565b6127e66040518060a001604052805f81526020015f81526020015f81526020015f81526020015f81525090565b821561282357506040805160a081018252601b548152601c546020820152601d5491810191909152601e546060820152601f546080820152612856565b506040805160a08101825260165481526017546020820152601854918101919091526019546060820152601a5460808201525b805160649061286590876133a4565b61286f9190613244565b610120830152602081015160649061288790876133a4565b6128919190613244565b61014083015260408101516064906128a990876133a4565b6128b39190613244565b61016083015260608101516064906128cb90876133a4565b6128d59190613244565b61018083015260808101516064906128ed90876133a4565b6128f79190613244565b6101a08301819052610180830151610160840151610140850151610120860151612921908a613231565b61292b9190613231565b6129359190613231565b61293f9190613231565b6129499190613231565b610100830152509392505050565b5f808080808080612968888b6133a4565b96508861298557508594505f935083925082915081905080612a1d565b878b610120015161299691906133a4565b9450878b61014001516129a991906133a4565b9350878b61016001516129bc91906133a4565b9250878b61018001516129cf91906133a4565b9150878b6101a001516129e291906133a4565b9050808284866129f2898c613231565b6129fc9190613231565b612a069190613231565b612a109190613231565b612a1a9190613231565b95505b949950949992975094509450565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110612a5e57612a5e613263565b60200260200101906001600160a01b031690816001600160a01b031681525050600960029054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612acf573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612af391906133bb565b81600181518110612b0657612b06613263565b6001600160a01b039283166020918202929092010152600954612b32913091620100009004168461190d565b60095460405163791ac94760e01b8152620100009091046001600160a01b03169063791ac94790612b6f9085905f908690309042906004016133d6565b5f604051808303815f87803b158015612b86575f80fd5b505af1158015612b98573d5f803e3d5ffd5b505050505050565b600954612bbe9030906201000090046001600160a01b03168461190d565b6009546001600160a01b03620100009091041663f305d7198230855f80612bec5f546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015612c52573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906120c79190613445565b80471015612cc75760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610a77565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114612d10576040519150601f19603f3d011682016040523d82523d5f602084013e612d15565b606091505b50509050806114a55760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610a77565b81600c5f828254612d9d9190613231565b9091555050602080548291905f90612db69084906132a3565b90915550505050565b8060206002015f828254612dd391906132a3565b9091555050305f9081526005602052604090205460ff1615612e1357305f9081526002602052604081208054839290612e0d9084906132a3565b90915550505b305f9081526001602052604081208054849290612db69084906132a3565b8060206001015f828254612dd391906132a3565b8060206003015f828254612dd391906132a3565b8060206004015f828254612dd391906132a3565b604051806101c001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b5f60208284031215612ede575f80fd5b5035919050565b5f6020808352835180828501525f5b81811015612f1057858101830151858201604001528201612ef4565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611879575f80fd5b8035612f4f81612f30565b919050565b5f8060408385031215612f65575f80fd5b8235612f7081612f30565b946020939093013593505050565b5f805f60608486031215612f90575f80fd5b8335612f9b81612f30565b92506020840135612fab81612f30565b929592945050506040919091013590565b5f60208284031215612fcc575f80fd5b8135610c8781612f30565b5f805f805f60a08688031215612feb575f80fd5b505083359560208501359550604085013594606081013594506080013592509050565b5f806040838503121561301f575f80fd5b823561302a81612f30565b9150602083013561303a81612f30565b809150509250929050565b8015158114611879575f80fd5b8035612f4f81613045565b5f806040838503121561306e575f80fd5b82359150602083013561303a81613045565b5f8060408385031215613091575f80fd5b50508035926020909101359150565b5f80604083850312156130b1575f80fd5b82356130bc81612f30565b9150602083013561303a81613045565b634e487b7160e01b5f52604160045260245ffd5b5f80604083850312156130f1575f80fd5b823567ffffffffffffffff80821115613108575f80fd5b818501915085601f83011261311b575f80fd5b813560208282111561312f5761312f6130cc565b8160051b604051601f19603f83011681018181108682111715613154576131546130cc565b604052928352818301935084810182019289841115613171575f80fd5b948201945b838610156131965761318786612f44565b85529482019493820193613176565b96506131a59050878201613052565b9450505050509250929050565b5f602082840312156131c2575f80fd5b8135610c8781613045565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b5f60208284031215613212575f80fd5b8151610c8781613045565b634e487b7160e01b5f52601160045260245ffd5b81810381811115610b3857610b3861321d565b5f8261325e57634e487b7160e01b5f52601260045260245ffd5b500490565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52603160045260245ffd5b5f6001820161329c5761329c61321d565b5060010190565b80820180821115610b3857610b3861321d565b600181815b808511156132f057815f19048211156132d6576132d661321d565b808516156132e357918102915b93841c93908002906132bb565b509250929050565b5f8261330657506001610b38565b8161331257505f610b38565b816001811461332857600281146133325761334e565b6001915050610b38565b60ff8411156133435761334361321d565b50506001821b610b38565b5060208310610133831016604e8410600b8410161715613371575081810a610b38565b61337b83836132b6565b805f190482111561338e5761338e61321d565b029392505050565b5f610c8760ff8416836132f8565b8082028115828204841417610b3857610b3861321d565b5f602082840312156133cb575f80fd5b8151610c8781612f30565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b818110156134245784516001600160a01b0316835293830193918301916001016133ff565b50506001600160a01b03969096166060850152505050608001529392505050565b5f805f60608486031215613457575f80fd5b835192506020840151915060408401519050925092509256fea2646970667358221220d0ea74ceeaef015a01fd638de7028e1b72cc2f187579a3b99670fa234617ba8a64736f6c63430008140033

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

0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d

-----Decoded View---------------
Arg [0] : routerAddress (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d


Deployed Bytecode Sourcemap

3439:21262:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24292:196;;;;;;;;;;-1:-1:-1;24292:196:0;;;;;:::i;:::-;;:::i;:::-;;7484:83;;;;;;;;;;-1:-1:-1;7554:5:0;;;;;;;;;;;;;;;;;7484:83;;;;;;;:::i;:::-;;;;;;;;8244:214;;;;;;;;;;-1:-1:-1;8244:214:0;;;;;:::i;:::-;;:::i;:::-;;;1512:14:1;;1505:22;1487:41;;1475:2;1460:18;8244:214:0;1347:187:1;24502:154:0;;;;;;;;;;-1:-1:-1;24502:154:0;;;;;:::i;:::-;;:::i;7780:95::-;;;;;;;;;;-1:-1:-1;7860:7:0;;7780:95;;;2146:25:1;;;2134:2;2119:18;7780:95:0;2000:177:1;8466:414:0;;;;;;;;;;-1:-1:-1;8466:414:0;;;;;:::i;:::-;;:::i;4803:77::-;;;;;;;;;;-1:-1:-1;4803:77:0;;;;-1:-1:-1;;;;;4803:77:0;;;;;;-1:-1:-1;;;;;2346:32:1;;;2328:51;;2316:2;2301:18;4803:77:0;2182:203:1;4644:75:0;;;;;;;;;;-1:-1:-1;4644:75:0;;;;-1:-1:-1;;;;;4644:75:0;;;10433:248;;;;;;;;;;-1:-1:-1;10433:248:0;;;;;:::i;:::-;;:::i;7666:83::-;;;;;;;;;;-1:-1:-1;7666:83:0;;4146:1;2532:36:1;;2520:2;2505:18;7666:83:0;2390:184:1;11105:475:0;;;;;;;;;;-1:-1:-1;11105:475:0;;;;;:::i;:::-;;:::i;8888:207::-;;;;;;;;;;-1:-1:-1;8888:207:0;;;;;:::i;:::-;;:::i;12097:379::-;;;;;;;;;;-1:-1:-1;12097:379:0;;;;;:::i;:::-;;:::i;24062:154::-;;;;;;;;;;-1:-1:-1;24062:154:0;;;;;:::i;:::-;;:::i;11590:111::-;;;;;;;;;;-1:-1:-1;11590:111:0;;;;;:::i;:::-;;:::i;9787:486::-;;;;;;;;;;-1:-1:-1;9787:486:0;;;;;:::i;:::-;;:::i;23752:175::-;;;;;;;;;;-1:-1:-1;23752:175:0;;;;;:::i;:::-;;:::i;11960:129::-;;;;;;;;;;-1:-1:-1;11960:129:0;;;;;:::i;:::-;;:::i;10764:333::-;;;;;;;;;;-1:-1:-1;10764:333:0;;;;;:::i;:::-;;:::i;11829:123::-;;;;;;;;;;-1:-1:-1;11829:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;11917:27:0;11893:4;11917:27;;;:18;:27;;;;;;;;;11829:123;3849:48;;;;;;;;;;-1:-1:-1;3849:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;4452:52;;;;;;;;;;;;;;;;4511:54;;;;;;;;;;;;;;;;4726:70;;;;;;;;;;-1:-1:-1;4726:70:0;;;;-1:-1:-1;;;;;4726:70:0;;;4394:51;;;;;;;;;;;;;;;;3989:23;;;;;;;;;;-1:-1:-1;3989:23:0;;;;;;;;7883:198;;;;;;;;;;-1:-1:-1;7883:198:0;;;;;:::i;:::-;;:::i;1868:94::-;;;;;;;;;;;;;:::i;23120:104::-;;;;;;;;;;-1:-1:-1;23120:104:0;;;;;:::i;:::-;;:::i;5182:45::-;;;;;;;;;;-1:-1:-1;5182:45:0;;;;;;;;;;;;;;;;;;;;;;5152:25:1;;;5208:2;5193:18;;5186:34;;;;5236:18;;;5229:34;;;;5294:2;5279:18;;5272:34;5337:3;5322:19;;5315:35;5139:3;5124:19;5182:45:0;4893:463:1;9659:120:0;;;;;;;;;;-1:-1:-1;9659:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;9751:20:0;9727:4;9751:20;;;:11;:20;;;;;;;;;9659:120;1645:87;;;;;;;;;;-1:-1:-1;1691:7:0;1718:6;-1:-1:-1;;;;;1718:6:0;1645:87;;22777:209;;;;;;;;;;-1:-1:-1;22777:209:0;;;;;:::i;:::-;;:::i;23498:101::-;;;;;;;;;;-1:-1:-1;23498:101:0;;;;;:::i;:::-;;:::i;7573:87::-;;;;;;;;;;-1:-1:-1;7645:7:0;;;;;;;;;;;;-1:-1:-1;;;7645:7:0;;;;7573:87;;5473:36;;;;;;;;;;-1:-1:-1;5473:36:0;;;;;;;;;;;;;;;;;;9103:369;;;;;;;;;;-1:-1:-1;9103:369:0;;;;;:::i;:::-;;:::i;4083:19::-;;;;;;;;;;-1:-1:-1;4083:19:0;;;;-1:-1:-1;;;;;4083:19:0;;;9484:167;;;;;;;;;;-1:-1:-1;9484:167:0;;;;;:::i;:::-;;:::i;22994:114::-;;;;;;;;;;-1:-1:-1;22994:114:0;;;;;:::i;:::-;;:::i;23611:129::-;;;;;;;;;;-1:-1:-1;23611:129:0;;;;;:::i;:::-;;:::i;12488:297::-;;;;;;;;;;-1:-1:-1;12488:297:0;;;;;:::i;:::-;;:::i;23360:130::-;;;;;;;;;;-1:-1:-1;23360:130:0;;;;;:::i;:::-;;:::i;8093:143::-;;;;;;;;;;-1:-1:-1;8093:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;8205:19:0;;;8177:7;8205:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;8093:143;4329:58;;;;;;;;;;;;;;;;11709:110;;;;;;;;;;-1:-1:-1;11709:110:0;;;;;:::i;:::-;;:::i;23232:120::-;;;;;;;;;;-1:-1:-1;23232:120:0;;;;;:::i;:::-;;:::i;1970:192::-;;;;;;;;;;-1:-1:-1;1970:192:0;;;;;:::i;:::-;;:::i;5234:46::-;;;;;;;;;;-1:-1:-1;5234:46:0;;;;;;;;;;;;;;;;;;10281:144;;;;;;;;;;;;;:::i;4055:21::-;;;;;;;;;;-1:-1:-1;4055:21:0;;;;;;;-1:-1:-1;;;;;4055:21:0;;;23939:115;;;;;;;;;;-1:-1:-1;23939:115:0;;;;;:::i;:::-;;:::i;4574:31::-;;;;;;;;;;-1:-1:-1;4574:31:0;;;;;;;;24292:196;1691:7;1718:6;-1:-1:-1;;;;;1718:6:0;1146:10;1780:23;1772:68;;;;-1:-1:-1;;;1772:68:0;;;;;;;:::i;:::-;;;;;;;;;24392:9:::1;24367:21;:34;;24359:71;;;::::0;-1:-1:-1;;;24359:71:0;;7721:2:1;24359:71:0::1;::::0;::::1;7703:21:1::0;7760:2;7740:18;;;7733:30;7799:26;7779:18;;;7772:54;7843:18;;24359:71:0::1;7519:348:1::0;24359:71:0::1;24441:39;::::0;24449:10:::1;::::0;24441:39;::::1;;;::::0;24470:9;;24441:39:::1;::::0;;;24470:9;24449:10;24441:39;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;24292:196:::0;:::o;8244:214::-;8349:10;8320:4;8337:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;8337:32:0;;;;;;;;;:41;;;8389:39;8398:12;1146:10;;1066:98;8398:12;8412:7;8421:6;8389:8;:39::i;:::-;-1:-1:-1;8446:4:0;8244:214;;;;;:::o;24502:154::-;1691:7;1718:6;-1:-1:-1;;;;;1718:6:0;1146:10;1780:23;1772:68;;;;-1:-1:-1;;;1772:68:0;;;;;;;:::i;:::-;24607:41:::1;::::0;-1:-1:-1;;;24607:41:0;;-1:-1:-1;;;;;8064:32:1;;;24607:41:0::1;::::0;::::1;8046:51:1::0;8113:18;;;8106:34;;;24607:27:0;::::1;::::0;::::1;::::0;8019:18:1;;24607:41:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24502:154:::0;;;:::o;8466:414::-;8564:4;8581:36;8591:6;8599:9;8610:6;8581:9;:36::i;:::-;-1:-1:-1;;;;;8657:19:0;;8630:24;8657:19;;;:11;:19;;;;;;;;1146:10;8657:33;;;;;;;;8709:26;;;;8701:79;;;;-1:-1:-1;;;8701:79:0;;8603:2:1;8701:79:0;;;8585:21:1;8642:2;8622:18;;;8615:30;8681:34;8661:18;;;8654:62;-1:-1:-1;;;8732:18:1;;;8725:38;8780:19;;8701:79:0;8401:404:1;8701:79:0;8791:57;8800:6;1146:10;8822:25;8841:6;8822:16;:25;:::i;:::-;8791:8;:57::i;:::-;8868:4;8861:11;;;8466:414;;;;;;:::o;10433:248::-;10499:7;10538;;10527;:18;;10519:73;;;;-1:-1:-1;;;10519:73:0;;9277:2:1;10519:73:0;;;9259:21:1;9316:2;9296:18;;;9289:30;9355:34;9335:18;;;9328:62;-1:-1:-1;;;9406:18:1;;;9399:40;9456:19;;10519:73:0;9075:406:1;10519:73:0;10603:19;10626:10;:8;:10::i;:::-;10603:33;-1:-1:-1;10654:19:0;10603:33;10654:7;:19;:::i;11105:475::-;1691:7;1718:6;-1:-1:-1;;;;;1718:6:0;1146:10;1780:23;1772:68;;;;-1:-1:-1;;;1772:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11187:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;11179:56;;;::::0;-1:-1:-1;;;11179:56:0;;9910:2:1;11179:56:0::1;::::0;::::1;9892:21:1::0;9949:2;9929:18;;;9922:30;9988:25;9968:18;;;9961:53;10031:18;;11179:56:0::1;9708:347:1::0;11179:56:0::1;11251:9;11246:327;11270:9;:16:::0;11266:20;::::1;11246:327;;;11328:7;-1:-1:-1::0;;;;;11312:23:0::1;:9;11322:1;11312:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;11312:12:0::1;:23:::0;11308:254:::1;;11371:9;11381:16:::0;;:20:::1;::::0;11400:1:::1;::::0;11381:20:::1;:::i;:::-;11371:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;11356:9:::1;:12:::0;;-1:-1:-1;;;;;11371:31:0;;::::1;::::0;11366:1;;11356:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;11356:46:0::1;-1:-1:-1::0;;;;;11356:46:0;;::::1;;::::0;;11421:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;11460:11:::1;:20:::0;;;;:28;;-1:-1:-1;;11460:28:0::1;::::0;;11507:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;11507:15:0;;;;;-1:-1:-1;;;;;;11507:15:0::1;::::0;;;;;24441:39:::1;24292:196:::0;:::o;11308:254::-:1;11288:3:::0;::::1;::::0;::::1;:::i;:::-;;;;11246:327;;8888:207:::0;1146:10;8968:4;9017:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;9017:34:0;;;;;;;;;;8968:4;;8985:80;;9008:7;;9017:47;;9054:10;;9017:47;:::i;12097:379::-;1691:7;1718:6;-1:-1:-1;;;;;1718:6:0;1146:10;1780:23;1772:68;;;;-1:-1:-1;;;1772:68:0;;;;;;;:::i;:::-;12316:2:::1;12300:12:::0;12292:5;12279:10;12252:25:::1;12266:10:::0;12252:12;:25:::1;:::i;:::-;:38;;;;:::i;:::-;:46;;;;:::i;:::-;:61;;;;:::i;:::-;:66;;12244:114;;;::::0;-1:-1:-1;;;12244:114:0;;10796:2:1;12244:114:0::1;::::0;::::1;10778:21:1::0;10835:2;10815:18;;;10808:30;10874:34;10854:18;;;10847:62;-1:-1:-1;;;10925:18:1;;;10918:33;10968:19;;12244:114:0::1;10594:399:1::0;12244:114:0::1;12379:60;::::0;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;;;;;;;;;;;;;;12368:8:::1;:71:::0;;;;;;;;;;;;;;;;;;;12455:13;::::1;::::0;-1:-1:-1;;12455:13:0::1;12097:379:::0;;;;;:::o;24062:154::-;1691:7;1718:6;-1:-1:-1;;;;;1718:6:0;1146:10;1780:23;1772:68;;;;-1:-1:-1;;;1772:68:0;;;;;;;:::i;:::-;24156:6:::1;:27:::0;;-1:-1:-1;;;;;;24156:27:0::1;::::0;-1:-1:-1;;;;;24156:27:0;;::::1;;;::::0;;24194:4:::1;:14:::0;;-1:-1:-1;;;;;;24194:14:0::1;::::0;;;::::1;;::::0;;24062:154::o;11590:111::-;1691:7;1718:6;-1:-1:-1;;;;;1718:6:0;1146:10;1780:23;1772:68;;;;-1:-1:-1;;;1772:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11659:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;11659:34:0::1;11689:4;11659:34;::::0;;11590:111::o;9787:486::-;9885:7;9924;;9913;:18;;9905:62;;;;-1:-1:-1;;;9905:62:0;;11200:2:1;9905:62:0;;;11182:21:1;11239:2;11219:18;;;11212:30;11278:33;11258:18;;;11251:61;11329:18;;9905:62:0;10998:355:1;9905:62:0;9983:25;9978:288;;10025:28;10056:32;10067:7;10076:4;10082:5;10056:10;:32::i;:::-;10110:9;;-1:-1:-1;10103:16:0;;-1:-1:-1;10103:16:0;9978:288;10152:28;10183:32;10194:7;10203:4;10209:5;10183:10;:32::i;:::-;10237:17;;;;-1:-1:-1;10230:24:0;;-1:-1:-1;10230:24:0;23752:175;1691:7;1718:6;-1:-1:-1;;;;;1718:6:0;1146:10;1780:23;1772:68;;;;-1:-1:-1;;;1772:68:0;;;;;;;:::i;:::-;23855:14:::1;4146:1:::0;23855:2:::1;:14;:::i;:::-;23846:23;::::0;:6;:23:::1;:::i;:::-;23832:11;:37:::0;23905:14:::1;4146:1:::0;23905:2:::1;:14;:::i;:::-;23895:24;::::0;:7;:24:::1;:::i;:::-;23880:12;:39:::0;-1:-1:-1;;23752:175:0:o;11960:129::-;1691:7;1718:6;-1:-1:-1;;;;;1718:6:0;1146:10;1780:23;1772:68;;;;-1:-1:-1;;;1772:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12048:24:0;;;::::1;;::::0;;;:16:::1;:24;::::0;;;;:33;;-1:-1:-1;;12048:33:0::1;::::0;::::1;;::::0;;;::::1;::::0;;11960:129::o;10764:333::-;1691:7;1718:6;-1:-1:-1;;;;;1718:6:0;1146:10;1780:23;1772:68;;;;-1:-1:-1;;;1772:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;10847:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;10846:21;10838:61;;;::::0;-1:-1:-1;;;10838:61:0;;13116:2:1;10838:61:0::1;::::0;::::1;13098:21:1::0;13155:2;13135:18;;;13128:30;13194:29;13174:18;;;13167:57;13241:18;;10838:61:0::1;12914:351:1::0;10838:61:0::1;-1:-1:-1::0;;;;;10913:16:0;::::1;10932:1;10913:16:::0;;;:7:::1;:16;::::0;;;;;:20;10910:108:::1;;-1:-1:-1::0;;;;;10989:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;10969:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;10950:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;10910:108:::1;-1:-1:-1::0;;;;;11028:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;11028:27:0::1;11051:4;11028:27:::0;;::::1;::::0;;;11066:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;11066:23:0::1;::::0;;::::1;::::0;;10764:333::o;7883:198::-;-1:-1:-1;;;;;7973:20:0;;7949:7;7973:20;;;:11;:20;;;;;;;;7969:49;;;-1:-1:-1;;;;;;8002:16:0;;;;;:7;:16;;;;;;;7883:198::o;7969:49::-;-1:-1:-1;;;;;8056:16:0;;;;;;:7;:16;;;;;;8036:37;;:19;:37::i;1868:94::-;1691:7;1718:6;-1:-1:-1;;;;;1718:6:0;1146:10;1780:23;1772:68;;;;-1:-1:-1;;;1772:68:0;;;;;;;:::i;:::-;1933:21:::1;1951:1;1933:9;:21::i;:::-;1868:94::o:0;23120:104::-;1691:7;1718:6;-1:-1:-1;;;;;1718:6:0;1146:10;1780:23;1772:68;;;;-1:-1:-1;;;1772:68:0;;;;;;;:::i;:::-;23194:10:::1;:22:::0;;-1:-1:-1;;;;;;23194:22:0::1;-1:-1:-1::0;;;;;23194:22:0;;;::::1;::::0;;;::::1;::::0;;23120:104::o;22777:209::-;1691:7;1718:6;-1:-1:-1;;;;;1718:6:0;1146:10;1780:23;1772:68;;;;-1:-1:-1;;;1772:68:0;;;;;;;:::i;:::-;22873:9:::1;22869:110;22892:8;:15;22888:1;:19;22869:110;;;22962:5;22928:18;:31;22947:8;22956:1;22947:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;22928:31:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;22928:31:0;:39;;-1:-1:-1;;22928:39:0::1;::::0;::::1;;::::0;;;::::1;::::0;;22909:3;::::1;::::0;::::1;:::i;:::-;;;;22869:110;;;;22777:209:::0;;:::o;23498:101::-;1691:7;1718:6;-1:-1:-1;;;;;1718:6:0;1146:10;1780:23;1772:68;;;;-1:-1:-1;;;1772:68:0;;;;;;;:::i;:::-;23569:11:::1;:22:::0;;-1:-1:-1;;23569:22:0::1;::::0;::::1;;::::0;;;::::1;::::0;;23498:101::o;9103:369::-;1146:10;9188:4;9232:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;9232:34:0;;;;;;;;;;9285:35;;;;9277:85;;;;-1:-1:-1;;;9277:85:0;;13472:2:1;9277:85:0;;;13454:21:1;13511:2;13491:18;;;13484:30;13550:34;13530:18;;;13523:62;-1:-1:-1;;;13601:18:1;;;13594:35;13646:19;;9277:85:0;13270:401:1;9277:85:0;9373:67;1146:10;9396:7;9405:34;9424:15;9405:16;:34;:::i;9373:67::-;-1:-1:-1;9460:4:0;;9103:369;-1:-1:-1;;;9103:369:0:o;9484:167::-;9562:4;9583:40;9593:10;9605:9;9616:6;9583:9;:40::i;22994:114::-;1691:7;1718:6;-1:-1:-1;;;;;1718:6:0;1146:10;1780:23;1772:68;;;;-1:-1:-1;;;1772:68:0;;;;;;;:::i;:::-;23073:15:::1;:27:::0;;-1:-1:-1;;;;;;23073:27:0::1;-1:-1:-1::0;;;;;23073:27:0;;;::::1;::::0;;;::::1;::::0;;22994:114::o;23611:129::-;1691:7;1718:6;-1:-1:-1;;;;;1718:6:0;1146:10;1780:23;1772:68;;;;-1:-1:-1;;;1772:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23700:24:0;;;::::1;;::::0;;;:15:::1;:24;::::0;;;;:32;;-1:-1:-1;;23700:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;23611:129::o;12488:297::-;1691:7;1718:6;-1:-1:-1;;;;;1718:6:0;1146:10;1780:23;1772:68;;;;-1:-1:-1;;;1772:68:0;;;;;;;:::i;:::-;12705:2:::1;12689:12:::0;12681:5;12668:10;12641:25:::1;12655:10:::0;12641:12;:25:::1;:::i;:::-;:38;;;;:::i;:::-;:46;;;;:::i;:::-;:61;;;;:::i;:::-;:66;;12633:115;;;::::0;-1:-1:-1;;;12633:115:0;;13878:2:1;12633:115:0::1;::::0;::::1;13860:21:1::0;13917:2;13897:18;;;13890:30;13956:34;13936:18;;;13929:62;-1:-1:-1;;;14007:18:1;;;14000:34;14051:19;;12633:115:0::1;13676:400:1::0;12633:115:0::1;12764:13;::::0;::::1;::::0;;;::::1;12488:297:::0;;;;;:::o;23360:130::-;1691:7;1718:6;-1:-1:-1;;;;;1718:6:0;1146:10;1780:23;1772:68;;;;-1:-1:-1;;;1772:68:0;;;;;;;:::i;:::-;23469:13:::1;4146:1;23469:2;:13;:::i;:::-;23460:22;::::0;:6;:22:::1;:::i;:::-;23439:18;:43:::0;-1:-1:-1;23360:130:0:o;11709:110::-;1691:7;1718:6;-1:-1:-1;;;;;1718:6:0;1146:10;1780:23;1772:68;;;;-1:-1:-1;;;1772:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11776:27:0::1;11806:5;11776:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;11776:35:0::1;::::0;;11709:110::o;23232:120::-;1691:7;1718:6;-1:-1:-1;;;;;1718:6:0;1146:10;1780:23;1772:68;;;;-1:-1:-1;;;1772:68:0;;;;;;;:::i;:::-;23313:17:::1;:29:::0;;-1:-1:-1;;;;;;23313:29:0::1;-1:-1:-1::0;;;;;23313:29:0;;;::::1;::::0;;;::::1;::::0;;23232:120::o;1970:192::-;1691:7;1718:6;-1:-1:-1;;;;;1718:6:0;1146:10;1780:23;1772:68;;;;-1:-1:-1;;;1772:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2059:22:0;::::1;2051:73;;;::::0;-1:-1:-1;;;2051:73:0;;14283:2:1;2051:73:0::1;::::0;::::1;14265:21:1::0;14322:2;14302:18;;;14295:30;14361:34;14341:18;;;14334:62;-1:-1:-1;;;14412:18:1;;;14405:36;14458:19;;2051:73:0::1;14081:402:1::0;2051:73:0::1;2135:19;2145:8;2135:9;:19::i;:::-;1970:192:::0;:::o;10281:144::-;1691:7;1718:6;-1:-1:-1;;;;;1718:6:0;1146:10;1780:23;1772:68;;;;-1:-1:-1;;;1772:68:0;;;;;;;:::i;:::-;10331:11:::1;:18:::0;;10345:4:::1;-1:-1:-1::0;;10331:18:0;;::::1;::::0;::::1;::::0;;;10374:12:::1;10360:11;:26:::0;10397:11:::1;:18:::0;;;;::::1;::::0;;::::1;::::0;;10281:144::o;23939:115::-;1691:7;1718:6;-1:-1:-1;;;;;1718:6:0;1146:10;1780:23;1772:68;;;;-1:-1:-1;;;1772:68:0;;;;;;;:::i;:::-;24032:14:::1;4146:1:::0;24032:2:::1;:14;:::i;:::-;24023:23;::::0;:6;:23:::1;:::i;:::-;24006:14;:40:::0;-1:-1:-1;23939:115:0:o;16851:335::-;-1:-1:-1;;;;;16944:19:0;;16936:68;;;;-1:-1:-1;;;16936:68:0;;14690:2:1;16936:68:0;;;14672:21:1;14729:2;14709:18;;;14702:30;14768:34;14748:18;;;14741:62;-1:-1:-1;;;14819:18:1;;;14812:34;14863:19;;16936:68:0;14488:400:1;16936:68:0;-1:-1:-1;;;;;17023:21:0;;17015:68;;;;-1:-1:-1;;;17015:68:0;;15095:2:1;17015:68:0;;;15077:21:1;15134:2;15114:18;;;15107:30;15173:34;15153:18;;;15146:62;-1:-1:-1;;;15224:18:1;;;15217:32;15266:19;;17015:68:0;14893:398:1;17015:68:0;-1:-1:-1;;;;;17094:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;17146:32;;2146:25:1;;;17146:32:0;;2119:18:1;17146:32:0;;;;;;;16851:335;;;:::o;17194:1769::-;-1:-1:-1;;;;;17278:18:0;;17270:68;;;;-1:-1:-1;;;17270:68:0;;15498:2:1;17270:68:0;;;15480:21:1;15537:2;15517:18;;;15510:30;15576:34;15556:18;;;15549:62;-1:-1:-1;;;15627:18:1;;;15620:35;15672:19;;17270:68:0;15296:401:1;17270:68:0;-1:-1:-1;;;;;17353:16:0;;17345:64;;;;-1:-1:-1;;;17345:64:0;;15904:2:1;17345:64:0;;;15886:21:1;15943:2;15923:18;;;15916:30;15982:34;15962:18;;;15955:62;-1:-1:-1;;;16033:18:1;;;16026:33;16076:19;;17345:64:0;15702:399:1;17345:64:0;17433:1;17424:6;:10;17416:64;;;;-1:-1:-1;;;17416:64:0;;16308:2:1;17416:64:0;;;16290:21:1;16347:2;16327:18;;;16320:30;16386:34;16366:18;;;16359:62;-1:-1:-1;;;16437:18:1;;;16430:39;16486:19;;17416:64:0;16106:405:1;17416:64:0;17505:15;17515:4;17505:9;:15::i;:::-;17495:6;:25;;17487:86;;;;-1:-1:-1;;;17487:86:0;;16718:2:1;17487:86:0;;;16700:21:1;16757:2;16737:18;;;16730:30;16796:34;16776:18;;;16769:62;-1:-1:-1;;;16847:18:1;;;16840:47;16904:19;;17487:86:0;16516:413:1;17487:86:0;17657:4;;17635;;-1:-1:-1;;;;;17649:12:0;;;17657:4;;17649:12;;;;:26;;-1:-1:-1;17671:4:0;;-1:-1:-1;;;;;17665:10:0;;;17671:4;;17665:10;;17649:26;:55;;;;-1:-1:-1;;;;;;17680:24:0;;;;;;:18;:24;;;;;;;;17679:25;17649:55;:82;;;;-1:-1:-1;;;;;;17709:22:0;;;;;;:18;:22;;;;;;;;17708:23;17649:82;17646:132;;;-1:-1:-1;17753:5:0;17646:132;-1:-1:-1;;;;;17790:24:0;;;;;;:18;:24;;;;;;;;17789:25;:52;;;;-1:-1:-1;;;;;;17819:22:0;;;;;;:18;:22;;;;;;;;17818:23;17789:52;17786:120;;;17861:11;;;;17853:43;;;;-1:-1:-1;;;17853:43:0;;17136:2:1;17853:43:0;;;17118:21:1;17175:2;17155:18;;;17148:30;-1:-1:-1;;;17194:18:1;;;17187:50;17254:18;;17853:43:0;16934:344:1;17853:43:0;17929:4;;-1:-1:-1;;;;;17921:12:0;;;17929:4;;17921:12;:39;;;;-1:-1:-1;;;;;;17938:22:0;;;;;;:18;:22;;;;;;;;17937:23;17921:39;:52;;;;-1:-1:-1;17965:8:0;;;;;;;17964:9;17921:52;17918:234;;;18003:11;;17993:6;:21;;17985:63;;;;-1:-1:-1;;;17985:63:0;;17485:2:1;17985:63:0;;;17467:21:1;17524:2;17504:18;;;17497:30;17563:31;17543:18;;;17536:59;17612:18;;17985:63:0;17283:353:1;17985:63:0;18093:14;;18083:6;18067:13;18077:2;18067:9;:13::i;:::-;:22;;;;:::i;:::-;:40;;18059:85;;;;-1:-1:-1;;;18059:85:0;;17843:2:1;18059:85:0;;;17825:21:1;;;17862:18;;;17855:30;17921:34;17901:18;;;17894:62;17973:18;;18059:85:0;17641:356:1;18059:85:0;18175:4;;-1:-1:-1;;;;;18167:12:0;;;18175:4;;18167:12;;;;:39;;-1:-1:-1;;;;;;18184:22:0;;;;;;:18;:22;;;;;;;;18183:23;18167:39;:68;;;;-1:-1:-1;;;;;;18211:24:0;;;;;;:18;:24;;;;;;;;18210:25;18167:68;:81;;;;-1:-1:-1;18240:8:0;;;;;;;18239:9;18167:81;18164:305;;;18278:12;;18268:6;:22;;18260:65;;;;-1:-1:-1;;;18260:65:0;;18204:2:1;18260:65:0;;;18186:21:1;18243:2;18223:18;;;18216:30;18282:32;18262:18;;;18255:60;18332:18;;18260:65:0;18002:354:1;18260:65:0;18345:4;;-1:-1:-1;;;;;18339:10:0;;;18345:4;;18339:10;18336:126;;18399:14;;18389:6;18373:13;18383:2;18373:9;:13::i;:::-;:22;;;;:::i;:::-;:40;;18365:85;;;;-1:-1:-1;;;18365:85:0;;17843:2:1;18365:85:0;;;17825:21:1;;;17862:18;;;17855:30;17921:34;17901:18;;;17894:62;17973:18;;18365:85:0;17641:356:1;18365:85:0;18483:12;18526:18;;18498:24;18516:4;18498:9;:24::i;:::-;18555:8;;-1:-1:-1;;18498:46:0;;-1:-1:-1;18555:8:0;;;;;18554:9;:24;;;;-1:-1:-1;18567:11:0;;;;18554:24;:35;;;;;18582:7;18554:35;:51;;;;-1:-1:-1;18601:4:0;;-1:-1:-1;;;;;18593:12:0;;;18601:4;;18593:12;;18554:51;:80;;;;-1:-1:-1;;;;;;18610:24:0;;;;;;:18;:24;;;;;;;;18609:25;18554:80;:107;;;;-1:-1:-1;;;;;;18639:22:0;;;;;;:18;:22;;;;;;;;18638:23;18554:107;18551:252;;;18682:4;;-1:-1:-1;;;;;18682:4:0;;;18676:10;;;;18673:122;;18704:18;;18689:45;;;;;;;;18724:9;18689:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18704:18;18689:14;:45::i;:::-;18673:122;;;18766:18;;18751:44;;;;;;;;18786:8;18751:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18766:18;18751:14;:44::i;:::-;18814:8;;;;;;;;:36;;-1:-1:-1;;;;;;18826:24:0;;;;;;:18;:24;;;;;;;;18814:36;:62;;;-1:-1:-1;;;;;;18854:22:0;;;;;;:18;:22;;;;;;;;18814:62;18811:82;;;18888:5;18878:15;;18811:82;18954:4;;18906:53;;18921:4;;18927:2;;18931:6;;18939:7;;-1:-1:-1;;;;;18948:10:0;;;18954:4;;18948:10;18906:14;:53::i;:::-;17263:1700;;17194:1769;;;:::o;16137:158::-;16178:7;16199:15;16216;16235:19;:17;:19::i;:::-;16198:56;;-1:-1:-1;16198:56:0;-1:-1:-1;16272:15:0;16198:56;;16272:15;:::i;:::-;16265:22;;;;16137:158;:::o;14133:440::-;14219:36;;:::i;:::-;14280:37;14292:7;14301;14310:6;14280:11;:37::i;:::-;14268:49;;14486:52;14498:9;14509:7;14518;14527:10;:8;:10::i;:::-;14486:11;:52::i;:::-;14460:22;;;14328:210;14443:15;;;14328:210;14421:20;;;14328:210;14399:20;;;14328:210;14375:22;;;14328:210;14348:25;;;14328:210;;;14133:440;;;;;:::o;2170:173::-;2226:16;2245:6;;-1:-1:-1;;;;;2262:17:0;;;-1:-1:-1;;;;;;2262:17:0;;;;;;2295:40;;2245:6;;;;;;;2295:40;;2226:16;2295:40;2215:128;2170:173;:::o;20326:1360::-;6064:8;:15;;-1:-1:-1;;6064:15:0;;;;;20493:16:::1;::::0;::::1;::::0;20481:9:::1;::::0;::::1;::::0;20464:14:::1;::::0;::::1;::::0;20447::::1;::::0;::::1;::::0;6064:15;;20493:16;20481:9;20447:31:::1;::::0;::::1;:::i;:::-;:43;;;;:::i;:::-;:62;;;;:::i;:::-;20446:68;::::0;20513:1:::1;20446:68;:::i;:::-;20424:90;;20525:32;20595:11;20578:4;:14;;;20560:15;:32;;;;:::i;:::-;:46;;;;:::i;:::-;20525:81:::0;-1:-1:-1;20617:14:0::1;20634:42;20525:81:::0;20634:15;:42:::1;:::i;:::-;20617:59:::0;-1:-1:-1;20714:21:0::1;20748:24;20617:59:::0;20748:16:::1;:24::i;:::-;20785:20;20808:38;20832:14:::0;20808:21:::1;:38;:::i;:::-;20785:61;;20857:19;20908:4;:14;;;20894:11;:28;;;;:::i;:::-;20878:45;::::0;:12;:45:::1;:::i;:::-;20857:66;;20934:29;20980:4;:14;;;20966:11;:28;;;;:::i;:::-;20934:60:::0;-1:-1:-1;21010:25:0;;21007:158:::1;;21092:61;21105:24;21131:21;21092:12;:61::i;:::-;21218:14;::::0;::::1;::::0;21177:20:::1;::::0;21200:15:::1;:11:::0;21214:1:::1;21200:15;:::i;:::-;:32;;;;:::i;:::-;21177:55:::0;-1:-1:-1;21246:16:0;;21243:95:::1;;21286:15;::::0;21278:48:::1;::::0;-1:-1:-1;;;;;21286:15:0::1;21313:12:::0;21278:34:::1;:48::i;:::-;21384:9;::::0;::::1;::::0;21348:15:::1;::::0;21366::::1;:11:::0;21380:1:::1;21366:15;:::i;:::-;:27;;;;:::i;:::-;21348:45:::0;-1:-1:-1;21407:11:0;;21404:80:::1;;21442:10;::::0;21434:38:::1;::::0;-1:-1:-1;;;;;21442:10:0::1;21464:7:::0;21434:29:::1;:38::i;:::-;21537:16;::::0;::::1;::::0;21494:22:::1;::::0;21519:15:::1;:11:::0;21533:1:::1;21519:15;:::i;:::-;:34;;;;:::i;:::-;21494:59:::0;-1:-1:-1;21567:18:0;;21564:101:::1;;21609:17;::::0;21601:52:::1;::::0;-1:-1:-1;;;;;21609:17:0::1;21638:14:::0;21601:36:::1;:52::i;:::-;-1:-1:-1::0;;6102:8:0;:16;;-1:-1:-1;;6102:16:0;;;-1:-1:-1;;;;;;;;;;20326:1360:0:o;19046:1272::-;19170:28;19201:36;19212:7;19221;19230:6;19201:10;:36::i;:::-;-1:-1:-1;;;;;19254:19:0;;;;;;:11;:19;;;;;;19170:67;;-1:-1:-1;19254:19:0;;19250:115;;;-1:-1:-1;;;;;19330:15:0;;;;;;:7;:15;;;;;;:23;;19346:7;;19330:23;:::i;:::-;-1:-1:-1;;;;;19312:15:0;;;;;;:7;:15;;;;;:41;19250:115;-1:-1:-1;;;;;19379:22:0;;;;;;:11;:22;;;;;;;;19375:130;;;19476:17;;;;-1:-1:-1;;;;;19457:18:0;;;;;;:7;:18;;;;;;:36;;19476:17;19457:36;:::i;:::-;-1:-1:-1;;;;;19436:18:0;;;;;;:7;:18;;;;;:57;19375:130;19551:9;;-1:-1:-1;;;;;19535:15:0;;19551:9;19535:15;;;:7;:15;;;;;;:25;;19551:9;19535:25;:::i;:::-;-1:-1:-1;;;;;19517:15:0;;;;;;;:7;:15;;;;;;;;:43;;;;19611:17;;;19592:18;;;;;;;;;;:36;;19611:17;19592:36;:::i;:::-;-1:-1:-1;;;;;19571:18:0;;;;;;:7;:18;;;;;;;:57;;;;19652:14;;;:18;;;:40;;;19691:1;19674;:14;;;:18;19652:40;19649:96;;;19694:51;19714:1;:14;;;19730:1;:14;;;19694:19;:51::i;:::-;19774:1;19759;:12;;;:16;:36;;;;19794:1;19779;:12;;;:16;19759:36;19756:216;;;19812:41;19827:1;:12;;;19840:1;:12;;;19812:14;:41::i;:::-;19898:4;-1:-1:-1;;;;;19873:87:0;19882:6;-1:-1:-1;;;;;19873:87:0;;19945:1;:14;;;19935:1;:7;;;19920:1;:12;;;19905:1;:12;;;:27;;;;:::i;:::-;:37;;;;:::i;:::-;:54;;;;:::i;:::-;19873:87;;2146:25:1;;;2134:2;2119:18;19873:87:0;;;;;;;19756:216;20000:1;19985;:12;;;:16;:36;;;;20020:1;20005;:12;;;:16;19985:36;19982:83;;;20023:42;20038:1;:12;;;20052:1;:12;;;20023:14;:42::i;:::-;20089:1;20079;:7;;;:11;:26;;;;20104:1;20094;:7;;;:11;20079:26;20076:58;;;20107:27;20117:1;:7;;;20126:1;:7;;;20107:9;:27::i;:::-;20165:1;20148;:14;;;:18;:40;;;;20187:1;20170;:14;;;:18;20148:40;20145:93;;;20190:48;20207:1;:14;;;20223:1;:14;;;20190:16;:48::i;:::-;20271:9;-1:-1:-1;;;;;20254:46:0;20263:6;-1:-1:-1;;;;;20254:46:0;;20282:1;:17;;;20254:46;;;;2146:25:1;;2134:2;2119:18;;2000:177;20254:46:0;;;;;;;;19157:1161;19046:1272;;;;;:::o;16303:540::-;16400:7;;16436;;16353;;;;;16454:279;16478:9;:16;16474:20;;16454:279;;;16544:7;16520;:21;16528:9;16538:1;16528:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;16528:12:0;16520:21;;;;;;;;;;;;;:31;;:66;;;16579:7;16555;:21;16563:9;16573:1;16563:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;16563:12:0;16555:21;;;;;;;;;;;;;:31;16520:66;16516:97;;;16596:7;;16605;;16588:25;;;;;;;16303:540;;:::o;16516:97::-;16646:7;:21;16654:9;16664:1;16654:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;16654:12:0;16646:21;;;;;;;;;;;;;16638:29;;:7;:29;:::i;:::-;16628:39;;16700:7;:21;16708:9;16718:1;16708:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;16708:12:0;16700:21;;;;;;;;;;;;;16692:29;;:7;:29;:::i;:::-;16682:39;-1:-1:-1;16496:3:0;;;;:::i;:::-;;;;16454:279;;;;16765:7;;16757;;:15;;;;:::i;:::-;16747:7;:25;16743:56;;;16782:7;;16791;;16774:25;;;;;;16303:540;;:::o;16743:56::-;16818:7;;16827;;-1:-1:-1;16303:540:0;-1:-1:-1;16303:540:0:o;14581:709::-;14668:28;;:::i;:::-;14715:7;14711:86;;14737:17;;;:27;;;14777:8;;14711:86;14807:17;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14807:17:0;14838:6;14835:58;;;-1:-1:-1;14846:16:0;;;;;;;;14853:9;14846:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14835:58;;;-1:-1:-1;14878:15:0;;;;;;;;14885:8;14878:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14835:58;14939:16;;14956:3;;14931:24;;:7;:24;:::i;:::-;:28;;;;:::i;:::-;14914:14;;;:45;14993:14;;;;15008:3;;14985:22;;:7;:22;:::i;:::-;:26;;;;:::i;:::-;14970:12;;;:41;15045:14;;;;15060:3;;15037:22;;:7;:22;:::i;:::-;:26;;;;:::i;:::-;15022:12;;;:41;15092:9;;;;15102:3;;15084:17;;:7;:17;:::i;:::-;:21;;;;:::i;:::-;15074:7;;;:31;15141:16;;;;15158:3;;15133:24;;:7;:24;:::i;:::-;:28;;;;:::i;:::-;15116:14;;;:45;;;15241:7;;;;15228:12;;;;15215;;;;15200:14;;;;15192:22;;:7;:22;:::i;:::-;:35;;;;:::i;:::-;:48;;;;:::i;:::-;:56;;;;:::i;:::-;:71;;;;:::i;:::-;15172:17;;;:91;-1:-1:-1;14581:709:0;;;;;:::o;15298:831::-;15423:15;;;;;;;15583:19;15591:11;15583:7;:19;:::i;:::-;15573:29;;15619:7;15615:73;;-1:-1:-1;15648:7:0;;-1:-1:-1;15666:1:0;;-1:-1:-1;15666:1:0;;-1:-1:-1;15666:1:0;;-1:-1:-1;15666:1:0;;-1:-1:-1;15666:1:0;15641:35;;15615:73;15730:11;15715:1;:14;;;:26;;;;:::i;:::-;15700:41;;15778:11;15765:1;:12;;;:24;;;;:::i;:::-;15752:37;;15826:11;15813:1;:12;;;:24;;;;:::i;:::-;15800:37;;15864:11;15856:1;:7;;;:19;;;;:::i;:::-;15848:27;;15916:11;15901:1;:14;;;:26;;;;:::i;:::-;15886:41;-1:-1:-1;15886:41:0;16000:5;15989:10;15978;15957:20;15965:12;15957:7;:20;:::i;:::-;:31;;;;:::i;:::-;:42;;;;:::i;:::-;:48;;;;:::i;:::-;:61;;;;:::i;:::-;15938:80;;15298:831;;;;;;;;;;;;;:::o;22197:562::-;22347:16;;;22361:1;22347:16;;;;;;;;22323:21;;22347:16;;;;;;;;;;-1:-1:-1;22347:16:0;22323:40;;22392:4;22374;22379:1;22374:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;22374:23:0;;;-1:-1:-1;;;;;22374:23:0;;;;;22418:6;;;;;;;;;-1:-1:-1;;;;;22418:6:0;-1:-1:-1;;;;;22418:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22408:4;22413:1;22408:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;22408:23:0;;;:7;;;;;;;;;:23;22476:6;;22444:53;;22461:4;;22476:6;;;;22485:11;22444:8;:53::i;:::-;22536:6;;:215;;-1:-1:-1;;;22536:215:0;;:6;;;;-1:-1:-1;;;;;22536:6:0;;:57;;:215;;22608:11;;22634:1;;22678:4;;22705;;22725:15;;22536:215;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22252:507;22197:562;:::o;21694:495::-;21874:6;;21842:53;;21859:4;;21874:6;;;-1:-1:-1;;;;;21874:6:0;21883:11;21842:8;:53::i;:::-;21938:6;;-1:-1:-1;;;;;21938:6:0;;;;;:22;21968:9;22001:4;22021:11;22047:1;;22133:7;1691;1718:6;-1:-1:-1;;;;;1718:6:0;;1645:87;22133:7;21938:243;;;;;;-1:-1:-1;;;;;;21938:243:0;;;-1:-1:-1;;;;;19961:15:1;;;21938:243:0;;;19943:34:1;19993:18;;;19986:34;;;;20036:18;;;20029:34;;;;20079:18;;;20072:34;20143:15;;;20122:19;;;20115:44;22155:15:0;20175:19:1;;;20168:35;19877:19;;21938:243:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;3113:317::-;3228:6;3203:21;:31;;3195:73;;;;-1:-1:-1;;;3195:73:0;;20727:2:1;3195:73:0;;;20709:21:1;20766:2;20746:18;;;20739:30;20805:31;20785:18;;;20778:59;20854:18;;3195:73:0;20525:353:1;3195:73:0;3282:12;3300:9;-1:-1:-1;;;;;3300:14:0;3322:6;3300:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3281:52;;;3352:7;3344:78;;;;-1:-1:-1;;;3344:78:0;;21295:2:1;3344:78:0;;;21277:21:1;21334:2;21314:18;;;21307:30;21373:34;21353:18;;;21346:62;21444:28;21424:18;;;21417:56;21490:19;;3344:78:0;21093:422:1;12793:171:0;12895:12;12885:7;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;12918:11:0;:38;;12944:12;;12918:11;:23;;:38;;12944:12;;12918:38;:::i;:::-;;;;-1:-1:-1;;;;12793:171:0:o;12972:284::-;13079:10;13055:11;:21;;;:34;;;;;;;:::i;:::-;;;;-1:-1:-1;;13125:4:0;13105:26;;;;:11;:26;;;;;;;;13102:101;;;13173:4;13157:22;;;;:7;:22;;;;;:34;;13181:10;;13157:22;:34;;13181:10;;13157:34;:::i;:::-;;;;-1:-1:-1;;13102:101:0;13229:4;13213:22;;;;:7;:22;;;;;:35;;13238:10;;13213:22;:35;;13238:10;;13213:35;:::i;13264:284::-;13371:10;13347:11;:21;;;:34;;;;;;;:::i;13560:249::-;13647:5;13628:11;:16;;;:24;;;;;;;:::i;13817:298::-;13932:12;13906:11;:23;;;:38;;;;;;;:::i;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:180:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;165:23:1;;14:180;-1:-1:-1;14:180:1:o;199:548::-;311:4;340:2;369;358:9;351:21;401:6;395:13;444:6;439:2;428:9;424:18;417:34;469:1;479:140;493:6;490:1;487:13;479:140;;;588:14;;;584:23;;578:30;554:17;;;573:2;550:26;543:66;508:10;;479:140;;;483:3;668:1;663:2;654:6;643:9;639:22;635:31;628:42;738:2;731;727:7;722:2;714:6;710:15;706:29;695:9;691:45;687:54;679:62;;;;199:548;;;;:::o;752:131::-;-1:-1:-1;;;;;827:31:1;;817:42;;807:70;;873:1;870;863:12;888:134;956:20;;985:31;956:20;985:31;:::i;:::-;888:134;;;:::o;1027:315::-;1095:6;1103;1156:2;1144:9;1135:7;1131:23;1127:32;1124:52;;;1172:1;1169;1162:12;1124:52;1211:9;1198:23;1230:31;1255:5;1230:31;:::i;:::-;1280:5;1332:2;1317:18;;;;1304:32;;-1:-1:-1;;;1027:315:1:o;1539:456::-;1616:6;1624;1632;1685:2;1673:9;1664:7;1660:23;1656:32;1653:52;;;1701:1;1698;1691:12;1653:52;1740:9;1727:23;1759:31;1784:5;1759:31;:::i;:::-;1809:5;-1:-1:-1;1866:2:1;1851:18;;1838:32;1879:33;1838:32;1879:33;:::i;:::-;1539:456;;1931:7;;-1:-1:-1;;;1985:2:1;1970:18;;;;1957:32;;1539:456::o;2579:247::-;2638:6;2691:2;2679:9;2670:7;2666:23;2662:32;2659:52;;;2707:1;2704;2697:12;2659:52;2746:9;2733:23;2765:31;2790:5;2765:31;:::i;2831:454::-;2926:6;2934;2942;2950;2958;3011:3;2999:9;2990:7;2986:23;2982:33;2979:53;;;3028:1;3025;3018:12;2979:53;-1:-1:-1;;3051:23:1;;;3121:2;3106:18;;3093:32;;-1:-1:-1;3172:2:1;3157:18;;3144:32;;3223:2;3208:18;;3195:32;;-1:-1:-1;3274:3:1;3259:19;3246:33;;-1:-1:-1;2831:454:1;-1:-1:-1;2831:454:1:o;3290:388::-;3358:6;3366;3419:2;3407:9;3398:7;3394:23;3390:32;3387:52;;;3435:1;3432;3425:12;3387:52;3474:9;3461:23;3493:31;3518:5;3493:31;:::i;:::-;3543:5;-1:-1:-1;3600:2:1;3585:18;;3572:32;3613:33;3572:32;3613:33;:::i;:::-;3665:7;3655:17;;;3290:388;;;;;:::o;3683:118::-;3769:5;3762:13;3755:21;3748:5;3745:32;3735:60;;3791:1;3788;3781:12;3806:128;3871:20;;3900:28;3871:20;3900:28;:::i;3939:309::-;4004:6;4012;4065:2;4053:9;4044:7;4040:23;4036:32;4033:52;;;4081:1;4078;4071:12;4033:52;4117:9;4104:23;4094:33;;4177:2;4166:9;4162:18;4149:32;4190:28;4212:5;4190:28;:::i;4253:248::-;4321:6;4329;4382:2;4370:9;4361:7;4357:23;4353:32;4350:52;;;4398:1;4395;4388:12;4350:52;-1:-1:-1;;4421:23:1;;;4491:2;4476:18;;;4463:32;;-1:-1:-1;4253:248:1:o;4506:382::-;4571:6;4579;4632:2;4620:9;4611:7;4607:23;4603:32;4600:52;;;4648:1;4645;4638:12;4600:52;4687:9;4674:23;4706:31;4731:5;4706:31;:::i;:::-;4756:5;-1:-1:-1;4813:2:1;4798:18;;4785:32;4826:30;4785:32;4826:30;:::i;5361:127::-;5422:10;5417:3;5413:20;5410:1;5403:31;5453:4;5450:1;5443:15;5477:4;5474:1;5467:15;5493:1191;5583:6;5591;5644:2;5632:9;5623:7;5619:23;5615:32;5612:52;;;5660:1;5657;5650:12;5612:52;5700:9;5687:23;5729:18;5770:2;5762:6;5759:14;5756:34;;;5786:1;5783;5776:12;5756:34;5824:6;5813:9;5809:22;5799:32;;5869:7;5862:4;5858:2;5854:13;5850:27;5840:55;;5891:1;5888;5881:12;5840:55;5927:2;5914:16;5949:4;5972:2;5968;5965:10;5962:36;;;5978:18;;:::i;:::-;6024:2;6021:1;6017:10;6056:2;6050:9;6119:2;6115:7;6110:2;6106;6102:11;6098:25;6090:6;6086:38;6174:6;6162:10;6159:22;6154:2;6142:10;6139:18;6136:46;6133:72;;;6185:18;;:::i;:::-;6221:2;6214:22;6271:18;;;6305:15;;;;-1:-1:-1;6347:11:1;;;6343:20;;;6375:19;;;6372:39;;;6407:1;6404;6397:12;6372:39;6431:11;;;;6451:148;6467:6;6462:3;6459:15;6451:148;;;6533:23;6552:3;6533:23;:::i;:::-;6521:36;;6484:12;;;;6577;;;;6451:148;;;6618:6;-1:-1:-1;6643:35:1;;-1:-1:-1;6659:18:1;;;6643:35;:::i;:::-;6633:45;;;;;;5493:1191;;;;;:::o;6689:241::-;6745:6;6798:2;6786:9;6777:7;6773:23;6769:32;6766:52;;;6814:1;6811;6804:12;6766:52;6853:9;6840:23;6872:28;6894:5;6872:28;:::i;7158:356::-;7360:2;7342:21;;;7379:18;;;7372:30;7438:34;7433:2;7418:18;;7411:62;7505:2;7490:18;;7158:356::o;8151:245::-;8218:6;8271:2;8259:9;8250:7;8246:23;8242:32;8239:52;;;8287:1;8284;8277:12;8239:52;8319:9;8313:16;8338:28;8360:5;8338:28;:::i;8810:127::-;8871:10;8866:3;8862:20;8859:1;8852:31;8902:4;8899:1;8892:15;8926:4;8923:1;8916:15;8942:128;9009:9;;;9030:11;;;9027:37;;;9044:18;;:::i;9486:217::-;9526:1;9552;9542:132;;9596:10;9591:3;9587:20;9584:1;9577:31;9631:4;9628:1;9621:15;9659:4;9656:1;9649:15;9542:132;-1:-1:-1;9688:9:1;;9486:217::o;10060:127::-;10121:10;10116:3;10112:20;10109:1;10102:31;10152:4;10149:1;10142:15;10176:4;10173:1;10166:15;10192:127;10253:10;10248:3;10244:20;10241:1;10234:31;10284:4;10281:1;10274:15;10308:4;10305:1;10298:15;10324:135;10363:3;10384:17;;;10381:43;;10404:18;;:::i;:::-;-1:-1:-1;10451:1:1;10440:13;;10324:135::o;10464:125::-;10529:9;;;10550:10;;;10547:36;;;10563:18;;:::i;11358:422::-;11447:1;11490:5;11447:1;11504:270;11525:7;11515:8;11512:21;11504:270;;;11584:4;11580:1;11576:6;11572:17;11566:4;11563:27;11560:53;;;11593:18;;:::i;:::-;11643:7;11633:8;11629:22;11626:55;;;11663:16;;;;11626:55;11742:22;;;;11702:15;;;;11504:270;;;11508:3;11358:422;;;;;:::o;11785:806::-;11834:5;11864:8;11854:80;;-1:-1:-1;11905:1:1;11919:5;;11854:80;11953:4;11943:76;;-1:-1:-1;11990:1:1;12004:5;;11943:76;12035:4;12053:1;12048:59;;;;12121:1;12116:130;;;;12028:218;;12048:59;12078:1;12069:10;;12092:5;;;12116:130;12153:3;12143:8;12140:17;12137:43;;;12160:18;;:::i;:::-;-1:-1:-1;;12216:1:1;12202:16;;12231:5;;12028:218;;12330:2;12320:8;12317:16;12311:3;12305:4;12302:13;12298:36;12292:2;12282:8;12279:16;12274:2;12268:4;12265:12;12261:35;12258:77;12255:159;;;-1:-1:-1;12367:19:1;;;12399:5;;12255:159;12446:34;12471:8;12465:4;12446:34;:::i;:::-;12516:6;12512:1;12508:6;12504:19;12495:7;12492:32;12489:58;;;12527:18;;:::i;:::-;12565:20;;11785:806;-1:-1:-1;;;11785:806:1:o;12596:140::-;12654:5;12683:47;12724:4;12714:8;12710:19;12704:4;12683:47;:::i;12741:168::-;12814:9;;;12845;;12862:15;;;12856:22;;12842:37;12832:71;;12883:18;;:::i;18361:251::-;18431:6;18484:2;18472:9;18463:7;18459:23;18455:32;18452:52;;;18500:1;18497;18490:12;18452:52;18532:9;18526:16;18551:31;18576:5;18551:31;:::i;18617:980::-;18879:4;18927:3;18916:9;18912:19;18958:6;18947:9;18940:25;18984:2;19022:6;19017:2;19006:9;19002:18;18995:34;19065:3;19060:2;19049:9;19045:18;19038:31;19089:6;19124;19118:13;19155:6;19147;19140:22;19193:3;19182:9;19178:19;19171:26;;19232:2;19224:6;19220:15;19206:29;;19253:1;19263:195;19277:6;19274:1;19271:13;19263:195;;;19342:13;;-1:-1:-1;;;;;19338:39:1;19326:52;;19433:15;;;;19398:12;;;;19374:1;19292:9;19263:195;;;-1:-1:-1;;;;;;;19514:32:1;;;;19509:2;19494:18;;19487:60;-1:-1:-1;;;19578:3:1;19563:19;19556:35;19475:3;18617:980;-1:-1:-1;;;18617:980:1:o;20214:306::-;20302:6;20310;20318;20371:2;20359:9;20350:7;20346:23;20342:32;20339:52;;;20387:1;20384;20377:12;20339:52;20416:9;20410:16;20400:26;;20466:2;20455:9;20451:18;20445:25;20435:35;;20510:2;20499:9;20495:18;20489:25;20479:35;;20214:306;;;;;:::o

Swarm Source

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