ETH Price: $3,886.13 (-0.97%)

Token

ERC-20: For Everyone (EXIST)
 

Overview

Max Total Supply

100,000,000 EXIST

Holders

14

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
defialloddssimp.eth
Balance
860,171.438328657366799845 EXIST

Value
$0.00
0x6CFE0f1Cfc110be97C4D5Cc838F26c8f5Ca08f17
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:
EXIST

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

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

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

    function _msgData() internal view virtual returns (bytes calldata) {
        this; 
        return msg.data;
    }
}

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

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

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

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

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

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

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

    function createPair(address tokenA, address tokenB) external returns (address pair);

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

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

interface IERC20Metadata is IERC20 {

    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    function decimals() external view returns (uint8);
}


contract ERC20 is Context, IERC20, IERC20Metadata {
    using SafeMath for uint256;

    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    function name() public view virtual override returns (string memory) {
        return _name;
    }

    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

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

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

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

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

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        _beforeTokenTransfer(sender, recipient, amount);
        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");
        _beforeTokenTransfer(address(0), account, amount);
        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");
        _beforeTokenTransfer(account, address(0), amount);
        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        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 _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

library SafeMath {

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

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

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

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
        return c;
    }

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

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        return c;
    }

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

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

contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

    function mul(int256 a, int256 b) internal pure returns (int256) {int256 c = a * b;require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));require((b == 0) || (c / b == a));return c;}

    function div(int256 a, int256 b) internal pure returns (int256) {require(b != -1 || a != MIN_INT256);return a / b;}

    function sub(int256 a, int256 b) internal pure returns (int256) {int256 c = a - b; require((b >= 0 && c <= a) || (b < 0 && c > a));return c;}

    function add(int256 a, int256 b) internal pure returns (int256) {int256 c = a + b;require((b >= 0 && c >= a) || (b < 0 && c < a));return c;}

    function abs(int256 a) internal pure returns (int256) {require(a != MIN_INT256);return a < 0 ? -a : a;}

    function toUint256Safe(int256 a) internal pure returns (uint256) {require(a >= 0);   return uint256(a);}
}

library SafeMathUint {
  function toInt256Safe(uint256 a) internal pure returns (int256) {
    int256 b = int256(a);
    require(b >= 0);
    return b;
  }
}


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

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

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

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

contract EXIST is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant deadAddress = address(0xdead);

    bool private swapping;

    address public marketingWallet;
    address public tokenDevelopmentAddress;
    
    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;
    
    mapping(address => uint256) private _holderLastTransferTimestamp;
    bool public transferDelayEnabled = true;

    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevelopmentFee;  
    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevelopmentFee;  
    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDevelopment;

    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public _isExcludedMaxTransactionAmount;
    mapping (address => bool) public automatedMarketMakerPairs;

    event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);
    event ExcludeFromFees(address indexed account, bool isExcluded);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event marketingWalletUpdated(address indexed newWallet, address indexed oldWallet);
    event DevelopmentWalletUpdated(address indexed newWallet, address indexed oldWallet);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    event BuyBackTriggered(uint256 amount); 
    event OwnerForcedSwapBack(uint256 timestamp);

    constructor() ERC20("For Everyone", "EXIST") {
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;
        
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
        
        uint256 _buyMarketingFee = 2;
        uint256 _buyLiquidityFee = 1;
        uint256 _buyDevelopmentFee = 2;

        uint256 _sellMarketingFee = 2;
        uint256 _sellLiquidityFee = 1;
        uint256 _sellDevelopmentFee = 2;
        
        uint256 totalSupply = 1 * 1e8 * 1e18;
        
        maxWallet = totalSupply * 1 / 100; // 1% Max wallet
        maxTransactionAmount = totalSupply * 1 / 100; // 1% maxTransactionAmountTxn
        swapTokensAtAmount = totalSupply * 15 / 10000; // 0.15% swap wallet

        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevelopmentFee = _buyDevelopmentFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevelopmentFee;
        
        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevelopmentFee = _sellDevelopmentFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevelopmentFee;
        
    	marketingWallet = address(msg.sender); 
        tokenDevelopmentAddress = address(msg.sender); 

        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);

        _mint(msg.sender, totalSupply);
    }

    receive() external payable {

  	}

    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
    }

    function removeLimits() external onlyOwner returns (bool){
        limitsInEffect = false;
        transferDelayEnabled = false;
        return true;
    }

    function disableTransferDelay() external onlyOwner returns (bool){
        transferDelayEnabled = false;
        return true;
    }
    
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }
    
    function updateBuyFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _DevelopmentFee) external onlyOwner {//TG 
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevelopmentFee = _DevelopmentFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevelopmentFee;
        require(buyTotalFees <= 6, "Must keep fees at 6% or less");
    }
    
    function updateSellFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _DevelopmentFee) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevelopmentFee = _DevelopmentFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevelopmentFee;
        require(sellTotalFees <= 100, "Must keep fees at 100% or less");
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

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

        _setAutomatedMarketMakerPair(pair, value);
    }
    
    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function isExcludedFromFees(address account) external view returns(bool) {
        return _isExcludedFromFees[account];
    }
    
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        
         if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
        
        if(limitsInEffect){
            if (
                from != owner() && 
                to != owner() && 
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ){ 
                if(!tradingActive){
                    require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
                }

                if (transferDelayEnabled){
                    if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)){
                        require(_holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed.");
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }
                 
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                    require(amount + balanceOf(to) <= maxWallet, "Unable to exceed Max Wallet");
                } 
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                    require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
                }
                else if(!_isExcludedMaxTransactionAmount[to]) {
                    require(amount + balanceOf(to) <= maxWallet, "Unable to exceed Max Wallet");
                }
            }
        }
        
		uint256 contractTokenBalance = balanceOf(address(this));
        
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if( 
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;
            
            swapBack();

            swapping = false;
        }
        
        bool takeFee = !swapping;

        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
        
        uint256 fees = 0;
        if(takeFee){
            
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForDevelopment += fees * sellDevelopmentFee / sellTotalFees;
                tokensForMarketing += fees * sellMarketingFee / sellTotalFees;
            }
            
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
        	    fees = amount.mul(buyTotalFees).div(100);
        	    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForDevelopment += fees * buyDevelopmentFee / buyTotalFees;
                tokensForMarketing += fees * buyMarketingFee / buyTotalFees;
            }
            
            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
        	
        	amount -= fees;
        }

        super._transfer(from, to, amount);
    }

    function swapTokensForEth(uint256 tokenAmount) private {

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

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

        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, 
            path,
            address(this),
            block.timestamp
        );
        
    }
    
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {

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

        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, 
            0, 
            owner(),
            block.timestamp
        );
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing + tokensForDevelopment;
        
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}

        if(contractBalance >= swapTokensAtAmount * 10){
            contractBalance = swapTokensAtAmount * 10;
        }
        
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);
        
        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH); 
        
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        
        uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(totalTokensToSwap);
        uint256 ethForDevelopment = ethBalance.mul(tokensForDevelopment).div(totalTokensToSwap);
        
        
        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDevelopment;
        
        
        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDevelopment = 0;

        
        (bool success,) = address(tokenDevelopmentAddress).call{value: ethForDevelopment}("");
        
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }
        
        (success,) = address(marketingWallet).call{value: address(this).balance}("");       
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"BuyBackTriggered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"DevelopmentWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"OwnerForcedSwapBack","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevelopmentFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"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":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevelopmentFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","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":"view","type":"function"},{"inputs":[],"name":"tokenDevelopmentAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDevelopment","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_DevelopmentFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_DevelopmentFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526001600b60006101000a81548160ff0219169083151502179055506000600b60016101000a81548160ff0219169083151502179055506000600b60026101000a81548160ff0219169083151502179055506001600d60006101000a81548160ff0219169083151502179055503480156200007d57600080fd5b506040518060400160405280600c81526020017f466f722045766572796f6e6500000000000000000000000000000000000000008152506040518060400160405280600581526020017f45584953540000000000000000000000000000000000000000000000000000008152508160039081620000fb919062000ddc565b5080600490816200010d919062000ddc565b5050506000620001226200062f60201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001ed8160016200063760201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200026d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000293919062000f2d565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000321919062000f2d565b6040518363ffffffff1660e01b81526004016200034092919062000f70565b6020604051808303816000875af115801562000360573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000386919062000f2d565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620003ce60a05160016200063760201b60201c565b620003e360a05160016200073460201b60201c565b60006002905060006001905060006002905060006002905060006001905060006002905060006a52b7d2dcc80cd2e40000009050606460018262000428919062000fcc565b6200043491906200105c565b600a8190555060646001826200044b919062000fcc565b6200045791906200105c565b600881905550612710600f826200046f919062000fcc565b6200047b91906200105c565b60098190555086600f819055508560108190555084601181905550601154601054600f54620004ab919062001094565b620004b7919062001094565b600e81905550836013819055508260148190555081601581905550601554601454601354620004e7919062001094565b620004f3919062001094565b60128190555033600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200059d6200058f620007d560201b60201c565b6001620007ff60201b60201c565b620005b0306001620007ff60201b60201c565b620005c561dead6001620007ff60201b60201c565b620005e7620005d9620007d560201b60201c565b60016200063760201b60201c565b620005fa3060016200063760201b60201c565b6200060f61dead60016200063760201b60201c565b6200062133826200094c60201b60201c565b5050505050505050620012c0565b600033905090565b620006476200062f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620006d9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006d09062001152565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200080f6200062f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620008a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008989062001152565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000940919062001191565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620009be576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009b590620011fe565b60405180910390fd5b620009d26000838362000afa60201b60201c565b620009ee8160025462000aff60201b62001cdf1790919060201c565b60028190555062000a4c816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000aff60201b62001cdf1790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000aee919062001231565b60405180910390a35050565b505050565b600080828462000b10919062001094565b90508381101562000b58576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b4f906200129e565b60405180910390fd5b8091505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000be457607f821691505b60208210810362000bfa5762000bf962000b9c565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000c647fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000c25565b62000c70868362000c25565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000cbd62000cb762000cb18462000c88565b62000c92565b62000c88565b9050919050565b6000819050919050565b62000cd98362000c9c565b62000cf162000ce88262000cc4565b84845462000c32565b825550505050565b600090565b62000d0862000cf9565b62000d1581848462000cce565b505050565b5b8181101562000d3d5762000d3160008262000cfe565b60018101905062000d1b565b5050565b601f82111562000d8c5762000d568162000c00565b62000d618462000c15565b8101602085101562000d71578190505b62000d8962000d808562000c15565b83018262000d1a565b50505b505050565b600082821c905092915050565b600062000db16000198460080262000d91565b1980831691505092915050565b600062000dcc838362000d9e565b9150826002028217905092915050565b62000de78262000b62565b67ffffffffffffffff81111562000e035762000e0262000b6d565b5b62000e0f825462000bcb565b62000e1c82828562000d41565b600060209050601f83116001811462000e54576000841562000e3f578287015190505b62000e4b858262000dbe565b86555062000ebb565b601f19841662000e648662000c00565b60005b8281101562000e8e5784890151825560018201915060208501945060208101905062000e67565b8683101562000eae578489015162000eaa601f89168262000d9e565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000ef58262000ec8565b9050919050565b62000f078162000ee8565b811462000f1357600080fd5b50565b60008151905062000f278162000efc565b92915050565b60006020828403121562000f465762000f4562000ec3565b5b600062000f568482850162000f16565b91505092915050565b62000f6a8162000ee8565b82525050565b600060408201905062000f87600083018562000f5f565b62000f96602083018462000f5f565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000fd98262000c88565b915062000fe68362000c88565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562001022576200102162000f9d565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620010698262000c88565b9150620010768362000c88565b9250826200108957620010886200102d565b5b828204905092915050565b6000620010a18262000c88565b9150620010ae8362000c88565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620010e657620010e562000f9d565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200113a602083620010f1565b9150620011478262001102565b602082019050919050565b600060208201905081810360008301526200116d816200112b565b9050919050565b60008115159050919050565b6200118b8162001174565b82525050565b6000602082019050620011a8600083018462001180565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620011e6601f83620010f1565b9150620011f382620011ae565b602082019050919050565b600060208201905081810360008301526200121981620011d7565b9050919050565b6200122b8162000c88565b82525050565b600060208201905062001248600083018462001220565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062001286601b83620010f1565b915062001293826200124e565b602082019050919050565b60006020820190508181036000830152620012b98162001277565b9050919050565b60805160a0516148436200131e60003960008181610de00152818161155c01526122c3015260008181610c050152818161226b0152818161338e0152818161346f0152818161349601528181613532015261355901526148436000f3fe6080604052600436106102975760003560e01c80638a8c523c1161015a578063c876d0b9116100c1578063e884f2601161007a578063e884f26014610a33578063ef8700e514610a5e578063f11a24d314610a89578063f2fde38b14610ab4578063f637434214610add578063f8b45b0514610b085761029e565b8063c876d0b91461091f578063c8c8ebe41461094a578063d85ba06314610975578063da641921146109a0578063dd62ed3e146109cb578063e2f4560514610a085761029e565b8063a9059cbb11610113578063a9059cbb146107fd578063b20414111461083a578063b62496f514610865578063bbc0c742146108a2578063c0246668146108cd578063c17b5b8c146108f65761029e565b80638a8c523c146106ff5780638da5cb5b14610716578063921369131461074157806395d89b411461076c5780639a7a23d614610797578063a457c2d7146107c05761029e565b806349bd5a5e116101fe578063715018a6116101b7578063715018a614610615578063751039fc1461062c5780637571336a1461065757806375f0a874146106805780637bce5a04146106ab5780638095d564146106d65761029e565b806349bd5a5e146104ef5780634a62bb651461051a5780634fbee193146105455780636a486a8e146105825780636ddd1713146105ad57806370a08231146105d85761029e565b80631a8145bb116102505780631a8145bb146103c95780631f3fed8f146103f457806323b872dd1461041f57806327c8f8351461045c578063313ce5671461048757806339509351146104b25761029e565b806306fdde03146102a3578063095ea7b3146102ce57806310d5de531461030b5780631694505e1461034857806318160ddd1461037357806318a94cf11461039e5761029e565b3661029e57005b600080fd5b3480156102af57600080fd5b506102b8610b33565b6040516102c59190613709565b60405180910390f35b3480156102da57600080fd5b506102f560048036038101906102f091906137c4565b610bc5565b604051610302919061381f565b60405180910390f35b34801561031757600080fd5b50610332600480360381019061032d919061383a565b610be3565b60405161033f919061381f565b60405180910390f35b34801561035457600080fd5b5061035d610c03565b60405161036a91906138c6565b60405180910390f35b34801561037f57600080fd5b50610388610c27565b60405161039591906138f0565b60405180910390f35b3480156103aa57600080fd5b506103b3610c31565b6040516103c091906138f0565b60405180910390f35b3480156103d557600080fd5b506103de610c37565b6040516103eb91906138f0565b60405180910390f35b34801561040057600080fd5b50610409610c3d565b60405161041691906138f0565b60405180910390f35b34801561042b57600080fd5b506104466004803603810190610441919061390b565b610c43565b604051610453919061381f565b60405180910390f35b34801561046857600080fd5b50610471610d1c565b60405161047e919061396d565b60405180910390f35b34801561049357600080fd5b5061049c610d22565b6040516104a991906139a4565b60405180910390f35b3480156104be57600080fd5b506104d960048036038101906104d491906137c4565b610d2b565b6040516104e6919061381f565b60405180910390f35b3480156104fb57600080fd5b50610504610dde565b604051610511919061396d565b60405180910390f35b34801561052657600080fd5b5061052f610e02565b60405161053c919061381f565b60405180910390f35b34801561055157600080fd5b5061056c6004803603810190610567919061383a565b610e15565b604051610579919061381f565b60405180910390f35b34801561058e57600080fd5b50610597610e6b565b6040516105a491906138f0565b60405180910390f35b3480156105b957600080fd5b506105c2610e71565b6040516105cf919061381f565b60405180910390f35b3480156105e457600080fd5b506105ff60048036038101906105fa919061383a565b610e84565b60405161060c91906138f0565b60405180910390f35b34801561062157600080fd5b5061062a610ecc565b005b34801561063857600080fd5b50610641611024565b60405161064e919061381f565b60405180910390f35b34801561066357600080fd5b5061067e600480360381019061067991906139eb565b6110fa565b005b34801561068c57600080fd5b506106956111ec565b6040516106a2919061396d565b60405180910390f35b3480156106b757600080fd5b506106c0611212565b6040516106cd91906138f0565b60405180910390f35b3480156106e257600080fd5b506106fd60048036038101906106f89190613a2b565b611218565b005b34801561070b57600080fd5b50610714611332565b005b34801561072257600080fd5b5061072b611401565b604051610738919061396d565b60405180910390f35b34801561074d57600080fd5b5061075661142b565b60405161076391906138f0565b60405180910390f35b34801561077857600080fd5b50610781611431565b60405161078e9190613709565b60405180910390f35b3480156107a357600080fd5b506107be60048036038101906107b991906139eb565b6114c3565b005b3480156107cc57600080fd5b506107e760048036038101906107e291906137c4565b6115f6565b6040516107f4919061381f565b60405180910390f35b34801561080957600080fd5b50610824600480360381019061081f91906137c4565b6116c3565b604051610831919061381f565b60405180910390f35b34801561084657600080fd5b5061084f6116e1565b60405161085c91906138f0565b60405180910390f35b34801561087157600080fd5b5061088c6004803603810190610887919061383a565b6116e7565b604051610899919061381f565b60405180910390f35b3480156108ae57600080fd5b506108b7611707565b6040516108c4919061381f565b60405180910390f35b3480156108d957600080fd5b506108f460048036038101906108ef91906139eb565b61171a565b005b34801561090257600080fd5b5061091d60048036038101906109189190613a2b565b61185a565b005b34801561092b57600080fd5b50610934611974565b604051610941919061381f565b60405180910390f35b34801561095657600080fd5b5061095f611987565b60405161096c91906138f0565b60405180910390f35b34801561098157600080fd5b5061098a61198d565b60405161099791906138f0565b60405180910390f35b3480156109ac57600080fd5b506109b5611993565b6040516109c2919061396d565b60405180910390f35b3480156109d757600080fd5b506109f260048036038101906109ed9190613a7e565b6119b9565b6040516109ff91906138f0565b60405180910390f35b348015610a1457600080fd5b50610a1d611a40565b604051610a2a91906138f0565b60405180910390f35b348015610a3f57600080fd5b50610a48611a46565b604051610a55919061381f565b60405180910390f35b348015610a6a57600080fd5b50610a73611b01565b604051610a8091906138f0565b60405180910390f35b348015610a9557600080fd5b50610a9e611b07565b604051610aab91906138f0565b60405180910390f35b348015610ac057600080fd5b50610adb6004803603810190610ad6919061383a565b611b0d565b005b348015610ae957600080fd5b50610af2611cd3565b604051610aff91906138f0565b60405180910390f35b348015610b1457600080fd5b50610b1d611cd9565b604051610b2a91906138f0565b60405180910390f35b606060038054610b4290613aed565b80601f0160208091040260200160405190810160405280929190818152602001828054610b6e90613aed565b8015610bbb5780601f10610b9057610100808354040283529160200191610bbb565b820191906000526020600020905b815481529060010190602001808311610b9e57829003601f168201915b5050505050905090565b6000610bd9610bd2611d3d565b8484611d45565b6001905092915050565b601a6020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b60155481565b60175481565b60165481565b6000610c50848484611f0e565b610d1184610c5c611d3d565b610d0c856040518060600160405280602881526020016147c160289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610cc2611d3d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b609092919063ffffffff16565b611d45565b600190509392505050565b61dead81565b60006012905090565b6000610dd4610d38611d3d565b84610dcf8560016000610d49611d3d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611cdf90919063ffffffff16565b611d45565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b60009054906101000a900460ff1681565b6000601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60125481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ed4611d3d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5a90613b6a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600061102e611d3d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b490613b6a565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506000600d60006101000a81548160ff0219169083151502179055506001905090565b611102611d3d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611191576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118890613b6a565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f5481565b611220611d3d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a690613b6a565b60405180910390fd5b82600f819055508160108190555080601181905550601154601054600f546112d79190613bb9565b6112e19190613bb9565b600e819055506006600e54111561132d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132490613c5b565b60405180910390fd5b505050565b61133a611d3d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c090613b6a565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60135481565b60606004805461144090613aed565b80601f016020809104026020016040519081016040528092919081815260200182805461146c90613aed565b80156114b95780601f1061148e576101008083540402835291602001916114b9565b820191906000526020600020905b81548152906001019060200180831161149c57829003601f168201915b5050505050905090565b6114cb611d3d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461155a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155190613b6a565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036115e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115df90613ced565b60405180910390fd5b6115f28282612bc4565b5050565b60006116b9611603611d3d565b846116b4856040518060600160405280602581526020016147e9602591396001600061162d611d3d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b609092919063ffffffff16565b611d45565b6001905092915050565b60006116d76116d0611d3d565b8484611f0e565b6001905092915050565b60115481565b601b6020528060005260406000206000915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b611722611d3d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a890613b6a565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161184e919061381f565b60405180910390a25050565b611862611d3d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e890613b6a565b60405180910390fd5b8260138190555081601481905550806015819055506015546014546013546119199190613bb9565b6119239190613bb9565b6012819055506064601254111561196f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196690613d59565b60405180910390fd5b505050565b600d60009054906101000a900460ff1681565b60085481565b600e5481565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b6000611a50611d3d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611adf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad690613b6a565b60405180910390fd5b6000600d60006101000a81548160ff0219169083151502179055506001905090565b60185481565b60105481565b611b15611d3d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ba4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9b90613b6a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0a90613deb565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60145481565b600a5481565b6000808284611cee9190613bb9565b905083811015611d33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2a90613e57565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611db4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dab90613ee9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1a90613f7b565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611f0191906138f0565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f749061400d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611fec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe39061409f565b60405180910390fd5b600081036120055761200083836000612c65565b612b5b565b600b60009054906101000a900460ff161561268357612022611401565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156120905750612060611401565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156120c95750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612103575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561211c5750600560149054906101000a900460ff16155b1561268257600b60019054906101000a900460ff1661221657601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806121d65750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612215576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220c9061410b565b60405180910390fd5b5b600d60009054906101000a900460ff16156123de57612233611401565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156122ba57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561231257507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156123dd5743600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612398576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238f906141c3565b60405180910390fd5b43600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156124815750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156124e357600a5461249283610e84565b8261249d9190613bb9565b11156124de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d59061422f565b60405180910390fd5b612681565b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156125865750601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156125d5576008548111156125d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c7906142c1565b60405180910390fd5b612680565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661267f57600a5461263283610e84565b8261263d9190613bb9565b111561267e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126759061422f565b60405180910390fd5b5b5b5b5b5b600061268e30610e84565b9050600060095482101590508080156126b35750600b60029054906101000a900460ff165b80156126cc5750600560149054906101000a900460ff16155b80156127225750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156127785750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156127ce5750601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612812576001600560146101000a81548160ff0219169083151502179055506127f6612ef8565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806128c85750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156128d257600090505b60008115612b4b57601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561293557506000601254115b15612a02576129626064612954601254886131dc90919063ffffffff16565b61325690919063ffffffff16565b90506012546014548261297591906142e1565b61297f919061436a565b601760008282546129909190613bb9565b92505081905550601254601554826129a891906142e1565b6129b2919061436a565b601860008282546129c39190613bb9565b92505081905550601254601354826129db91906142e1565b6129e5919061436a565b601660008282546129f69190613bb9565b92505081905550612b27565b601b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a5d57506000600e54115b15612b2657612a8a6064612a7c600e54886131dc90919063ffffffff16565b61325690919063ffffffff16565b9050600e5460105482612a9d91906142e1565b612aa7919061436a565b60176000828254612ab89190613bb9565b92505081905550600e5460115482612ad091906142e1565b612ada919061436a565b60186000828254612aeb9190613bb9565b92505081905550600e54600f5482612b0391906142e1565b612b0d919061436a565b60166000828254612b1e9190613bb9565b925050819055505b5b6000811115612b3c57612b3b873083612c65565b5b8085612b48919061439b565b94505b612b56878787612c65565b505050505b505050565b6000838311158290612ba8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9f9190613709565b60405180910390fd5b5060008385612bb7919061439b565b9050809150509392505050565b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612cd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ccb9061400d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3a9061409f565b60405180910390fd5b612d4e8383836132a0565b612db98160405180606001604052806026815260200161479b602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b609092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612e4c816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611cdf90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612eeb91906138f0565b60405180910390a3505050565b6000612f0330610e84565b90506000601854601654601754612f1a9190613bb9565b612f249190613bb9565b90506000821480612f355750600081145b15612f415750506131da565b600a600954612f5091906142e1565b8210612f6857600a600954612f6591906142e1565b91505b600060028260175485612f7b91906142e1565b612f85919061436a565b612f8f919061436a565b90506000612fa682856132a590919063ffffffff16565b90506000479050612fb6826132ef565b6000612fcb82476132a590919063ffffffff16565b90506000612ff686612fe8601654856131dc90919063ffffffff16565b61325690919063ffffffff16565b9050600061302187613013601854866131dc90919063ffffffff16565b61325690919063ffffffff16565b90506000818385613032919061439b565b61303c919061439b565b90506000601781905550600060168190555060006018819055506000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168360405161309e90614400565b60006040518083038185875af1925050503d80600081146130db576040519150601f19603f3d011682016040523d82523d6000602084013e6130e0565b606091505b505090506000881180156130f45750600082115b1561314157613103888361352c565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561878360175460405161313893929190614415565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161318790614400565b60006040518083038185875af1925050503d80600081146131c4576040519150601f19603f3d011682016040523d82523d6000602084013e6131c9565b606091505b505080915050505050505050505050505b565b60008083036131ee5760009050613250565b600082846131fc91906142e1565b905082848261320b919061436a565b1461324b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613242906144be565b60405180910390fd5b809150505b92915050565b600061329883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061360d565b905092915050565b505050565b60006132e783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612b60565b905092915050565b6000600267ffffffffffffffff81111561330c5761330b6144de565b5b60405190808252806020026020018201604052801561333a5781602001602082028036833780820191505090505b50905030816000815181106133525761335161450d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156133f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061341b9190614551565b8160018151811061342f5761342e61450d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613494307f000000000000000000000000000000000000000000000000000000000000000084611d45565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016134f6959493929190614677565b600060405180830381600087803b15801561351057600080fd5b505af1158015613524573d6000803e3d6000fd5b505050505050565b613557307f000000000000000000000000000000000000000000000000000000000000000084611d45565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806135a1611401565b426040518863ffffffff1660e01b81526004016135c3969594939291906146d1565b60606040518083038185885af11580156135e1573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906136069190614747565b5050505050565b60008083118290613654576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161364b9190613709565b60405180910390fd5b5060008385613663919061436a565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156136aa57808201518184015260208101905061368f565b838111156136b9576000848401525b50505050565b6000601f19601f8301169050919050565b60006136db82613670565b6136e5818561367b565b93506136f581856020860161368c565b6136fe816136bf565b840191505092915050565b6000602082019050818103600083015261372381846136d0565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061375b82613730565b9050919050565b61376b81613750565b811461377657600080fd5b50565b60008135905061378881613762565b92915050565b6000819050919050565b6137a18161378e565b81146137ac57600080fd5b50565b6000813590506137be81613798565b92915050565b600080604083850312156137db576137da61372b565b5b60006137e985828601613779565b92505060206137fa858286016137af565b9150509250929050565b60008115159050919050565b61381981613804565b82525050565b60006020820190506138346000830184613810565b92915050565b6000602082840312156138505761384f61372b565b5b600061385e84828501613779565b91505092915050565b6000819050919050565b600061388c61388761388284613730565b613867565b613730565b9050919050565b600061389e82613871565b9050919050565b60006138b082613893565b9050919050565b6138c0816138a5565b82525050565b60006020820190506138db60008301846138b7565b92915050565b6138ea8161378e565b82525050565b600060208201905061390560008301846138e1565b92915050565b6000806000606084860312156139245761392361372b565b5b600061393286828701613779565b935050602061394386828701613779565b9250506040613954868287016137af565b9150509250925092565b61396781613750565b82525050565b6000602082019050613982600083018461395e565b92915050565b600060ff82169050919050565b61399e81613988565b82525050565b60006020820190506139b96000830184613995565b92915050565b6139c881613804565b81146139d357600080fd5b50565b6000813590506139e5816139bf565b92915050565b60008060408385031215613a0257613a0161372b565b5b6000613a1085828601613779565b9250506020613a21858286016139d6565b9150509250929050565b600080600060608486031215613a4457613a4361372b565b5b6000613a52868287016137af565b9350506020613a63868287016137af565b9250506040613a74868287016137af565b9150509250925092565b60008060408385031215613a9557613a9461372b565b5b6000613aa385828601613779565b9250506020613ab485828601613779565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613b0557607f821691505b602082108103613b1857613b17613abe565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613b5460208361367b565b9150613b5f82613b1e565b602082019050919050565b60006020820190508181036000830152613b8381613b47565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613bc48261378e565b9150613bcf8361378e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613c0457613c03613b8a565b5b828201905092915050565b7f4d757374206b6565702066656573206174203625206f72206c65737300000000600082015250565b6000613c45601c8361367b565b9150613c5082613c0f565b602082019050919050565b60006020820190508181036000830152613c7481613c38565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000613cd760398361367b565b9150613ce282613c7b565b604082019050919050565b60006020820190508181036000830152613d0681613cca565b9050919050565b7f4d757374206b65657020666565732061742031303025206f72206c6573730000600082015250565b6000613d43601e8361367b565b9150613d4e82613d0d565b602082019050919050565b60006020820190508181036000830152613d7281613d36565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613dd560268361367b565b9150613de082613d79565b604082019050919050565b60006020820190508181036000830152613e0481613dc8565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000613e41601b8361367b565b9150613e4c82613e0b565b602082019050919050565b60006020820190508181036000830152613e7081613e34565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613ed360248361367b565b9150613ede82613e77565b604082019050919050565b60006020820190508181036000830152613f0281613ec6565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613f6560228361367b565b9150613f7082613f09565b604082019050919050565b60006020820190508181036000830152613f9481613f58565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613ff760258361367b565b915061400282613f9b565b604082019050919050565b6000602082019050818103600083015261402681613fea565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061408960238361367b565b91506140948261402d565b604082019050919050565b600060208201905081810360008301526140b88161407c565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006140f560168361367b565b9150614100826140bf565b602082019050919050565b60006020820190508181036000830152614124816140e8565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006141ad60498361367b565b91506141b88261412b565b606082019050919050565b600060208201905081810360008301526141dc816141a0565b9050919050565b7f556e61626c6520746f20657863656564204d61782057616c6c65740000000000600082015250565b6000614219601b8361367b565b9150614224826141e3565b602082019050919050565b600060208201905081810360008301526142488161420c565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006142ab60368361367b565b91506142b68261424f565b604082019050919050565b600060208201905081810360008301526142da8161429e565b9050919050565b60006142ec8261378e565b91506142f78361378e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156143305761432f613b8a565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006143758261378e565b91506143808361378e565b9250826143905761438f61433b565b5b828204905092915050565b60006143a68261378e565b91506143b18361378e565b9250828210156143c4576143c3613b8a565b5b828203905092915050565b600081905092915050565b50565b60006143ea6000836143cf565b91506143f5826143da565b600082019050919050565b600061440b826143dd565b9150819050919050565b600060608201905061442a60008301866138e1565b61443760208301856138e1565b61444460408301846138e1565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006144a860218361367b565b91506144b38261444c565b604082019050919050565b600060208201905081810360008301526144d78161449b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061454b81613762565b92915050565b6000602082840312156145675761456661372b565b5b60006145758482850161453c565b91505092915050565b6000819050919050565b60006145a361459e6145998461457e565b613867565b61378e565b9050919050565b6145b381614588565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6145ee81613750565b82525050565b600061460083836145e5565b60208301905092915050565b6000602082019050919050565b6000614624826145b9565b61462e81856145c4565b9350614639836145d5565b8060005b8381101561466a57815161465188826145f4565b975061465c8361460c565b92505060018101905061463d565b5085935050505092915050565b600060a08201905061468c60008301886138e1565b61469960208301876145aa565b81810360408301526146ab8186614619565b90506146ba606083018561395e565b6146c760808301846138e1565b9695505050505050565b600060c0820190506146e6600083018961395e565b6146f360208301886138e1565b61470060408301876145aa565b61470d60608301866145aa565b61471a608083018561395e565b61472760a08301846138e1565b979650505050505050565b60008151905061474181613798565b92915050565b6000806000606084860312156147605761475f61372b565b5b600061476e86828701614732565b935050602061477f86828701614732565b925050604061479086828701614732565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122026bc3fc86ec5749a62761a1772e268a3a1b86b21469c14b7f35c3362cfeba6ab64736f6c634300080f0033

Deployed Bytecode

0x6080604052600436106102975760003560e01c80638a8c523c1161015a578063c876d0b9116100c1578063e884f2601161007a578063e884f26014610a33578063ef8700e514610a5e578063f11a24d314610a89578063f2fde38b14610ab4578063f637434214610add578063f8b45b0514610b085761029e565b8063c876d0b91461091f578063c8c8ebe41461094a578063d85ba06314610975578063da641921146109a0578063dd62ed3e146109cb578063e2f4560514610a085761029e565b8063a9059cbb11610113578063a9059cbb146107fd578063b20414111461083a578063b62496f514610865578063bbc0c742146108a2578063c0246668146108cd578063c17b5b8c146108f65761029e565b80638a8c523c146106ff5780638da5cb5b14610716578063921369131461074157806395d89b411461076c5780639a7a23d614610797578063a457c2d7146107c05761029e565b806349bd5a5e116101fe578063715018a6116101b7578063715018a614610615578063751039fc1461062c5780637571336a1461065757806375f0a874146106805780637bce5a04146106ab5780638095d564146106d65761029e565b806349bd5a5e146104ef5780634a62bb651461051a5780634fbee193146105455780636a486a8e146105825780636ddd1713146105ad57806370a08231146105d85761029e565b80631a8145bb116102505780631a8145bb146103c95780631f3fed8f146103f457806323b872dd1461041f57806327c8f8351461045c578063313ce5671461048757806339509351146104b25761029e565b806306fdde03146102a3578063095ea7b3146102ce57806310d5de531461030b5780631694505e1461034857806318160ddd1461037357806318a94cf11461039e5761029e565b3661029e57005b600080fd5b3480156102af57600080fd5b506102b8610b33565b6040516102c59190613709565b60405180910390f35b3480156102da57600080fd5b506102f560048036038101906102f091906137c4565b610bc5565b604051610302919061381f565b60405180910390f35b34801561031757600080fd5b50610332600480360381019061032d919061383a565b610be3565b60405161033f919061381f565b60405180910390f35b34801561035457600080fd5b5061035d610c03565b60405161036a91906138c6565b60405180910390f35b34801561037f57600080fd5b50610388610c27565b60405161039591906138f0565b60405180910390f35b3480156103aa57600080fd5b506103b3610c31565b6040516103c091906138f0565b60405180910390f35b3480156103d557600080fd5b506103de610c37565b6040516103eb91906138f0565b60405180910390f35b34801561040057600080fd5b50610409610c3d565b60405161041691906138f0565b60405180910390f35b34801561042b57600080fd5b506104466004803603810190610441919061390b565b610c43565b604051610453919061381f565b60405180910390f35b34801561046857600080fd5b50610471610d1c565b60405161047e919061396d565b60405180910390f35b34801561049357600080fd5b5061049c610d22565b6040516104a991906139a4565b60405180910390f35b3480156104be57600080fd5b506104d960048036038101906104d491906137c4565b610d2b565b6040516104e6919061381f565b60405180910390f35b3480156104fb57600080fd5b50610504610dde565b604051610511919061396d565b60405180910390f35b34801561052657600080fd5b5061052f610e02565b60405161053c919061381f565b60405180910390f35b34801561055157600080fd5b5061056c6004803603810190610567919061383a565b610e15565b604051610579919061381f565b60405180910390f35b34801561058e57600080fd5b50610597610e6b565b6040516105a491906138f0565b60405180910390f35b3480156105b957600080fd5b506105c2610e71565b6040516105cf919061381f565b60405180910390f35b3480156105e457600080fd5b506105ff60048036038101906105fa919061383a565b610e84565b60405161060c91906138f0565b60405180910390f35b34801561062157600080fd5b5061062a610ecc565b005b34801561063857600080fd5b50610641611024565b60405161064e919061381f565b60405180910390f35b34801561066357600080fd5b5061067e600480360381019061067991906139eb565b6110fa565b005b34801561068c57600080fd5b506106956111ec565b6040516106a2919061396d565b60405180910390f35b3480156106b757600080fd5b506106c0611212565b6040516106cd91906138f0565b60405180910390f35b3480156106e257600080fd5b506106fd60048036038101906106f89190613a2b565b611218565b005b34801561070b57600080fd5b50610714611332565b005b34801561072257600080fd5b5061072b611401565b604051610738919061396d565b60405180910390f35b34801561074d57600080fd5b5061075661142b565b60405161076391906138f0565b60405180910390f35b34801561077857600080fd5b50610781611431565b60405161078e9190613709565b60405180910390f35b3480156107a357600080fd5b506107be60048036038101906107b991906139eb565b6114c3565b005b3480156107cc57600080fd5b506107e760048036038101906107e291906137c4565b6115f6565b6040516107f4919061381f565b60405180910390f35b34801561080957600080fd5b50610824600480360381019061081f91906137c4565b6116c3565b604051610831919061381f565b60405180910390f35b34801561084657600080fd5b5061084f6116e1565b60405161085c91906138f0565b60405180910390f35b34801561087157600080fd5b5061088c6004803603810190610887919061383a565b6116e7565b604051610899919061381f565b60405180910390f35b3480156108ae57600080fd5b506108b7611707565b6040516108c4919061381f565b60405180910390f35b3480156108d957600080fd5b506108f460048036038101906108ef91906139eb565b61171a565b005b34801561090257600080fd5b5061091d60048036038101906109189190613a2b565b61185a565b005b34801561092b57600080fd5b50610934611974565b604051610941919061381f565b60405180910390f35b34801561095657600080fd5b5061095f611987565b60405161096c91906138f0565b60405180910390f35b34801561098157600080fd5b5061098a61198d565b60405161099791906138f0565b60405180910390f35b3480156109ac57600080fd5b506109b5611993565b6040516109c2919061396d565b60405180910390f35b3480156109d757600080fd5b506109f260048036038101906109ed9190613a7e565b6119b9565b6040516109ff91906138f0565b60405180910390f35b348015610a1457600080fd5b50610a1d611a40565b604051610a2a91906138f0565b60405180910390f35b348015610a3f57600080fd5b50610a48611a46565b604051610a55919061381f565b60405180910390f35b348015610a6a57600080fd5b50610a73611b01565b604051610a8091906138f0565b60405180910390f35b348015610a9557600080fd5b50610a9e611b07565b604051610aab91906138f0565b60405180910390f35b348015610ac057600080fd5b50610adb6004803603810190610ad6919061383a565b611b0d565b005b348015610ae957600080fd5b50610af2611cd3565b604051610aff91906138f0565b60405180910390f35b348015610b1457600080fd5b50610b1d611cd9565b604051610b2a91906138f0565b60405180910390f35b606060038054610b4290613aed565b80601f0160208091040260200160405190810160405280929190818152602001828054610b6e90613aed565b8015610bbb5780601f10610b9057610100808354040283529160200191610bbb565b820191906000526020600020905b815481529060010190602001808311610b9e57829003601f168201915b5050505050905090565b6000610bd9610bd2611d3d565b8484611d45565b6001905092915050565b601a6020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b60155481565b60175481565b60165481565b6000610c50848484611f0e565b610d1184610c5c611d3d565b610d0c856040518060600160405280602881526020016147c160289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610cc2611d3d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b609092919063ffffffff16565b611d45565b600190509392505050565b61dead81565b60006012905090565b6000610dd4610d38611d3d565b84610dcf8560016000610d49611d3d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611cdf90919063ffffffff16565b611d45565b6001905092915050565b7f000000000000000000000000f5e6fa5356fd2df8bbc6b0171ab7cc3ae3ebea4e81565b600b60009054906101000a900460ff1681565b6000601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60125481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ed4611d3d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5a90613b6a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600061102e611d3d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b490613b6a565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506000600d60006101000a81548160ff0219169083151502179055506001905090565b611102611d3d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611191576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118890613b6a565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f5481565b611220611d3d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a690613b6a565b60405180910390fd5b82600f819055508160108190555080601181905550601154601054600f546112d79190613bb9565b6112e19190613bb9565b600e819055506006600e54111561132d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132490613c5b565b60405180910390fd5b505050565b61133a611d3d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c090613b6a565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60135481565b60606004805461144090613aed565b80601f016020809104026020016040519081016040528092919081815260200182805461146c90613aed565b80156114b95780601f1061148e576101008083540402835291602001916114b9565b820191906000526020600020905b81548152906001019060200180831161149c57829003601f168201915b5050505050905090565b6114cb611d3d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461155a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155190613b6a565b60405180910390fd5b7f000000000000000000000000f5e6fa5356fd2df8bbc6b0171ab7cc3ae3ebea4e73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036115e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115df90613ced565b60405180910390fd5b6115f28282612bc4565b5050565b60006116b9611603611d3d565b846116b4856040518060600160405280602581526020016147e9602591396001600061162d611d3d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b609092919063ffffffff16565b611d45565b6001905092915050565b60006116d76116d0611d3d565b8484611f0e565b6001905092915050565b60115481565b601b6020528060005260406000206000915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b611722611d3d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a890613b6a565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161184e919061381f565b60405180910390a25050565b611862611d3d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e890613b6a565b60405180910390fd5b8260138190555081601481905550806015819055506015546014546013546119199190613bb9565b6119239190613bb9565b6012819055506064601254111561196f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196690613d59565b60405180910390fd5b505050565b600d60009054906101000a900460ff1681565b60085481565b600e5481565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b6000611a50611d3d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611adf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad690613b6a565b60405180910390fd5b6000600d60006101000a81548160ff0219169083151502179055506001905090565b60185481565b60105481565b611b15611d3d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ba4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9b90613b6a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0a90613deb565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60145481565b600a5481565b6000808284611cee9190613bb9565b905083811015611d33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2a90613e57565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611db4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dab90613ee9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1a90613f7b565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611f0191906138f0565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f749061400d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611fec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe39061409f565b60405180910390fd5b600081036120055761200083836000612c65565b612b5b565b600b60009054906101000a900460ff161561268357612022611401565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156120905750612060611401565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156120c95750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612103575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561211c5750600560149054906101000a900460ff16155b1561268257600b60019054906101000a900460ff1661221657601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806121d65750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612215576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220c9061410b565b60405180910390fd5b5b600d60009054906101000a900460ff16156123de57612233611401565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156122ba57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561231257507f000000000000000000000000f5e6fa5356fd2df8bbc6b0171ab7cc3ae3ebea4e73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156123dd5743600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612398576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238f906141c3565b60405180910390fd5b43600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156124815750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156124e357600a5461249283610e84565b8261249d9190613bb9565b11156124de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d59061422f565b60405180910390fd5b612681565b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156125865750601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156125d5576008548111156125d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c7906142c1565b60405180910390fd5b612680565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661267f57600a5461263283610e84565b8261263d9190613bb9565b111561267e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126759061422f565b60405180910390fd5b5b5b5b5b5b600061268e30610e84565b9050600060095482101590508080156126b35750600b60029054906101000a900460ff165b80156126cc5750600560149054906101000a900460ff16155b80156127225750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156127785750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156127ce5750601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612812576001600560146101000a81548160ff0219169083151502179055506127f6612ef8565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806128c85750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156128d257600090505b60008115612b4b57601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561293557506000601254115b15612a02576129626064612954601254886131dc90919063ffffffff16565b61325690919063ffffffff16565b90506012546014548261297591906142e1565b61297f919061436a565b601760008282546129909190613bb9565b92505081905550601254601554826129a891906142e1565b6129b2919061436a565b601860008282546129c39190613bb9565b92505081905550601254601354826129db91906142e1565b6129e5919061436a565b601660008282546129f69190613bb9565b92505081905550612b27565b601b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a5d57506000600e54115b15612b2657612a8a6064612a7c600e54886131dc90919063ffffffff16565b61325690919063ffffffff16565b9050600e5460105482612a9d91906142e1565b612aa7919061436a565b60176000828254612ab89190613bb9565b92505081905550600e5460115482612ad091906142e1565b612ada919061436a565b60186000828254612aeb9190613bb9565b92505081905550600e54600f5482612b0391906142e1565b612b0d919061436a565b60166000828254612b1e9190613bb9565b925050819055505b5b6000811115612b3c57612b3b873083612c65565b5b8085612b48919061439b565b94505b612b56878787612c65565b505050505b505050565b6000838311158290612ba8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9f9190613709565b60405180910390fd5b5060008385612bb7919061439b565b9050809150509392505050565b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612cd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ccb9061400d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3a9061409f565b60405180910390fd5b612d4e8383836132a0565b612db98160405180606001604052806026815260200161479b602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b609092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612e4c816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611cdf90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612eeb91906138f0565b60405180910390a3505050565b6000612f0330610e84565b90506000601854601654601754612f1a9190613bb9565b612f249190613bb9565b90506000821480612f355750600081145b15612f415750506131da565b600a600954612f5091906142e1565b8210612f6857600a600954612f6591906142e1565b91505b600060028260175485612f7b91906142e1565b612f85919061436a565b612f8f919061436a565b90506000612fa682856132a590919063ffffffff16565b90506000479050612fb6826132ef565b6000612fcb82476132a590919063ffffffff16565b90506000612ff686612fe8601654856131dc90919063ffffffff16565b61325690919063ffffffff16565b9050600061302187613013601854866131dc90919063ffffffff16565b61325690919063ffffffff16565b90506000818385613032919061439b565b61303c919061439b565b90506000601781905550600060168190555060006018819055506000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168360405161309e90614400565b60006040518083038185875af1925050503d80600081146130db576040519150601f19603f3d011682016040523d82523d6000602084013e6130e0565b606091505b505090506000881180156130f45750600082115b1561314157613103888361352c565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561878360175460405161313893929190614415565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161318790614400565b60006040518083038185875af1925050503d80600081146131c4576040519150601f19603f3d011682016040523d82523d6000602084013e6131c9565b606091505b505080915050505050505050505050505b565b60008083036131ee5760009050613250565b600082846131fc91906142e1565b905082848261320b919061436a565b1461324b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613242906144be565b60405180910390fd5b809150505b92915050565b600061329883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061360d565b905092915050565b505050565b60006132e783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612b60565b905092915050565b6000600267ffffffffffffffff81111561330c5761330b6144de565b5b60405190808252806020026020018201604052801561333a5781602001602082028036833780820191505090505b50905030816000815181106133525761335161450d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156133f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061341b9190614551565b8160018151811061342f5761342e61450d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613494307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611d45565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016134f6959493929190614677565b600060405180830381600087803b15801561351057600080fd5b505af1158015613524573d6000803e3d6000fd5b505050505050565b613557307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611d45565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806135a1611401565b426040518863ffffffff1660e01b81526004016135c3969594939291906146d1565b60606040518083038185885af11580156135e1573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906136069190614747565b5050505050565b60008083118290613654576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161364b9190613709565b60405180910390fd5b5060008385613663919061436a565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156136aa57808201518184015260208101905061368f565b838111156136b9576000848401525b50505050565b6000601f19601f8301169050919050565b60006136db82613670565b6136e5818561367b565b93506136f581856020860161368c565b6136fe816136bf565b840191505092915050565b6000602082019050818103600083015261372381846136d0565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061375b82613730565b9050919050565b61376b81613750565b811461377657600080fd5b50565b60008135905061378881613762565b92915050565b6000819050919050565b6137a18161378e565b81146137ac57600080fd5b50565b6000813590506137be81613798565b92915050565b600080604083850312156137db576137da61372b565b5b60006137e985828601613779565b92505060206137fa858286016137af565b9150509250929050565b60008115159050919050565b61381981613804565b82525050565b60006020820190506138346000830184613810565b92915050565b6000602082840312156138505761384f61372b565b5b600061385e84828501613779565b91505092915050565b6000819050919050565b600061388c61388761388284613730565b613867565b613730565b9050919050565b600061389e82613871565b9050919050565b60006138b082613893565b9050919050565b6138c0816138a5565b82525050565b60006020820190506138db60008301846138b7565b92915050565b6138ea8161378e565b82525050565b600060208201905061390560008301846138e1565b92915050565b6000806000606084860312156139245761392361372b565b5b600061393286828701613779565b935050602061394386828701613779565b9250506040613954868287016137af565b9150509250925092565b61396781613750565b82525050565b6000602082019050613982600083018461395e565b92915050565b600060ff82169050919050565b61399e81613988565b82525050565b60006020820190506139b96000830184613995565b92915050565b6139c881613804565b81146139d357600080fd5b50565b6000813590506139e5816139bf565b92915050565b60008060408385031215613a0257613a0161372b565b5b6000613a1085828601613779565b9250506020613a21858286016139d6565b9150509250929050565b600080600060608486031215613a4457613a4361372b565b5b6000613a52868287016137af565b9350506020613a63868287016137af565b9250506040613a74868287016137af565b9150509250925092565b60008060408385031215613a9557613a9461372b565b5b6000613aa385828601613779565b9250506020613ab485828601613779565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613b0557607f821691505b602082108103613b1857613b17613abe565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613b5460208361367b565b9150613b5f82613b1e565b602082019050919050565b60006020820190508181036000830152613b8381613b47565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613bc48261378e565b9150613bcf8361378e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613c0457613c03613b8a565b5b828201905092915050565b7f4d757374206b6565702066656573206174203625206f72206c65737300000000600082015250565b6000613c45601c8361367b565b9150613c5082613c0f565b602082019050919050565b60006020820190508181036000830152613c7481613c38565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000613cd760398361367b565b9150613ce282613c7b565b604082019050919050565b60006020820190508181036000830152613d0681613cca565b9050919050565b7f4d757374206b65657020666565732061742031303025206f72206c6573730000600082015250565b6000613d43601e8361367b565b9150613d4e82613d0d565b602082019050919050565b60006020820190508181036000830152613d7281613d36565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613dd560268361367b565b9150613de082613d79565b604082019050919050565b60006020820190508181036000830152613e0481613dc8565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000613e41601b8361367b565b9150613e4c82613e0b565b602082019050919050565b60006020820190508181036000830152613e7081613e34565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613ed360248361367b565b9150613ede82613e77565b604082019050919050565b60006020820190508181036000830152613f0281613ec6565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613f6560228361367b565b9150613f7082613f09565b604082019050919050565b60006020820190508181036000830152613f9481613f58565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613ff760258361367b565b915061400282613f9b565b604082019050919050565b6000602082019050818103600083015261402681613fea565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061408960238361367b565b91506140948261402d565b604082019050919050565b600060208201905081810360008301526140b88161407c565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006140f560168361367b565b9150614100826140bf565b602082019050919050565b60006020820190508181036000830152614124816140e8565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006141ad60498361367b565b91506141b88261412b565b606082019050919050565b600060208201905081810360008301526141dc816141a0565b9050919050565b7f556e61626c6520746f20657863656564204d61782057616c6c65740000000000600082015250565b6000614219601b8361367b565b9150614224826141e3565b602082019050919050565b600060208201905081810360008301526142488161420c565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006142ab60368361367b565b91506142b68261424f565b604082019050919050565b600060208201905081810360008301526142da8161429e565b9050919050565b60006142ec8261378e565b91506142f78361378e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156143305761432f613b8a565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006143758261378e565b91506143808361378e565b9250826143905761438f61433b565b5b828204905092915050565b60006143a68261378e565b91506143b18361378e565b9250828210156143c4576143c3613b8a565b5b828203905092915050565b600081905092915050565b50565b60006143ea6000836143cf565b91506143f5826143da565b600082019050919050565b600061440b826143dd565b9150819050919050565b600060608201905061442a60008301866138e1565b61443760208301856138e1565b61444460408301846138e1565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006144a860218361367b565b91506144b38261444c565b604082019050919050565b600060208201905081810360008301526144d78161449b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061454b81613762565b92915050565b6000602082840312156145675761456661372b565b5b60006145758482850161453c565b91505092915050565b6000819050919050565b60006145a361459e6145998461457e565b613867565b61378e565b9050919050565b6145b381614588565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6145ee81613750565b82525050565b600061460083836145e5565b60208301905092915050565b6000602082019050919050565b6000614624826145b9565b61462e81856145c4565b9350614639836145d5565b8060005b8381101561466a57815161465188826145f4565b975061465c8361460c565b92505060018101905061463d565b5085935050505092915050565b600060a08201905061468c60008301886138e1565b61469960208301876145aa565b81810360408301526146ab8186614619565b90506146ba606083018561395e565b6146c760808301846138e1565b9695505050505050565b600060c0820190506146e6600083018961395e565b6146f360208301886138e1565b61470060408301876145aa565b61470d60608301866145aa565b61471a608083018561395e565b61472760a08301846138e1565b979650505050505050565b60008151905061474181613798565b92915050565b6000806000606084860312156147605761475f61372b565b5b600061476e86828701614732565b935050602061477f86828701614732565b925050604061479086828701614732565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122026bc3fc86ec5749a62761a1772e268a3a1b86b21469c14b7f35c3362cfeba6ab64736f6c634300080f0033

Deployed Bytecode Sourcemap

17232:12550:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4955:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5869:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18434:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17307:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5276:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18208:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18290;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18250;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6046:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17410:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5175:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6409:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17365:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17705:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23381:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18097:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17785:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5392:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10802:148;;;;;;;;;;;;;:::i;:::-;;21432:159;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21745:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17502:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17982;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21901:404;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21312:112;;;;;;;;;;;;;:::i;:::-;;10588:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18132:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5063:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22927:246;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6635:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5527:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18056:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18505:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17745:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22737:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22317:412;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17900:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17590:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17948:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17539:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5710:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17632:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21599:134;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18330:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18019:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10958:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18170:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17672:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4955:100;5009:13;5042:5;5035:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4955:100;:::o;5869:169::-;5952:4;5969:39;5978:12;:10;:12::i;:::-;5992:7;6001:6;5969:8;:39::i;:::-;6026:4;6019:11;;5869:169;;;;:::o;18434:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;17307:51::-;;;:::o;5276:108::-;5337:7;5364:12;;5357:19;;5276:108;:::o;18208:33::-;;;;:::o;18290:::-;;;;:::o;18250:::-;;;;:::o;6046:355::-;6186:4;6203:36;6213:6;6221:9;6232:6;6203:9;:36::i;:::-;6250:121;6259:6;6267:12;:10;:12::i;:::-;6281:89;6319:6;6281:89;;;;;;;;;;;;;;;;;:11;:19;6293:6;6281:19;;;;;;;;;;;;;;;:33;6301:12;:10;:12::i;:::-;6281:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;6250:8;:121::i;:::-;6389:4;6382:11;;6046:355;;;;;:::o;17410:53::-;17456:6;17410:53;:::o;5175:93::-;5233:5;5258:2;5251:9;;5175:93;:::o;6409:218::-;6497:4;6514:83;6523:12;:10;:12::i;:::-;6537:7;6546:50;6585:10;6546:11;:25;6558:12;:10;:12::i;:::-;6546:25;;;;;;;;;;;;;;;:34;6572:7;6546:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;6514:8;:83::i;:::-;6615:4;6608:11;;6409:218;;;;:::o;17365:38::-;;;:::o;17705:33::-;;;;;;;;;;;;;:::o;23381:127::-;23448:4;23472:19;:28;23492:7;23472:28;;;;;;;;;;;;;;;;;;;;;;;;;23465:35;;23381:127;;;:::o;18097:28::-;;;;:::o;17785:31::-;;;;;;;;;;;;;:::o;5392:127::-;5466:7;5493:9;:18;5503:7;5493:18;;;;;;;;;;;;;;;;5486:25;;5392:127;;;:::o;10802:148::-;10725:12;:10;:12::i;:::-;10715:22;;:6;;;;;;;;;;;:22;;;10707:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;10909:1:::1;10872:40;;10893:6;;;;;;;;;;;10872:40;;;;;;;;;;;;10940:1;10923:6;;:19;;;;;;;;;;;;;;;;;;10802:148::o:0;21432:159::-;21484:4;10725:12;:10;:12::i;:::-;10715:22;;:6;;;;;;;;;;;:22;;;10707:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21517:5:::1;21500:14;;:22;;;;;;;;;;;;;;;;;;21556:5;21533:20;;:28;;;;;;;;;;;;;;;;;;21579:4;21572:11;;21432:159:::0;:::o;21745:144::-;10725:12;:10;:12::i;:::-;10715:22;;:6;;;;;;;;;;;:22;;;10707:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21877:4:::1;21835:31;:39;21867:6;21835:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;21745:144:::0;;:::o;17502:30::-;;;;;;;;;;;;;:::o;17982:::-;;;;:::o;21901:404::-;10725:12;:10;:12::i;:::-;10715:22;;:6;;;;;;;;;;;:22;;;10707:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22048:13:::1;22030:15;:31;;;;22090:13;22072:15;:31;;;;22134:15;22114:17;:35;;;;22211:17;;22193:15;;22175;;:33;;;;:::i;:::-;:53;;;;:::i;:::-;22160:12;:68;;;;22263:1;22247:12;;:17;;22239:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;21901:404:::0;;;:::o;21312:112::-;10725:12;:10;:12::i;:::-;10715:22;;:6;;;;;;;;;;;:22;;;10707:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21383:4:::1;21367:13;;:20;;;;;;;;;;;;;;;;;;21412:4;21398:11;;:18;;;;;;;;;;;;;;;;;;21312:112::o:0;10588:79::-;10626:7;10653:6;;;;;;;;;;;10646:13;;10588:79;:::o;18132:31::-;;;;:::o;5063:104::-;5119:13;5152:7;5145:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5063:104;:::o;22927:246::-;10725:12;:10;:12::i;:::-;10715:22;;:6;;;;;;;;;;;:22;;;10707:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23036:13:::1;23028:21;;:4;:21;;::::0;23020:91:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;23124:41;23153:4;23159:5;23124:28;:41::i;:::-;22927:246:::0;;:::o;6635:269::-;6728:4;6745:129;6754:12;:10;:12::i;:::-;6768:7;6777:96;6816:15;6777:96;;;;;;;;;;;;;;;;;:11;:25;6789:12;:10;:12::i;:::-;6777:25;;;;;;;;;;;;;;;:34;6803:7;6777:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;6745:8;:129::i;:::-;6892:4;6885:11;;6635:269;;;;:::o;5527:175::-;5613:4;5630:42;5640:12;:10;:12::i;:::-;5654:9;5665:6;5630:9;:42::i;:::-;5690:4;5683:11;;5527:175;;;;:::o;18056:32::-;;;;:::o;18505:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;17745:33::-;;;;;;;;;;;;;:::o;22737:182::-;10725:12;:10;:12::i;:::-;10715:22;;:6;;;;;;;;;;;:22;;;10707:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22853:8:::1;22822:19;:28;22842:7;22822:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;22893:7;22877:34;;;22902:8;22877:34;;;;;;:::i;:::-;;;;;;;;22737:182:::0;;:::o;22317:412::-;10725:12;:10;:12::i;:::-;10715:22;;:6;;;;;;;;;;;:22;;;10707:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22461:13:::1;22442:16;:32;;;;22504:13;22485:16;:32;;;;22549:15;22528:18;:36;;;;22629:18;;22610:16;;22591;;:35;;;;:::i;:::-;:56;;;;:::i;:::-;22575:13;:72;;;;22683:3;22666:13;;:20;;22658:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;22317:412:::0;;;:::o;17900:39::-;;;;;;;;;;;;;:::o;17590:35::-;;;;:::o;17948:27::-;;;;:::o;17539:38::-;;;;;;;;;;;;;:::o;5710:151::-;5799:7;5826:11;:18;5838:5;5826:18;;;;;;;;;;;;;;;:27;5845:7;5826:27;;;;;;;;;;;;;;;;5819:34;;5710:151;;;;:::o;17632:33::-;;;;:::o;21599:134::-;21659:4;10725:12;:10;:12::i;:::-;10715:22;;:6;;;;;;;;;;;:22;;;10707:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21698:5:::1;21675:20;;:28;;;;;;;;;;;;;;;;;;21721:4;21714:11;;21599:134:::0;:::o;18330:35::-;;;;:::o;18019:30::-;;;;:::o;10958:244::-;10725:12;:10;:12::i;:::-;10715:22;;:6;;;;;;;;;;;:22;;;10707:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;11067:1:::1;11047:22;;:8;:22;;::::0;11039:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;11157:8;11128:38;;11149:6;;;;;;;;;;;11128:38;;;;;;;;;;;;11186:8;11177:6;;:17;;;;;;;;;;;;;;;;;;10958:244:::0;:::o;18170:31::-;;;;:::o;17672:24::-;;;;:::o;8837:179::-;8895:7;8915:9;8931:1;8927;:5;;;;:::i;:::-;8915:17;;8956:1;8951;:6;;8943:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;9007:1;9000:8;;;8837:179;;;;:::o;226:98::-;279:7;306:10;299:17;;226:98;:::o;8293:378::-;8446:1;8429:19;;:5;:19;;;8421:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8527:1;8508:21;;:7;:21;;;8500:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8609:6;8579:11;:18;8591:5;8579:18;;;;;;;;;;;;;;;:27;8598:7;8579:27;;;;;;;;;;;;;;;:36;;;;8647:7;8631:32;;8640:5;8631:32;;;8656:6;8631:32;;;;;;:::i;:::-;;;;;;;;8293:378;;;:::o;23520:3714::-;23668:1;23652:18;;:4;:18;;;23644:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23745:1;23731:16;;:2;:16;;;23723:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;23822:1;23812:6;:11;23809:92;;23840:28;23856:4;23862:2;23866:1;23840:15;:28::i;:::-;23883:7;;23809:92;23924:14;;;;;;;;;;;23921:1579;;;23984:7;:5;:7::i;:::-;23976:15;;:4;:15;;;;:50;;;;;24019:7;:5;:7::i;:::-;24013:13;;:2;:13;;;;23976:50;:88;;;;;24062:1;24048:16;;:2;:16;;;;23976:88;:130;;;;;24099:6;24085:21;;:2;:21;;;;23976:130;:160;;;;;24128:8;;;;;;;;;;;24127:9;23976:160;23954:1535;;;24175:13;;;;;;;;;;;24171:148;;24220:19;:25;24240:4;24220:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;24249:19;:23;24269:2;24249:23;;;;;;;;;;;;;;;;;;;;;;;;;24220:52;24212:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;24171:148;24343:20;;;;;;;;;;;24339:423;;;24397:7;:5;:7::i;:::-;24391:13;;:2;:13;;;;:47;;;;;24422:15;24408:30;;:2;:30;;;;24391:47;:79;;;;;24456:13;24442:28;;:2;:28;;;;24391:79;24387:356;;;24548:12;24506:28;:39;24535:9;24506:39;;;;;;;;;;;;;;;;:54;24498:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;24707:12;24665:28;:39;24694:9;24665:39;;;;;;;;;;;;;;;:54;;;;24387:356;24339:423;24831:25;:31;24857:4;24831:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;24867:31;:35;24899:2;24867:35;;;;;;;;;;;;;;;;;;;;;;;;;24866:36;24831:71;24827:647;;;24961:9;;24944:13;24954:2;24944:9;:13::i;:::-;24935:6;:22;;;;:::i;:::-;:35;;24927:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;24827:647;;;25079:25;:29;25105:2;25079:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;25113:31;:37;25145:4;25113:37;;;;;;;;;;;;;;;;;;;;;;;;;25112:38;25079:71;25075:399;;;25193:20;;25183:6;:30;;25175:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;25075:399;;;25319:31;:35;25351:2;25319:35;;;;;;;;;;;;;;;;;;;;;;;;;25315:159;;25413:9;;25396:13;25406:2;25396:9;:13::i;:::-;25387:6;:22;;;;:::i;:::-;:35;;25379:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;25315:159;25075:399;24827:647;23954:1535;23921:1579;25514:28;25545:24;25563:4;25545:9;:24::i;:::-;25514:55;;25590:12;25629:18;;25605:20;:42;;25590:57;;25678:7;:35;;;;;25702:11;;;;;;;;;;;25678:35;:61;;;;;25731:8;;;;;;;;;;;25730:9;25678:61;:110;;;;;25757:25;:31;25783:4;25757:31;;;;;;;;;;;;;;;;;;;;;;;;;25756:32;25678:110;:153;;;;;25806:19;:25;25826:4;25806:25;;;;;;;;;;;;;;;;;;;;;;;;;25805:26;25678:153;:194;;;;;25849:19;:23;25869:2;25849:23;;;;;;;;;;;;;;;;;;;;;;;;;25848:24;25678:194;25660:338;;;25910:4;25899:8;;:15;;;;;;;;;;;;;;;;;;25943:10;:8;:10::i;:::-;25981:5;25970:8;;:16;;;;;;;;;;;;;;;;;;25660:338;26018:12;26034:8;;;;;;;;;;;26033:9;26018:24;;26058:19;:25;26078:4;26058:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;26087:19;:23;26107:2;26087:23;;;;;;;;;;;;;;;;;;;;;;;;;26058:52;26055:99;;;26137:5;26127:15;;26055:99;26174:12;26204:7;26201:980;;;26245:25;:29;26271:2;26245:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;26294:1;26278:13;;:17;26245:50;26241:771;;;26322:34;26352:3;26322:25;26333:13;;26322:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;26315:41;;26423:13;;26404:16;;26397:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;26375:18;;:61;;;;;;;:::i;:::-;;;;;;;;26507:13;;26486:18;;26479:4;:25;;;;:::i;:::-;:41;;;;:::i;:::-;26455:20;;:65;;;;;;;:::i;:::-;;;;;;;;26587:13;;26568:16;;26561:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;26539:18;;:61;;;;;;;:::i;:::-;;;;;;;;26241:771;;;26652:25;:31;26678:4;26652:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;26702:1;26687:12;;:16;26652:51;26649:363;;;26728:33;26757:3;26728:24;26739:12;;26728:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;26721:40;;26824:12;;26806:15;;26799:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;26777:18;;:59;;;;;;;:::i;:::-;;;;;;;;26906:12;;26886:17;;26879:4;:24;;;;:::i;:::-;:39;;;;:::i;:::-;26855:20;;:63;;;;;;;:::i;:::-;;;;;;;;26984:12;;26966:15;;26959:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;26937:18;;:59;;;;;;;:::i;:::-;;;;;;;;26649:363;26241:771;27050:1;27043:4;:8;27040:93;;;27075:42;27091:4;27105;27112;27075:15;:42::i;:::-;27040:93;27165:4;27155:14;;;;;:::i;:::-;;;26201:980;27193:33;27209:4;27215:2;27219:6;27193:15;:33::i;:::-;23633:3601;;;;23520:3714;;;;:::o;9168:190::-;9254:7;9287:1;9282;:6;;9290:12;9274:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9314:9;9330:1;9326;:5;;;;:::i;:::-;9314:17;;9349:1;9342:8;;;9168:190;;;;;:::o;23185:188::-;23302:5;23268:25;:31;23294:4;23268:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;23359:5;23325:40;;23353:4;23325:40;;;;;;;;;;;;23185:188;;:::o;6912:569::-;7070:1;7052:20;;:6;:20;;;7044:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;7154:1;7133:23;;:9;:23;;;7125:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;7207:47;7228:6;7236:9;7247:6;7207:20;:47::i;:::-;7285:71;7307:6;7285:71;;;;;;;;;;;;;;;;;:9;:17;7295:6;7285:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;7265:9;:17;7275:6;7265:17;;;;;;;;;;;;;;;:91;;;;7390:32;7415:6;7390:9;:20;7400:9;7390:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;7367:9;:20;7377:9;7367:20;;;;;;;;;;;;;;;:55;;;;7455:9;7438:35;;7447:6;7438:35;;;7466:6;7438:35;;;;;;:::i;:::-;;;;;;;;6912:569;;;:::o;28116:1663::-;28155:23;28181:24;28199:4;28181:9;:24::i;:::-;28155:50;;28216:25;28286:20;;28265:18;;28244;;:39;;;;:::i;:::-;:62;;;;:::i;:::-;28216:90;;28349:1;28330:15;:20;:46;;;;28375:1;28354:17;:22;28330:46;28327:60;;;28379:7;;;;28327:60;28442:2;28421:18;;:23;;;;:::i;:::-;28402:15;:42;28399:114;;28499:2;28478:18;;:23;;;;:::i;:::-;28460:41;;28399:114;28533:23;28618:1;28598:17;28577:18;;28559:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;28533:86;;28630:26;28659:36;28679:15;28659;:19;;:36;;;;:::i;:::-;28630:65;;28716:25;28744:21;28716:49;;28778:36;28795:18;28778:16;:36::i;:::-;28836:18;28857:44;28883:17;28857:21;:25;;:44;;;;:::i;:::-;28836:65;;28922:23;28948:57;28987:17;28948:34;28963:18;;28948:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;28922:83;;29016:25;29044:59;29085:17;29044:36;29059:20;;29044:10;:14;;:36;;;;:::i;:::-;:40;;:59;;;;:::i;:::-;29016:87;;29134:23;29191:17;29173:15;29160:10;:28;;;;:::i;:::-;:48;;;;:::i;:::-;29134:74;;29260:1;29239:18;:22;;;;29293:1;29272:18;:22;;;;29328:1;29305:20;:24;;;;29353:12;29378:23;;;;;;;;;;;29370:37;;29415:17;29370:67;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29352:85;;;29479:1;29461:15;:19;:42;;;;;29502:1;29484:15;:19;29461:42;29458:210;;;29519:46;29532:15;29549;29519:12;:46::i;:::-;29585:71;29600:18;29620:15;29637:18;;29585:71;;;;;;;;:::i;:::-;;;;;;;;29458:210;29709:15;;;;;;;;;;;29701:29;;29738:21;29701:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29688:76;;;;;28144:1635;;;;;;;;;;28116:1663;:::o;9366:246::-;9424:7;9453:1;9448;:6;9444:47;;9478:1;9471:8;;;;9444:47;9501:9;9517:1;9513;:5;;;;:::i;:::-;9501:17;;9546:1;9541;9537;:5;;;;:::i;:::-;:10;9529:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;9603:1;9596:8;;;9366:246;;;;;:::o;9620:132::-;9678:7;9705:39;9709:1;9712;9705:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;9698:46;;9620:132;;;;:::o;8679:125::-;;;;:::o;9024:136::-;9082:7;9109:43;9113:1;9116;9109:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;9102:50;;9024:136;;;;:::o;27242:488::-;27310:21;27348:1;27334:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27310:40;;27379:4;27361;27366:1;27361:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;27405:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27395:4;27400:1;27395:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;27440:62;27457:4;27472:15;27490:11;27440:8;:62::i;:::-;27515:15;:66;;;27596:11;27622:1;27639:4;27666;27686:15;27515:197;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27297:433;27242:488;:::o;27742:366::-;27825:62;27842:4;27857:15;27875:11;27825:8;:62::i;:::-;27900:15;:31;;;27939:9;27972:4;27992:11;28018:1;28035;28052:7;:5;:7::i;:::-;28074:15;27900:200;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;27742:366;;:::o;9760:189::-;9846:7;9878:1;9874;:5;9881:12;9866:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9905:9;9921:1;9917;:5;;;;:::i;:::-;9905:17;;9940:1;9933:8;;;9760:189;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:329::-;3553:6;3602:2;3590:9;3581:7;3577:23;3573:32;3570:119;;;3608:79;;:::i;:::-;3570:119;3728:1;3753:53;3798:7;3789:6;3778:9;3774:22;3753:53;:::i;:::-;3743:63;;3699:117;3494:329;;;;:::o;3829:60::-;3857:3;3878:5;3871:12;;3829:60;;;:::o;3895:142::-;3945:9;3978:53;3996:34;4005:24;4023:5;4005:24;:::i;:::-;3996:34;:::i;:::-;3978:53;:::i;:::-;3965:66;;3895:142;;;:::o;4043:126::-;4093:9;4126:37;4157:5;4126:37;:::i;:::-;4113:50;;4043:126;;;:::o;4175:153::-;4252:9;4285:37;4316:5;4285:37;:::i;:::-;4272:50;;4175:153;;;:::o;4334:185::-;4448:64;4506:5;4448:64;:::i;:::-;4443:3;4436:77;4334:185;;:::o;4525:276::-;4645:4;4683:2;4672:9;4668:18;4660:26;;4696:98;4791:1;4780:9;4776:17;4767:6;4696:98;:::i;:::-;4525:276;;;;:::o;4807:118::-;4894:24;4912:5;4894:24;:::i;:::-;4889:3;4882:37;4807:118;;:::o;4931:222::-;5024:4;5062:2;5051:9;5047:18;5039:26;;5075:71;5143:1;5132:9;5128:17;5119:6;5075:71;:::i;:::-;4931:222;;;;:::o;5159:619::-;5236:6;5244;5252;5301:2;5289:9;5280:7;5276:23;5272:32;5269:119;;;5307:79;;:::i;:::-;5269:119;5427:1;5452:53;5497:7;5488:6;5477:9;5473:22;5452:53;:::i;:::-;5442:63;;5398:117;5554:2;5580:53;5625:7;5616:6;5605:9;5601:22;5580:53;:::i;:::-;5570:63;;5525:118;5682:2;5708:53;5753:7;5744:6;5733:9;5729:22;5708:53;:::i;:::-;5698:63;;5653:118;5159:619;;;;;:::o;5784:118::-;5871:24;5889:5;5871:24;:::i;:::-;5866:3;5859:37;5784:118;;:::o;5908:222::-;6001:4;6039:2;6028:9;6024:18;6016:26;;6052:71;6120:1;6109:9;6105:17;6096:6;6052:71;:::i;:::-;5908:222;;;;:::o;6136:86::-;6171:7;6211:4;6204:5;6200:16;6189:27;;6136:86;;;:::o;6228:112::-;6311:22;6327:5;6311:22;:::i;:::-;6306:3;6299:35;6228:112;;:::o;6346:214::-;6435:4;6473:2;6462:9;6458:18;6450:26;;6486:67;6550:1;6539:9;6535:17;6526:6;6486:67;:::i;:::-;6346:214;;;;:::o;6566:116::-;6636:21;6651:5;6636:21;:::i;:::-;6629:5;6626:32;6616:60;;6672:1;6669;6662:12;6616:60;6566:116;:::o;6688:133::-;6731:5;6769:6;6756:20;6747:29;;6785:30;6809:5;6785:30;:::i;:::-;6688:133;;;;:::o;6827:468::-;6892:6;6900;6949:2;6937:9;6928:7;6924:23;6920:32;6917:119;;;6955:79;;:::i;:::-;6917:119;7075:1;7100:53;7145:7;7136:6;7125:9;7121:22;7100:53;:::i;:::-;7090:63;;7046:117;7202:2;7228:50;7270:7;7261:6;7250:9;7246:22;7228:50;:::i;:::-;7218:60;;7173:115;6827:468;;;;;:::o;7301:619::-;7378:6;7386;7394;7443:2;7431:9;7422:7;7418:23;7414:32;7411:119;;;7449:79;;:::i;:::-;7411:119;7569:1;7594:53;7639:7;7630:6;7619:9;7615:22;7594:53;:::i;:::-;7584:63;;7540:117;7696:2;7722:53;7767:7;7758:6;7747:9;7743:22;7722:53;:::i;:::-;7712:63;;7667:118;7824:2;7850:53;7895:7;7886:6;7875:9;7871:22;7850:53;:::i;:::-;7840:63;;7795:118;7301:619;;;;;:::o;7926:474::-;7994:6;8002;8051:2;8039:9;8030:7;8026:23;8022:32;8019:119;;;8057:79;;:::i;:::-;8019:119;8177:1;8202:53;8247:7;8238:6;8227:9;8223:22;8202:53;:::i;:::-;8192:63;;8148:117;8304:2;8330:53;8375:7;8366:6;8355:9;8351:22;8330:53;:::i;:::-;8320:63;;8275:118;7926:474;;;;;:::o;8406:180::-;8454:77;8451:1;8444:88;8551:4;8548:1;8541:15;8575:4;8572:1;8565:15;8592:320;8636:6;8673:1;8667:4;8663:12;8653:22;;8720:1;8714:4;8710:12;8741:18;8731:81;;8797:4;8789:6;8785:17;8775:27;;8731:81;8859:2;8851:6;8848:14;8828:18;8825:38;8822:84;;8878:18;;:::i;:::-;8822:84;8643:269;8592:320;;;:::o;8918:182::-;9058:34;9054:1;9046:6;9042:14;9035:58;8918:182;:::o;9106:366::-;9248:3;9269:67;9333:2;9328:3;9269:67;:::i;:::-;9262:74;;9345:93;9434:3;9345:93;:::i;:::-;9463:2;9458:3;9454:12;9447:19;;9106:366;;;:::o;9478:419::-;9644:4;9682:2;9671:9;9667:18;9659:26;;9731:9;9725:4;9721:20;9717:1;9706:9;9702:17;9695:47;9759:131;9885:4;9759:131;:::i;:::-;9751:139;;9478:419;;;:::o;9903:180::-;9951:77;9948:1;9941:88;10048:4;10045:1;10038:15;10072:4;10069:1;10062:15;10089:305;10129:3;10148:20;10166:1;10148:20;:::i;:::-;10143:25;;10182:20;10200:1;10182:20;:::i;:::-;10177:25;;10336:1;10268:66;10264:74;10261:1;10258:81;10255:107;;;10342:18;;:::i;:::-;10255:107;10386:1;10383;10379:9;10372:16;;10089:305;;;;:::o;10400:178::-;10540:30;10536:1;10528:6;10524:14;10517:54;10400:178;:::o;10584:366::-;10726:3;10747:67;10811:2;10806:3;10747:67;:::i;:::-;10740:74;;10823:93;10912:3;10823:93;:::i;:::-;10941:2;10936:3;10932:12;10925:19;;10584:366;;;:::o;10956:419::-;11122:4;11160:2;11149:9;11145:18;11137:26;;11209:9;11203:4;11199:20;11195:1;11184:9;11180:17;11173:47;11237:131;11363:4;11237:131;:::i;:::-;11229:139;;10956:419;;;:::o;11381:244::-;11521:34;11517:1;11509:6;11505:14;11498:58;11590:27;11585:2;11577:6;11573:15;11566:52;11381:244;:::o;11631:366::-;11773:3;11794:67;11858:2;11853:3;11794:67;:::i;:::-;11787:74;;11870:93;11959:3;11870:93;:::i;:::-;11988:2;11983:3;11979:12;11972:19;;11631:366;;;:::o;12003:419::-;12169:4;12207:2;12196:9;12192:18;12184:26;;12256:9;12250:4;12246:20;12242:1;12231:9;12227:17;12220:47;12284:131;12410:4;12284:131;:::i;:::-;12276:139;;12003:419;;;:::o;12428:180::-;12568:32;12564:1;12556:6;12552:14;12545:56;12428:180;:::o;12614:366::-;12756:3;12777:67;12841:2;12836:3;12777:67;:::i;:::-;12770:74;;12853:93;12942:3;12853:93;:::i;:::-;12971:2;12966:3;12962:12;12955:19;;12614:366;;;:::o;12986:419::-;13152:4;13190:2;13179:9;13175:18;13167:26;;13239:9;13233:4;13229:20;13225:1;13214:9;13210:17;13203:47;13267:131;13393:4;13267:131;:::i;:::-;13259:139;;12986:419;;;:::o;13411:225::-;13551:34;13547:1;13539:6;13535:14;13528:58;13620:8;13615:2;13607:6;13603:15;13596:33;13411:225;:::o;13642:366::-;13784:3;13805:67;13869:2;13864:3;13805:67;:::i;:::-;13798:74;;13881:93;13970:3;13881:93;:::i;:::-;13999:2;13994:3;13990:12;13983:19;;13642:366;;;:::o;14014:419::-;14180:4;14218:2;14207:9;14203:18;14195:26;;14267:9;14261:4;14257:20;14253:1;14242:9;14238:17;14231:47;14295:131;14421:4;14295:131;:::i;:::-;14287:139;;14014:419;;;:::o;14439:177::-;14579:29;14575:1;14567:6;14563:14;14556:53;14439:177;:::o;14622:366::-;14764:3;14785:67;14849:2;14844:3;14785:67;:::i;:::-;14778:74;;14861:93;14950:3;14861:93;:::i;:::-;14979:2;14974:3;14970:12;14963:19;;14622:366;;;:::o;14994:419::-;15160:4;15198:2;15187:9;15183:18;15175:26;;15247:9;15241:4;15237:20;15233:1;15222:9;15218:17;15211:47;15275:131;15401:4;15275:131;:::i;:::-;15267:139;;14994:419;;;:::o;15419:223::-;15559:34;15555:1;15547:6;15543:14;15536:58;15628:6;15623:2;15615:6;15611:15;15604:31;15419:223;:::o;15648:366::-;15790:3;15811:67;15875:2;15870:3;15811:67;:::i;:::-;15804:74;;15887:93;15976:3;15887:93;:::i;:::-;16005:2;16000:3;15996:12;15989:19;;15648:366;;;:::o;16020:419::-;16186:4;16224:2;16213:9;16209:18;16201:26;;16273:9;16267:4;16263:20;16259:1;16248:9;16244:17;16237:47;16301:131;16427:4;16301:131;:::i;:::-;16293:139;;16020:419;;;:::o;16445:221::-;16585:34;16581:1;16573:6;16569:14;16562:58;16654:4;16649:2;16641:6;16637:15;16630:29;16445:221;:::o;16672:366::-;16814:3;16835:67;16899:2;16894:3;16835:67;:::i;:::-;16828:74;;16911:93;17000:3;16911:93;:::i;:::-;17029:2;17024:3;17020:12;17013:19;;16672:366;;;:::o;17044:419::-;17210:4;17248:2;17237:9;17233:18;17225:26;;17297:9;17291:4;17287:20;17283:1;17272:9;17268:17;17261:47;17325:131;17451:4;17325:131;:::i;:::-;17317:139;;17044:419;;;:::o;17469:224::-;17609:34;17605:1;17597:6;17593:14;17586:58;17678:7;17673:2;17665:6;17661:15;17654:32;17469:224;:::o;17699:366::-;17841:3;17862:67;17926:2;17921:3;17862:67;:::i;:::-;17855:74;;17938:93;18027:3;17938:93;:::i;:::-;18056:2;18051:3;18047:12;18040:19;;17699:366;;;:::o;18071:419::-;18237:4;18275:2;18264:9;18260:18;18252:26;;18324:9;18318:4;18314:20;18310:1;18299:9;18295:17;18288:47;18352:131;18478:4;18352:131;:::i;:::-;18344:139;;18071:419;;;:::o;18496:222::-;18636:34;18632:1;18624:6;18620:14;18613:58;18705:5;18700:2;18692:6;18688:15;18681:30;18496:222;:::o;18724:366::-;18866:3;18887:67;18951:2;18946:3;18887:67;:::i;:::-;18880:74;;18963:93;19052:3;18963:93;:::i;:::-;19081:2;19076:3;19072:12;19065:19;;18724:366;;;:::o;19096:419::-;19262:4;19300:2;19289:9;19285:18;19277:26;;19349:9;19343:4;19339:20;19335:1;19324:9;19320:17;19313:47;19377:131;19503:4;19377:131;:::i;:::-;19369:139;;19096:419;;;:::o;19521:172::-;19661:24;19657:1;19649:6;19645:14;19638:48;19521:172;:::o;19699:366::-;19841:3;19862:67;19926:2;19921:3;19862:67;:::i;:::-;19855:74;;19938:93;20027:3;19938:93;:::i;:::-;20056:2;20051:3;20047:12;20040:19;;19699:366;;;:::o;20071:419::-;20237:4;20275:2;20264:9;20260:18;20252:26;;20324:9;20318:4;20314:20;20310:1;20299:9;20295:17;20288:47;20352:131;20478:4;20352:131;:::i;:::-;20344:139;;20071:419;;;:::o;20496:297::-;20636:34;20632:1;20624:6;20620:14;20613:58;20705:34;20700:2;20692:6;20688:15;20681:59;20774:11;20769:2;20761:6;20757:15;20750:36;20496:297;:::o;20799:366::-;20941:3;20962:67;21026:2;21021:3;20962:67;:::i;:::-;20955:74;;21038:93;21127:3;21038:93;:::i;:::-;21156:2;21151:3;21147:12;21140:19;;20799:366;;;:::o;21171:419::-;21337:4;21375:2;21364:9;21360:18;21352:26;;21424:9;21418:4;21414:20;21410:1;21399:9;21395:17;21388:47;21452:131;21578:4;21452:131;:::i;:::-;21444:139;;21171:419;;;:::o;21596:177::-;21736:29;21732:1;21724:6;21720:14;21713:53;21596:177;:::o;21779:366::-;21921:3;21942:67;22006:2;22001:3;21942:67;:::i;:::-;21935:74;;22018:93;22107:3;22018:93;:::i;:::-;22136:2;22131:3;22127:12;22120:19;;21779:366;;;:::o;22151:419::-;22317:4;22355:2;22344:9;22340:18;22332:26;;22404:9;22398:4;22394:20;22390:1;22379:9;22375:17;22368:47;22432:131;22558:4;22432:131;:::i;:::-;22424:139;;22151:419;;;:::o;22576:241::-;22716:34;22712:1;22704:6;22700:14;22693:58;22785:24;22780:2;22772:6;22768:15;22761:49;22576:241;:::o;22823:366::-;22965:3;22986:67;23050:2;23045:3;22986:67;:::i;:::-;22979:74;;23062:93;23151:3;23062:93;:::i;:::-;23180:2;23175:3;23171:12;23164:19;;22823:366;;;:::o;23195:419::-;23361:4;23399:2;23388:9;23384:18;23376:26;;23448:9;23442:4;23438:20;23434:1;23423:9;23419:17;23412:47;23476:131;23602:4;23476:131;:::i;:::-;23468:139;;23195:419;;;:::o;23620:348::-;23660:7;23683:20;23701:1;23683:20;:::i;:::-;23678:25;;23717:20;23735:1;23717:20;:::i;:::-;23712:25;;23905:1;23837:66;23833:74;23830:1;23827:81;23822:1;23815:9;23808:17;23804:105;23801:131;;;23912:18;;:::i;:::-;23801:131;23960:1;23957;23953:9;23942:20;;23620:348;;;;:::o;23974:180::-;24022:77;24019:1;24012:88;24119:4;24116:1;24109:15;24143:4;24140:1;24133:15;24160:185;24200:1;24217:20;24235:1;24217:20;:::i;:::-;24212:25;;24251:20;24269:1;24251:20;:::i;:::-;24246:25;;24290:1;24280:35;;24295:18;;:::i;:::-;24280:35;24337:1;24334;24330:9;24325:14;;24160:185;;;;:::o;24351:191::-;24391:4;24411:20;24429:1;24411:20;:::i;:::-;24406:25;;24445:20;24463:1;24445:20;:::i;:::-;24440:25;;24484:1;24481;24478:8;24475:34;;;24489:18;;:::i;:::-;24475:34;24534:1;24531;24527:9;24519:17;;24351:191;;;;:::o;24548:147::-;24649:11;24686:3;24671:18;;24548:147;;;;:::o;24701:114::-;;:::o;24821:398::-;24980:3;25001:83;25082:1;25077:3;25001:83;:::i;:::-;24994:90;;25093:93;25182:3;25093:93;:::i;:::-;25211:1;25206:3;25202:11;25195:18;;24821:398;;;:::o;25225:379::-;25409:3;25431:147;25574:3;25431:147;:::i;:::-;25424:154;;25595:3;25588:10;;25225:379;;;:::o;25610:442::-;25759:4;25797:2;25786:9;25782:18;25774:26;;25810:71;25878:1;25867:9;25863:17;25854:6;25810:71;:::i;:::-;25891:72;25959:2;25948:9;25944:18;25935:6;25891:72;:::i;:::-;25973;26041:2;26030:9;26026:18;26017:6;25973:72;:::i;:::-;25610:442;;;;;;:::o;26058:220::-;26198:34;26194:1;26186:6;26182:14;26175:58;26267:3;26262:2;26254:6;26250:15;26243:28;26058:220;:::o;26284:366::-;26426:3;26447:67;26511:2;26506:3;26447:67;:::i;:::-;26440:74;;26523:93;26612:3;26523:93;:::i;:::-;26641:2;26636:3;26632:12;26625:19;;26284:366;;;:::o;26656:419::-;26822:4;26860:2;26849:9;26845:18;26837:26;;26909:9;26903:4;26899:20;26895:1;26884:9;26880:17;26873:47;26937:131;27063:4;26937:131;:::i;:::-;26929:139;;26656:419;;;:::o;27081:180::-;27129:77;27126:1;27119:88;27226:4;27223:1;27216:15;27250:4;27247:1;27240:15;27267:180;27315:77;27312:1;27305:88;27412:4;27409:1;27402:15;27436:4;27433:1;27426:15;27453:143;27510:5;27541:6;27535:13;27526:22;;27557:33;27584:5;27557:33;:::i;:::-;27453:143;;;;:::o;27602:351::-;27672:6;27721:2;27709:9;27700:7;27696:23;27692:32;27689:119;;;27727:79;;:::i;:::-;27689:119;27847:1;27872:64;27928:7;27919:6;27908:9;27904:22;27872:64;:::i;:::-;27862:74;;27818:128;27602:351;;;;:::o;27959:85::-;28004:7;28033:5;28022:16;;27959:85;;;:::o;28050:158::-;28108:9;28141:61;28159:42;28168:32;28194:5;28168:32;:::i;:::-;28159:42;:::i;:::-;28141:61;:::i;:::-;28128:74;;28050:158;;;:::o;28214:147::-;28309:45;28348:5;28309:45;:::i;:::-;28304:3;28297:58;28214:147;;:::o;28367:114::-;28434:6;28468:5;28462:12;28452:22;;28367:114;;;:::o;28487:184::-;28586:11;28620:6;28615:3;28608:19;28660:4;28655:3;28651:14;28636:29;;28487:184;;;;:::o;28677:132::-;28744:4;28767:3;28759:11;;28797:4;28792:3;28788:14;28780:22;;28677:132;;;:::o;28815:108::-;28892:24;28910:5;28892:24;:::i;:::-;28887:3;28880:37;28815:108;;:::o;28929:179::-;28998:10;29019:46;29061:3;29053:6;29019:46;:::i;:::-;29097:4;29092:3;29088:14;29074:28;;28929:179;;;;:::o;29114:113::-;29184:4;29216;29211:3;29207:14;29199:22;;29114:113;;;:::o;29263:732::-;29382:3;29411:54;29459:5;29411:54;:::i;:::-;29481:86;29560:6;29555:3;29481:86;:::i;:::-;29474:93;;29591:56;29641:5;29591:56;:::i;:::-;29670:7;29701:1;29686:284;29711:6;29708:1;29705:13;29686:284;;;29787:6;29781:13;29814:63;29873:3;29858:13;29814:63;:::i;:::-;29807:70;;29900:60;29953:6;29900:60;:::i;:::-;29890:70;;29746:224;29733:1;29730;29726:9;29721:14;;29686:284;;;29690:14;29986:3;29979:10;;29387:608;;;29263:732;;;;:::o;30001:831::-;30264:4;30302:3;30291:9;30287:19;30279:27;;30316:71;30384:1;30373:9;30369:17;30360:6;30316:71;:::i;:::-;30397:80;30473:2;30462:9;30458:18;30449:6;30397:80;:::i;:::-;30524:9;30518:4;30514:20;30509:2;30498:9;30494:18;30487:48;30552:108;30655:4;30646:6;30552:108;:::i;:::-;30544:116;;30670:72;30738:2;30727:9;30723:18;30714:6;30670:72;:::i;:::-;30752:73;30820:3;30809:9;30805:19;30796:6;30752:73;:::i;:::-;30001:831;;;;;;;;:::o;30838:807::-;31087:4;31125:3;31114:9;31110:19;31102:27;;31139:71;31207:1;31196:9;31192:17;31183:6;31139:71;:::i;:::-;31220:72;31288:2;31277:9;31273:18;31264:6;31220:72;:::i;:::-;31302:80;31378:2;31367:9;31363:18;31354:6;31302:80;:::i;:::-;31392;31468:2;31457:9;31453:18;31444:6;31392:80;:::i;:::-;31482:73;31550:3;31539:9;31535:19;31526:6;31482:73;:::i;:::-;31565;31633:3;31622:9;31618:19;31609:6;31565:73;:::i;:::-;30838:807;;;;;;;;;:::o;31651:143::-;31708:5;31739:6;31733:13;31724:22;;31755:33;31782:5;31755:33;:::i;:::-;31651:143;;;;:::o;31800:663::-;31888:6;31896;31904;31953:2;31941:9;31932:7;31928:23;31924:32;31921:119;;;31959:79;;:::i;:::-;31921:119;32079:1;32104:64;32160:7;32151:6;32140:9;32136:22;32104:64;:::i;:::-;32094:74;;32050:128;32217:2;32243:64;32299:7;32290:6;32279:9;32275:22;32243:64;:::i;:::-;32233:74;;32188:129;32356:2;32382:64;32438:7;32429:6;32418:9;32414:22;32382:64;:::i;:::-;32372:74;;32327:129;31800:663;;;;;:::o

Swarm Source

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