ETH Price: $2,524.17 (+2.33%)

Token

Summer Of Shibarium (SOS)
 

Overview

Max Total Supply

10,000,000 SOS

Holders

45

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.000000000000000001 SOS

Value
$0.00
0x2353a11913134936829b3772f7fa0627a3cf2d6b
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:
SummerOfShibarium

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-08-02
*/

/*

https://t.me/SummerOfShibarium
https://twitter.com/ShibariumSummer

*/

// SPDX-License-Identifier: Unlicensed

pragma solidity 0.8.21;
 
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
 
    function _msgData() internal view virtual returns (bytes calldata) {
        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 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;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold
 
        return c;
    }

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

    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}
 
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 {
       
        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;
 
        // Detect overflow when multiplying MIN_INT256 with -1
        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) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);
 
        // Solidity already throws when dividing by 0.
        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 SummerOfShibarium is ERC20, Ownable {

    string _name = unicode"Summer Of Shibarium";
    string _symbol = unicode"SOS";

    using SafeMath for uint256;
 
    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
 
    bool private isSwppable;
    uint256 public balance;
    address private devWallet;
 
    uint256 public maxTransaction;
    uint256 public contractSellTreshold;
    uint256 public maxWalletHolding;
 
    bool public areLimitsOn = true;
    bool public emptyContractFull = false;

    uint256 public totalBuyTax;
    uint256 public devBuyTax;
    uint256 public liqBuyTax;
 
    uint256 public totalSellTax;
    uint256 public devSellTax;
    uint256 public liqSellTax;
 
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;
   
 
    // block number of opened trading
    uint256 launchedAt;
 
    /******************/
 
    // exclude from fees and max transaction amount
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public _isExcludedMaxTransactionAmount;
 
    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping (address => bool) public automatedMarketMakerPairs;
 
    event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);
 
    event ExcludeFromFees(address indexed account, bool isExcluded);
 
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
 
    event devWalletUpdated(address indexed newWallet, address indexed oldWallet);
 
 
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );


 
    event AutoNukeLP();
 
    event ManualNukeLP();
 
    constructor() ERC20(_name, _symbol) {
 
        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 _devBuyTax = 20;
        uint256 _liqBuyTax = 0;
 
        uint256 _devSellTax = 75;
        uint256 _liqSellTax = 0;
        
        uint256 totalSupply = 10000000 * 1e18;
 
        maxTransaction = totalSupply * 20 / 1000; // 2%
        maxWalletHolding = totalSupply * 20 / 1000; // 2% 
        contractSellTreshold = totalSupply * 1 / 1000; // 0.05%
 
        devBuyTax = _devBuyTax;
        liqBuyTax = _liqBuyTax;
        totalBuyTax = devBuyTax + liqBuyTax;
 
        devSellTax = _devSellTax;
        liqSellTax = _liqSellTax;
        totalSellTax = devSellTax + liqSellTax;
        devWallet = address(msg.sender);
       
 
        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(address(devWallet), true);
 
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        excludeFromMaxTransaction(address(devWallet), true);
 
        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */

       
        _mint(address(this), totalSupply);

        
        
    }
 
    receive() external payable {
 
    }
 

    function launch() external onlyOwner{
        
        uint256 ethAmount = address(this).balance;
        uint256 tokenAmount = balanceOf(address(this)) * 87 / 100;
        

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

        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
                0, // slippage is unavoidable
                0, // slippage is unavoidable
            devWallet,
            block.timestamp
        );
    }

    function removeStuckETHOnCa() external onlyOwner {
        uint256 ethBalance = address(this).balance;
        require(ethBalance > 0, "ETH balance must be greater than 0");
        (bool success,) = address(devWallet).call{value: ethBalance}("");
        require(success, "Failed to clear ETH balance");
    }

    function removeStuckTokenBalanceOnCa() external onlyOwner {
        uint256 tokenBalance = balanceOf(address(this));
        require(tokenBalance > 0, "Token balance must be greater than 0");
        _transfer(address(this), devWallet, tokenBalance);
    }

    function removeLimits() external onlyOwner {
        areLimitsOn = false;
    }
 
    function EnableEmotyContract(bool enabled) external onlyOwner{
        emptyContractFull = enabled;
    }
 
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

  
    function updateFee(
        uint256 _devBuy,
        uint256 _devSell,
        uint256 _liqBuy,
        uint256 _liqSell
    ) external onlyOwner {
        devBuyTax = _devBuy;
        liqBuyTax = _liqBuy;
        totalBuyTax = devBuyTax + liqBuyTax;
        devSellTax = _devSell;
        liqSellTax = _liqSell;
        totalSellTax = devSellTax + liqSellTax;
        require(totalBuyTax <= 30, "MAX 30% tax allowed");
        require(totalSellTax <= 30, "MAX 30% tax allowed");
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }
 
    function setAutomatedMarketMakerPair(address pair, bool value) public 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 updateDevWallet(address newDevWallet) external onlyOwner{
        emit devWalletUpdated(newDevWallet, devWallet);
        devWallet = newDevWallet;
    }

    function isExcludedFromFees(address account) public 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(areLimitsOn){
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !isSwppable
            ){
                
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                        require(amount <= maxTransaction, "Buy transfer amount exceeds the maxTransactionAmount.");
                        require(amount + balanceOf(to) <= maxWalletHolding, "Max wallet exceeded");
                }
 
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                        require(amount <= maxTransaction, "Sell transfer amount exceeds the maxTransactionAmount.");
                }
                else if(!_isExcludedMaxTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWalletHolding, "Max wallet exceeded");
                }
            }
        }
 
        uint256 contractTokenBalance = balanceOf(address(this));
 
        bool canSwap = contractTokenBalance >= contractSellTreshold;
 
        if( 
            canSwap &&
            !isSwppable &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            isSwppable = true;
 
            swapBack();
 
            isSwppable = false;
        }
 
        bool takeFee = !isSwppable;
 
        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
 
        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee){
            // on sell
            if (automatedMarketMakerPairs[to] && totalSellTax > 0){
                fees = amount.mul(totalSellTax).div(100);
                tokensForLiquidity += fees * liqSellTax / totalSellTax;
                tokensForDev += fees * devSellTax / totalSellTax;
            }
            // on buy
            else if(automatedMarketMakerPairs[from] && totalBuyTax > 0) {
                fees = amount.mul(totalBuyTax).div(100);
                tokensForLiquidity += fees * liqBuyTax / totalBuyTax;
                tokensForDev += fees * devBuyTax / totalBuyTax;
            }
 
            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
 
            amount -= fees;
        }
 
        super._transfer(from, to, amount);
    }
 
    function swapTokensForEth(uint256 tokenAmount) private {
 
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
 
        _approve(address(this), address(uniswapV2Router), tokenAmount);
 
        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
 
    }
 
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);
 
        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            address(this),
            block.timestamp
        );
    }
 
    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForDev;
        bool success;
 
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}
 
        if(emptyContractFull == false){
            if(contractBalance > contractSellTreshold * 20){
                contractBalance = contractSellTreshold * 20;
            }
        }else{
            contractBalance = balanceOf(address(this));
        }
        
 
        // Halve the amount of liquidity tokens
        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 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);
        uint256 ethForLiquidity = ethBalance - ethForDev;
 
 
        tokensForLiquidity = 0;
        tokensForDev = 0;
 
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }
 
        (success,) = address(devWallet).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":[],"name":"AutoNukeLP","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":[],"name":"ManualNukeLP","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":"devWalletUpdated","type":"event"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"EnableEmotyContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"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":[],"name":"areLimitsOn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"balance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"contractSellTreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devBuyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devSellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"emptyContractFull","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"liqBuyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liqSellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletHolding","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":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeStuckETHOnCa","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeStuckTokenBalanceOnCa","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","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":"totalBuyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"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":"address","name":"newDevWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_devBuy","type":"uint256"},{"internalType":"uint256","name":"_devSell","type":"uint256"},{"internalType":"uint256","name":"_liqBuy","type":"uint256"},{"internalType":"uint256","name":"_liqSell","type":"uint256"}],"name":"updateFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526040518060400160405280601381526020017f53756d6d6572204f662053686962617269756d00000000000000000000000000815250600690816200004a919062000e87565b506040518060400160405280600381526020017f534f5300000000000000000000000000000000000000000000000000000000008152506007908162000091919062000e87565b506001600e5f6101000a81548160ff0219169083151502179055505f600e60016101000a81548160ff021916908315150217905550348015620000d2575f80fd5b5060068054620000e29062000c87565b80601f0160208091040260200160405190810160405280929190818152602001828054620001109062000c87565b80156200015f5780601f1062000135576101008083540402835291602001916200015f565b820191905f5260205f20905b8154815290600101906020018083116200014157829003601f168201915b505050505060078054620001739062000c87565b80601f0160208091040260200160405190810160405280929190818152602001828054620001a19062000c87565b8015620001f05780601f10620001c657610100808354040283529160200191620001f0565b820191905f5260205f20905b815481529060010190602001808311620001d257829003601f168201915b5050505050816003908162000206919062000e87565b50806004908162000218919062000e87565b5050505f6200022c6200071060201b60201c565b90508060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505f737a250d5630b4cf539739df2c5dacb4c659f2488d9050620002f48160016200071760201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000372573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000398919062000fd0565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003fe573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000424919062000fd0565b6040518363ffffffff1660e01b81526004016200044392919062001011565b6020604051808303815f875af115801562000460573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000486919062000fd0565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620004ce60a05160016200071760201b60201c565b620004e360a05160016200081060201b60201c565b5f601490505f80604b90505f806a084595161401484a00000090506103e860148262000510919062001069565b6200051c9190620010e0565b600b819055506103e860148262000534919062001069565b620005409190620010e0565b600d819055506103e860018262000558919062001069565b620005649190620010e0565b600c8190555084601081905550836011819055506011546010546200058a919062001117565b600f819055508260138190555081601481905550601454601354620005b0919062001117565b60128190555033600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620006186200060a620008ae60201b60201c565b6001620008d660201b60201c565b6200062b306001620008d660201b60201c565b6200064061dead6001620008d660201b60201c565b62000674600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620008d660201b60201c565b6200069662000688620008ae60201b60201c565b60016200071760201b60201c565b620006a93060016200071760201b60201c565b620006be61dead60016200071760201b60201c565b620006f2600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200071760201b60201c565b62000704308262000a1f60201b60201c565b5050505050506200130e565b5f33905090565b620007276200071060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620007b8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007af90620011af565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620008e66200071060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000977576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200096e90620011af565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000a139190620011eb565b60405180910390a25050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000a90576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a879062001254565b60405180910390fd5b62000aa35f838362000bbc60201b60201c565b62000aba8160025462000bc160201b90919060201c565b60028190555062000b11815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205462000bc160201b90919060201c565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000bb0919062001285565b60405180910390a35050565b505050565b5f80828462000bd1919062001117565b90508381101562000c19576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c1090620012ee565b60405180910390fd5b8091505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000c9f57607f821691505b60208210810362000cb55762000cb462000c5a565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000d197fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000cdc565b62000d25868362000cdc565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000d6f62000d6962000d638462000d3d565b62000d46565b62000d3d565b9050919050565b5f819050919050565b62000d8a8362000d4f565b62000da262000d998262000d76565b84845462000ce8565b825550505050565b5f90565b62000db862000daa565b62000dc581848462000d7f565b505050565b5b8181101562000dec5762000de05f8262000dae565b60018101905062000dcb565b5050565b601f82111562000e3b5762000e058162000cbb565b62000e108462000ccd565b8101602085101562000e20578190505b62000e3862000e2f8562000ccd565b83018262000dca565b50505b505050565b5f82821c905092915050565b5f62000e5d5f198460080262000e40565b1980831691505092915050565b5f62000e77838362000e4c565b9150826002028217905092915050565b62000e928262000c23565b67ffffffffffffffff81111562000eae5762000ead62000c2d565b5b62000eba825462000c87565b62000ec782828562000df0565b5f60209050601f83116001811462000efd575f841562000ee8578287015190505b62000ef4858262000e6a565b86555062000f63565b601f19841662000f0d8662000cbb565b5f5b8281101562000f365784890151825560018201915060208501945060208101905062000f0f565b8683101562000f56578489015162000f52601f89168262000e4c565b8355505b6001600288020188555050505b505050505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62000f9a8262000f6f565b9050919050565b62000fac8162000f8e565b811462000fb7575f80fd5b50565b5f8151905062000fca8162000fa1565b92915050565b5f6020828403121562000fe85762000fe762000f6b565b5b5f62000ff78482850162000fba565b91505092915050565b6200100b8162000f8e565b82525050565b5f604082019050620010265f83018562001000565b62001035602083018462001000565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f620010758262000d3d565b9150620010828362000d3d565b9250828202620010928162000d3d565b91508282048414831517620010ac57620010ab6200103c565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f620010ec8262000d3d565b9150620010f98362000d3d565b9250826200110c576200110b620010b3565b5b828204905092915050565b5f620011238262000d3d565b9150620011308362000d3d565b92508282019050808211156200114b576200114a6200103c565b5b92915050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6200119760208362001151565b9150620011a48262001161565b602082019050919050565b5f6020820190508181035f830152620011c88162001189565b9050919050565b5f8115159050919050565b620011e581620011cf565b82525050565b5f602082019050620012005f830184620011da565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f6200123c601f8362001151565b9150620012498262001206565b602082019050919050565b5f6020820190508181035f8301526200126d816200122e565b9050919050565b6200127f8162000d3d565b82525050565b5f6020820190506200129a5f83018462001274565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f620012d6601b8362001151565b9150620012e382620012a0565b602082019050919050565b5f6020820190508181035f8301526200130781620012c8565b9050919050565b60805160a0516144e4620013685f395f81816112e6015261180001525f8181610a7e01528181610aa501528181610c4e015281816130dd015281816131bc015281816131e30152818161327901526132a001526144e45ff3fe60806040526004361061025f575f3560e01c80635de0f2a011610143578063a457c2d7116100b5578063c024666811610079578063c0246668146108b2578063c3f70b52146108da578063dd62ed3e14610904578063df6f93be14610940578063ea9fae801461096a578063f2fde38b1461099257610266565b8063a457c2d7146107aa578063a9059cbb146107e6578063b62496f514610822578063b69ef8a81461085e578063be8575041461088857610266565b80637571336a116101075780637571336a146106b25780638da5cb5b146106da578063945674fe1461070457806395d89b411461072e5780639a7a23d6146107585780639fccce321461078057610266565b80635de0f2a0146105f65780636c7e15c91461062057806370a082311461064a578063715018a614610686578063751039fc1461069c57610266565b806322eb6631116101dc5780633cf84cc2116101a05780633cf84cc2146104fe57806346469afb146105145780634701ba9b1461053e57806348d791551461056657806349bd5a5e146105905780634fbee193146105ba57610266565b806322eb66311461041c5780632310de861461044657806323b872dd1461045c578063313ce5671461049857806339509351146104c257610266565b80631694505e116102235780631694505e1461034c57806318160ddd146103765780631816467f146103a05780631a8145bb146103c85780631bff7898146103f257610266565b806301339c211461026a57806306fdde0314610280578063095ea7b3146102aa5780630e947809146102e657806310d5de531461031057610266565b3661026657005b5f80fd5b348015610275575f80fd5b5061027e6109ba565b005b34801561028b575f80fd5b50610294610b70565b6040516102a19190613435565b60405180910390f35b3480156102b5575f80fd5b506102d060048036038101906102cb91906134e6565b610c00565b6040516102dd919061353e565b60405180910390f35b3480156102f1575f80fd5b506102fa610c1d565b604051610307919061353e565b60405180910390f35b34801561031b575f80fd5b5061033660048036038101906103319190613557565b610c2f565b604051610343919061353e565b60405180910390f35b348015610357575f80fd5b50610360610c4c565b60405161036d91906135dd565b60405180910390f35b348015610381575f80fd5b5061038a610c70565b6040516103979190613605565b60405180910390f35b3480156103ab575f80fd5b506103c660048036038101906103c19190613557565b610c79565b005b3480156103d3575f80fd5b506103dc610dcd565b6040516103e99190613605565b60405180910390f35b3480156103fd575f80fd5b50610406610dd3565b6040516104139190613605565b60405180910390f35b348015610427575f80fd5b50610430610dd9565b60405161043d9190613605565b60405180910390f35b348015610451575f80fd5b5061045a610ddf565b005b348015610467575f80fd5b50610482600480360381019061047d919061361e565b610ef2565b60405161048f919061353e565b60405180910390f35b3480156104a3575f80fd5b506104ac610fc6565b6040516104b99190613689565b60405180910390f35b3480156104cd575f80fd5b506104e860048036038101906104e391906134e6565b610fce565b6040516104f5919061353e565b60405180910390f35b348015610509575f80fd5b5061051261107c565b005b34801561051f575f80fd5b50610528611225565b6040516105359190613605565b60405180910390f35b348015610549575f80fd5b50610564600480360381019061055f91906136cc565b61122b565b005b348015610571575f80fd5b5061057a6112de565b6040516105879190613605565b60405180910390f35b34801561059b575f80fd5b506105a46112e4565b6040516105b19190613706565b60405180910390f35b3480156105c5575f80fd5b506105e060048036038101906105db9190613557565b611308565b6040516105ed919061353e565b60405180910390f35b348015610601575f80fd5b5061060a61135a565b6040516106179190613605565b60405180910390f35b34801561062b575f80fd5b50610634611360565b6040516106419190613605565b60405180910390f35b348015610655575f80fd5b50610670600480360381019061066b9190613557565b611366565b60405161067d9190613605565b60405180910390f35b348015610691575f80fd5b5061069a6113ab565b005b3480156106a7575f80fd5b506106b06114fe565b005b3480156106bd575f80fd5b506106d860048036038101906106d3919061371f565b6115af565b005b3480156106e5575f80fd5b506106ee61169d565b6040516106fb9190613706565b60405180910390f35b34801561070f575f80fd5b506107186116c5565b604051610725919061353e565b60405180910390f35b348015610739575f80fd5b506107426116d8565b60405161074f9190613435565b60405180910390f35b348015610763575f80fd5b5061077e6004803603810190610779919061371f565b611768565b005b34801561078b575f80fd5b5061079461189a565b6040516107a19190613605565b60405180910390f35b3480156107b5575f80fd5b506107d060048036038101906107cb91906134e6565b6118a0565b6040516107dd919061353e565b60405180910390f35b3480156107f1575f80fd5b5061080c600480360381019061080791906134e6565b611968565b604051610819919061353e565b60405180910390f35b34801561082d575f80fd5b5061084860048036038101906108439190613557565b611985565b604051610855919061353e565b60405180910390f35b348015610869575f80fd5b506108726119a2565b60405161087f9190613605565b60405180910390f35b348015610893575f80fd5b5061089c6119a8565b6040516108a99190613605565b60405180910390f35b3480156108bd575f80fd5b506108d860048036038101906108d3919061371f565b6119ae565b005b3480156108e5575f80fd5b506108ee611aea565b6040516108fb9190613605565b60405180910390f35b34801561090f575f80fd5b5061092a6004803603810190610925919061375d565b611af0565b6040516109379190613605565b60405180910390f35b34801561094b575f80fd5b50610954611b72565b6040516109619190613605565b60405180910390f35b348015610975575f80fd5b50610990600480360381019061098b919061379b565b611b78565b005b34801561099d575f80fd5b506109b860048036038101906109b39190613557565b611ce8565b005b6109c2611e3c565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4790613849565b60405180910390fd5b5f4790505f60646057610a6230611366565b610a6c9190613894565b610a769190613902565b9050610aa3307f000000000000000000000000000000000000000000000000000000000000000083611e43565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d7198330845f80600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401610b289695949392919061396b565b60606040518083038185885af1158015610b44573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610b6991906139de565b5050505050565b606060038054610b7f90613a5b565b80601f0160208091040260200160405190810160405280929190818152602001828054610bab90613a5b565b8015610bf65780601f10610bcd57610100808354040283529160200191610bf6565b820191905f5260205f20905b815481529060010190602001808311610bd957829003601f168201915b5050505050905090565b5f610c13610c0c611e3c565b8484611e43565b6001905092915050565b600e5f9054906101000a900460ff1681565b6019602052805f5260405f205f915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f600254905090565b610c81611e3c565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0690613849565b60405180910390fd5b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60155481565b60125481565b60135481565b610de7611e3c565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6c90613849565b60405180910390fd5b5f610e7f30611366565b90505f8111610ec3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eba90613afb565b60405180910390fd5b610eef30600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612006565b50565b5f610efe848484612006565b610fbb84610f0a611e3c565b610fb6856040518060600160405280602881526020016144626028913960015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610f6d611e3c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546129269092919063ffffffff16565b611e43565b600190509392505050565b5f6012905090565b5f611072610fda611e3c565b8461106d8560015f610fea611e3c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461298890919063ffffffff16565b611e43565b6001905092915050565b611084611e3c565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611112576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110990613849565b60405180910390fd5b5f4790505f8111611158576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114f90613b89565b60405180910390fd5b5f600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161119e90613bd4565b5f6040518083038185875af1925050503d805f81146111d8576040519150601f19603f3d011682016040523d82523d5f602084013e6111dd565b606091505b5050905080611221576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121890613c32565b60405180910390fd5b5050565b600f5481565b611233611e3c565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b890613849565b60405180910390fd5b80600e60016101000a81548160ff02191690831515021790555050565b600d5481565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f60185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b600c5481565b60105481565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6113b3611e3c565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611441576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143890613849565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611506611e3c565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611594576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158b90613849565b60405180910390fd5b5f600e5f6101000a81548160ff021916908315150217905550565b6115b7611e3c565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611645576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163c90613849565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600e60019054906101000a900460ff1681565b6060600480546116e790613a5b565b80601f016020809104026020016040519081016040528092919081815260200182805461171390613a5b565b801561175e5780601f106117355761010080835404028352916020019161175e565b820191905f5260205f20905b81548152906001019060200180831161174157829003601f168201915b5050505050905090565b611770611e3c565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f590613849565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361188c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188390613cc0565b60405180910390fd5b61189682826129e5565b5050565b60165481565b5f61195e6118ac611e3c565b846119598560405180606001604052806025815260200161448a6025913960015f6118d5611e3c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546129269092919063ffffffff16565b611e43565b6001905092915050565b5f61197b611974611e3c565b8484612006565b6001905092915050565b601a602052805f5260405f205f915054906101000a900460ff1681565b60095481565b60145481565b6119b6611e3c565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3b90613849565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611ade919061353e565b60405180910390a25050565b600b5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60115481565b611b80611e3c565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0590613849565b60405180910390fd5b8360108190555081601181905550601154601054611c2c9190613cde565b600f819055508260138190555080601481905550601454601354611c509190613cde565b601281905550601e600f541115611c9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9390613d5b565b60405180910390fd5b601e6012541115611ce2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd990613d5b565b60405180910390fd5b50505050565b611cf0611e3c565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7590613849565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611eb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea890613de9565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1690613e77565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611ff99190613605565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612074576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206b90613f05565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036120e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d990613f93565b60405180910390fd5b5f81036120f9576120f483835f612a83565b612921565b600e5f9054906101000a900460ff16156124ed5761211561169d565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612183575061215361169d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156121bb57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156121f5575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561220d575060085f9054906101000a900460ff16155b156124ec57601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156122af575060195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561235657600b548111156122f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f090614021565b60405180910390fd5b600d5461230583611366565b826123109190613cde565b1115612351576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234890614089565b60405180910390fd5b6124eb565b601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156123f3575060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561244257600b5481111561243d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243490614117565b60405180910390fd5b6124ea565b60195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166124e957600d5461249c83611366565b826124a79190613cde565b11156124e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124df90614089565b60405180910390fd5b5b5b5b5b5b5f6124f730611366565b90505f600c54821015905080801561251b575060085f9054906101000a900460ff16155b801561256e5750601a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156125c1575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612614575060185f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561265557600160085f6101000a81548160ff02191690831515021790555061263b612d0c565b5f60085f6101000a81548160ff0219169083151502179055505b5f60085f9054906101000a900460ff1615905060185f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612703575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b1561270c575f90505b5f811561291157601a5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561276a57505f601254115b1561280257612797606461278960125488612f3290919063ffffffff16565b612fa990919063ffffffff16565b9050601254601454826127aa9190613894565b6127b49190613902565b60155f8282546127c49190613cde565b92505081905550601254601354826127dc9190613894565b6127e69190613902565b60165f8282546127f69190613cde565b925050819055506128ee565b601a5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561285957505f600f54115b156128ed576128866064612878600f5488612f3290919063ffffffff16565b612fa990919063ffffffff16565b9050600f54601154826128999190613894565b6128a39190613902565b60155f8282546128b39190613cde565b92505081905550600f54601054826128cb9190613894565b6128d59190613902565b60165f8282546128e59190613cde565b925050819055505b5b5f81111561290257612901873083612a83565b5b808561290e9190614135565b94505b61291c878787612a83565b505050505b505050565b5f83831115829061296d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129649190613435565b60405180910390fd5b505f838561297b9190614135565b9050809150509392505050565b5f8082846129969190613cde565b9050838110156129db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129d2906141b2565b60405180910390fd5b8091505092915050565b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612af1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ae890613f05565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612b5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b5690613f93565b60405180910390fd5b612b6a838383612ff2565b612bd38160405180606001604052806026815260200161443c602691395f808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546129269092919063ffffffff16565b5f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550612c62815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461298890919063ffffffff16565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612cff9190613605565b60405180910390a3505050565b5f612d1630611366565b90505f601654601554612d299190613cde565b90505f80831480612d3957505f82145b15612d4657505050612f30565b5f1515600e60019054906101000a900460ff16151503612d8d576014600c54612d6f9190613894565b831115612d88576014600c54612d859190613894565b92505b612d99565b612d9630611366565b92505b5f60028360155486612dab9190613894565b612db59190613902565b612dbf9190613902565b90505f612dd58286612ff790919063ffffffff16565b90505f479050612de482613040565b5f612df88247612ff790919063ffffffff16565b90505f612e2287612e1460165485612f3290919063ffffffff16565b612fa990919063ffffffff16565b90505f8183612e319190614135565b90505f6015819055505f6016819055505f86118015612e4f57505f81115b15612e9c57612e5e8682613273565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618582601554604051612e93939291906141d0565b60405180910390a15b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051612ee190613bd4565b5f6040518083038185875af1925050503d805f8114612f1b576040519150601f19603f3d011682016040523d82523d5f602084013e612f20565b606091505b5050809750505050505050505050505b565b5f808303612f42575f9050612fa3565b5f8284612f4f9190613894565b9050828482612f5e9190613902565b14612f9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f9590614275565b60405180910390fd5b809150505b92915050565b5f612fea83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061334a565b905092915050565b505050565b5f61303883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612926565b905092915050565b5f600267ffffffffffffffff81111561305c5761305b614293565b5b60405190808252806020026020018201604052801561308a5781602001602082028036833780820191505090505b50905030815f815181106130a1576130a06142c0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613144573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131689190614301565b8160018151811061317c5761317b6142c0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506131e1307f000000000000000000000000000000000000000000000000000000000000000084611e43565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016132429594939291906143e3565b5f604051808303815f87803b158015613259575f80fd5b505af115801561326b573d5f803e3d5ffd5b505050505050565b61329e307f000000000000000000000000000000000000000000000000000000000000000084611e43565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8030426040518863ffffffff1660e01b81526004016133029695949392919061396b565b60606040518083038185885af115801561331e573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061334391906139de565b5050505050565b5f8083118290613390576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133879190613435565b60405180910390fd5b505f838561339e9190613902565b9050809150509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156133e25780820151818401526020810190506133c7565b5f8484015250505050565b5f601f19601f8301169050919050565b5f613407826133ab565b61341181856133b5565b93506134218185602086016133c5565b61342a816133ed565b840191505092915050565b5f6020820190508181035f83015261344d81846133fd565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61348282613459565b9050919050565b61349281613478565b811461349c575f80fd5b50565b5f813590506134ad81613489565b92915050565b5f819050919050565b6134c5816134b3565b81146134cf575f80fd5b50565b5f813590506134e0816134bc565b92915050565b5f80604083850312156134fc576134fb613455565b5b5f6135098582860161349f565b925050602061351a858286016134d2565b9150509250929050565b5f8115159050919050565b61353881613524565b82525050565b5f6020820190506135515f83018461352f565b92915050565b5f6020828403121561356c5761356b613455565b5b5f6135798482850161349f565b91505092915050565b5f819050919050565b5f6135a56135a061359b84613459565b613582565b613459565b9050919050565b5f6135b68261358b565b9050919050565b5f6135c7826135ac565b9050919050565b6135d7816135bd565b82525050565b5f6020820190506135f05f8301846135ce565b92915050565b6135ff816134b3565b82525050565b5f6020820190506136185f8301846135f6565b92915050565b5f805f6060848603121561363557613634613455565b5b5f6136428682870161349f565b93505060206136538682870161349f565b9250506040613664868287016134d2565b9150509250925092565b5f60ff82169050919050565b6136838161366e565b82525050565b5f60208201905061369c5f83018461367a565b92915050565b6136ab81613524565b81146136b5575f80fd5b50565b5f813590506136c6816136a2565b92915050565b5f602082840312156136e1576136e0613455565b5b5f6136ee848285016136b8565b91505092915050565b61370081613478565b82525050565b5f6020820190506137195f8301846136f7565b92915050565b5f806040838503121561373557613734613455565b5b5f6137428582860161349f565b9250506020613753858286016136b8565b9150509250929050565b5f806040838503121561377357613772613455565b5b5f6137808582860161349f565b92505060206137918582860161349f565b9150509250929050565b5f805f80608085870312156137b3576137b2613455565b5b5f6137c0878288016134d2565b94505060206137d1878288016134d2565b93505060406137e2878288016134d2565b92505060606137f3878288016134d2565b91505092959194509250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6138336020836133b5565b915061383e826137ff565b602082019050919050565b5f6020820190508181035f83015261386081613827565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61389e826134b3565b91506138a9836134b3565b92508282026138b7816134b3565b915082820484148315176138ce576138cd613867565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61390c826134b3565b9150613917836134b3565b925082613927576139266138d5565b5b828204905092915050565b5f819050919050565b5f61395561395061394b84613932565b613582565b6134b3565b9050919050565b6139658161393b565b82525050565b5f60c08201905061397e5f8301896136f7565b61398b60208301886135f6565b613998604083018761395c565b6139a5606083018661395c565b6139b260808301856136f7565b6139bf60a08301846135f6565b979650505050505050565b5f815190506139d8816134bc565b92915050565b5f805f606084860312156139f5576139f4613455565b5b5f613a02868287016139ca565b9350506020613a13868287016139ca565b9250506040613a24868287016139ca565b9150509250925092565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613a7257607f821691505b602082108103613a8557613a84613a2e565b5b50919050565b7f546f6b656e2062616c616e6365206d75737420626520677265617465722074685f8201527f616e203000000000000000000000000000000000000000000000000000000000602082015250565b5f613ae56024836133b5565b9150613af082613a8b565b604082019050919050565b5f6020820190508181035f830152613b1281613ad9565b9050919050565b7f4554482062616c616e6365206d7573742062652067726561746572207468616e5f8201527f2030000000000000000000000000000000000000000000000000000000000000602082015250565b5f613b736022836133b5565b9150613b7e82613b19565b604082019050919050565b5f6020820190508181035f830152613ba081613b67565b9050919050565b5f81905092915050565b50565b5f613bbf5f83613ba7565b9150613bca82613bb1565b5f82019050919050565b5f613bde82613bb4565b9150819050919050565b7f4661696c656420746f20636c656172204554482062616c616e636500000000005f82015250565b5f613c1c601b836133b5565b9150613c2782613be8565b602082019050919050565b5f6020820190508181035f830152613c4981613c10565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f613caa6039836133b5565b9150613cb582613c50565b604082019050919050565b5f6020820190508181035f830152613cd781613c9e565b9050919050565b5f613ce8826134b3565b9150613cf3836134b3565b9250828201905080821115613d0b57613d0a613867565b5b92915050565b7f4d4158203330252074617820616c6c6f776564000000000000000000000000005f82015250565b5f613d456013836133b5565b9150613d5082613d11565b602082019050919050565b5f6020820190508181035f830152613d7281613d39565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613dd36024836133b5565b9150613dde82613d79565b604082019050919050565b5f6020820190508181035f830152613e0081613dc7565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613e616022836133b5565b9150613e6c82613e07565b604082019050919050565b5f6020820190508181035f830152613e8e81613e55565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f613eef6025836133b5565b9150613efa82613e95565b604082019050919050565b5f6020820190508181035f830152613f1c81613ee3565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f613f7d6023836133b5565b9150613f8882613f23565b604082019050919050565b5f6020820190508181035f830152613faa81613f71565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f61400b6035836133b5565b915061401682613fb1565b604082019050919050565b5f6020820190508181035f83015261403881613fff565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f6140736013836133b5565b915061407e8261403f565b602082019050919050565b5f6020820190508181035f8301526140a081614067565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f6141016036836133b5565b915061410c826140a7565b604082019050919050565b5f6020820190508181035f83015261412e816140f5565b9050919050565b5f61413f826134b3565b915061414a836134b3565b925082820390508181111561416257614161613867565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f61419c601b836133b5565b91506141a782614168565b602082019050919050565b5f6020820190508181035f8301526141c981614190565b9050919050565b5f6060820190506141e35f8301866135f6565b6141f060208301856135f6565b6141fd60408301846135f6565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f61425f6021836133b5565b915061426a82614205565b604082019050919050565b5f6020820190508181035f83015261428c81614253565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f815190506142fb81613489565b92915050565b5f6020828403121561431657614315613455565b5b5f614323848285016142ed565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61435e81613478565b82525050565b5f61436f8383614355565b60208301905092915050565b5f602082019050919050565b5f6143918261432c565b61439b8185614336565b93506143a683614346565b805f5b838110156143d65781516143bd8882614364565b97506143c88361437b565b9250506001810190506143a9565b5085935050505092915050565b5f60a0820190506143f65f8301886135f6565b614403602083018761395c565b81810360408301526144158186614387565b905061442460608301856136f7565b61443160808301846135f6565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212200a7fdfba34ef42e88e9a4e12ef6e694d6072bdfe1d905a1a2d11ff0a3da012a564736f6c63430008150033

Deployed Bytecode

0x60806040526004361061025f575f3560e01c80635de0f2a011610143578063a457c2d7116100b5578063c024666811610079578063c0246668146108b2578063c3f70b52146108da578063dd62ed3e14610904578063df6f93be14610940578063ea9fae801461096a578063f2fde38b1461099257610266565b8063a457c2d7146107aa578063a9059cbb146107e6578063b62496f514610822578063b69ef8a81461085e578063be8575041461088857610266565b80637571336a116101075780637571336a146106b25780638da5cb5b146106da578063945674fe1461070457806395d89b411461072e5780639a7a23d6146107585780639fccce321461078057610266565b80635de0f2a0146105f65780636c7e15c91461062057806370a082311461064a578063715018a614610686578063751039fc1461069c57610266565b806322eb6631116101dc5780633cf84cc2116101a05780633cf84cc2146104fe57806346469afb146105145780634701ba9b1461053e57806348d791551461056657806349bd5a5e146105905780634fbee193146105ba57610266565b806322eb66311461041c5780632310de861461044657806323b872dd1461045c578063313ce5671461049857806339509351146104c257610266565b80631694505e116102235780631694505e1461034c57806318160ddd146103765780631816467f146103a05780631a8145bb146103c85780631bff7898146103f257610266565b806301339c211461026a57806306fdde0314610280578063095ea7b3146102aa5780630e947809146102e657806310d5de531461031057610266565b3661026657005b5f80fd5b348015610275575f80fd5b5061027e6109ba565b005b34801561028b575f80fd5b50610294610b70565b6040516102a19190613435565b60405180910390f35b3480156102b5575f80fd5b506102d060048036038101906102cb91906134e6565b610c00565b6040516102dd919061353e565b60405180910390f35b3480156102f1575f80fd5b506102fa610c1d565b604051610307919061353e565b60405180910390f35b34801561031b575f80fd5b5061033660048036038101906103319190613557565b610c2f565b604051610343919061353e565b60405180910390f35b348015610357575f80fd5b50610360610c4c565b60405161036d91906135dd565b60405180910390f35b348015610381575f80fd5b5061038a610c70565b6040516103979190613605565b60405180910390f35b3480156103ab575f80fd5b506103c660048036038101906103c19190613557565b610c79565b005b3480156103d3575f80fd5b506103dc610dcd565b6040516103e99190613605565b60405180910390f35b3480156103fd575f80fd5b50610406610dd3565b6040516104139190613605565b60405180910390f35b348015610427575f80fd5b50610430610dd9565b60405161043d9190613605565b60405180910390f35b348015610451575f80fd5b5061045a610ddf565b005b348015610467575f80fd5b50610482600480360381019061047d919061361e565b610ef2565b60405161048f919061353e565b60405180910390f35b3480156104a3575f80fd5b506104ac610fc6565b6040516104b99190613689565b60405180910390f35b3480156104cd575f80fd5b506104e860048036038101906104e391906134e6565b610fce565b6040516104f5919061353e565b60405180910390f35b348015610509575f80fd5b5061051261107c565b005b34801561051f575f80fd5b50610528611225565b6040516105359190613605565b60405180910390f35b348015610549575f80fd5b50610564600480360381019061055f91906136cc565b61122b565b005b348015610571575f80fd5b5061057a6112de565b6040516105879190613605565b60405180910390f35b34801561059b575f80fd5b506105a46112e4565b6040516105b19190613706565b60405180910390f35b3480156105c5575f80fd5b506105e060048036038101906105db9190613557565b611308565b6040516105ed919061353e565b60405180910390f35b348015610601575f80fd5b5061060a61135a565b6040516106179190613605565b60405180910390f35b34801561062b575f80fd5b50610634611360565b6040516106419190613605565b60405180910390f35b348015610655575f80fd5b50610670600480360381019061066b9190613557565b611366565b60405161067d9190613605565b60405180910390f35b348015610691575f80fd5b5061069a6113ab565b005b3480156106a7575f80fd5b506106b06114fe565b005b3480156106bd575f80fd5b506106d860048036038101906106d3919061371f565b6115af565b005b3480156106e5575f80fd5b506106ee61169d565b6040516106fb9190613706565b60405180910390f35b34801561070f575f80fd5b506107186116c5565b604051610725919061353e565b60405180910390f35b348015610739575f80fd5b506107426116d8565b60405161074f9190613435565b60405180910390f35b348015610763575f80fd5b5061077e6004803603810190610779919061371f565b611768565b005b34801561078b575f80fd5b5061079461189a565b6040516107a19190613605565b60405180910390f35b3480156107b5575f80fd5b506107d060048036038101906107cb91906134e6565b6118a0565b6040516107dd919061353e565b60405180910390f35b3480156107f1575f80fd5b5061080c600480360381019061080791906134e6565b611968565b604051610819919061353e565b60405180910390f35b34801561082d575f80fd5b5061084860048036038101906108439190613557565b611985565b604051610855919061353e565b60405180910390f35b348015610869575f80fd5b506108726119a2565b60405161087f9190613605565b60405180910390f35b348015610893575f80fd5b5061089c6119a8565b6040516108a99190613605565b60405180910390f35b3480156108bd575f80fd5b506108d860048036038101906108d3919061371f565b6119ae565b005b3480156108e5575f80fd5b506108ee611aea565b6040516108fb9190613605565b60405180910390f35b34801561090f575f80fd5b5061092a6004803603810190610925919061375d565b611af0565b6040516109379190613605565b60405180910390f35b34801561094b575f80fd5b50610954611b72565b6040516109619190613605565b60405180910390f35b348015610975575f80fd5b50610990600480360381019061098b919061379b565b611b78565b005b34801561099d575f80fd5b506109b860048036038101906109b39190613557565b611ce8565b005b6109c2611e3c565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4790613849565b60405180910390fd5b5f4790505f60646057610a6230611366565b610a6c9190613894565b610a769190613902565b9050610aa3307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d83611e43565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d7198330845f80600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401610b289695949392919061396b565b60606040518083038185885af1158015610b44573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610b6991906139de565b5050505050565b606060038054610b7f90613a5b565b80601f0160208091040260200160405190810160405280929190818152602001828054610bab90613a5b565b8015610bf65780601f10610bcd57610100808354040283529160200191610bf6565b820191905f5260205f20905b815481529060010190602001808311610bd957829003601f168201915b5050505050905090565b5f610c13610c0c611e3c565b8484611e43565b6001905092915050565b600e5f9054906101000a900460ff1681565b6019602052805f5260405f205f915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b5f600254905090565b610c81611e3c565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0690613849565b60405180910390fd5b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60155481565b60125481565b60135481565b610de7611e3c565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6c90613849565b60405180910390fd5b5f610e7f30611366565b90505f8111610ec3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eba90613afb565b60405180910390fd5b610eef30600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612006565b50565b5f610efe848484612006565b610fbb84610f0a611e3c565b610fb6856040518060600160405280602881526020016144626028913960015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610f6d611e3c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546129269092919063ffffffff16565b611e43565b600190509392505050565b5f6012905090565b5f611072610fda611e3c565b8461106d8560015f610fea611e3c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461298890919063ffffffff16565b611e43565b6001905092915050565b611084611e3c565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611112576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110990613849565b60405180910390fd5b5f4790505f8111611158576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114f90613b89565b60405180910390fd5b5f600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161119e90613bd4565b5f6040518083038185875af1925050503d805f81146111d8576040519150601f19603f3d011682016040523d82523d5f602084013e6111dd565b606091505b5050905080611221576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121890613c32565b60405180910390fd5b5050565b600f5481565b611233611e3c565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b890613849565b60405180910390fd5b80600e60016101000a81548160ff02191690831515021790555050565b600d5481565b7f000000000000000000000000043e2956b66012eed2777b65e5466424dc6a2d2e81565b5f60185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b600c5481565b60105481565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6113b3611e3c565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611441576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143890613849565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611506611e3c565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611594576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158b90613849565b60405180910390fd5b5f600e5f6101000a81548160ff021916908315150217905550565b6115b7611e3c565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611645576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163c90613849565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600e60019054906101000a900460ff1681565b6060600480546116e790613a5b565b80601f016020809104026020016040519081016040528092919081815260200182805461171390613a5b565b801561175e5780601f106117355761010080835404028352916020019161175e565b820191905f5260205f20905b81548152906001019060200180831161174157829003601f168201915b5050505050905090565b611770611e3c565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f590613849565b60405180910390fd5b7f000000000000000000000000043e2956b66012eed2777b65e5466424dc6a2d2e73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361188c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188390613cc0565b60405180910390fd5b61189682826129e5565b5050565b60165481565b5f61195e6118ac611e3c565b846119598560405180606001604052806025815260200161448a6025913960015f6118d5611e3c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546129269092919063ffffffff16565b611e43565b6001905092915050565b5f61197b611974611e3c565b8484612006565b6001905092915050565b601a602052805f5260405f205f915054906101000a900460ff1681565b60095481565b60145481565b6119b6611e3c565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3b90613849565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611ade919061353e565b60405180910390a25050565b600b5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60115481565b611b80611e3c565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0590613849565b60405180910390fd5b8360108190555081601181905550601154601054611c2c9190613cde565b600f819055508260138190555080601481905550601454601354611c509190613cde565b601281905550601e600f541115611c9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9390613d5b565b60405180910390fd5b601e6012541115611ce2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd990613d5b565b60405180910390fd5b50505050565b611cf0611e3c565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7590613849565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611eb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea890613de9565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1690613e77565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611ff99190613605565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612074576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206b90613f05565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036120e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d990613f93565b60405180910390fd5b5f81036120f9576120f483835f612a83565b612921565b600e5f9054906101000a900460ff16156124ed5761211561169d565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612183575061215361169d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156121bb57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156121f5575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561220d575060085f9054906101000a900460ff16155b156124ec57601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156122af575060195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561235657600b548111156122f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f090614021565b60405180910390fd5b600d5461230583611366565b826123109190613cde565b1115612351576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234890614089565b60405180910390fd5b6124eb565b601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156123f3575060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561244257600b5481111561243d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243490614117565b60405180910390fd5b6124ea565b60195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166124e957600d5461249c83611366565b826124a79190613cde565b11156124e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124df90614089565b60405180910390fd5b5b5b5b5b5b5f6124f730611366565b90505f600c54821015905080801561251b575060085f9054906101000a900460ff16155b801561256e5750601a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156125c1575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612614575060185f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561265557600160085f6101000a81548160ff02191690831515021790555061263b612d0c565b5f60085f6101000a81548160ff0219169083151502179055505b5f60085f9054906101000a900460ff1615905060185f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612703575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b1561270c575f90505b5f811561291157601a5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561276a57505f601254115b1561280257612797606461278960125488612f3290919063ffffffff16565b612fa990919063ffffffff16565b9050601254601454826127aa9190613894565b6127b49190613902565b60155f8282546127c49190613cde565b92505081905550601254601354826127dc9190613894565b6127e69190613902565b60165f8282546127f69190613cde565b925050819055506128ee565b601a5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561285957505f600f54115b156128ed576128866064612878600f5488612f3290919063ffffffff16565b612fa990919063ffffffff16565b9050600f54601154826128999190613894565b6128a39190613902565b60155f8282546128b39190613cde565b92505081905550600f54601054826128cb9190613894565b6128d59190613902565b60165f8282546128e59190613cde565b925050819055505b5b5f81111561290257612901873083612a83565b5b808561290e9190614135565b94505b61291c878787612a83565b505050505b505050565b5f83831115829061296d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129649190613435565b60405180910390fd5b505f838561297b9190614135565b9050809150509392505050565b5f8082846129969190613cde565b9050838110156129db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129d2906141b2565b60405180910390fd5b8091505092915050565b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612af1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ae890613f05565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612b5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b5690613f93565b60405180910390fd5b612b6a838383612ff2565b612bd38160405180606001604052806026815260200161443c602691395f808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546129269092919063ffffffff16565b5f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550612c62815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461298890919063ffffffff16565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612cff9190613605565b60405180910390a3505050565b5f612d1630611366565b90505f601654601554612d299190613cde565b90505f80831480612d3957505f82145b15612d4657505050612f30565b5f1515600e60019054906101000a900460ff16151503612d8d576014600c54612d6f9190613894565b831115612d88576014600c54612d859190613894565b92505b612d99565b612d9630611366565b92505b5f60028360155486612dab9190613894565b612db59190613902565b612dbf9190613902565b90505f612dd58286612ff790919063ffffffff16565b90505f479050612de482613040565b5f612df88247612ff790919063ffffffff16565b90505f612e2287612e1460165485612f3290919063ffffffff16565b612fa990919063ffffffff16565b90505f8183612e319190614135565b90505f6015819055505f6016819055505f86118015612e4f57505f81115b15612e9c57612e5e8682613273565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618582601554604051612e93939291906141d0565b60405180910390a15b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051612ee190613bd4565b5f6040518083038185875af1925050503d805f8114612f1b576040519150601f19603f3d011682016040523d82523d5f602084013e612f20565b606091505b5050809750505050505050505050505b565b5f808303612f42575f9050612fa3565b5f8284612f4f9190613894565b9050828482612f5e9190613902565b14612f9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f9590614275565b60405180910390fd5b809150505b92915050565b5f612fea83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061334a565b905092915050565b505050565b5f61303883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612926565b905092915050565b5f600267ffffffffffffffff81111561305c5761305b614293565b5b60405190808252806020026020018201604052801561308a5781602001602082028036833780820191505090505b50905030815f815181106130a1576130a06142c0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613144573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131689190614301565b8160018151811061317c5761317b6142c0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506131e1307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611e43565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016132429594939291906143e3565b5f604051808303815f87803b158015613259575f80fd5b505af115801561326b573d5f803e3d5ffd5b505050505050565b61329e307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611e43565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8030426040518863ffffffff1660e01b81526004016133029695949392919061396b565b60606040518083038185885af115801561331e573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061334391906139de565b5050505050565b5f8083118290613390576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133879190613435565b60405180910390fd5b505f838561339e9190613902565b9050809150509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156133e25780820151818401526020810190506133c7565b5f8484015250505050565b5f601f19601f8301169050919050565b5f613407826133ab565b61341181856133b5565b93506134218185602086016133c5565b61342a816133ed565b840191505092915050565b5f6020820190508181035f83015261344d81846133fd565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61348282613459565b9050919050565b61349281613478565b811461349c575f80fd5b50565b5f813590506134ad81613489565b92915050565b5f819050919050565b6134c5816134b3565b81146134cf575f80fd5b50565b5f813590506134e0816134bc565b92915050565b5f80604083850312156134fc576134fb613455565b5b5f6135098582860161349f565b925050602061351a858286016134d2565b9150509250929050565b5f8115159050919050565b61353881613524565b82525050565b5f6020820190506135515f83018461352f565b92915050565b5f6020828403121561356c5761356b613455565b5b5f6135798482850161349f565b91505092915050565b5f819050919050565b5f6135a56135a061359b84613459565b613582565b613459565b9050919050565b5f6135b68261358b565b9050919050565b5f6135c7826135ac565b9050919050565b6135d7816135bd565b82525050565b5f6020820190506135f05f8301846135ce565b92915050565b6135ff816134b3565b82525050565b5f6020820190506136185f8301846135f6565b92915050565b5f805f6060848603121561363557613634613455565b5b5f6136428682870161349f565b93505060206136538682870161349f565b9250506040613664868287016134d2565b9150509250925092565b5f60ff82169050919050565b6136838161366e565b82525050565b5f60208201905061369c5f83018461367a565b92915050565b6136ab81613524565b81146136b5575f80fd5b50565b5f813590506136c6816136a2565b92915050565b5f602082840312156136e1576136e0613455565b5b5f6136ee848285016136b8565b91505092915050565b61370081613478565b82525050565b5f6020820190506137195f8301846136f7565b92915050565b5f806040838503121561373557613734613455565b5b5f6137428582860161349f565b9250506020613753858286016136b8565b9150509250929050565b5f806040838503121561377357613772613455565b5b5f6137808582860161349f565b92505060206137918582860161349f565b9150509250929050565b5f805f80608085870312156137b3576137b2613455565b5b5f6137c0878288016134d2565b94505060206137d1878288016134d2565b93505060406137e2878288016134d2565b92505060606137f3878288016134d2565b91505092959194509250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6138336020836133b5565b915061383e826137ff565b602082019050919050565b5f6020820190508181035f83015261386081613827565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61389e826134b3565b91506138a9836134b3565b92508282026138b7816134b3565b915082820484148315176138ce576138cd613867565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61390c826134b3565b9150613917836134b3565b925082613927576139266138d5565b5b828204905092915050565b5f819050919050565b5f61395561395061394b84613932565b613582565b6134b3565b9050919050565b6139658161393b565b82525050565b5f60c08201905061397e5f8301896136f7565b61398b60208301886135f6565b613998604083018761395c565b6139a5606083018661395c565b6139b260808301856136f7565b6139bf60a08301846135f6565b979650505050505050565b5f815190506139d8816134bc565b92915050565b5f805f606084860312156139f5576139f4613455565b5b5f613a02868287016139ca565b9350506020613a13868287016139ca565b9250506040613a24868287016139ca565b9150509250925092565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613a7257607f821691505b602082108103613a8557613a84613a2e565b5b50919050565b7f546f6b656e2062616c616e6365206d75737420626520677265617465722074685f8201527f616e203000000000000000000000000000000000000000000000000000000000602082015250565b5f613ae56024836133b5565b9150613af082613a8b565b604082019050919050565b5f6020820190508181035f830152613b1281613ad9565b9050919050565b7f4554482062616c616e6365206d7573742062652067726561746572207468616e5f8201527f2030000000000000000000000000000000000000000000000000000000000000602082015250565b5f613b736022836133b5565b9150613b7e82613b19565b604082019050919050565b5f6020820190508181035f830152613ba081613b67565b9050919050565b5f81905092915050565b50565b5f613bbf5f83613ba7565b9150613bca82613bb1565b5f82019050919050565b5f613bde82613bb4565b9150819050919050565b7f4661696c656420746f20636c656172204554482062616c616e636500000000005f82015250565b5f613c1c601b836133b5565b9150613c2782613be8565b602082019050919050565b5f6020820190508181035f830152613c4981613c10565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f613caa6039836133b5565b9150613cb582613c50565b604082019050919050565b5f6020820190508181035f830152613cd781613c9e565b9050919050565b5f613ce8826134b3565b9150613cf3836134b3565b9250828201905080821115613d0b57613d0a613867565b5b92915050565b7f4d4158203330252074617820616c6c6f776564000000000000000000000000005f82015250565b5f613d456013836133b5565b9150613d5082613d11565b602082019050919050565b5f6020820190508181035f830152613d7281613d39565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613dd36024836133b5565b9150613dde82613d79565b604082019050919050565b5f6020820190508181035f830152613e0081613dc7565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613e616022836133b5565b9150613e6c82613e07565b604082019050919050565b5f6020820190508181035f830152613e8e81613e55565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f613eef6025836133b5565b9150613efa82613e95565b604082019050919050565b5f6020820190508181035f830152613f1c81613ee3565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f613f7d6023836133b5565b9150613f8882613f23565b604082019050919050565b5f6020820190508181035f830152613faa81613f71565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f61400b6035836133b5565b915061401682613fb1565b604082019050919050565b5f6020820190508181035f83015261403881613fff565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f6140736013836133b5565b915061407e8261403f565b602082019050919050565b5f6020820190508181035f8301526140a081614067565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f6141016036836133b5565b915061410c826140a7565b604082019050919050565b5f6020820190508181035f83015261412e816140f5565b9050919050565b5f61413f826134b3565b915061414a836134b3565b925082820390508181111561416257614161613867565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f61419c601b836133b5565b91506141a782614168565b602082019050919050565b5f6020820190508181035f8301526141c981614190565b9050919050565b5f6060820190506141e35f8301866135f6565b6141f060208301856135f6565b6141fd60408301846135f6565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f61425f6021836133b5565b915061426a82614205565b604082019050919050565b5f6020820190508181035f83015261428c81614253565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f815190506142fb81613489565b92915050565b5f6020828403121561431657614315613455565b5b5f614323848285016142ed565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61435e81613478565b82525050565b5f61436f8383614355565b60208301905092915050565b5f602082019050919050565b5f6143918261432c565b61439b8185614336565b93506143a683614346565b805f5b838110156143d65781516143bd8882614364565b97506143c88361437b565b9250506001810190506143a9565b5085935050505092915050565b5f60a0820190506143f65f8301886135f6565b614403602083018761395c565b81810360408301526144158186614387565b905061442460608301856136f7565b61443160808301846135f6565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212200a7fdfba34ef42e88e9a4e12ef6e694d6072bdfe1d905a1a2d11ff0a3da012a564736f6c63430008150033

Deployed Bytecode Sourcemap

17570:12587:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21462:542;;;;;;;;;;;;;:::i;:::-;;4833:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5747:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18067:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18640:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17748:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5154:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24114:165;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18349:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18248:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18282:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22335:260;;;;;;;;;;;;;:::i;:::-;;5924:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5053:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6287:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22012:315;;;;;;;;;;;;;:::i;:::-;;18150:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22693:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18026:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17806:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24287:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17984:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18183:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5270:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10814:148;;;;;;;;;;;;;:::i;:::-;;22603:81;;;;;;;;;;;;;:::i;:::-;;22809:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10600:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18104:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4941:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23663:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18389:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6513:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5405:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18863:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17884:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18314:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23472:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17948:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5588:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18214:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22965:499;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10970:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21462:542;10737:12;:10;:12::i;:::-;10727:22;;:6;;;;;;;;;;;:22;;;10719:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21519:17:::1;21539:21;21519:41;;21571:19;21625:3;21620:2;21593:24;21611:4;21593:9;:24::i;:::-;:29;;;;:::i;:::-;:35;;;;:::i;:::-;21571:57;;21659:62;21676:4;21691:15;21709:11;21659:8;:62::i;:::-;21734:15;:31;;;21773:9;21806:4;21826:11;21856:1;21903::::0;21946:9:::1;;;;;;;;;;;21970:15;21734:262;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;21498:506;;21462:542::o:0;4833:100::-;4887:13;4920:5;4913:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4833:100;:::o;5747:169::-;5830:4;5847:39;5856:12;:10;:12::i;:::-;5870:7;5879:6;5847:8;:39::i;:::-;5904:4;5897:11;;5747:169;;;;:::o;18067:30::-;;;;;;;;;;;;;:::o;18640:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;17748:51::-;;;:::o;5154:108::-;5215:7;5242:12;;5235:19;;5154:108;:::o;24114:165::-;10737:12;:10;:12::i;:::-;10727:22;;:6;;;;;;;;;;;:22;;;10719:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24226:9:::1;;;;;;;;;;;24195:41;;24212:12;24195:41;;;;;;;;;;;;24259:12;24247:9;;:24;;;;;;;;;;;;;;;;;;24114:165:::0;:::o;18349:33::-;;;;:::o;18248:27::-;;;;:::o;18282:25::-;;;;:::o;22335:260::-;10737:12;:10;:12::i;:::-;10727:22;;:6;;;;;;;;;;;:22;;;10719:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22404:20:::1;22427:24;22445:4;22427:9;:24::i;:::-;22404:47;;22485:1;22470:12;:16;22462:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;22538:49;22556:4;22563:9;;;;;;;;;;;22574:12;22538:9;:49::i;:::-;22393:202;22335:260::o:0;5924:355::-;6064:4;6081:36;6091:6;6099:9;6110:6;6081:9;:36::i;:::-;6128:121;6137:6;6145:12;:10;:12::i;:::-;6159:89;6197:6;6159:89;;;;;;;;;;;;;;;;;:11;:19;6171:6;6159:19;;;;;;;;;;;;;;;:33;6179:12;:10;:12::i;:::-;6159:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;6128:8;:121::i;:::-;6267:4;6260:11;;5924:355;;;;;:::o;5053:93::-;5111:5;5136:2;5129:9;;5053:93;:::o;6287:218::-;6375:4;6392:83;6401:12;:10;:12::i;:::-;6415:7;6424:50;6463:10;6424:11;:25;6436:12;:10;:12::i;:::-;6424:25;;;;;;;;;;;;;;;:34;6450:7;6424:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;6392:8;:83::i;:::-;6493:4;6486:11;;6287:218;;;;:::o;22012:315::-;10737:12;:10;:12::i;:::-;10727:22;;:6;;;;;;;;;;;:22;;;10719:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22072:18:::1;22093:21;22072:42;;22146:1;22133:10;:14;22125:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;22198:12;22223:9;;;;;;;;;;;22215:23;;22246:10;22215:46;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22197:64;;;22280:7;22272:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;22061:266;;22012:315::o:0;18150:26::-;;;;:::o;22693:107::-;10737:12;:10;:12::i;:::-;10727:22;;:6;;;;;;;;;;;:22;;;10719:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22785:7:::1;22765:17;;:27;;;;;;;;;;;;;;;;;;22693:107:::0;:::o;18026:31::-;;;;:::o;17806:38::-;;;:::o;24287:125::-;24352:4;24376:19;:28;24396:7;24376:28;;;;;;;;;;;;;;;;;;;;;;;;;24369:35;;24287:125;;;:::o;17984:35::-;;;;:::o;18183:24::-;;;;:::o;5270:127::-;5344:7;5371:9;:18;5381:7;5371:18;;;;;;;;;;;;;;;;5364:25;;5270:127;;;:::o;10814:148::-;10737:12;:10;:12::i;:::-;10727:22;;:6;;;;;;;;;;;:22;;;10719:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;10921:1:::1;10884:40;;10905:6;;;;;;;;;;;10884:40;;;;;;;;;;;;10952:1;10935:6;;:19;;;;;;;;;;;;;;;;;;10814:148::o:0;22603:81::-;10737:12;:10;:12::i;:::-;10727:22;;:6;;;;;;;;;;;:22;;;10719:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22671:5:::1;22657:11;;:19;;;;;;;;;;;;;;;;;;22603:81::o:0;22809:144::-;10737:12;:10;:12::i;:::-;10727:22;;:6;;;;;;;;;;;:22;;;10719:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22941:4:::1;22899:31;:39;22931:6;22899:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;22809:144:::0;;:::o;10600:79::-;10638:7;10665:6;;;;;;;;;;;10658:13;;10600:79;:::o;18104:37::-;;;;;;;;;;;;;:::o;4941:104::-;4997:13;5030:7;5023:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4941:104;:::o;23663:245::-;10737:12;:10;:12::i;:::-;10727:22;;:6;;;;;;;;;;;:22;;;10719:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23770:13:::1;23762:21;;:4;:21;;::::0;23754:91:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;23859:41;23888:4;23894:5;23859:28;:41::i;:::-;23663:245:::0;;:::o;18389:27::-;;;;:::o;6513:269::-;6606:4;6623:129;6632:12;:10;:12::i;:::-;6646:7;6655:96;6694:15;6655:96;;;;;;;;;;;;;;;;;:11;:25;6667:12;:10;:12::i;:::-;6655:25;;;;;;;;;;;;;;;:34;6681:7;6655:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;6623:8;:129::i;:::-;6770:4;6763:11;;6513:269;;;;:::o;5405:175::-;5491:4;5508:42;5518:12;:10;:12::i;:::-;5532:9;5543:6;5508:9;:42::i;:::-;5568:4;5561:11;;5405:175;;;;:::o;18863:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;17884:22::-;;;;:::o;18314:25::-;;;;:::o;23472:182::-;10737:12;:10;:12::i;:::-;10727:22;;:6;;;;;;;;;;;:22;;;10719:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23588:8:::1;23557:19;:28;23577:7;23557:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;23628:7;23612:34;;;23637:8;23612:34;;;;;;:::i;:::-;;;;;;;;23472:182:::0;;:::o;17948:29::-;;;;:::o;5588:151::-;5677:7;5704:11;:18;5716:5;5704:18;;;;;;;;;;;;;;;:27;5723:7;5704:27;;;;;;;;;;;;;;;;5697:34;;5588:151;;;;:::o;18214:24::-;;;;:::o;22965:499::-;10737:12;:10;:12::i;:::-;10727:22;;:6;;;;;;;;;;;:22;;;10719:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23139:7:::1;23127:9;:19;;;;23169:7;23157:9;:19;;;;23213:9;;23201;;:21;;;;:::i;:::-;23187:11;:35;;;;23246:8;23233:10;:21;;;;23278:8;23265:10;:21;;;;23325:10;;23312;;:23;;;;:::i;:::-;23297:12;:38;;;;23369:2;23354:11;;:17;;23346:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;23430:2;23414:12;;:18;;23406:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;22965:499:::0;;;;:::o;10970:169::-;10737:12;:10;:12::i;:::-;10727:22;;:6;;;;;;;;;;;:22;;;10719:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;11094:8:::1;11065:38;;11086:6;;;;;;;;;;;11065:38;;;;;;;;;;;;11123:8;11114:6;;:17;;;;;;;;;;;;;;;;;;10970:169:::0;:::o;186:98::-;239:7;266:10;259:17;;186:98;:::o;8189:381::-;8342:1;8325:19;;:5;:19;;;8317:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8423:1;8404:21;;:7;:21;;;8396:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8508:6;8478:11;:18;8490:5;8478:18;;;;;;;;;;;;;;;:27;8497:7;8478:27;;;;;;;;;;;;;;;:36;;;;8546:7;8530:32;;8539:5;8530:32;;;8555:6;8530:32;;;;;;:::i;:::-;;;;;;;;8189:381;;;:::o;24421:3112::-;24569:1;24553:18;;:4;:18;;;24545:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24646:1;24632:16;;:2;:16;;;24624:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;24713:1;24703:6;:11;24700:92;;24731:28;24747:4;24753:2;24757:1;24731:15;:28::i;:::-;24774:7;;24700:92;24808:11;;;;;;;;;;;24805:1083;;;24865:7;:5;:7::i;:::-;24857:15;;:4;:15;;;;:49;;;;;24899:7;:5;:7::i;:::-;24893:13;;:2;:13;;;;24857:49;:86;;;;;24941:1;24927:16;;:2;:16;;;;24857:86;:128;;;;;24978:6;24964:21;;:2;:21;;;;24857:128;:160;;;;;25007:10;;;;;;;;;;;25006:11;24857:160;24835:1042;;;25101:25;:31;25127:4;25101:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;25137:31;:35;25169:2;25137:35;;;;;;;;;;;;;;;;;;;;;;;;;25136:36;25101:71;25097:765;;;25219:14;;25209:6;:24;;25201:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;25352:16;;25335:13;25345:2;25335:9;:13::i;:::-;25326:6;:22;;;;:::i;:::-;:42;;25318:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;25097:765;;;25471:25;:29;25497:2;25471:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;25505:31;:37;25537:4;25505:37;;;;;;;;;;;;;;;;;;;;;;;;;25504:38;25471:71;25467:395;;;25589:14;;25579:6;:24;;25571:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;25467:395;;;25709:31;:35;25741:2;25709:35;;;;;;;;;;;;;;;;;;;;;;;;;25705:157;;25802:16;;25785:13;25795:2;25785:9;:13::i;:::-;25776:6;:22;;;;:::i;:::-;:42;;25768:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;25705:157;25467:395;25097:765;24835:1042;24805:1083;25901:28;25932:24;25950:4;25932:9;:24::i;:::-;25901:55;;25970:12;26009:20;;25985;:44;;25970:59;;26061:7;:35;;;;;26086:10;;;;;;;;;;;26085:11;26061:35;:84;;;;;26114:25;:31;26140:4;26114:31;;;;;;;;;;;;;;;;;;;;;;;;;26113:32;26061:84;:127;;;;;26163:19;:25;26183:4;26163:25;;;;;;;;;;;;;;;;;;;;;;;;;26162:26;26061:127;:168;;;;;26206:19;:23;26226:2;26206:23;;;;;;;;;;;;;;;;;;;;;;;;;26205:24;26061:168;26043:306;;;26269:4;26256:10;;:17;;;;;;;;;;;;;;;;;;26291:10;:8;:10::i;:::-;26332:5;26319:10;;:18;;;;;;;;;;;;;;;;;;26043:306;26362:12;26378:10;;;;;;;;;;;26377:11;26362:26;;26490:19;:25;26510:4;26490:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;26519:19;:23;26539:2;26519:23;;;;;;;;;;;;;;;;;;;;;;;;;26490:52;26487:99;;;26569:5;26559:15;;26487:99;26599:12;26703:7;26700:779;;;26754:25;:29;26780:2;26754:29;;;;;;;;;;;;;;;;;;;;;;;;;:49;;;;;26802:1;26787:12;;:16;26754:49;26750:576;;;26830:33;26859:3;26830:24;26841:12;;26830:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;26823:40;;26924:12;;26911:10;;26904:4;:17;;;;:::i;:::-;:32;;;;:::i;:::-;26882:18;;:54;;;;;;;:::i;:::-;;;;;;;;26991:12;;26978:10;;26971:4;:17;;;;:::i;:::-;:32;;;;:::i;:::-;26955:12;;:48;;;;;;;:::i;:::-;;;;;;;;26750:576;;;27064:25;:31;27090:4;27064:31;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;27113:1;27099:11;;:15;27064:50;27061:265;;;27142:32;27170:3;27142:23;27153:11;;27142:6;:10;;:23;;;;:::i;:::-;:27;;:32;;;;:::i;:::-;27135:39;;27234:11;;27222:9;;27215:4;:16;;;;:::i;:::-;:30;;;;:::i;:::-;27193:18;;:52;;;;;;;:::i;:::-;;;;;;;;27299:11;;27287:9;;27280:4;:16;;;;:::i;:::-;:30;;;;:::i;:::-;27264:12;;:46;;;;;;;:::i;:::-;;;;;;;;27061:265;26750:576;27353:1;27346:4;:8;27343:93;;;27378:42;27394:4;27408;27415;27378:15;:42::i;:::-;27343:93;27463:4;27453:14;;;;;:::i;:::-;;;26700:779;27492:33;27508:4;27514:2;27518:6;27492:15;:33::i;:::-;24534:2999;;;;24421:3112;;;;:::o;9077:193::-;9163:7;9196:1;9191;:6;;9199:12;9183:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9223:9;9239:1;9235;:5;;;;:::i;:::-;9223:17;;9261:1;9254:8;;;9077:193;;;;;:::o;8743:182::-;8801:7;8821:9;8837:1;8833;:5;;;;:::i;:::-;8821:17;;8862:1;8857;:6;;8849:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;8916:1;8909:8;;;8743:182;;;;:::o;23917:189::-;24034:5;24000:25;:31;24026:4;24000:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;24092:5;24058:40;;24086:4;24058:40;;;;;;;;;;;;23917:189;;:::o;6790:575::-;6948:1;6930:20;;:6;:20;;;6922:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;7032:1;7011:23;;:9;:23;;;7003:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;7088:47;7109:6;7117:9;7128:6;7088:20;:47::i;:::-;7169:71;7191:6;7169:71;;;;;;;;;;;;;;;;;:9;:17;7179:6;7169:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;7149:9;:17;7159:6;7149:17;;;;;;;;;;;;;;;:91;;;;7274:32;7299:6;7274:9;:20;7284:9;7274:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;7251:9;:20;7261:9;7251:20;;;;;;;;;;;;;;;:55;;;;7339:9;7322:35;;7331:6;7322:35;;;7350:6;7322:35;;;;;;:::i;:::-;;;;;;;;6790:575;;;:::o;28677:1477::-;28716:23;28742:24;28760:4;28742:9;:24::i;:::-;28716:50;;28777:25;28826:12;;28805:18;;:33;;;;:::i;:::-;28777:61;;28849:12;28897:1;28878:15;:20;:46;;;;28923:1;28902:17;:22;28878:46;28875:60;;;28927:7;;;;;28875:60;28972:5;28951:26;;:17;;;;;;;;;;;:26;;;28948:254;;29037:2;29014:20;;:25;;;;:::i;:::-;28996:15;:43;28993:125;;;29100:2;29077:20;;:25;;;;:::i;:::-;29059:43;;28993:125;28948:254;;;29166:24;29184:4;29166:9;:24::i;:::-;29148:42;;28948:254;29274:23;29359:1;29339:17;29318:18;;29300:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;29274:86;;29371:26;29400:36;29420:15;29400;:19;;:36;;;;:::i;:::-;29371:65;;29450:25;29478:21;29450:49;;29513:36;29530:18;29513:16;:36::i;:::-;29564:18;29585:44;29611:17;29585:21;:25;;:44;;;;:::i;:::-;29564:65;;29643:17;29663:51;29696:17;29663:28;29678:12;;29663:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;29643:71;;29725:23;29764:9;29751:10;:22;;;;:::i;:::-;29725:48;;29811:1;29790:18;:22;;;;29838:1;29823:12;:16;;;;29874:1;29856:15;:19;:42;;;;;29897:1;29879:15;:19;29856:42;29853:210;;;29914:46;29927:15;29944;29914:12;:46::i;:::-;29980:71;29995:18;30015:15;30032:18;;29980:71;;;;;;;;:::i;:::-;;;;;;;;29853:210;30097:9;;;;;;;;;;;30089:23;;30120:21;30089:57;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30076:70;;;;;28705:1449;;;;;;;;;28677:1477;:::o;9278:254::-;9336:7;9367:1;9362;:6;9358:47;;9392:1;9385:8;;;;9358:47;9418:9;9434:1;9430;:5;;;;:::i;:::-;9418:17;;9463:1;9458;9454;:5;;;;:::i;:::-;:10;9446:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;9523:1;9516:8;;;9278:254;;;;;:::o;9540:132::-;9598:7;9625:39;9629:1;9632;9625:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;9618:46;;9540:132;;;;:::o;8578:125::-;;;;:::o;8933:136::-;8991:7;9018:43;9022:1;9025;9018:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;9011:50;;8933:136;;;;:::o;27542:597::-;27671:21;27709:1;27695:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27671:40;;27740:4;27722;27727:1;27722:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;27766:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27756:4;27761:1;27756:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;27802:62;27819:4;27834:15;27852:11;27802:8;:62::i;:::-;27904:15;:66;;;27985:11;28011:1;28055:4;28082;28102:15;27904:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27597:542;27542:597;:::o;28148:520::-;28296:62;28313:4;28328:15;28346:11;28296:8;:62::i;:::-;28402:15;:31;;;28441:9;28474:4;28494:11;28520:1;28563;28614:4;28634:15;28402:258;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;28148:520;;:::o;9680:279::-;9766:7;9798:1;9794;:5;9801:12;9786:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9825:9;9841:1;9837;:5;;;;:::i;:::-;9825:17;;9950:1;9943:8;;;9680:279;;;;;:::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:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:60::-;3809:3;3830:5;3823:12;;3781:60;;;:::o;3847:142::-;3897:9;3930:53;3948:34;3957:24;3975:5;3957:24;:::i;:::-;3948:34;:::i;:::-;3930:53;:::i;:::-;3917:66;;3847:142;;;:::o;3995:126::-;4045:9;4078:37;4109:5;4078:37;:::i;:::-;4065:50;;3995:126;;;:::o;4127:153::-;4204:9;4237:37;4268:5;4237:37;:::i;:::-;4224:50;;4127:153;;;:::o;4286:185::-;4400:64;4458:5;4400:64;:::i;:::-;4395:3;4388:77;4286:185;;:::o;4477:276::-;4597:4;4635:2;4624:9;4620:18;4612:26;;4648:98;4743:1;4732:9;4728:17;4719:6;4648:98;:::i;:::-;4477:276;;;;:::o;4759:118::-;4846:24;4864:5;4846:24;:::i;:::-;4841:3;4834:37;4759:118;;:::o;4883:222::-;4976:4;5014:2;5003:9;4999:18;4991:26;;5027:71;5095:1;5084:9;5080:17;5071:6;5027:71;:::i;:::-;4883:222;;;;:::o;5111:619::-;5188:6;5196;5204;5253:2;5241:9;5232:7;5228:23;5224:32;5221:119;;;5259:79;;:::i;:::-;5221:119;5379:1;5404:53;5449:7;5440:6;5429:9;5425:22;5404:53;:::i;:::-;5394:63;;5350:117;5506:2;5532:53;5577:7;5568:6;5557:9;5553:22;5532:53;:::i;:::-;5522:63;;5477:118;5634:2;5660:53;5705:7;5696:6;5685:9;5681:22;5660:53;:::i;:::-;5650:63;;5605:118;5111:619;;;;;:::o;5736:86::-;5771:7;5811:4;5804:5;5800:16;5789:27;;5736:86;;;:::o;5828:112::-;5911:22;5927:5;5911:22;:::i;:::-;5906:3;5899:35;5828:112;;:::o;5946:214::-;6035:4;6073:2;6062:9;6058:18;6050:26;;6086:67;6150:1;6139:9;6135:17;6126:6;6086:67;:::i;:::-;5946:214;;;;:::o;6166:116::-;6236:21;6251:5;6236:21;:::i;:::-;6229:5;6226:32;6216:60;;6272:1;6269;6262:12;6216:60;6166:116;:::o;6288:133::-;6331:5;6369:6;6356:20;6347:29;;6385:30;6409:5;6385:30;:::i;:::-;6288:133;;;;:::o;6427:323::-;6483:6;6532:2;6520:9;6511:7;6507:23;6503:32;6500:119;;;6538:79;;:::i;:::-;6500:119;6658:1;6683:50;6725:7;6716:6;6705:9;6701:22;6683:50;:::i;:::-;6673:60;;6629:114;6427:323;;;;:::o;6756:118::-;6843:24;6861:5;6843:24;:::i;:::-;6838:3;6831:37;6756:118;;:::o;6880:222::-;6973:4;7011:2;7000:9;6996:18;6988:26;;7024:71;7092:1;7081:9;7077:17;7068:6;7024:71;:::i;:::-;6880:222;;;;:::o;7108:468::-;7173:6;7181;7230:2;7218:9;7209:7;7205:23;7201:32;7198:119;;;7236:79;;:::i;:::-;7198:119;7356:1;7381:53;7426:7;7417:6;7406:9;7402:22;7381:53;:::i;:::-;7371:63;;7327:117;7483:2;7509:50;7551:7;7542:6;7531:9;7527:22;7509:50;:::i;:::-;7499:60;;7454:115;7108:468;;;;;:::o;7582:474::-;7650:6;7658;7707:2;7695:9;7686:7;7682:23;7678:32;7675:119;;;7713:79;;:::i;:::-;7675:119;7833:1;7858:53;7903:7;7894:6;7883:9;7879:22;7858:53;:::i;:::-;7848:63;;7804:117;7960:2;7986:53;8031:7;8022:6;8011:9;8007:22;7986:53;:::i;:::-;7976:63;;7931:118;7582:474;;;;;:::o;8062:765::-;8148:6;8156;8164;8172;8221:3;8209:9;8200:7;8196:23;8192:33;8189:120;;;8228:79;;:::i;:::-;8189:120;8348:1;8373:53;8418:7;8409:6;8398:9;8394:22;8373:53;:::i;:::-;8363:63;;8319:117;8475:2;8501:53;8546:7;8537:6;8526:9;8522:22;8501:53;:::i;:::-;8491:63;;8446:118;8603:2;8629:53;8674:7;8665:6;8654:9;8650:22;8629:53;:::i;:::-;8619:63;;8574:118;8731:2;8757:53;8802:7;8793:6;8782:9;8778:22;8757:53;:::i;:::-;8747:63;;8702:118;8062:765;;;;;;;:::o;8833:182::-;8973:34;8969:1;8961:6;8957:14;8950:58;8833:182;:::o;9021:366::-;9163:3;9184:67;9248:2;9243:3;9184:67;:::i;:::-;9177:74;;9260:93;9349:3;9260:93;:::i;:::-;9378:2;9373:3;9369:12;9362:19;;9021:366;;;:::o;9393:419::-;9559:4;9597:2;9586:9;9582:18;9574:26;;9646:9;9640:4;9636:20;9632:1;9621:9;9617:17;9610:47;9674:131;9800:4;9674:131;:::i;:::-;9666:139;;9393:419;;;:::o;9818:180::-;9866:77;9863:1;9856:88;9963:4;9960:1;9953:15;9987:4;9984:1;9977:15;10004:410;10044:7;10067:20;10085:1;10067:20;:::i;:::-;10062:25;;10101:20;10119:1;10101:20;:::i;:::-;10096:25;;10156:1;10153;10149:9;10178:30;10196:11;10178:30;:::i;:::-;10167:41;;10357:1;10348:7;10344:15;10341:1;10338:22;10318:1;10311:9;10291:83;10268:139;;10387:18;;:::i;:::-;10268:139;10052:362;10004:410;;;;:::o;10420:180::-;10468:77;10465:1;10458:88;10565:4;10562:1;10555:15;10589:4;10586:1;10579:15;10606:185;10646:1;10663:20;10681:1;10663:20;:::i;:::-;10658:25;;10697:20;10715:1;10697:20;:::i;:::-;10692:25;;10736:1;10726:35;;10741:18;;:::i;:::-;10726:35;10783:1;10780;10776:9;10771:14;;10606:185;;;;:::o;10797:85::-;10842:7;10871:5;10860:16;;10797:85;;;:::o;10888:158::-;10946:9;10979:61;10997:42;11006:32;11032:5;11006:32;:::i;:::-;10997:42;:::i;:::-;10979:61;:::i;:::-;10966:74;;10888:158;;;:::o;11052:147::-;11147:45;11186:5;11147:45;:::i;:::-;11142:3;11135:58;11052:147;;:::o;11205:807::-;11454:4;11492:3;11481:9;11477:19;11469:27;;11506:71;11574:1;11563:9;11559:17;11550:6;11506:71;:::i;:::-;11587:72;11655:2;11644:9;11640:18;11631:6;11587:72;:::i;:::-;11669:80;11745:2;11734:9;11730:18;11721:6;11669:80;:::i;:::-;11759;11835:2;11824:9;11820:18;11811:6;11759:80;:::i;:::-;11849:73;11917:3;11906:9;11902:19;11893:6;11849:73;:::i;:::-;11932;12000:3;11989:9;11985:19;11976:6;11932:73;:::i;:::-;11205:807;;;;;;;;;:::o;12018:143::-;12075:5;12106:6;12100:13;12091:22;;12122:33;12149:5;12122:33;:::i;:::-;12018:143;;;;:::o;12167:663::-;12255:6;12263;12271;12320:2;12308:9;12299:7;12295:23;12291:32;12288:119;;;12326:79;;:::i;:::-;12288:119;12446:1;12471:64;12527:7;12518:6;12507:9;12503:22;12471:64;:::i;:::-;12461:74;;12417:128;12584:2;12610:64;12666:7;12657:6;12646:9;12642:22;12610:64;:::i;:::-;12600:74;;12555:129;12723:2;12749:64;12805:7;12796:6;12785:9;12781:22;12749:64;:::i;:::-;12739:74;;12694:129;12167:663;;;;;:::o;12836:180::-;12884:77;12881:1;12874:88;12981:4;12978:1;12971:15;13005:4;13002:1;12995:15;13022:320;13066:6;13103:1;13097:4;13093:12;13083:22;;13150:1;13144:4;13140:12;13171:18;13161:81;;13227:4;13219:6;13215:17;13205:27;;13161:81;13289:2;13281:6;13278:14;13258:18;13255:38;13252:84;;13308:18;;:::i;:::-;13252:84;13073:269;13022:320;;;:::o;13348:223::-;13488:34;13484:1;13476:6;13472:14;13465:58;13557:6;13552:2;13544:6;13540:15;13533:31;13348:223;:::o;13577:366::-;13719:3;13740:67;13804:2;13799:3;13740:67;:::i;:::-;13733:74;;13816:93;13905:3;13816:93;:::i;:::-;13934:2;13929:3;13925:12;13918:19;;13577:366;;;:::o;13949:419::-;14115:4;14153:2;14142:9;14138:18;14130:26;;14202:9;14196:4;14192:20;14188:1;14177:9;14173:17;14166:47;14230:131;14356:4;14230:131;:::i;:::-;14222:139;;13949:419;;;:::o;14374:221::-;14514:34;14510:1;14502:6;14498:14;14491:58;14583:4;14578:2;14570:6;14566:15;14559:29;14374:221;:::o;14601:366::-;14743:3;14764:67;14828:2;14823:3;14764:67;:::i;:::-;14757:74;;14840:93;14929:3;14840:93;:::i;:::-;14958:2;14953:3;14949:12;14942:19;;14601:366;;;:::o;14973:419::-;15139:4;15177:2;15166:9;15162:18;15154:26;;15226:9;15220:4;15216:20;15212:1;15201:9;15197:17;15190:47;15254:131;15380:4;15254:131;:::i;:::-;15246:139;;14973:419;;;:::o;15398:147::-;15499:11;15536:3;15521:18;;15398:147;;;;:::o;15551:114::-;;:::o;15671:398::-;15830:3;15851:83;15932:1;15927:3;15851:83;:::i;:::-;15844:90;;15943:93;16032:3;15943:93;:::i;:::-;16061:1;16056:3;16052:11;16045:18;;15671:398;;;:::o;16075:379::-;16259:3;16281:147;16424:3;16281:147;:::i;:::-;16274:154;;16445:3;16438:10;;16075:379;;;:::o;16460:177::-;16600:29;16596:1;16588:6;16584:14;16577:53;16460:177;:::o;16643:366::-;16785:3;16806:67;16870:2;16865:3;16806:67;:::i;:::-;16799:74;;16882:93;16971:3;16882:93;:::i;:::-;17000:2;16995:3;16991:12;16984:19;;16643:366;;;:::o;17015:419::-;17181:4;17219:2;17208:9;17204:18;17196:26;;17268:9;17262:4;17258:20;17254:1;17243:9;17239:17;17232:47;17296:131;17422:4;17296:131;:::i;:::-;17288:139;;17015:419;;;:::o;17440:244::-;17580:34;17576:1;17568:6;17564:14;17557:58;17649:27;17644:2;17636:6;17632:15;17625:52;17440:244;:::o;17690:366::-;17832:3;17853:67;17917:2;17912:3;17853:67;:::i;:::-;17846:74;;17929:93;18018:3;17929:93;:::i;:::-;18047:2;18042:3;18038:12;18031:19;;17690:366;;;:::o;18062:419::-;18228:4;18266:2;18255:9;18251:18;18243:26;;18315:9;18309:4;18305:20;18301:1;18290:9;18286:17;18279:47;18343:131;18469:4;18343:131;:::i;:::-;18335:139;;18062:419;;;:::o;18487:191::-;18527:3;18546:20;18564:1;18546:20;:::i;:::-;18541:25;;18580:20;18598:1;18580:20;:::i;:::-;18575:25;;18623:1;18620;18616:9;18609:16;;18644:3;18641:1;18638:10;18635:36;;;18651:18;;:::i;:::-;18635:36;18487:191;;;;:::o;18684:169::-;18824:21;18820:1;18812:6;18808:14;18801:45;18684:169;:::o;18859:366::-;19001:3;19022:67;19086:2;19081:3;19022:67;:::i;:::-;19015:74;;19098:93;19187:3;19098:93;:::i;:::-;19216:2;19211:3;19207:12;19200:19;;18859:366;;;:::o;19231:419::-;19397:4;19435:2;19424:9;19420:18;19412:26;;19484:9;19478:4;19474:20;19470:1;19459:9;19455:17;19448:47;19512:131;19638:4;19512:131;:::i;:::-;19504:139;;19231:419;;;:::o;19656:223::-;19796:34;19792:1;19784:6;19780:14;19773:58;19865:6;19860:2;19852:6;19848:15;19841:31;19656:223;:::o;19885:366::-;20027:3;20048:67;20112:2;20107:3;20048:67;:::i;:::-;20041:74;;20124:93;20213:3;20124:93;:::i;:::-;20242:2;20237:3;20233:12;20226:19;;19885:366;;;:::o;20257:419::-;20423:4;20461:2;20450:9;20446:18;20438:26;;20510:9;20504:4;20500:20;20496:1;20485:9;20481:17;20474:47;20538:131;20664:4;20538:131;:::i;:::-;20530:139;;20257:419;;;:::o;20682:221::-;20822:34;20818:1;20810:6;20806:14;20799:58;20891:4;20886:2;20878:6;20874:15;20867:29;20682:221;:::o;20909:366::-;21051:3;21072:67;21136:2;21131:3;21072:67;:::i;:::-;21065:74;;21148:93;21237:3;21148:93;:::i;:::-;21266:2;21261:3;21257:12;21250:19;;20909:366;;;:::o;21281:419::-;21447:4;21485:2;21474:9;21470:18;21462:26;;21534:9;21528:4;21524:20;21520:1;21509:9;21505:17;21498:47;21562:131;21688:4;21562:131;:::i;:::-;21554:139;;21281:419;;;:::o;21706:224::-;21846:34;21842:1;21834:6;21830:14;21823:58;21915:7;21910:2;21902:6;21898:15;21891:32;21706:224;:::o;21936:366::-;22078:3;22099:67;22163:2;22158:3;22099:67;:::i;:::-;22092:74;;22175:93;22264:3;22175:93;:::i;:::-;22293:2;22288:3;22284:12;22277:19;;21936:366;;;:::o;22308:419::-;22474:4;22512:2;22501:9;22497:18;22489:26;;22561:9;22555:4;22551:20;22547:1;22536:9;22532:17;22525:47;22589:131;22715:4;22589:131;:::i;:::-;22581:139;;22308:419;;;:::o;22733:222::-;22873:34;22869:1;22861:6;22857:14;22850:58;22942:5;22937:2;22929:6;22925:15;22918:30;22733:222;:::o;22961:366::-;23103:3;23124:67;23188:2;23183:3;23124:67;:::i;:::-;23117:74;;23200:93;23289:3;23200:93;:::i;:::-;23318:2;23313:3;23309:12;23302:19;;22961:366;;;:::o;23333:419::-;23499:4;23537:2;23526:9;23522:18;23514:26;;23586:9;23580:4;23576:20;23572:1;23561:9;23557:17;23550:47;23614:131;23740:4;23614:131;:::i;:::-;23606:139;;23333:419;;;:::o;23758:240::-;23898:34;23894:1;23886:6;23882:14;23875:58;23967:23;23962:2;23954:6;23950:15;23943:48;23758:240;:::o;24004:366::-;24146:3;24167:67;24231:2;24226:3;24167:67;:::i;:::-;24160:74;;24243:93;24332:3;24243:93;:::i;:::-;24361:2;24356:3;24352:12;24345:19;;24004:366;;;:::o;24376:419::-;24542:4;24580:2;24569:9;24565:18;24557:26;;24629:9;24623:4;24619:20;24615:1;24604:9;24600:17;24593:47;24657:131;24783:4;24657:131;:::i;:::-;24649:139;;24376:419;;;:::o;24801:169::-;24941:21;24937:1;24929:6;24925:14;24918:45;24801:169;:::o;24976:366::-;25118:3;25139:67;25203:2;25198:3;25139:67;:::i;:::-;25132:74;;25215:93;25304:3;25215:93;:::i;:::-;25333:2;25328:3;25324:12;25317:19;;24976:366;;;:::o;25348:419::-;25514:4;25552:2;25541:9;25537:18;25529:26;;25601:9;25595:4;25591:20;25587:1;25576:9;25572:17;25565:47;25629:131;25755:4;25629:131;:::i;:::-;25621:139;;25348:419;;;:::o;25773:241::-;25913:34;25909:1;25901:6;25897:14;25890:58;25982:24;25977:2;25969:6;25965:15;25958:49;25773:241;:::o;26020:366::-;26162:3;26183:67;26247:2;26242:3;26183:67;:::i;:::-;26176:74;;26259:93;26348:3;26259:93;:::i;:::-;26377:2;26372:3;26368:12;26361:19;;26020:366;;;:::o;26392:419::-;26558:4;26596:2;26585:9;26581:18;26573:26;;26645:9;26639:4;26635:20;26631:1;26620:9;26616:17;26609:47;26673:131;26799:4;26673:131;:::i;:::-;26665:139;;26392:419;;;:::o;26817:194::-;26857:4;26877:20;26895:1;26877:20;:::i;:::-;26872:25;;26911:20;26929:1;26911:20;:::i;:::-;26906:25;;26955:1;26952;26948:9;26940:17;;26979:1;26973:4;26970:11;26967:37;;;26984:18;;:::i;:::-;26967:37;26817:194;;;;:::o;27017:177::-;27157:29;27153:1;27145:6;27141:14;27134:53;27017:177;:::o;27200:366::-;27342:3;27363:67;27427:2;27422:3;27363:67;:::i;:::-;27356:74;;27439:93;27528:3;27439:93;:::i;:::-;27557:2;27552:3;27548:12;27541:19;;27200:366;;;:::o;27572:419::-;27738:4;27776:2;27765:9;27761:18;27753:26;;27825:9;27819:4;27815:20;27811:1;27800:9;27796:17;27789:47;27853:131;27979:4;27853:131;:::i;:::-;27845:139;;27572:419;;;:::o;27997:442::-;28146:4;28184:2;28173:9;28169:18;28161:26;;28197:71;28265:1;28254:9;28250:17;28241:6;28197:71;:::i;:::-;28278:72;28346:2;28335:9;28331:18;28322:6;28278:72;:::i;:::-;28360;28428:2;28417:9;28413:18;28404:6;28360:72;:::i;:::-;27997:442;;;;;;:::o;28445:220::-;28585:34;28581:1;28573:6;28569:14;28562:58;28654:3;28649:2;28641:6;28637:15;28630:28;28445:220;:::o;28671:366::-;28813:3;28834:67;28898:2;28893:3;28834:67;:::i;:::-;28827:74;;28910:93;28999:3;28910:93;:::i;:::-;29028:2;29023:3;29019:12;29012:19;;28671:366;;;:::o;29043:419::-;29209:4;29247:2;29236:9;29232:18;29224:26;;29296:9;29290:4;29286:20;29282:1;29271:9;29267:17;29260:47;29324:131;29450:4;29324:131;:::i;:::-;29316:139;;29043:419;;;:::o;29468:180::-;29516:77;29513:1;29506:88;29613:4;29610:1;29603:15;29637:4;29634:1;29627:15;29654:180;29702:77;29699:1;29692:88;29799:4;29796:1;29789:15;29823:4;29820:1;29813:15;29840:143;29897:5;29928:6;29922:13;29913:22;;29944:33;29971:5;29944:33;:::i;:::-;29840:143;;;;:::o;29989:351::-;30059:6;30108:2;30096:9;30087:7;30083:23;30079:32;30076:119;;;30114:79;;:::i;:::-;30076:119;30234:1;30259:64;30315:7;30306:6;30295:9;30291:22;30259:64;:::i;:::-;30249:74;;30205:128;29989:351;;;;:::o;30346:114::-;30413:6;30447:5;30441:12;30431:22;;30346:114;;;:::o;30466:184::-;30565:11;30599:6;30594:3;30587:19;30639:4;30634:3;30630:14;30615:29;;30466:184;;;;:::o;30656:132::-;30723:4;30746:3;30738:11;;30776:4;30771:3;30767:14;30759:22;;30656:132;;;:::o;30794:108::-;30871:24;30889:5;30871:24;:::i;:::-;30866:3;30859:37;30794:108;;:::o;30908:179::-;30977:10;30998:46;31040:3;31032:6;30998:46;:::i;:::-;31076:4;31071:3;31067:14;31053:28;;30908:179;;;;:::o;31093:113::-;31163:4;31195;31190:3;31186:14;31178:22;;31093:113;;;:::o;31242:732::-;31361:3;31390:54;31438:5;31390:54;:::i;:::-;31460:86;31539:6;31534:3;31460:86;:::i;:::-;31453:93;;31570:56;31620:5;31570:56;:::i;:::-;31649:7;31680:1;31665:284;31690:6;31687:1;31684:13;31665:284;;;31766:6;31760:13;31793:63;31852:3;31837:13;31793:63;:::i;:::-;31786:70;;31879:60;31932:6;31879:60;:::i;:::-;31869:70;;31725:224;31712:1;31709;31705:9;31700:14;;31665:284;;;31669:14;31965:3;31958:10;;31366:608;;;31242:732;;;;:::o;31980:831::-;32243:4;32281:3;32270:9;32266:19;32258:27;;32295:71;32363:1;32352:9;32348:17;32339:6;32295:71;:::i;:::-;32376:80;32452:2;32441:9;32437:18;32428:6;32376:80;:::i;:::-;32503:9;32497:4;32493:20;32488:2;32477:9;32473:18;32466:48;32531:108;32634:4;32625:6;32531:108;:::i;:::-;32523:116;;32649:72;32717:2;32706:9;32702:18;32693:6;32649:72;:::i;:::-;32731:73;32799:3;32788:9;32784:19;32775:6;32731:73;:::i;:::-;31980:831;;;;;;;;:::o

Swarm Source

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