ETH Price: $3,472.27 (+4.15%)

Token

Strawberry Elephant (صباح الفرولة)
 

Overview

Max Total Supply

1,000,000 صباح الفرولة

Holders

618

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
DARUMS: Deployer
Balance
174.07204349318048053 صباح الفرولة

Value
$0.00
0x7f596eee6366fd25dae37ee4d6a0fe2126cf40dc
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:
StrawberryElephant

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT
 
// twitter : https://twitter.com/strbelephant
// telegram : https://t.me/
// website : https://strawberry-elephant.eth.limo/
 
pragma solidity 0.8.21;
 
 
 
interface IUniswapV2Factory {
    function createPair(address tokenA, address tokenB) external returns(address pair);
}
 
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);
}
 
abstract contract Context {
    function _msgSender() internal view virtual returns(address) {
        return msg.sender;
    }
 
}
 
 
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 cannot be below zero"));
        return true;
    }
 
 
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
 
        _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");
 
        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }
 
 
 
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
 
 
}
 
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;
    }
 
 
}
 
contract Ownable is Context {
    address private _owner;
 
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
 
    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }
 
    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns(address) {
        return _owner;
    }
 
    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
 
 
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }
 
 
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}
 
 
 
library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);
 
 
    function mul(int256 a, int256 b) internal pure returns(int256) {
        int256 c = a * b;
 
        // 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;
    }
 
    /**
     * @dev Subtracts two int256 variables and fails on overflow.
     */
    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;
    }
 
    /**
     * @dev Adds two int256 variables and fails on overflow.
     */
    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;
    }
 
    /**
     * @dev Converts to absolute value, and fails on overflow.
     */
    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 StrawberryElephant is ERC20, Ownable {
    using SafeMath for uint256;
 
    IUniswapV2Router02 public immutable router;
    address public immutable uniswapV2Pair;
 
 
    // addresses
    address public  devWallet;
    address private marketingWallet;
 
    // limits 
    uint256 private maxBuyAmount;
    uint256 private maxSellAmount;   
    uint256 private maxWalletAmount;
 
    uint256 private thresholdSwapAmount;
 
    // status flags
    bool private isTrading = false;
    bool public swapEnabled = false;
    bool public isSwapping;
 
 
    struct Fees {
        uint8 buyTotalFees;
        uint8 buyMarketingFee;
        uint8 buyDevFee;
        uint8 buyLiquidityFee;
 
        uint8 sellTotalFees;
        uint8 sellMarketingFee;
        uint8 sellDevFee;
        uint8 sellLiquidityFee;
    }  
 
    Fees public _fees = Fees({
        buyTotalFees: 0,
        buyMarketingFee: 0,
        buyDevFee:0,
        buyLiquidityFee: 0,
 
        sellTotalFees: 0,
        sellMarketingFee: 0,
        sellDevFee:0,
        sellLiquidityFee: 0
    });
 
 
 
    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;
    uint256 private taxTill;
    // exclude from fees and max transaction amount
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTransactionAmount;
    mapping(address => bool) public _isExcludedMaxWalletAmount;
 
    // 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 marketPair;
 
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived
    );
 
 
    constructor() ERC20("Strawberry Elephant", unicode"صباح الفرولة") {
 
        router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
 
 
        uniswapV2Pair = IUniswapV2Factory(router.factory()).createPair(address(this), router.WETH());
 
        _isExcludedMaxTransactionAmount[address(router)] = true;
        _isExcludedMaxTransactionAmount[address(uniswapV2Pair)] = true;        
        _isExcludedMaxTransactionAmount[owner()] = true;
        _isExcludedMaxTransactionAmount[address(this)] = true;
 
        _isExcludedFromFees[owner()] = true;
        _isExcludedFromFees[address(this)] = true;
 
        _isExcludedMaxWalletAmount[owner()] = true;
        _isExcludedMaxWalletAmount[address(this)] = true;
        _isExcludedMaxWalletAmount[address(uniswapV2Pair)] = true;
 
 
        marketPair[address(uniswapV2Pair)] = true;
 
        approve(address(router), type(uint256).max);
        uint256 totalSupply = 1000000 * 1e18;
 
        maxBuyAmount = totalSupply * 2 / 100; // 1% maxTransactionAmountTxn
        maxSellAmount = totalSupply * 2 / 100; // 1% maxTransactionAmountTxn
        maxWalletAmount = totalSupply * 2 / 100; // 1% maxWallet
        thresholdSwapAmount = totalSupply * 1 / 10000; // 0.01% swap wallet
 
        _fees.buyMarketingFee = 15;
        _fees.buyLiquidityFee = 0;
        _fees.buyDevFee = 0;
        _fees.buyTotalFees = _fees.buyMarketingFee + _fees.buyLiquidityFee + _fees.buyDevFee;
 
        _fees.sellMarketingFee = 41;
        _fees.sellLiquidityFee = 0;
        _fees.sellDevFee = 0;
        _fees.sellTotalFees = _fees.sellMarketingFee + _fees.sellLiquidityFee + _fees.sellDevFee;
 
 
        marketingWallet = address(0x77ea7ac564BB7f8a9CA1fE4f0aA827AE6Caa8FA6);
        devWallet = address(0xEEF9A72987Eed83a2Be28f80bf221403796DA801);
 
        // exclude from paying fees or having max transaction amount
 
        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }
 
    receive() external payable {
 
    }
 
    // once enabled, can never be turned off
    function swapTrading() external onlyOwner {
        isTrading = true;
        swapEnabled = true;
        taxTill = block.number + 2;
    }
 
 
 
    // change the minimum amount of tokens to sell from fees
    function updateThresholdSwapAmount(uint256 newAmount) external onlyOwner returns(bool){
        thresholdSwapAmount = newAmount;
        return true;
    }
 
 
    function updateMaxTxnAmount(uint256 newMaxBuy, uint256 newMaxSell) external onlyOwner {
        require(((totalSupply() * newMaxBuy) / 1000) >= (totalSupply() / 100), "maxBuyAmount must be higher than 1%");
        require(((totalSupply() * newMaxSell) / 1000) >= (totalSupply() / 100), "maxSellAmount must be higher than 1%");
        maxBuyAmount = (totalSupply() * newMaxBuy) / 1000;
        maxSellAmount = (totalSupply() * newMaxSell) / 1000;
    }
 
 
    function updateMaxWalletAmount(uint256 newPercentage) external onlyOwner {
        require(((totalSupply() * newPercentage) / 1000) >= (totalSupply() / 100), "Cannot set maxWallet lower than 1%");
        maxWalletAmount = (totalSupply() * newPercentage) / 1000;
    }
 
    function updateFees(uint8 _marketingFeeBuy, uint8 _liquidityFeeBuy,uint8 _devFeeBuy,uint8 _marketingFeeSell, uint8 _liquidityFeeSell,uint8 _devFeeSell) external onlyOwner{
        _fees.buyMarketingFee = _marketingFeeBuy;
        _fees.buyLiquidityFee = _liquidityFeeBuy;
        _fees.buyDevFee = _devFeeBuy;
        _fees.buyTotalFees = _fees.buyMarketingFee + _fees.buyLiquidityFee + _fees.buyDevFee;
 
        _fees.sellMarketingFee = _marketingFeeSell;
        _fees.sellLiquidityFee = _liquidityFeeSell;
        _fees.sellDevFee = _devFeeSell;
        _fees.sellTotalFees = _fees.sellMarketingFee + _fees.sellLiquidityFee + _fees.sellDevFee;
        require(_fees.buyTotalFees <= 45, "Must keep fees at 30% or less");   
        require(_fees.sellTotalFees <= 45, "Must keep fees at 30% or less");
 
    }
 
    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
    }
    function excludeFromWalletLimit(address account, bool excluded) public onlyOwner {
        _isExcludedMaxWalletAmount[account] = excluded;
    }
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }
 
 
    function setMarketPair(address pair, bool value) public onlyOwner {
        require(pair != uniswapV2Pair, "Must keep uniswapV2Pair");
        marketPair[pair] = value;
    }
    function rescueETH(uint256 weiAmount) external onlyOwner {
        payable(owner()).transfer(weiAmount);
    }
 
    function rescueERC20(address tokenAdd, uint256 amount) external onlyOwner {
        IERC20(tokenAdd).transfer(owner(), amount);
    }
 
    function setWallets(address _marketingWallet,address _devWallet) external onlyOwner{
        marketingWallet = _marketingWallet;
        devWallet = _devWallet;
    }
 
    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }
 
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
 
    ) internal override {
 
        if (amount == 0) {
            super._transfer(sender, recipient, 0);
            return;
        }
 
        if (
            sender != owner() &&
            recipient != owner() &&
            !isSwapping
        ) {
 
            if (!isTrading) {
                require(_isExcludedFromFees[sender] || _isExcludedFromFees[recipient], "Trading is not active.");
            }
            if (marketPair[sender] && !_isExcludedMaxTransactionAmount[recipient]) {
                require(amount <= maxBuyAmount, "buy transfer over max amount");
            } 
            else if (marketPair[recipient] && !_isExcludedMaxTransactionAmount[sender]) {
                require(amount <= maxSellAmount, "Sell transfer over max amount");
            }
 
            if (!_isExcludedMaxWalletAmount[recipient]) {
                require(amount + balanceOf(recipient) <= maxWalletAmount, "Max wallet exceeded");
            }
 
        }
 
 
 
        uint256 contractTokenBalance = balanceOf(address(this));
 
        bool canSwap = contractTokenBalance >= thresholdSwapAmount;
 
        if (
            canSwap &&
            swapEnabled &&
            !isSwapping &&
            marketPair[recipient] &&
            !_isExcludedFromFees[sender] &&
            !_isExcludedFromFees[recipient]
        ) {
            isSwapping = true;
            swapBack();
            isSwapping = false;
        }
 
        bool takeFee = !isSwapping;
 
        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFees[sender] || _isExcludedFromFees[recipient]) {
            takeFee = false;
        }
 
 
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            uint256 fees = 0;
            if(block.number < taxTill) {
                fees = amount.mul(99).div(100);
                tokensForMarketing += (fees * 94) / 99;
                tokensForDev += (fees * 5) / 99;
            } else if (marketPair[recipient] && _fees.sellTotalFees > 0) {
                fees = amount.mul(_fees.sellTotalFees).div(100);
                tokensForLiquidity += fees * _fees.sellLiquidityFee / _fees.sellTotalFees;
                tokensForMarketing += fees * _fees.sellMarketingFee / _fees.sellTotalFees;
                tokensForDev += fees * _fees.sellDevFee / _fees.sellTotalFees;
            }
            // on buy
            else if (marketPair[sender] && _fees.buyTotalFees > 0) {
                fees = amount.mul(_fees.buyTotalFees).div(100);
                tokensForLiquidity += fees * _fees.buyLiquidityFee / _fees.buyTotalFees;
                tokensForMarketing += fees * _fees.buyMarketingFee / _fees.buyTotalFees;
                tokensForDev += fees * _fees.buyDevFee / _fees.buyTotalFees;
            }
 
            if (fees > 0) {
                super._transfer(sender, address(this), fees);
            }
 
            amount -= fees;
 
        }
 
        super._transfer(sender, recipient, amount);
    }
 
    function swapTokensForEth(uint256 tAmount) private {
 
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();
 
        _approve(address(this), address(router), tAmount);
 
        // make the swap
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
 
    }
 
    function addLiquidity(uint256 tAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(router), tAmount);
 
        // add the liquidity
        router.addLiquidityETH{ value: ethAmount } (address(this), tAmount, 0, 0 , address(this), block.timestamp);
    }
 
    function swapBack() private {
        uint256 contractTokenBalance = balanceOf(address(this));
        uint256 toSwap = tokensForLiquidity + tokensForMarketing + tokensForDev;
        bool success;
 
        if (contractTokenBalance == 0 || toSwap == 0) { return; }
 
        if (contractTokenBalance > thresholdSwapAmount * 20) {
            contractTokenBalance = thresholdSwapAmount * 20;
        }
 
        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractTokenBalance * tokensForLiquidity / toSwap / 2;
        uint256 amountToSwapForETH = contractTokenBalance.sub(liquidityTokens);
 
        uint256 initialETHBalance = address(this).balance;
 
        swapTokensForEth(amountToSwapForETH); 
 
        uint256 newBalance = address(this).balance.sub(initialETHBalance);
 
        uint256 ethForMarketing = newBalance.mul(tokensForMarketing).div(toSwap);
        uint256 ethForDev = newBalance.mul(tokensForDev).div(toSwap);
        uint256 ethForLiquidity = newBalance - (ethForMarketing + ethForDev);
 
 
        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;
 
 
        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity);
        }
 
        (success,) = address(devWallet).call{ value: (address(this).balance - ethForMarketing) } ("");
        (success,) = address(marketingWallet).call{ value: address(this).balance } ("");
    }
 
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","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"},{"inputs":[],"name":"_fees","outputs":[{"internalType":"uint8","name":"buyTotalFees","type":"uint8"},{"internalType":"uint8","name":"buyMarketingFee","type":"uint8"},{"internalType":"uint8","name":"buyDevFee","type":"uint8"},{"internalType":"uint8","name":"buyLiquidityFee","type":"uint8"},{"internalType":"uint8","name":"sellTotalFees","type":"uint8"},{"internalType":"uint8","name":"sellMarketingFee","type":"uint8"},{"internalType":"uint8","name":"sellDevFee","type":"uint8"},{"internalType":"uint8","name":"sellLiquidityFee","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxWalletAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"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":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromWalletLimit","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":"isSwapping","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"marketPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAdd","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"rescueERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"weiAmount","type":"uint256"}],"name":"rescueETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setMarketPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"},{"internalType":"address","name":"_devWallet","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTrading","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":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":[{"internalType":"uint8","name":"_marketingFeeBuy","type":"uint8"},{"internalType":"uint8","name":"_liquidityFeeBuy","type":"uint8"},{"internalType":"uint8","name":"_devFeeBuy","type":"uint8"},{"internalType":"uint8","name":"_marketingFeeSell","type":"uint8"},{"internalType":"uint8","name":"_liquidityFeeSell","type":"uint8"},{"internalType":"uint8","name":"_devFeeSell","type":"uint8"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxBuy","type":"uint256"},{"internalType":"uint256","name":"newMaxSell","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPercentage","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateThresholdSwapAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040525f600c5f6101000a81548160ff0219169083151502179055505f600c60016101000a81548160ff0219169083151502179055506040518061010001604052805f60ff1681526020015f60ff1681526020015f60ff1681526020015f60ff1681526020015f60ff1681526020015f60ff1681526020015f60ff1681526020015f60ff16815250600d5f820151815f015f6101000a81548160ff021916908360ff1602179055506020820151815f0160016101000a81548160ff021916908360ff1602179055506040820151815f0160026101000a81548160ff021916908360ff1602179055506060820151815f0160036101000a81548160ff021916908360ff1602179055506080820151815f0160046101000a81548160ff021916908360ff16021790555060a0820151815f0160056101000a81548160ff021916908360ff16021790555060c0820151815f0160066101000a81548160ff021916908360ff16021790555060e0820151815f0160076101000a81548160ff021916908360ff160217905550505034801562000197575f80fd5b506040518060400160405280601381526020017f5374726177626572727920456c657068616e74000000000000000000000000008152506040518060400160405280601781526020017fd8b5d8a8d8a7d8ad20d8a7d984d981d8b1d988d984d8a90000000000000000008152508160039081620002159190620010e5565b508060049081620002279190620010e5565b5050505f6200023b62000b5060201b60201c565b90508060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505060805173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200036c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200039291906200122e565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060805173ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003fa573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200042091906200122e565b6040518363ffffffff1660e01b81526004016200043f9291906200126f565b6020604051808303815f875af11580156200045c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200048291906200122e565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050600160135f60805173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160135f60a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160135f6200057862000b5760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160135f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160125f6200063162000b5760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160125f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160145f620006ea62000b5760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160145f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160145f60a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160155f60a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550620008706080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62000b7f60201b60201c565b505f69d3c21bcecceda100000090506064600282620008909190620012c7565b6200089c91906200133e565b6008819055506064600282620008b39190620012c7565b620008bf91906200133e565b6009819055506064600282620008d69190620012c7565b620008e291906200133e565b600a81905550612710600182620008fa9190620012c7565b6200090691906200133e565b600b81905550600f600d5f0160016101000a81548160ff021916908360ff1602179055505f600d5f0160036101000a81548160ff021916908360ff1602179055505f600d5f0160026101000a81548160ff021916908360ff160217905550600d5f0160029054906101000a900460ff16600d5f0160039054906101000a900460ff16600d5f0160019054906101000a900460ff16620009a6919062001381565b620009b2919062001381565b600d5f015f6101000a81548160ff021916908360ff1602179055506029600d5f0160056101000a81548160ff021916908360ff1602179055505f600d5f0160076101000a81548160ff021916908360ff1602179055505f600d5f0160066101000a81548160ff021916908360ff160217905550600d5f0160069054906101000a900460ff16600d5f0160079054906101000a900460ff16600d5f0160059054906101000a900460ff1662000a67919062001381565b62000a73919062001381565b600d5f0160046101000a81548160ff021916908360ff1602179055507377ea7ac564bb7f8a9ca1fe4f0aa827ae6caa8fa660075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073eef9a72987eed83a2be28f80bf221403796da80160065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000b49338262000bac60201b60201c565b506200150e565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f62000ba262000b9462000b5060201b60201c565b848462000d3660201b60201c565b6001905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000c1d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c14906200141a565b60405180910390fd5b62000c348160025462000e1f60201b90919060201c565b60028190555062000c8b815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205462000e1f60201b90919060201c565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000d2a91906200144b565b60405180910390a35050565b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405162000e1291906200144b565b60405180910390a3505050565b5f80828462000e2f919062001466565b90508381101562000e77576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000e6e90620014ee565b60405180910390fd5b8091505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000efd57607f821691505b60208210810362000f135762000f1262000eb8565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000f777fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000f3a565b62000f83868362000f3a565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000fcd62000fc762000fc18462000f9b565b62000fa4565b62000f9b565b9050919050565b5f819050919050565b62000fe88362000fad565b6200100062000ff78262000fd4565b84845462000f46565b825550505050565b5f90565b6200101662001008565b6200102381848462000fdd565b505050565b5b818110156200104a576200103e5f826200100c565b60018101905062001029565b5050565b601f8211156200109957620010638162000f19565b6200106e8462000f2b565b810160208510156200107e578190505b620010966200108d8562000f2b565b83018262001028565b50505b505050565b5f82821c905092915050565b5f620010bb5f19846008026200109e565b1980831691505092915050565b5f620010d58383620010aa565b9150826002028217905092915050565b620010f08262000e81565b67ffffffffffffffff8111156200110c576200110b62000e8b565b5b62001118825462000ee5565b620011258282856200104e565b5f60209050601f8311600181146200115b575f841562001146578287015190505b620011528582620010c8565b865550620011c1565b601f1984166200116b8662000f19565b5f5b8281101562001194578489015182556001820191506020850194506020810190506200116d565b86831015620011b45784890151620011b0601f891682620010aa565b8355505b6001600288020188555050505b505050505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f620011f882620011cd565b9050919050565b6200120a81620011ec565b811462001215575f80fd5b50565b5f815190506200122881620011ff565b92915050565b5f60208284031215620012465762001245620011c9565b5b5f620012558482850162001218565b91505092915050565b6200126981620011ec565b82525050565b5f604082019050620012845f8301856200125e565b6200129360208301846200125e565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f620012d38262000f9b565b9150620012e08362000f9b565b9250828202620012f08162000f9b565b915082820484148315176200130a57620013096200129a565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6200134a8262000f9b565b9150620013578362000f9b565b9250826200136a576200136962001311565b5b828204905092915050565b5f60ff82169050919050565b5f6200138d8262001375565b91506200139a8362001375565b9250828201905060ff811115620013b657620013b56200129a565b5b92915050565b5f82825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f62001402601f83620013bc565b91506200140f82620013cc565b602082019050919050565b5f6020820190508181035f8301526200143381620013f4565b9050919050565b620014458162000f9b565b82525050565b5f602082019050620014605f8301846200143a565b92915050565b5f620014728262000f9b565b91506200147f8362000f9b565b92508282019050808211156200149a57620014996200129a565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f620014d6601b83620013bc565b9150620014e382620014a0565b602082019050919050565b5f6020820190508181035f8301526200150781620014c8565b9050919050565b60805160a0516147ee6200155a5f395f81816110460152611a5901525f8181612171015281816133e0015281816134bf015281816134e60152818161357c01526135a301526147ee5ff3fe608060405260043610610233575f3560e01c80638da5cb5b1161012d578063c0246668116100aa578063dd62ed3e1161006e578063dd62ed3e14610853578063e16830a81461088f578063f2fde38b146108b7578063f5b3c3bf146108df578063f887ea401461091b5761023a565b8063c024666814610782578063c16dd4a4146107aa578063c18bc195146107d2578063d212a69a146107fa578063d3f6a1571461082b5761023a565b80639fccce32116100f15780639fccce32146106a0578063a457c2d7146106ca578063a9059cbb14610706578063b886311514610742578063b9e418e71461076c5761023a565b80638da5cb5b146105be5780638ea5220f146105e857806395d89b411461061257806396880b171461063c5780639e252f00146106785761023a565b80633265e846116101bb5780636ddd17131161017f5780636ddd1713146104f257806370a082311461051c578063715018a6146105585780637571336a1461056e5780638cd4426d146105965761023a565b80633265e846146103ec578063395093511461041457806349bd5a5e146104505780634fbee1931461047a578063555467a1146104b65761023a565b806318160ddd1161020257806318160ddd146103085780631a8145bb146103325780631f3fed8f1461035c57806323b872dd14610386578063313ce567146103c25761023a565b806306fdde031461023e578063095ea7b31461026857806310d5de53146102a457806311a582c3146102e05761023a565b3661023a57005b5f80fd5b348015610249575f80fd5b50610252610945565b60405161025f9190613738565b60405180910390f35b348015610273575f80fd5b5061028e600480360381019061028991906137e9565b6109d5565b60405161029b9190613841565b60405180910390f35b3480156102af575f80fd5b506102ca60048036038101906102c5919061385a565b6109f2565b6040516102d79190613841565b60405180910390f35b3480156102eb575f80fd5b5061030660048036038101906103019190613885565b610a0f565b005b348015610313575f80fd5b5061031c610bdf565b60405161032991906138d2565b60405180910390f35b34801561033d575f80fd5b50610346610be8565b60405161035391906138d2565b60405180910390f35b348015610367575f80fd5b50610370610bee565b60405161037d91906138d2565b60405180910390f35b348015610391575f80fd5b506103ac60048036038101906103a791906138eb565b610bf4565b6040516103b99190613841565b60405180910390f35b3480156103cd575f80fd5b506103d6610cc8565b6040516103e39190613956565b60405180910390f35b3480156103f7575f80fd5b50610412600480360381019061040d9190613999565b610cd0565b005b34801561041f575f80fd5b5061043a600480360381019061043591906137e9565b610f96565b6040516104479190613841565b60405180910390f35b34801561045b575f80fd5b50610464611044565b6040516104719190613a31565b60405180910390f35b348015610485575f80fd5b506104a0600480360381019061049b919061385a565b611068565b6040516104ad9190613841565b60405180910390f35b3480156104c1575f80fd5b506104dc60048036038101906104d79190613a4a565b6110ba565b6040516104e99190613841565b60405180910390f35b3480156104fd575f80fd5b50610506611161565b6040516105139190613841565b60405180910390f35b348015610527575f80fd5b50610542600480360381019061053d919061385a565b611174565b60405161054f91906138d2565b60405180910390f35b348015610563575f80fd5b5061056c6111b9565b005b348015610579575f80fd5b50610594600480360381019061058f9190613a9f565b61130c565b005b3480156105a1575f80fd5b506105bc60048036038101906105b791906137e9565b6113fa565b005b3480156105c9575f80fd5b506105d2611517565b6040516105df9190613a31565b60405180910390f35b3480156105f3575f80fd5b506105fc61153f565b6040516106099190613a31565b60405180910390f35b34801561061d575f80fd5b50610626611564565b6040516106339190613738565b60405180910390f35b348015610647575f80fd5b50610662600480360381019061065d919061385a565b6115f4565b60405161066f9190613841565b60405180910390f35b348015610683575f80fd5b5061069e60048036038101906106999190613a4a565b611611565b005b3480156106ab575f80fd5b506106b46116f5565b6040516106c191906138d2565b60405180910390f35b3480156106d5575f80fd5b506106f060048036038101906106eb91906137e9565b6116fb565b6040516106fd9190613841565b60405180910390f35b348015610711575f80fd5b5061072c600480360381019061072791906137e9565b6117c3565b6040516107399190613841565b60405180910390f35b34801561074d575f80fd5b506107566117e0565b6040516107639190613841565b60405180910390f35b348015610777575f80fd5b506107806117f3565b005b34801561078d575f80fd5b506107a860048036038101906107a39190613a9f565b6118d3565b005b3480156107b5575f80fd5b506107d060048036038101906107cb9190613a9f565b6119c1565b005b3480156107dd575f80fd5b506107f860048036038101906107f39190613a4a565b611b3d565b005b348015610805575f80fd5b5061080e611c71565b604051610822989796959493929190613add565b60405180910390f35b348015610836575f80fd5b50610851600480360381019061084c9190613b59565b611d06565b005b34801561085e575f80fd5b5061087960048036038101906108749190613b59565b611e20565b60405161088691906138d2565b60405180910390f35b34801561089a575f80fd5b506108b560048036038101906108b09190613a9f565b611ea2565b005b3480156108c2575f80fd5b506108dd60048036038101906108d8919061385a565b611f90565b005b3480156108ea575f80fd5b506109056004803603810190610900919061385a565b612152565b6040516109129190613841565b60405180910390f35b348015610926575f80fd5b5061092f61216f565b60405161093c9190613bf2565b60405180910390f35b60606003805461095490613c38565b80601f016020809104026020016040519081016040528092919081815260200182805461098090613c38565b80156109cb5780601f106109a2576101008083540402835291602001916109cb565b820191905f5260205f20905b8154815290600101906020018083116109ae57829003601f168201915b5050505050905090565b5f6109e86109e1612193565b848461219a565b6001905092915050565b6013602052805f5260405f205f915054906101000a900460ff1681565b610a17612193565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610aa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9c90613cb2565b60405180910390fd5b6064610aaf610bdf565b610ab99190613d2a565b6103e883610ac5610bdf565b610acf9190613d5a565b610ad99190613d2a565b1015610b1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1190613e0b565b60405180910390fd5b6064610b24610bdf565b610b2e9190613d2a565b6103e882610b3a610bdf565b610b449190613d5a565b610b4e9190613d2a565b1015610b8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8690613e99565b60405180910390fd5b6103e882610b9b610bdf565b610ba59190613d5a565b610baf9190613d2a565b6008819055506103e881610bc1610bdf565b610bcb9190613d5a565b610bd59190613d2a565b6009819055505050565b5f600254905090565b600f5481565b600e5481565b5f610c00848484612281565b610cbd84610c0c612193565b610cb8856040518060600160405280602881526020016147916028913960015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610c6f612193565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612d039092919063ffffffff16565b61219a565b600190509392505050565b5f6012905090565b610cd8612193565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5d90613cb2565b60405180910390fd5b85600d5f0160016101000a81548160ff021916908360ff16021790555084600d5f0160036101000a81548160ff021916908360ff16021790555083600d5f0160026101000a81548160ff021916908360ff160217905550600d5f0160029054906101000a900460ff16600d5f0160039054906101000a900460ff16600d5f0160019054906101000a900460ff16610dfd9190613eb7565b610e079190613eb7565b600d5f015f6101000a81548160ff021916908360ff16021790555082600d5f0160056101000a81548160ff021916908360ff16021790555081600d5f0160076101000a81548160ff021916908360ff16021790555080600d5f0160066101000a81548160ff021916908360ff160217905550600d5f0160069054906101000a900460ff16600d5f0160079054906101000a900460ff16600d5f0160059054906101000a900460ff16610eb99190613eb7565b610ec39190613eb7565b600d5f0160046101000a81548160ff021916908360ff160217905550602d600d5f015f9054906101000a900460ff1660ff161115610f36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2d90613f35565b60405180910390fd5b602d600d5f0160049054906101000a900460ff1660ff161115610f8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8590613f35565b60405180910390fd5b505050505050565b5f61103a610fa2612193565b846110358560015f610fb2612193565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612d6590919063ffffffff16565b61219a565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f60125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b5f6110c3612193565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611151576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114890613cb2565b60405180910390fd5b81600b8190555060019050919050565b600c60019054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6111c1612193565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461124f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124690613cb2565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611314612193565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139990613cb2565b60405180910390fd5b8060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b611402612193565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611490576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148790613cb2565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6114b4611517565b836040518363ffffffff1660e01b81526004016114d2929190613f53565b6020604051808303815f875af11580156114ee573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115129190613f8e565b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606004805461157390613c38565b80601f016020809104026020016040519081016040528092919081815260200182805461159f90613c38565b80156115ea5780601f106115c1576101008083540402835291602001916115ea565b820191905f5260205f20905b8154815290600101906020018083116115cd57829003601f168201915b5050505050905090565b6014602052805f5260405f205f915054906101000a900460ff1681565b611619612193565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169e90613cb2565b60405180910390fd5b6116af611517565b73ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f193505050501580156116f1573d5f803e3d5ffd5b5050565b60105481565b5f6117b9611707612193565b846117b4856040518060600160405280602581526020016147466025913960015f611730612193565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612d039092919063ffffffff16565b61219a565b6001905092915050565b5f6117d66117cf612193565b8484612281565b6001905092915050565b600c60029054906101000a900460ff1681565b6117fb612193565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611889576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188090613cb2565b60405180910390fd5b6001600c5f6101000a81548160ff0219169083151502179055506001600c60016101000a81548160ff0219169083151502179055506002436118cb9190613fb9565b601181905550565b6118db612193565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611969576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196090613cb2565b60405180910390fd5b8060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b6119c9612193565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4e90613cb2565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ae5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611adc90614036565b60405180910390fd5b8060155f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b611b45612193565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bca90613cb2565b60405180910390fd5b6064611bdd610bdf565b611be79190613d2a565b6103e882611bf3610bdf565b611bfd9190613d5a565b611c079190613d2a565b1015611c48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3f906140c4565b60405180910390fd5b6103e881611c54610bdf565b611c5e9190613d5a565b611c689190613d2a565b600a8190555050565b600d805f015f9054906101000a900460ff1690805f0160019054906101000a900460ff1690805f0160029054906101000a900460ff1690805f0160039054906101000a900460ff1690805f0160049054906101000a900460ff1690805f0160059054906101000a900460ff1690805f0160069054906101000a900460ff1690805f0160079054906101000a900460ff16905088565b611d0e612193565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9390613cb2565b60405180910390fd5b8160075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b611eaa612193565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2f90613cb2565b60405180910390fd5b8060145f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b611f98612193565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612026576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201d90613cb2565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612094576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208b90614152565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6015602052805f5260405f205f915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f33905090565b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161227491906138d2565b60405180910390a3505050565b5f81036122985761229383835f612dc2565b612cfe565b6122a0611517565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561230e57506122de611517565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123275750600c60029054906101000a900460ff16155b1561269757600c5f9054906101000a900460ff1661241a5760125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806123da575060125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612419576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612410906141ba565b60405180910390fd5b5b60155f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156124b7575060135f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561250657600854811115612501576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f890614222565b60405180910390fd5b6125ef565b60155f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156125a3575060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156125ee576009548111156125ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e49061428a565b60405180910390fd5b5b5b60145f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661269657600a5461264983611174565b826126549190613fb9565b1115612695576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268c906142f2565b60405180910390fd5b5b5b5f6126a130611174565b90505f600b5482101590508080156126c55750600c60019054906101000a900460ff165b80156126de5750600c60029054906101000a900460ff16155b8015612730575060155f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b8015612783575060125f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156127d6575060125f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612819576001600c60026101000a81548160ff0219169083151502179055506127fe612f64565b5f600c60026101000a81548160ff0219169083151502179055505b5f600c60029054906101000a900460ff1615905060125f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806128c8575060125f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b156128d1575f90505b8015612cef575f6011544310156129705761290960646128fb60638861323a90919063ffffffff16565b6132b190919063ffffffff16565b90506063605e8261291a9190613d5a565b6129249190613d2a565b600e5f8282546129349190613fb9565b92505081905550606360058261294a9190613d5a565b6129549190613d2a565b60105f8282546129649190613fb9565b92505081905550612ccb565b60155f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156129d957505f600d5f0160049054906101000a900460ff1660ff16115b15612b2157612a186064612a0a600d5f0160049054906101000a900460ff1660ff168861323a90919063ffffffff16565b6132b190919063ffffffff16565b9050600d5f0160049054906101000a900460ff1660ff16600d5f0160079054906101000a900460ff1660ff1682612a4f9190613d5a565b612a599190613d2a565b600f5f828254612a699190613fb9565b92505081905550600d5f0160049054906101000a900460ff1660ff16600d5f0160059054906101000a900460ff1660ff1682612aa59190613d5a565b612aaf9190613d2a565b600e5f828254612abf9190613fb9565b92505081905550600d5f0160049054906101000a900460ff1660ff16600d5f0160069054906101000a900460ff1660ff1682612afb9190613d5a565b612b059190613d2a565b60105f828254612b159190613fb9565b92505081905550612cca565b60155f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612b8957505f600d5f015f9054906101000a900460ff1660ff16115b15612cc957612bc76064612bb9600d5f015f9054906101000a900460ff1660ff168861323a90919063ffffffff16565b6132b190919063ffffffff16565b9050600d5f015f9054906101000a900460ff1660ff16600d5f0160039054906101000a900460ff1660ff1682612bfd9190613d5a565b612c079190613d2a565b600f5f828254612c179190613fb9565b92505081905550600d5f015f9054906101000a900460ff1660ff16600d5f0160019054906101000a900460ff1660ff1682612c529190613d5a565b612c5c9190613d2a565b600e5f828254612c6c9190613fb9565b92505081905550600d5f015f9054906101000a900460ff1660ff16600d5f0160029054906101000a900460ff1660ff1682612ca79190613d5a565b612cb19190613d2a565b60105f828254612cc19190613fb9565b925050819055505b5b5b5f811115612cdf57612cde873083612dc2565b5b8085612ceb9190614310565b9450505b612cfa868686612dc2565b5050505b505050565b5f838311158290612d4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d419190613738565b60405180910390fd5b505f8385612d589190614310565b9050809150509392505050565b5f808284612d739190613fb9565b905083811015612db8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612daf9061438d565b60405180910390fd5b8091505092915050565b612e2b8160405180606001604052806026815260200161476b602691395f808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612d039092919063ffffffff16565b5f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550612eba815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612d6590919063ffffffff16565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612f5791906138d2565b60405180910390a3505050565b5f612f6e30611174565b90505f601054600e54600f54612f849190613fb9565b612f8e9190613fb9565b90505f80831480612f9e57505f82145b15612fab57505050613238565b6014600b54612fba9190613d5a565b831115612fd3576014600b54612fd09190613d5a565b92505b5f600283600f5486612fe59190613d5a565b612fef9190613d2a565b612ff99190613d2a565b90505f61300f82866132fa90919063ffffffff16565b90505f47905061301e82613343565b5f61303282476132fa90919063ffffffff16565b90505f61305c8761304e600e548561323a90919063ffffffff16565b6132b190919063ffffffff16565b90505f613086886130786010548661323a90919063ffffffff16565b6132b190919063ffffffff16565b90505f81836130959190613fb9565b846130a09190614310565b90505f600f819055505f600e819055505f6010819055505f871180156130c557505f81115b1561310e576130d48782613576565b7f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f838148686826040516131059291906143ab565b60405180910390a15b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683476131529190614310565b60405161315e906143ff565b5f6040518083038185875af1925050503d805f8114613198576040519150601f19603f3d011682016040523d82523d5f602084013e61319d565b606091505b50508098505060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516131e8906143ff565b5f6040518083038185875af1925050503d805f8114613222576040519150601f19603f3d011682016040523d82523d5f602084013e613227565b606091505b505080985050505050505050505050505b565b5f80830361324a575f90506132ab565b5f82846132579190613d5a565b90508284826132669190613d2a565b146132a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161329d90614483565b60405180910390fd5b809150505b92915050565b5f6132f283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061364d565b905092915050565b5f61333b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612d03565b905092915050565b5f600267ffffffffffffffff81111561335f5761335e6144a1565b5b60405190808252806020026020018201604052801561338d5781602001602082028036833780820191505090505b50905030815f815181106133a4576133a36144ce565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613447573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061346b919061450f565b8160018151811061347f5761347e6144ce565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506134e4307f00000000000000000000000000000000000000000000000000000000000000008461219a565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b815260040161354595949392919061462a565b5f604051808303815f87803b15801561355c575f80fd5b505af115801561356e573d5f803e3d5ffd5b505050505050565b6135a1307f00000000000000000000000000000000000000000000000000000000000000008461219a565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8030426040518863ffffffff1660e01b815260040161360596959493929190614682565b60606040518083038185885af1158015613621573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061364691906146f5565b5050505050565b5f8083118290613693576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161368a9190613738565b60405180910390fd5b505f83856136a19190613d2a565b9050809150509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156136e55780820151818401526020810190506136ca565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61370a826136ae565b61371481856136b8565b93506137248185602086016136c8565b61372d816136f0565b840191505092915050565b5f6020820190508181035f8301526137508184613700565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6137858261375c565b9050919050565b6137958161377b565b811461379f575f80fd5b50565b5f813590506137b08161378c565b92915050565b5f819050919050565b6137c8816137b6565b81146137d2575f80fd5b50565b5f813590506137e3816137bf565b92915050565b5f80604083850312156137ff576137fe613758565b5b5f61380c858286016137a2565b925050602061381d858286016137d5565b9150509250929050565b5f8115159050919050565b61383b81613827565b82525050565b5f6020820190506138545f830184613832565b92915050565b5f6020828403121561386f5761386e613758565b5b5f61387c848285016137a2565b91505092915050565b5f806040838503121561389b5761389a613758565b5b5f6138a8858286016137d5565b92505060206138b9858286016137d5565b9150509250929050565b6138cc816137b6565b82525050565b5f6020820190506138e55f8301846138c3565b92915050565b5f805f6060848603121561390257613901613758565b5b5f61390f868287016137a2565b9350506020613920868287016137a2565b9250506040613931868287016137d5565b9150509250925092565b5f60ff82169050919050565b6139508161393b565b82525050565b5f6020820190506139695f830184613947565b92915050565b6139788161393b565b8114613982575f80fd5b50565b5f813590506139938161396f565b92915050565b5f805f805f8060c087890312156139b3576139b2613758565b5b5f6139c089828a01613985565b96505060206139d189828a01613985565b95505060406139e289828a01613985565b94505060606139f389828a01613985565b9350506080613a0489828a01613985565b92505060a0613a1589828a01613985565b9150509295509295509295565b613a2b8161377b565b82525050565b5f602082019050613a445f830184613a22565b92915050565b5f60208284031215613a5f57613a5e613758565b5b5f613a6c848285016137d5565b91505092915050565b613a7e81613827565b8114613a88575f80fd5b50565b5f81359050613a9981613a75565b92915050565b5f8060408385031215613ab557613ab4613758565b5b5f613ac2858286016137a2565b9250506020613ad385828601613a8b565b9150509250929050565b5f61010082019050613af15f83018b613947565b613afe602083018a613947565b613b0b6040830189613947565b613b186060830188613947565b613b256080830187613947565b613b3260a0830186613947565b613b3f60c0830185613947565b613b4c60e0830184613947565b9998505050505050505050565b5f8060408385031215613b6f57613b6e613758565b5b5f613b7c858286016137a2565b9250506020613b8d858286016137a2565b9150509250929050565b5f819050919050565b5f613bba613bb5613bb08461375c565b613b97565b61375c565b9050919050565b5f613bcb82613ba0565b9050919050565b5f613bdc82613bc1565b9050919050565b613bec81613bd2565b82525050565b5f602082019050613c055f830184613be3565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613c4f57607f821691505b602082108103613c6257613c61613c0b565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613c9c6020836136b8565b9150613ca782613c68565b602082019050919050565b5f6020820190508181035f830152613cc981613c90565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613d34826137b6565b9150613d3f836137b6565b925082613d4f57613d4e613cd0565b5b828204905092915050565b5f613d64826137b6565b9150613d6f836137b6565b9250828202613d7d816137b6565b91508282048414831517613d9457613d93613cfd565b5b5092915050565b7f6d6178427579416d6f756e74206d75737420626520686967686572207468616e5f8201527f2031250000000000000000000000000000000000000000000000000000000000602082015250565b5f613df56023836136b8565b9150613e0082613d9b565b604082019050919050565b5f6020820190508181035f830152613e2281613de9565b9050919050565b7f6d617853656c6c416d6f756e74206d75737420626520686967686572207468615f8201527f6e20312500000000000000000000000000000000000000000000000000000000602082015250565b5f613e836024836136b8565b9150613e8e82613e29565b604082019050919050565b5f6020820190508181035f830152613eb081613e77565b9050919050565b5f613ec18261393b565b9150613ecc8361393b565b9250828201905060ff811115613ee557613ee4613cfd565b5b92915050565b7f4d757374206b656570206665657320617420333025206f72206c6573730000005f82015250565b5f613f1f601d836136b8565b9150613f2a82613eeb565b602082019050919050565b5f6020820190508181035f830152613f4c81613f13565b9050919050565b5f604082019050613f665f830185613a22565b613f7360208301846138c3565b9392505050565b5f81519050613f8881613a75565b92915050565b5f60208284031215613fa357613fa2613758565b5b5f613fb084828501613f7a565b91505092915050565b5f613fc3826137b6565b9150613fce836137b6565b9250828201905080821115613fe657613fe5613cfd565b5b92915050565b7f4d757374206b65657020756e69737761705632506169720000000000000000005f82015250565b5f6140206017836136b8565b915061402b82613fec565b602082019050919050565b5f6020820190508181035f83015261404d81614014565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b5f6140ae6022836136b8565b91506140b982614054565b604082019050919050565b5f6020820190508181035f8301526140db816140a2565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f61413c6026836136b8565b9150614147826140e2565b604082019050919050565b5f6020820190508181035f83015261416981614130565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f6141a46016836136b8565b91506141af82614170565b602082019050919050565b5f6020820190508181035f8301526141d181614198565b9050919050565b7f627579207472616e73666572206f766572206d617820616d6f756e74000000005f82015250565b5f61420c601c836136b8565b9150614217826141d8565b602082019050919050565b5f6020820190508181035f83015261423981614200565b9050919050565b7f53656c6c207472616e73666572206f766572206d617820616d6f756e740000005f82015250565b5f614274601d836136b8565b915061427f82614240565b602082019050919050565b5f6020820190508181035f8301526142a181614268565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f6142dc6013836136b8565b91506142e7826142a8565b602082019050919050565b5f6020820190508181035f830152614309816142d0565b9050919050565b5f61431a826137b6565b9150614325836137b6565b925082820390508181111561433d5761433c613cfd565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f614377601b836136b8565b915061438282614343565b602082019050919050565b5f6020820190508181035f8301526143a48161436b565b9050919050565b5f6040820190506143be5f8301856138c3565b6143cb60208301846138c3565b9392505050565b5f81905092915050565b50565b5f6143ea5f836143d2565b91506143f5826143dc565b5f82019050919050565b5f614409826143df565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f61446d6021836136b8565b915061447882614413565b604082019050919050565b5f6020820190508181035f83015261449a81614461565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f815190506145098161378c565b92915050565b5f6020828403121561452457614523613758565b5b5f614531848285016144fb565b91505092915050565b5f819050919050565b5f61455d6145586145538461453a565b613b97565b6137b6565b9050919050565b61456d81614543565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6145a58161377b565b82525050565b5f6145b6838361459c565b60208301905092915050565b5f602082019050919050565b5f6145d882614573565b6145e2818561457d565b93506145ed8361458d565b805f5b8381101561461d57815161460488826145ab565b975061460f836145c2565b9250506001810190506145f0565b5085935050505092915050565b5f60a08201905061463d5f8301886138c3565b61464a6020830187614564565b818103604083015261465c81866145ce565b905061466b6060830185613a22565b61467860808301846138c3565b9695505050505050565b5f60c0820190506146955f830189613a22565b6146a260208301886138c3565b6146af6040830187614564565b6146bc6060830186614564565b6146c96080830185613a22565b6146d660a08301846138c3565b979650505050505050565b5f815190506146ef816137bf565b92915050565b5f805f6060848603121561470c5761470b613758565b5b5f614719868287016146e1565b935050602061472a868287016146e1565b925050604061473b868287016146e1565b915050925092509256fe45524332303a206465637265617365642063616e6e6f742062652062656c6f77207a65726f45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a264697066735822122072d31b22cfa8dc0b2953df5a9821ad5c41b80805c6275ab9218c6408118bf53a64736f6c63430008150033

Deployed Bytecode

0x608060405260043610610233575f3560e01c80638da5cb5b1161012d578063c0246668116100aa578063dd62ed3e1161006e578063dd62ed3e14610853578063e16830a81461088f578063f2fde38b146108b7578063f5b3c3bf146108df578063f887ea401461091b5761023a565b8063c024666814610782578063c16dd4a4146107aa578063c18bc195146107d2578063d212a69a146107fa578063d3f6a1571461082b5761023a565b80639fccce32116100f15780639fccce32146106a0578063a457c2d7146106ca578063a9059cbb14610706578063b886311514610742578063b9e418e71461076c5761023a565b80638da5cb5b146105be5780638ea5220f146105e857806395d89b411461061257806396880b171461063c5780639e252f00146106785761023a565b80633265e846116101bb5780636ddd17131161017f5780636ddd1713146104f257806370a082311461051c578063715018a6146105585780637571336a1461056e5780638cd4426d146105965761023a565b80633265e846146103ec578063395093511461041457806349bd5a5e146104505780634fbee1931461047a578063555467a1146104b65761023a565b806318160ddd1161020257806318160ddd146103085780631a8145bb146103325780631f3fed8f1461035c57806323b872dd14610386578063313ce567146103c25761023a565b806306fdde031461023e578063095ea7b31461026857806310d5de53146102a457806311a582c3146102e05761023a565b3661023a57005b5f80fd5b348015610249575f80fd5b50610252610945565b60405161025f9190613738565b60405180910390f35b348015610273575f80fd5b5061028e600480360381019061028991906137e9565b6109d5565b60405161029b9190613841565b60405180910390f35b3480156102af575f80fd5b506102ca60048036038101906102c5919061385a565b6109f2565b6040516102d79190613841565b60405180910390f35b3480156102eb575f80fd5b5061030660048036038101906103019190613885565b610a0f565b005b348015610313575f80fd5b5061031c610bdf565b60405161032991906138d2565b60405180910390f35b34801561033d575f80fd5b50610346610be8565b60405161035391906138d2565b60405180910390f35b348015610367575f80fd5b50610370610bee565b60405161037d91906138d2565b60405180910390f35b348015610391575f80fd5b506103ac60048036038101906103a791906138eb565b610bf4565b6040516103b99190613841565b60405180910390f35b3480156103cd575f80fd5b506103d6610cc8565b6040516103e39190613956565b60405180910390f35b3480156103f7575f80fd5b50610412600480360381019061040d9190613999565b610cd0565b005b34801561041f575f80fd5b5061043a600480360381019061043591906137e9565b610f96565b6040516104479190613841565b60405180910390f35b34801561045b575f80fd5b50610464611044565b6040516104719190613a31565b60405180910390f35b348015610485575f80fd5b506104a0600480360381019061049b919061385a565b611068565b6040516104ad9190613841565b60405180910390f35b3480156104c1575f80fd5b506104dc60048036038101906104d79190613a4a565b6110ba565b6040516104e99190613841565b60405180910390f35b3480156104fd575f80fd5b50610506611161565b6040516105139190613841565b60405180910390f35b348015610527575f80fd5b50610542600480360381019061053d919061385a565b611174565b60405161054f91906138d2565b60405180910390f35b348015610563575f80fd5b5061056c6111b9565b005b348015610579575f80fd5b50610594600480360381019061058f9190613a9f565b61130c565b005b3480156105a1575f80fd5b506105bc60048036038101906105b791906137e9565b6113fa565b005b3480156105c9575f80fd5b506105d2611517565b6040516105df9190613a31565b60405180910390f35b3480156105f3575f80fd5b506105fc61153f565b6040516106099190613a31565b60405180910390f35b34801561061d575f80fd5b50610626611564565b6040516106339190613738565b60405180910390f35b348015610647575f80fd5b50610662600480360381019061065d919061385a565b6115f4565b60405161066f9190613841565b60405180910390f35b348015610683575f80fd5b5061069e60048036038101906106999190613a4a565b611611565b005b3480156106ab575f80fd5b506106b46116f5565b6040516106c191906138d2565b60405180910390f35b3480156106d5575f80fd5b506106f060048036038101906106eb91906137e9565b6116fb565b6040516106fd9190613841565b60405180910390f35b348015610711575f80fd5b5061072c600480360381019061072791906137e9565b6117c3565b6040516107399190613841565b60405180910390f35b34801561074d575f80fd5b506107566117e0565b6040516107639190613841565b60405180910390f35b348015610777575f80fd5b506107806117f3565b005b34801561078d575f80fd5b506107a860048036038101906107a39190613a9f565b6118d3565b005b3480156107b5575f80fd5b506107d060048036038101906107cb9190613a9f565b6119c1565b005b3480156107dd575f80fd5b506107f860048036038101906107f39190613a4a565b611b3d565b005b348015610805575f80fd5b5061080e611c71565b604051610822989796959493929190613add565b60405180910390f35b348015610836575f80fd5b50610851600480360381019061084c9190613b59565b611d06565b005b34801561085e575f80fd5b5061087960048036038101906108749190613b59565b611e20565b60405161088691906138d2565b60405180910390f35b34801561089a575f80fd5b506108b560048036038101906108b09190613a9f565b611ea2565b005b3480156108c2575f80fd5b506108dd60048036038101906108d8919061385a565b611f90565b005b3480156108ea575f80fd5b506109056004803603810190610900919061385a565b612152565b6040516109129190613841565b60405180910390f35b348015610926575f80fd5b5061092f61216f565b60405161093c9190613bf2565b60405180910390f35b60606003805461095490613c38565b80601f016020809104026020016040519081016040528092919081815260200182805461098090613c38565b80156109cb5780601f106109a2576101008083540402835291602001916109cb565b820191905f5260205f20905b8154815290600101906020018083116109ae57829003601f168201915b5050505050905090565b5f6109e86109e1612193565b848461219a565b6001905092915050565b6013602052805f5260405f205f915054906101000a900460ff1681565b610a17612193565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610aa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9c90613cb2565b60405180910390fd5b6064610aaf610bdf565b610ab99190613d2a565b6103e883610ac5610bdf565b610acf9190613d5a565b610ad99190613d2a565b1015610b1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1190613e0b565b60405180910390fd5b6064610b24610bdf565b610b2e9190613d2a565b6103e882610b3a610bdf565b610b449190613d5a565b610b4e9190613d2a565b1015610b8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8690613e99565b60405180910390fd5b6103e882610b9b610bdf565b610ba59190613d5a565b610baf9190613d2a565b6008819055506103e881610bc1610bdf565b610bcb9190613d5a565b610bd59190613d2a565b6009819055505050565b5f600254905090565b600f5481565b600e5481565b5f610c00848484612281565b610cbd84610c0c612193565b610cb8856040518060600160405280602881526020016147916028913960015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610c6f612193565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612d039092919063ffffffff16565b61219a565b600190509392505050565b5f6012905090565b610cd8612193565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5d90613cb2565b60405180910390fd5b85600d5f0160016101000a81548160ff021916908360ff16021790555084600d5f0160036101000a81548160ff021916908360ff16021790555083600d5f0160026101000a81548160ff021916908360ff160217905550600d5f0160029054906101000a900460ff16600d5f0160039054906101000a900460ff16600d5f0160019054906101000a900460ff16610dfd9190613eb7565b610e079190613eb7565b600d5f015f6101000a81548160ff021916908360ff16021790555082600d5f0160056101000a81548160ff021916908360ff16021790555081600d5f0160076101000a81548160ff021916908360ff16021790555080600d5f0160066101000a81548160ff021916908360ff160217905550600d5f0160069054906101000a900460ff16600d5f0160079054906101000a900460ff16600d5f0160059054906101000a900460ff16610eb99190613eb7565b610ec39190613eb7565b600d5f0160046101000a81548160ff021916908360ff160217905550602d600d5f015f9054906101000a900460ff1660ff161115610f36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2d90613f35565b60405180910390fd5b602d600d5f0160049054906101000a900460ff1660ff161115610f8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8590613f35565b60405180910390fd5b505050505050565b5f61103a610fa2612193565b846110358560015f610fb2612193565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612d6590919063ffffffff16565b61219a565b6001905092915050565b7f0000000000000000000000007d82726d244e18c351681aef2044747b4e155c2d81565b5f60125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b5f6110c3612193565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611151576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114890613cb2565b60405180910390fd5b81600b8190555060019050919050565b600c60019054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6111c1612193565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461124f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124690613cb2565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611314612193565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139990613cb2565b60405180910390fd5b8060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b611402612193565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611490576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148790613cb2565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6114b4611517565b836040518363ffffffff1660e01b81526004016114d2929190613f53565b6020604051808303815f875af11580156114ee573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115129190613f8e565b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606004805461157390613c38565b80601f016020809104026020016040519081016040528092919081815260200182805461159f90613c38565b80156115ea5780601f106115c1576101008083540402835291602001916115ea565b820191905f5260205f20905b8154815290600101906020018083116115cd57829003601f168201915b5050505050905090565b6014602052805f5260405f205f915054906101000a900460ff1681565b611619612193565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169e90613cb2565b60405180910390fd5b6116af611517565b73ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f193505050501580156116f1573d5f803e3d5ffd5b5050565b60105481565b5f6117b9611707612193565b846117b4856040518060600160405280602581526020016147466025913960015f611730612193565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612d039092919063ffffffff16565b61219a565b6001905092915050565b5f6117d66117cf612193565b8484612281565b6001905092915050565b600c60029054906101000a900460ff1681565b6117fb612193565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611889576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188090613cb2565b60405180910390fd5b6001600c5f6101000a81548160ff0219169083151502179055506001600c60016101000a81548160ff0219169083151502179055506002436118cb9190613fb9565b601181905550565b6118db612193565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611969576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196090613cb2565b60405180910390fd5b8060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b6119c9612193565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4e90613cb2565b60405180910390fd5b7f0000000000000000000000007d82726d244e18c351681aef2044747b4e155c2d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ae5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611adc90614036565b60405180910390fd5b8060155f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b611b45612193565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bca90613cb2565b60405180910390fd5b6064611bdd610bdf565b611be79190613d2a565b6103e882611bf3610bdf565b611bfd9190613d5a565b611c079190613d2a565b1015611c48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3f906140c4565b60405180910390fd5b6103e881611c54610bdf565b611c5e9190613d5a565b611c689190613d2a565b600a8190555050565b600d805f015f9054906101000a900460ff1690805f0160019054906101000a900460ff1690805f0160029054906101000a900460ff1690805f0160039054906101000a900460ff1690805f0160049054906101000a900460ff1690805f0160059054906101000a900460ff1690805f0160069054906101000a900460ff1690805f0160079054906101000a900460ff16905088565b611d0e612193565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9390613cb2565b60405180910390fd5b8160075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b611eaa612193565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2f90613cb2565b60405180910390fd5b8060145f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b611f98612193565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612026576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201d90613cb2565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612094576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208b90614152565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6015602052805f5260405f205f915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b5f33905090565b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161227491906138d2565b60405180910390a3505050565b5f81036122985761229383835f612dc2565b612cfe565b6122a0611517565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561230e57506122de611517565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123275750600c60029054906101000a900460ff16155b1561269757600c5f9054906101000a900460ff1661241a5760125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806123da575060125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612419576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612410906141ba565b60405180910390fd5b5b60155f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156124b7575060135f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561250657600854811115612501576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f890614222565b60405180910390fd5b6125ef565b60155f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156125a3575060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156125ee576009548111156125ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e49061428a565b60405180910390fd5b5b5b60145f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661269657600a5461264983611174565b826126549190613fb9565b1115612695576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268c906142f2565b60405180910390fd5b5b5b5f6126a130611174565b90505f600b5482101590508080156126c55750600c60019054906101000a900460ff165b80156126de5750600c60029054906101000a900460ff16155b8015612730575060155f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b8015612783575060125f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156127d6575060125f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612819576001600c60026101000a81548160ff0219169083151502179055506127fe612f64565b5f600c60026101000a81548160ff0219169083151502179055505b5f600c60029054906101000a900460ff1615905060125f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806128c8575060125f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b156128d1575f90505b8015612cef575f6011544310156129705761290960646128fb60638861323a90919063ffffffff16565b6132b190919063ffffffff16565b90506063605e8261291a9190613d5a565b6129249190613d2a565b600e5f8282546129349190613fb9565b92505081905550606360058261294a9190613d5a565b6129549190613d2a565b60105f8282546129649190613fb9565b92505081905550612ccb565b60155f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156129d957505f600d5f0160049054906101000a900460ff1660ff16115b15612b2157612a186064612a0a600d5f0160049054906101000a900460ff1660ff168861323a90919063ffffffff16565b6132b190919063ffffffff16565b9050600d5f0160049054906101000a900460ff1660ff16600d5f0160079054906101000a900460ff1660ff1682612a4f9190613d5a565b612a599190613d2a565b600f5f828254612a699190613fb9565b92505081905550600d5f0160049054906101000a900460ff1660ff16600d5f0160059054906101000a900460ff1660ff1682612aa59190613d5a565b612aaf9190613d2a565b600e5f828254612abf9190613fb9565b92505081905550600d5f0160049054906101000a900460ff1660ff16600d5f0160069054906101000a900460ff1660ff1682612afb9190613d5a565b612b059190613d2a565b60105f828254612b159190613fb9565b92505081905550612cca565b60155f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612b8957505f600d5f015f9054906101000a900460ff1660ff16115b15612cc957612bc76064612bb9600d5f015f9054906101000a900460ff1660ff168861323a90919063ffffffff16565b6132b190919063ffffffff16565b9050600d5f015f9054906101000a900460ff1660ff16600d5f0160039054906101000a900460ff1660ff1682612bfd9190613d5a565b612c079190613d2a565b600f5f828254612c179190613fb9565b92505081905550600d5f015f9054906101000a900460ff1660ff16600d5f0160019054906101000a900460ff1660ff1682612c529190613d5a565b612c5c9190613d2a565b600e5f828254612c6c9190613fb9565b92505081905550600d5f015f9054906101000a900460ff1660ff16600d5f0160029054906101000a900460ff1660ff1682612ca79190613d5a565b612cb19190613d2a565b60105f828254612cc19190613fb9565b925050819055505b5b5b5f811115612cdf57612cde873083612dc2565b5b8085612ceb9190614310565b9450505b612cfa868686612dc2565b5050505b505050565b5f838311158290612d4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d419190613738565b60405180910390fd5b505f8385612d589190614310565b9050809150509392505050565b5f808284612d739190613fb9565b905083811015612db8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612daf9061438d565b60405180910390fd5b8091505092915050565b612e2b8160405180606001604052806026815260200161476b602691395f808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612d039092919063ffffffff16565b5f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550612eba815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612d6590919063ffffffff16565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612f5791906138d2565b60405180910390a3505050565b5f612f6e30611174565b90505f601054600e54600f54612f849190613fb9565b612f8e9190613fb9565b90505f80831480612f9e57505f82145b15612fab57505050613238565b6014600b54612fba9190613d5a565b831115612fd3576014600b54612fd09190613d5a565b92505b5f600283600f5486612fe59190613d5a565b612fef9190613d2a565b612ff99190613d2a565b90505f61300f82866132fa90919063ffffffff16565b90505f47905061301e82613343565b5f61303282476132fa90919063ffffffff16565b90505f61305c8761304e600e548561323a90919063ffffffff16565b6132b190919063ffffffff16565b90505f613086886130786010548661323a90919063ffffffff16565b6132b190919063ffffffff16565b90505f81836130959190613fb9565b846130a09190614310565b90505f600f819055505f600e819055505f6010819055505f871180156130c557505f81115b1561310e576130d48782613576565b7f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f838148686826040516131059291906143ab565b60405180910390a15b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683476131529190614310565b60405161315e906143ff565b5f6040518083038185875af1925050503d805f8114613198576040519150601f19603f3d011682016040523d82523d5f602084013e61319d565b606091505b50508098505060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516131e8906143ff565b5f6040518083038185875af1925050503d805f8114613222576040519150601f19603f3d011682016040523d82523d5f602084013e613227565b606091505b505080985050505050505050505050505b565b5f80830361324a575f90506132ab565b5f82846132579190613d5a565b90508284826132669190613d2a565b146132a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161329d90614483565b60405180910390fd5b809150505b92915050565b5f6132f283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061364d565b905092915050565b5f61333b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612d03565b905092915050565b5f600267ffffffffffffffff81111561335f5761335e6144a1565b5b60405190808252806020026020018201604052801561338d5781602001602082028036833780820191505090505b50905030815f815181106133a4576133a36144ce565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613447573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061346b919061450f565b8160018151811061347f5761347e6144ce565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506134e4307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461219a565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b815260040161354595949392919061462a565b5f604051808303815f87803b15801561355c575f80fd5b505af115801561356e573d5f803e3d5ffd5b505050505050565b6135a1307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461219a565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8030426040518863ffffffff1660e01b815260040161360596959493929190614682565b60606040518083038185885af1158015613621573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061364691906146f5565b5050505050565b5f8083118290613693576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161368a9190613738565b60405180910390fd5b505f83856136a19190613d2a565b9050809150509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156136e55780820151818401526020810190506136ca565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61370a826136ae565b61371481856136b8565b93506137248185602086016136c8565b61372d816136f0565b840191505092915050565b5f6020820190508181035f8301526137508184613700565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6137858261375c565b9050919050565b6137958161377b565b811461379f575f80fd5b50565b5f813590506137b08161378c565b92915050565b5f819050919050565b6137c8816137b6565b81146137d2575f80fd5b50565b5f813590506137e3816137bf565b92915050565b5f80604083850312156137ff576137fe613758565b5b5f61380c858286016137a2565b925050602061381d858286016137d5565b9150509250929050565b5f8115159050919050565b61383b81613827565b82525050565b5f6020820190506138545f830184613832565b92915050565b5f6020828403121561386f5761386e613758565b5b5f61387c848285016137a2565b91505092915050565b5f806040838503121561389b5761389a613758565b5b5f6138a8858286016137d5565b92505060206138b9858286016137d5565b9150509250929050565b6138cc816137b6565b82525050565b5f6020820190506138e55f8301846138c3565b92915050565b5f805f6060848603121561390257613901613758565b5b5f61390f868287016137a2565b9350506020613920868287016137a2565b9250506040613931868287016137d5565b9150509250925092565b5f60ff82169050919050565b6139508161393b565b82525050565b5f6020820190506139695f830184613947565b92915050565b6139788161393b565b8114613982575f80fd5b50565b5f813590506139938161396f565b92915050565b5f805f805f8060c087890312156139b3576139b2613758565b5b5f6139c089828a01613985565b96505060206139d189828a01613985565b95505060406139e289828a01613985565b94505060606139f389828a01613985565b9350506080613a0489828a01613985565b92505060a0613a1589828a01613985565b9150509295509295509295565b613a2b8161377b565b82525050565b5f602082019050613a445f830184613a22565b92915050565b5f60208284031215613a5f57613a5e613758565b5b5f613a6c848285016137d5565b91505092915050565b613a7e81613827565b8114613a88575f80fd5b50565b5f81359050613a9981613a75565b92915050565b5f8060408385031215613ab557613ab4613758565b5b5f613ac2858286016137a2565b9250506020613ad385828601613a8b565b9150509250929050565b5f61010082019050613af15f83018b613947565b613afe602083018a613947565b613b0b6040830189613947565b613b186060830188613947565b613b256080830187613947565b613b3260a0830186613947565b613b3f60c0830185613947565b613b4c60e0830184613947565b9998505050505050505050565b5f8060408385031215613b6f57613b6e613758565b5b5f613b7c858286016137a2565b9250506020613b8d858286016137a2565b9150509250929050565b5f819050919050565b5f613bba613bb5613bb08461375c565b613b97565b61375c565b9050919050565b5f613bcb82613ba0565b9050919050565b5f613bdc82613bc1565b9050919050565b613bec81613bd2565b82525050565b5f602082019050613c055f830184613be3565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613c4f57607f821691505b602082108103613c6257613c61613c0b565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613c9c6020836136b8565b9150613ca782613c68565b602082019050919050565b5f6020820190508181035f830152613cc981613c90565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613d34826137b6565b9150613d3f836137b6565b925082613d4f57613d4e613cd0565b5b828204905092915050565b5f613d64826137b6565b9150613d6f836137b6565b9250828202613d7d816137b6565b91508282048414831517613d9457613d93613cfd565b5b5092915050565b7f6d6178427579416d6f756e74206d75737420626520686967686572207468616e5f8201527f2031250000000000000000000000000000000000000000000000000000000000602082015250565b5f613df56023836136b8565b9150613e0082613d9b565b604082019050919050565b5f6020820190508181035f830152613e2281613de9565b9050919050565b7f6d617853656c6c416d6f756e74206d75737420626520686967686572207468615f8201527f6e20312500000000000000000000000000000000000000000000000000000000602082015250565b5f613e836024836136b8565b9150613e8e82613e29565b604082019050919050565b5f6020820190508181035f830152613eb081613e77565b9050919050565b5f613ec18261393b565b9150613ecc8361393b565b9250828201905060ff811115613ee557613ee4613cfd565b5b92915050565b7f4d757374206b656570206665657320617420333025206f72206c6573730000005f82015250565b5f613f1f601d836136b8565b9150613f2a82613eeb565b602082019050919050565b5f6020820190508181035f830152613f4c81613f13565b9050919050565b5f604082019050613f665f830185613a22565b613f7360208301846138c3565b9392505050565b5f81519050613f8881613a75565b92915050565b5f60208284031215613fa357613fa2613758565b5b5f613fb084828501613f7a565b91505092915050565b5f613fc3826137b6565b9150613fce836137b6565b9250828201905080821115613fe657613fe5613cfd565b5b92915050565b7f4d757374206b65657020756e69737761705632506169720000000000000000005f82015250565b5f6140206017836136b8565b915061402b82613fec565b602082019050919050565b5f6020820190508181035f83015261404d81614014565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b5f6140ae6022836136b8565b91506140b982614054565b604082019050919050565b5f6020820190508181035f8301526140db816140a2565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f61413c6026836136b8565b9150614147826140e2565b604082019050919050565b5f6020820190508181035f83015261416981614130565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f6141a46016836136b8565b91506141af82614170565b602082019050919050565b5f6020820190508181035f8301526141d181614198565b9050919050565b7f627579207472616e73666572206f766572206d617820616d6f756e74000000005f82015250565b5f61420c601c836136b8565b9150614217826141d8565b602082019050919050565b5f6020820190508181035f83015261423981614200565b9050919050565b7f53656c6c207472616e73666572206f766572206d617820616d6f756e740000005f82015250565b5f614274601d836136b8565b915061427f82614240565b602082019050919050565b5f6020820190508181035f8301526142a181614268565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f6142dc6013836136b8565b91506142e7826142a8565b602082019050919050565b5f6020820190508181035f830152614309816142d0565b9050919050565b5f61431a826137b6565b9150614325836137b6565b925082820390508181111561433d5761433c613cfd565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f614377601b836136b8565b915061438282614343565b602082019050919050565b5f6020820190508181035f8301526143a48161436b565b9050919050565b5f6040820190506143be5f8301856138c3565b6143cb60208301846138c3565b9392505050565b5f81905092915050565b50565b5f6143ea5f836143d2565b91506143f5826143dc565b5f82019050919050565b5f614409826143df565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f61446d6021836136b8565b915061447882614413565b604082019050919050565b5f6020820190508181035f83015261449a81614461565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f815190506145098161378c565b92915050565b5f6020828403121561452457614523613758565b5b5f614531848285016144fb565b91505092915050565b5f819050919050565b5f61455d6145586145538461453a565b613b97565b6137b6565b9050919050565b61456d81614543565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6145a58161377b565b82525050565b5f6145b6838361459c565b60208301905092915050565b5f602082019050919050565b5f6145d882614573565b6145e2818561457d565b93506145ed8361458d565b805f5b8381101561461d57815161460488826145ab565b975061460f836145c2565b9250506001810190506145f0565b5085935050505092915050565b5f60a08201905061463d5f8301886138c3565b61464a6020830187614564565b818103604083015261465c81866145ce565b905061466b6060830185613a22565b61467860808301846138c3565b9695505050505050565b5f60c0820190506146955f830189613a22565b6146a260208301886138c3565b6146af6040830187614564565b6146bc6060830186614564565b6146c96080830185613a22565b6146d660a08301846138c3565b979650505050505050565b5f815190506146ef816137bf565b92915050565b5f805f6060848603121561470c5761470b613758565b5b5f614719868287016146e1565b935050602061472a868287016146e1565b925050604061473b868287016146e1565b915050925092509256fe45524332303a206465637265617365642063616e6e6f742062652062656c6f77207a65726f45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a264697066735822122072d31b22cfa8dc0b2953df5a9821ad5c41b80805c6275ab9218c6408118bf53a64736f6c63430008150033

Deployed Bytecode Sourcemap

13939:12992:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1921:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2856:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15326:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18394:458;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2251:107;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15110:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15070;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3036:354;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2147:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19144:824;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3402:217;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14077:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21049:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18224:158;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14453:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2370:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6906:148;;;;;;;;;;;;;:::i;:::-;;20267:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20727:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6603:78;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14146:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2032:103;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15396:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20606:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15150:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3631:268;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2508:174;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14491:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18004:143;;;;;;;;;;;;;:::i;:::-;;19977:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20423:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18864:271;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14802:252;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;20871:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2694:150;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20115:146;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7066:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15613:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14028;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1921:99;1974:13;2007:5;2000:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1921:99;:::o;2856:168::-;2938:4;2955:39;2964:12;:10;:12::i;:::-;2978:7;2987:6;2955:8;:39::i;:::-;3012:4;3005:11;;2856:168;;;;:::o;15326:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;18394:458::-;6825:12;:10;:12::i;:::-;6815:22;;:6;;;;;;;;;;;:22;;;6807:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18556:3:::1;18540:13;:11;:13::i;:::-;:19;;;;:::i;:::-;18530:4;18517:9;18501:13;:11;:13::i;:::-;:25;;;;:::i;:::-;18500:34;;;;:::i;:::-;18499:61;;18491:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;18677:3;18661:13;:11;:13::i;:::-;:19;;;;:::i;:::-;18651:4;18637:10;18621:13;:11;:13::i;:::-;:26;;;;:::i;:::-;18620:35;;;;:::i;:::-;18619:62;;18611:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;18778:4;18765:9;18749:13;:11;:13::i;:::-;:25;;;;:::i;:::-;18748:34;;;;:::i;:::-;18733:12;:49;;;;18840:4;18826:10;18810:13;:11;:13::i;:::-;:26;;;;:::i;:::-;18809:35;;;;:::i;:::-;18793:13;:51;;;;18394:458:::0;;:::o;2251:107::-;2311:7;2338:12;;2331:19;;2251:107;:::o;15110:33::-;;;;:::o;15070:::-;;;;:::o;3036:354::-;3175:4;3192:36;3202:6;3210:9;3221:6;3192:9;:36::i;:::-;3239:121;3248:6;3256:12;:10;:12::i;:::-;3270:89;3308:6;3270:89;;;;;;;;;;;;;;;;;:11;:19;3282:6;3270:19;;;;;;;;;;;;;;;:33;3290:12;:10;:12::i;:::-;3270:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;3239:8;:121::i;:::-;3378:4;3371:11;;3036:354;;;;;:::o;2147:92::-;2204:5;2229:2;2222:9;;2147:92;:::o;19144:824::-;6825:12;:10;:12::i;:::-;6815:22;;:6;;;;;;;;;;;:22;;;6807:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19349:16:::1;19325:5;:21;;;:40;;;;;;;;;;;;;;;;;;19400:16;19376:5;:21;;;:40;;;;;;;;;;;;;;;;;;19445:10;19427:5;:15;;;:28;;;;;;;;;;;;;;;;;;19535:5;:15;;;;;;;;;;;;19511:5;:21;;;;;;;;;;;;19487:5;:21;;;;;;;;;;;;:45;;;;:::i;:::-;:63;;;;:::i;:::-;19466:5;:18;;;:84;;;;;;;;;;;;;;;;;;19589:17;19564:5;:22;;;:42;;;;;;;;;;;;;;;;;;19642:17;19617:5;:22;;;:42;;;;;;;;;;;;;;;;;;19689:11;19670:5;:16;;;:30;;;;;;;;;;;;;;;;;;19783:5;:16;;;;;;;;;;;;19758:5;:22;;;;;;;;;;;;19733:5;:22;;;;;;;;;;;;:47;;;;:::i;:::-;:66;;;;:::i;:::-;19711:5;:19;;;:88;;;;;;;;;;;;;;;;;;19840:2;19818:5;:18;;;;;;;;;;;;:24;;;;19810:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;19921:2;19898:5;:19;;;;;;;;;;;;:25;;;;19890:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19144:824:::0;;;;;;:::o;3402:217::-;3489:4;3506:83;3515:12;:10;:12::i;:::-;3529:7;3538:50;3577:10;3538:11;:25;3550:12;:10;:12::i;:::-;3538:25;;;;;;;;;;;;;;;:34;3564:7;3538:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;3506:8;:83::i;:::-;3607:4;3600:11;;3402:217;;;;:::o;14077:38::-;;;:::o;21049:125::-;21114:4;21138:19;:28;21158:7;21138:28;;;;;;;;;;;;;;;;;;;;;;;;;21131:35;;21049:125;;;:::o;18224:158::-;18305:4;6825:12;:10;:12::i;:::-;6815:22;;:6;;;;;;;;;;;:22;;;6807:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18343:9:::1;18321:19;:31;;;;18370:4;18363:11;;18224:158:::0;;;:::o;14453:31::-;;;;;;;;;;;;;:::o;2370:126::-;2443:7;2470:9;:18;2480:7;2470:18;;;;;;;;;;;;;;;;2463:25;;2370:126;;;:::o;6906:148::-;6825:12;:10;:12::i;:::-;6815:22;;:6;;;;;;;;;;;:22;;;6807:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;7013:1:::1;6976:40;;6997:6;;;;;;;;;;;6976:40;;;;;;;;;;;;7044:1;7027:6;;:19;;;;;;;;;;;;;;;;;;6906:148::o:0;20267:144::-;6825:12;:10;:12::i;:::-;6815:22;;:6;;;;;;;;;;;:22;;;6807:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20399:4:::1;20357:31;:39;20389:6;20357:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;20267:144:::0;;:::o;20727:135::-;6825:12;:10;:12::i;:::-;6815:22;;:6;;;;;;;;;;;:22;;;6807:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20819:8:::1;20812:25;;;20838:7;:5;:7::i;:::-;20847:6;20812:42;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;20727:135:::0;;:::o;6603:78::-;6640:7;6667:6;;;;;;;;;;;6660:13;;6603:78;:::o;14146:25::-;;;;;;;;;;;;;:::o;2032:103::-;2087:13;2120:7;2113:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2032:103;:::o;15396:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;20606:112::-;6825:12;:10;:12::i;:::-;6815:22;;:6;;;;;;;;;;;:22;;;6807:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20682:7:::1;:5;:7::i;:::-;20674:25;;:36;20700:9;20674:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;20606:112:::0;:::o;15150:27::-;;;;:::o;3631:268::-;3723:4;3740:129;3749:12;:10;:12::i;:::-;3763:7;3772:96;3811:15;3772:96;;;;;;;;;;;;;;;;;:11;:25;3784:12;:10;:12::i;:::-;3772:25;;;;;;;;;;;;;;;:34;3798:7;3772:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;3740:8;:129::i;:::-;3887:4;3880:11;;3631:268;;;;:::o;2508:174::-;2593:4;2610:42;2620:12;:10;:12::i;:::-;2634:9;2645:6;2610:9;:42::i;:::-;2670:4;2663:11;;2508:174;;;;:::o;14491:22::-;;;;;;;;;;;;;:::o;18004:143::-;6825:12;:10;:12::i;:::-;6815:22;;:6;;;;;;;;;;;:22;;;6807:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18069:4:::1;18057:9;;:16;;;;;;;;;;;;;;;;;;18098:4;18084:11;;:18;;;;;;;;;;;;;;;;;;18138:1;18123:12;:16;;;;:::i;:::-;18113:7;:26;;;;18004:143::o:0;19977:132::-;6825:12;:10;:12::i;:::-;6815:22;;:6;;;;;;;;;;;:22;;;6807:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20093:8:::1;20062:19;:28;20082:7;20062:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;19977:132:::0;;:::o;20423:177::-;6825:12;:10;:12::i;:::-;6815:22;;:6;;;;;;;;;;;:22;;;6807:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20516:13:::1;20508:21;;:4;:21;;::::0;20500:57:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;20587:5;20568:10;:16;20579:4;20568:16;;;;;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;20423:177:::0;;:::o;18864:271::-;6825:12;:10;:12::i;:::-;6815:22;;:6;;;;;;;;;;;:22;;;6807:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19017:3:::1;19001:13;:11;:13::i;:::-;:19;;;;:::i;:::-;18991:4;18974:13;18958;:11;:13::i;:::-;:29;;;;:::i;:::-;18957:38;;;;:::i;:::-;18956:65;;18948:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;19123:4;19106:13;19090;:11;:13::i;:::-;:29;;;;:::i;:::-;19089:38;;;;:::i;:::-;19071:15;:56;;;;18864:271:::0;:::o;14802:252::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;20871:169::-;6825:12;:10;:12::i;:::-;6815:22;;:6;;;;;;;;;;;:22;;;6807:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20983:16:::1;20965:15;;:34;;;;;;;;;;;;;;;;;;21022:10;21010:9;;:22;;;;;;;;;;;;;;;;;;20871:169:::0;;:::o;2694:150::-;2782:7;2809:11;:18;2821:5;2809:18;;;;;;;;;;;;;;;:27;2828:7;2809:27;;;;;;;;;;;;;;;;2802:34;;2694:150;;;;:::o;20115:146::-;6825:12;:10;:12::i;:::-;6815:22;;:6;;;;;;;;;;;:22;;;6807:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20245:8:::1;20207:26;:35;20234:7;20207:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;20115:146:::0;;:::o;7066:244::-;6825:12;:10;:12::i;:::-;6815:22;;:6;;;;;;;;;;;:22;;;6807:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;7175:1:::1;7155:22;;:8;:22;;::::0;7147:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;7265:8;7236:38;;7257:6;;;;;;;;;;;7236:38;;;;;;;;;;;;7294:8;7285:6;;:17;;;;;;;;;;;;;;;;;;7066:244:::0;:::o;15613:42::-;;;;;;;;;;;;;;;;;;;;;;:::o;14028:::-;;;:::o;1353:97::-;1405:7;1432:10;1425:17;;1353:97;:::o;4606:220::-;4764:6;4734:11;:18;4746:5;4734:18;;;;;;;;;;;;;;;:27;4753:7;4734:27;;;;;;;;;;;;;;;:36;;;;4802:7;4786:32;;4795:5;4786:32;;;4811:6;4786:32;;;;;;:::i;:::-;;;;;;;;4606:220;;;:::o;21183:3232::-;21336:1;21326:6;:11;21322:102;;21354:37;21370:6;21378:9;21389:1;21354:15;:37::i;:::-;21406:7;;21322:102;21465:7;:5;:7::i;:::-;21455:17;;:6;:17;;;;:54;;;;;21502:7;:5;:7::i;:::-;21489:20;;:9;:20;;;;21455:54;:82;;;;;21527:10;;;;;;;;;;;21526:11;21455:82;21437:841;;;21572:9;;;;;;;;;;;21567:147;;21610:19;:27;21630:6;21610:27;;;;;;;;;;;;;;;;;;;;;;;;;:61;;;;21641:19;:30;21661:9;21641:30;;;;;;;;;;;;;;;;;;;;;;;;;21610:61;21602:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;21567:147;21732:10;:18;21743:6;21732:18;;;;;;;;;;;;;;;;;;;;;;;;;:65;;;;;21755:31;:42;21787:9;21755:42;;;;;;;;;;;;;;;;;;;;;;;;;21754:43;21732:65;21728:360;;;21836:12;;21826:6;:22;;21818:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;21728:360;;;21921:10;:21;21932:9;21921:21;;;;;;;;;;;;;;;;;;;;;;;;;:65;;;;;21947:31;:39;21979:6;21947:39;;;;;;;;;;;;;;;;;;;;;;;;;21946:40;21921:65;21917:171;;;22025:13;;22015:6;:23;;22007:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;21917:171;21728:360;22110:26;:37;22137:9;22110:37;;;;;;;;;;;;;;;;;;;;;;;;;22105:159;;22209:15;;22185:20;22195:9;22185;:20::i;:::-;22176:6;:29;;;;:::i;:::-;:48;;22168:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;22105:159;21437:841;22297:28;22328:24;22346:4;22328:9;:24::i;:::-;22297:55;;22366:12;22405:19;;22381:20;:43;;22366:58;;22456:7;:35;;;;;22480:11;;;;;;;;;;;22456:35;:63;;;;;22509:10;;;;;;;;;;;22508:11;22456:63;:101;;;;;22536:10;:21;22547:9;22536:21;;;;;;;;;;;;;;;;;;;;;;;;;22456:101;:146;;;;;22575:19;:27;22595:6;22575:27;;;;;;;;;;;;;;;;;;;;;;;;;22574:28;22456:146;:194;;;;;22620:19;:30;22640:9;22620:30;;;;;;;;;;;;;;;;;;;;;;;;;22619:31;22456:194;22438:326;;;22690:4;22677:10;;:17;;;;;;;;;;;;;;;;;;22709:10;:8;:10::i;:::-;22747:5;22734:10;;:18;;;;;;;;;;;;;;;;;;22438:326;22777:12;22793:10;;;;;;;;;;;22792:11;22777:26;;22906:19;:27;22926:6;22906:27;;;;;;;;;;;;;;;;;;;;;;;;;:61;;;;22937:19;:30;22957:9;22937:30;;;;;;;;;;;;;;;;;;;;;;;;;22906:61;22902:109;;;22994:5;22984:15;;22902:109;23105:7;23101:1251;;;23129:12;23178:7;;23163:12;:22;23160:1036;;;23213:23;23232:3;23213:14;23224:2;23213:6;:10;;:14;;;;:::i;:::-;:18;;:23;;;;:::i;:::-;23206:30;;23291:2;23285;23278:4;:9;;;;:::i;:::-;23277:16;;;;:::i;:::-;23255:18;;:38;;;;;;;:::i;:::-;;;;;;;;23341:2;23336:1;23329:4;:8;;;;:::i;:::-;23328:15;;;;:::i;:::-;23312:12;;:31;;;;;;;:::i;:::-;;;;;;;;23160:1036;;;23369:10;:21;23380:9;23369:21;;;;;;;;;;;;;;;;;;;;;;;;;:48;;;;;23416:1;23394:5;:19;;;;;;;;;;;;:23;;;23369:48;23365:831;;;23445:40;23481:3;23445:31;23456:5;:19;;;;;;;;;;;;23445:31;;:6;:10;;:31;;;;:::i;:::-;:35;;:40;;;;:::i;:::-;23438:47;;23558:5;:19;;;;;;;;;;;;23526:51;;23533:5;:22;;;;;;;;;;;;23526:29;;:4;:29;;;;:::i;:::-;:51;;;;:::i;:::-;23504:18;;:73;;;;;;;:::i;:::-;;;;;;;;23650:5;:19;;;;;;;;;;;;23618:51;;23625:5;:22;;;;;;;;;;;;23618:29;;:4;:29;;;;:::i;:::-;:51;;;;:::i;:::-;23596:18;;:73;;;;;;;:::i;:::-;;;;;;;;23730:5;:19;;;;;;;;;;;;23704:45;;23711:5;:16;;;;;;;;;;;;23704:23;;:4;:23;;;;:::i;:::-;:45;;;;:::i;:::-;23688:12;;:61;;;;;;;:::i;:::-;;;;;;;;23365:831;;;23811:10;:18;23822:6;23811:18;;;;;;;;;;;;;;;;;;;;;;;;;:44;;;;;23854:1;23833:5;:18;;;;;;;;;;;;:22;;;23811:44;23807:389;;;23883:39;23918:3;23883:30;23894:5;:18;;;;;;;;;;;;23883:30;;:6;:10;;:30;;;;:::i;:::-;:34;;:39;;;;:::i;:::-;23876:46;;23994:5;:18;;;;;;;;;;;;23963:49;;23970:5;:21;;;;;;;;;;;;23963:28;;:4;:28;;;;:::i;:::-;:49;;;;:::i;:::-;23941:18;;:71;;;;;;;:::i;:::-;;;;;;;;24084:5;:18;;;;;;;;;;;;24053:49;;24060:5;:21;;;;;;;;;;;;24053:28;;:4;:28;;;;:::i;:::-;:49;;;;:::i;:::-;24031:18;;:71;;;;;;;:::i;:::-;;;;;;;;24162:5;:18;;;;;;;;;;;;24137:43;;24144:5;:15;;;;;;;;;;;;24137:22;;:4;:22;;;;:::i;:::-;:43;;;;:::i;:::-;24121:12;;:59;;;;;;;:::i;:::-;;;;;;;;23807:389;23365:831;23160:1036;24224:1;24217:4;:8;24213:93;;;24246:44;24262:6;24278:4;24285;24246:15;:44::i;:::-;24213:93;24333:4;24323:14;;;;;:::i;:::-;;;23114:1238;23101:1251;24365:42;24381:6;24389:9;24400:6;24365:15;:42::i;:::-;21308:3107;;;21183:3232;;;;:::o;5207:192::-;5292:7;5325:1;5320;:6;;5328:12;5312:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;5352:9;5368:1;5364;:5;;;;:::i;:::-;5352:17;;5390:1;5383:8;;;5207:192;;;;;:::o;4867:181::-;4924:7;4944:9;4960:1;4956;:5;;;;:::i;:::-;4944:17;;4985:1;4980;:6;;4972:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;5039:1;5032:8;;;4867:181;;;;:::o;3911:351::-;4066:71;4088:6;4066:71;;;;;;;;;;;;;;;;;:9;:17;4076:6;4066:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;4046:9;:17;4056:6;4046:17;;;;;;;;;;;;;;;:91;;;;4171:32;4196:6;4171:9;:20;4181:9;4171:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;4148:9;:20;4158:9;4148:20;;;;;;;;;;;;;;;:55;;;;4236:9;4219:35;;4228:6;4219:35;;;4247:6;4219:35;;;;;;:::i;:::-;;;;;;;;3911:351;;;:::o;25351:1574::-;25390:28;25421:24;25439:4;25421:9;:24::i;:::-;25390:55;;25456:14;25515:12;;25494:18;;25473;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;25456:71;;25538:12;25592:1;25568:20;:25;:40;;;;25607:1;25597:6;:11;25568:40;25564:57;;;25612:7;;;;;25564:57;25683:2;25661:19;;:24;;;;:::i;:::-;25638:20;:47;25634:127;;;25747:2;25725:19;;:24;;;;:::i;:::-;25702:47;;25634:127;25823:23;25902:1;25893:6;25872:18;;25849:20;:41;;;;:::i;:::-;:50;;;;:::i;:::-;:54;;;;:::i;:::-;25823:80;;25914:26;25943:41;25968:15;25943:20;:24;;:41;;;;:::i;:::-;25914:70;;25998:25;26026:21;25998:49;;26061:36;26078:18;26061:16;:36::i;:::-;26112:18;26133:44;26159:17;26133:21;:25;;:44;;;;:::i;:::-;26112:65;;26191:23;26217:46;26256:6;26217:34;26232:18;;26217:10;:14;;:34;;;;:::i;:::-;:38;;:46;;;;:::i;:::-;26191:72;;26274:17;26294:40;26327:6;26294:28;26309:12;;26294:10;:14;;:28;;;;:::i;:::-;:32;;:40;;;;:::i;:::-;26274:60;;26345:23;26403:9;26385:15;:27;;;;:::i;:::-;26371:10;:42;;;;:::i;:::-;26345:68;;26451:1;26430:18;:22;;;;26484:1;26463:18;:22;;;;26511:1;26496:12;:16;;;;26551:1;26533:15;:19;:42;;;;;26574:1;26556:15;:19;26533:42;26529:192;;;26592:46;26605:15;26622;26592:12;:46::i;:::-;26658:51;26673:18;26693:15;26658:51;;;;;;;:::i;:::-;;;;;;;;26529:192;26755:9;;;;;;;;;;;26747:23;;26804:15;26780:21;:39;;;;:::i;:::-;26747:80;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26734:93;;;;;26859:15;;;;;;;;;;;26851:29;;26889:21;26851:66;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26838:79;;;;;25379:1546;;;;;;;;;;25351:1574;:::o;5408:254::-;5465:7;5497:1;5492;:6;5488:47;;5522:1;5515:8;;;;5488:47;5548:9;5564:1;5560;:5;;;;:::i;:::-;5548:17;;5593:1;5588;5584;:5;;;;:::i;:::-;:10;5576:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;5653:1;5646:8;;;5408:254;;;;;:::o;5674:131::-;5731:7;5758:39;5762:1;5765;5758:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;5751:46;;5674:131;;;;:::o;5060:135::-;5117:7;5144:43;5148:1;5151;5144:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;5137:50;;5060:135;;;;:::o;24424:558::-;24549:21;24587:1;24573:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24549:40;;24618:4;24600;24605:1;24600:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;24644:6;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24634:4;24639:1;24634:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;24671:49;24688:4;24703:6;24712:7;24671:8;:49::i;:::-;24760:6;:57;;;24832:7;24854:1;24898:4;24925;24945:15;24760:211;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24475:507;24424:558;:::o;24991:351::-;25135:49;25152:4;25167:6;25176:7;25135:8;:49::i;:::-;25228:6;:22;;;25259:9;25280:4;25287:7;25296:1;25299;25311:4;25318:15;25228:106;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;24991:351;;:::o;5817:278::-;5902:7;5934:1;5930;:5;5937:12;5922:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;5961:9;5977:1;5973;:5;;;;:::i;:::-;5961:17;;6086:1;6079:8;;;5817:278;;;;;:::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:474::-;3849:6;3857;3906:2;3894:9;3885:7;3881:23;3877:32;3874:119;;;3912:79;;:::i;:::-;3874:119;4032:1;4057:53;4102:7;4093:6;4082:9;4078:22;4057:53;:::i;:::-;4047:63;;4003:117;4159:2;4185:53;4230:7;4221:6;4210:9;4206:22;4185:53;:::i;:::-;4175:63;;4130:118;3781:474;;;;;:::o;4261:118::-;4348:24;4366:5;4348:24;:::i;:::-;4343:3;4336:37;4261:118;;:::o;4385:222::-;4478:4;4516:2;4505:9;4501:18;4493:26;;4529:71;4597:1;4586:9;4582:17;4573:6;4529:71;:::i;:::-;4385:222;;;;:::o;4613:619::-;4690:6;4698;4706;4755:2;4743:9;4734:7;4730:23;4726:32;4723:119;;;4761:79;;:::i;:::-;4723:119;4881:1;4906:53;4951:7;4942:6;4931:9;4927:22;4906:53;:::i;:::-;4896:63;;4852:117;5008:2;5034:53;5079:7;5070:6;5059:9;5055:22;5034:53;:::i;:::-;5024:63;;4979:118;5136:2;5162:53;5207:7;5198:6;5187:9;5183:22;5162:53;:::i;:::-;5152:63;;5107:118;4613:619;;;;;:::o;5238:86::-;5273:7;5313:4;5306:5;5302:16;5291:27;;5238:86;;;:::o;5330:112::-;5413:22;5429:5;5413:22;:::i;:::-;5408:3;5401:35;5330:112;;:::o;5448:214::-;5537:4;5575:2;5564:9;5560:18;5552:26;;5588:67;5652:1;5641:9;5637:17;5628:6;5588:67;:::i;:::-;5448:214;;;;:::o;5668:118::-;5739:22;5755:5;5739:22;:::i;:::-;5732:5;5729:33;5719:61;;5776:1;5773;5766:12;5719:61;5668:118;:::o;5792:135::-;5836:5;5874:6;5861:20;5852:29;;5890:31;5915:5;5890:31;:::i;:::-;5792:135;;;;:::o;5933:1033::-;6025:6;6033;6041;6049;6057;6065;6114:3;6102:9;6093:7;6089:23;6085:33;6082:120;;;6121:79;;:::i;:::-;6082:120;6241:1;6266:51;6309:7;6300:6;6289:9;6285:22;6266:51;:::i;:::-;6256:61;;6212:115;6366:2;6392:51;6435:7;6426:6;6415:9;6411:22;6392:51;:::i;:::-;6382:61;;6337:116;6492:2;6518:51;6561:7;6552:6;6541:9;6537:22;6518:51;:::i;:::-;6508:61;;6463:116;6618:2;6644:51;6687:7;6678:6;6667:9;6663:22;6644:51;:::i;:::-;6634:61;;6589:116;6744:3;6771:51;6814:7;6805:6;6794:9;6790:22;6771:51;:::i;:::-;6761:61;;6715:117;6871:3;6898:51;6941:7;6932:6;6921:9;6917:22;6898:51;:::i;:::-;6888:61;;6842:117;5933:1033;;;;;;;;:::o;6972:118::-;7059:24;7077:5;7059:24;:::i;:::-;7054:3;7047:37;6972:118;;:::o;7096:222::-;7189:4;7227:2;7216:9;7212:18;7204:26;;7240:71;7308:1;7297:9;7293:17;7284:6;7240:71;:::i;:::-;7096:222;;;;:::o;7324:329::-;7383:6;7432:2;7420:9;7411:7;7407:23;7403:32;7400:119;;;7438:79;;:::i;:::-;7400:119;7558:1;7583:53;7628:7;7619:6;7608:9;7604:22;7583:53;:::i;:::-;7573:63;;7529:117;7324:329;;;;:::o;7659:116::-;7729:21;7744:5;7729:21;:::i;:::-;7722:5;7719:32;7709:60;;7765:1;7762;7755:12;7709:60;7659:116;:::o;7781:133::-;7824:5;7862:6;7849:20;7840:29;;7878:30;7902:5;7878:30;:::i;:::-;7781:133;;;;:::o;7920:468::-;7985:6;7993;8042:2;8030:9;8021:7;8017:23;8013:32;8010:119;;;8048:79;;:::i;:::-;8010:119;8168:1;8193:53;8238:7;8229:6;8218:9;8214:22;8193:53;:::i;:::-;8183:63;;8139:117;8295:2;8321:50;8363:7;8354:6;8343:9;8339:22;8321:50;:::i;:::-;8311:60;;8266:115;7920:468;;;;;:::o;8394:933::-;8651:4;8689:3;8678:9;8674:19;8666:27;;8703:67;8767:1;8756:9;8752:17;8743:6;8703:67;:::i;:::-;8780:68;8844:2;8833:9;8829:18;8820:6;8780:68;:::i;:::-;8858;8922:2;8911:9;8907:18;8898:6;8858:68;:::i;:::-;8936;9000:2;8989:9;8985:18;8976:6;8936:68;:::i;:::-;9014:69;9078:3;9067:9;9063:19;9054:6;9014:69;:::i;:::-;9093;9157:3;9146:9;9142:19;9133:6;9093:69;:::i;:::-;9172;9236:3;9225:9;9221:19;9212:6;9172:69;:::i;:::-;9251;9315:3;9304:9;9300:19;9291:6;9251:69;:::i;:::-;8394:933;;;;;;;;;;;:::o;9333:474::-;9401:6;9409;9458:2;9446:9;9437:7;9433:23;9429:32;9426:119;;;9464:79;;:::i;:::-;9426:119;9584:1;9609:53;9654:7;9645:6;9634:9;9630:22;9609:53;:::i;:::-;9599:63;;9555:117;9711:2;9737:53;9782:7;9773:6;9762:9;9758:22;9737:53;:::i;:::-;9727:63;;9682:118;9333:474;;;;;:::o;9813:60::-;9841:3;9862:5;9855:12;;9813:60;;;:::o;9879:142::-;9929:9;9962:53;9980:34;9989:24;10007:5;9989:24;:::i;:::-;9980:34;:::i;:::-;9962:53;:::i;:::-;9949:66;;9879:142;;;:::o;10027:126::-;10077:9;10110:37;10141:5;10110:37;:::i;:::-;10097:50;;10027:126;;;:::o;10159:153::-;10236:9;10269:37;10300:5;10269:37;:::i;:::-;10256:50;;10159:153;;;:::o;10318:185::-;10432:64;10490:5;10432:64;:::i;:::-;10427:3;10420:77;10318:185;;:::o;10509:276::-;10629:4;10667:2;10656:9;10652:18;10644:26;;10680:98;10775:1;10764:9;10760:17;10751:6;10680:98;:::i;:::-;10509:276;;;;:::o;10791:180::-;10839:77;10836:1;10829:88;10936:4;10933:1;10926:15;10960:4;10957:1;10950:15;10977:320;11021:6;11058:1;11052:4;11048:12;11038:22;;11105:1;11099:4;11095:12;11126:18;11116:81;;11182:4;11174:6;11170:17;11160:27;;11116:81;11244:2;11236:6;11233:14;11213:18;11210:38;11207:84;;11263:18;;:::i;:::-;11207:84;11028:269;10977:320;;;:::o;11303:182::-;11443:34;11439:1;11431:6;11427:14;11420:58;11303:182;:::o;11491:366::-;11633:3;11654:67;11718:2;11713:3;11654:67;:::i;:::-;11647:74;;11730:93;11819:3;11730:93;:::i;:::-;11848:2;11843:3;11839:12;11832:19;;11491:366;;;:::o;11863:419::-;12029:4;12067:2;12056:9;12052:18;12044:26;;12116:9;12110:4;12106:20;12102:1;12091:9;12087:17;12080:47;12144:131;12270:4;12144:131;:::i;:::-;12136:139;;11863:419;;;:::o;12288:180::-;12336:77;12333:1;12326:88;12433:4;12430:1;12423:15;12457:4;12454:1;12447:15;12474:180;12522:77;12519:1;12512:88;12619:4;12616:1;12609:15;12643:4;12640:1;12633:15;12660:185;12700:1;12717:20;12735:1;12717:20;:::i;:::-;12712:25;;12751:20;12769:1;12751:20;:::i;:::-;12746:25;;12790:1;12780:35;;12795:18;;:::i;:::-;12780:35;12837:1;12834;12830:9;12825:14;;12660:185;;;;:::o;12851:410::-;12891:7;12914:20;12932:1;12914:20;:::i;:::-;12909:25;;12948:20;12966:1;12948:20;:::i;:::-;12943:25;;13003:1;13000;12996:9;13025:30;13043:11;13025:30;:::i;:::-;13014:41;;13204:1;13195:7;13191:15;13188:1;13185:22;13165:1;13158:9;13138:83;13115:139;;13234:18;;:::i;:::-;13115:139;12899:362;12851:410;;;;:::o;13267:222::-;13407:34;13403:1;13395:6;13391:14;13384:58;13476:5;13471:2;13463:6;13459:15;13452:30;13267:222;:::o;13495:366::-;13637:3;13658:67;13722:2;13717:3;13658:67;:::i;:::-;13651:74;;13734:93;13823:3;13734:93;:::i;:::-;13852:2;13847:3;13843:12;13836:19;;13495:366;;;:::o;13867:419::-;14033:4;14071:2;14060:9;14056:18;14048:26;;14120:9;14114:4;14110:20;14106:1;14095:9;14091:17;14084:47;14148:131;14274:4;14148:131;:::i;:::-;14140:139;;13867:419;;;:::o;14292:223::-;14432:34;14428:1;14420:6;14416:14;14409:58;14501:6;14496:2;14488:6;14484:15;14477:31;14292:223;:::o;14521:366::-;14663:3;14684:67;14748:2;14743:3;14684:67;:::i;:::-;14677:74;;14760:93;14849:3;14760:93;:::i;:::-;14878:2;14873:3;14869:12;14862:19;;14521:366;;;:::o;14893:419::-;15059:4;15097:2;15086:9;15082:18;15074:26;;15146:9;15140:4;15136:20;15132:1;15121:9;15117:17;15110:47;15174:131;15300:4;15174:131;:::i;:::-;15166:139;;14893:419;;;:::o;15318:188::-;15356:3;15375:18;15391:1;15375:18;:::i;:::-;15370:23;;15407:18;15423:1;15407:18;:::i;:::-;15402:23;;15448:1;15445;15441:9;15434:16;;15471:4;15466:3;15463:13;15460:39;;;15479:18;;:::i;:::-;15460:39;15318:188;;;;:::o;15512:179::-;15652:31;15648:1;15640:6;15636:14;15629:55;15512:179;:::o;15697:366::-;15839:3;15860:67;15924:2;15919:3;15860:67;:::i;:::-;15853:74;;15936:93;16025:3;15936:93;:::i;:::-;16054:2;16049:3;16045:12;16038:19;;15697:366;;;:::o;16069:419::-;16235:4;16273:2;16262:9;16258:18;16250:26;;16322:9;16316:4;16312:20;16308:1;16297:9;16293:17;16286:47;16350:131;16476:4;16350:131;:::i;:::-;16342:139;;16069:419;;;:::o;16494:332::-;16615:4;16653:2;16642:9;16638:18;16630:26;;16666:71;16734:1;16723:9;16719:17;16710:6;16666:71;:::i;:::-;16747:72;16815:2;16804:9;16800:18;16791:6;16747:72;:::i;:::-;16494:332;;;;;:::o;16832:137::-;16886:5;16917:6;16911:13;16902:22;;16933:30;16957:5;16933:30;:::i;:::-;16832:137;;;;:::o;16975:345::-;17042:6;17091:2;17079:9;17070:7;17066:23;17062:32;17059:119;;;17097:79;;:::i;:::-;17059:119;17217:1;17242:61;17295:7;17286:6;17275:9;17271:22;17242:61;:::i;:::-;17232:71;;17188:125;16975:345;;;;:::o;17326:191::-;17366:3;17385:20;17403:1;17385:20;:::i;:::-;17380:25;;17419:20;17437:1;17419:20;:::i;:::-;17414:25;;17462:1;17459;17455:9;17448:16;;17483:3;17480:1;17477:10;17474:36;;;17490:18;;:::i;:::-;17474:36;17326:191;;;;:::o;17523:173::-;17663:25;17659:1;17651:6;17647:14;17640:49;17523:173;:::o;17702:366::-;17844:3;17865:67;17929:2;17924:3;17865:67;:::i;:::-;17858:74;;17941:93;18030:3;17941:93;:::i;:::-;18059:2;18054:3;18050:12;18043:19;;17702:366;;;:::o;18074:419::-;18240:4;18278:2;18267:9;18263:18;18255:26;;18327:9;18321:4;18317:20;18313:1;18302:9;18298:17;18291:47;18355:131;18481:4;18355:131;:::i;:::-;18347:139;;18074:419;;;:::o;18499:221::-;18639:34;18635:1;18627:6;18623:14;18616:58;18708:4;18703:2;18695:6;18691:15;18684:29;18499:221;:::o;18726:366::-;18868:3;18889:67;18953:2;18948:3;18889:67;:::i;:::-;18882:74;;18965:93;19054:3;18965:93;:::i;:::-;19083:2;19078:3;19074:12;19067:19;;18726:366;;;:::o;19098:419::-;19264:4;19302:2;19291:9;19287:18;19279:26;;19351:9;19345:4;19341:20;19337:1;19326:9;19322:17;19315:47;19379:131;19505:4;19379:131;:::i;:::-;19371:139;;19098:419;;;:::o;19523:225::-;19663:34;19659:1;19651:6;19647:14;19640:58;19732:8;19727:2;19719:6;19715:15;19708:33;19523:225;:::o;19754:366::-;19896:3;19917:67;19981:2;19976:3;19917:67;:::i;:::-;19910:74;;19993:93;20082:3;19993:93;:::i;:::-;20111:2;20106:3;20102:12;20095:19;;19754:366;;;:::o;20126:419::-;20292:4;20330:2;20319:9;20315:18;20307:26;;20379:9;20373:4;20369:20;20365:1;20354:9;20350:17;20343:47;20407:131;20533:4;20407:131;:::i;:::-;20399:139;;20126:419;;;:::o;20551:172::-;20691:24;20687:1;20679:6;20675:14;20668:48;20551:172;:::o;20729:366::-;20871:3;20892:67;20956:2;20951:3;20892:67;:::i;:::-;20885:74;;20968:93;21057:3;20968:93;:::i;:::-;21086:2;21081:3;21077:12;21070:19;;20729:366;;;:::o;21101:419::-;21267:4;21305:2;21294:9;21290:18;21282:26;;21354:9;21348:4;21344:20;21340:1;21329:9;21325:17;21318:47;21382:131;21508:4;21382:131;:::i;:::-;21374:139;;21101:419;;;:::o;21526:178::-;21666:30;21662:1;21654:6;21650:14;21643:54;21526:178;:::o;21710:366::-;21852:3;21873:67;21937:2;21932:3;21873:67;:::i;:::-;21866:74;;21949:93;22038:3;21949:93;:::i;:::-;22067:2;22062:3;22058:12;22051:19;;21710:366;;;:::o;22082:419::-;22248:4;22286:2;22275:9;22271:18;22263:26;;22335:9;22329:4;22325:20;22321:1;22310:9;22306:17;22299:47;22363:131;22489:4;22363:131;:::i;:::-;22355:139;;22082:419;;;:::o;22507:179::-;22647:31;22643:1;22635:6;22631:14;22624:55;22507:179;:::o;22692:366::-;22834:3;22855:67;22919:2;22914:3;22855:67;:::i;:::-;22848:74;;22931:93;23020:3;22931:93;:::i;:::-;23049:2;23044:3;23040:12;23033:19;;22692:366;;;:::o;23064:419::-;23230:4;23268:2;23257:9;23253:18;23245:26;;23317:9;23311:4;23307:20;23303:1;23292:9;23288:17;23281:47;23345:131;23471:4;23345:131;:::i;:::-;23337:139;;23064:419;;;:::o;23489:169::-;23629:21;23625:1;23617:6;23613:14;23606:45;23489:169;:::o;23664:366::-;23806:3;23827:67;23891:2;23886:3;23827:67;:::i;:::-;23820:74;;23903:93;23992:3;23903:93;:::i;:::-;24021:2;24016:3;24012:12;24005:19;;23664:366;;;:::o;24036:419::-;24202:4;24240:2;24229:9;24225:18;24217:26;;24289:9;24283:4;24279:20;24275:1;24264:9;24260:17;24253:47;24317:131;24443:4;24317:131;:::i;:::-;24309:139;;24036:419;;;:::o;24461:194::-;24501:4;24521:20;24539:1;24521:20;:::i;:::-;24516:25;;24555:20;24573:1;24555:20;:::i;:::-;24550:25;;24599:1;24596;24592:9;24584:17;;24623:1;24617:4;24614:11;24611:37;;;24628:18;;:::i;:::-;24611:37;24461:194;;;;:::o;24661:177::-;24801:29;24797:1;24789:6;24785:14;24778:53;24661:177;:::o;24844:366::-;24986:3;25007:67;25071:2;25066:3;25007:67;:::i;:::-;25000:74;;25083:93;25172:3;25083:93;:::i;:::-;25201:2;25196:3;25192:12;25185:19;;24844:366;;;:::o;25216:419::-;25382:4;25420:2;25409:9;25405:18;25397:26;;25469:9;25463:4;25459:20;25455:1;25444:9;25440:17;25433:47;25497:131;25623:4;25497:131;:::i;:::-;25489:139;;25216:419;;;:::o;25641:332::-;25762:4;25800:2;25789:9;25785:18;25777:26;;25813:71;25881:1;25870:9;25866:17;25857:6;25813:71;:::i;:::-;25894:72;25962:2;25951:9;25947:18;25938:6;25894:72;:::i;:::-;25641:332;;;;;:::o;25979:147::-;26080:11;26117:3;26102:18;;25979:147;;;;:::o;26132:114::-;;:::o;26252:398::-;26411:3;26432:83;26513:1;26508:3;26432:83;:::i;:::-;26425:90;;26524:93;26613:3;26524:93;:::i;:::-;26642:1;26637:3;26633:11;26626:18;;26252:398;;;:::o;26656:379::-;26840:3;26862:147;27005:3;26862:147;:::i;:::-;26855:154;;27026:3;27019:10;;26656:379;;;:::o;27041:220::-;27181:34;27177:1;27169:6;27165:14;27158:58;27250:3;27245:2;27237:6;27233:15;27226:28;27041:220;:::o;27267:366::-;27409:3;27430:67;27494:2;27489:3;27430:67;:::i;:::-;27423:74;;27506:93;27595:3;27506:93;:::i;:::-;27624:2;27619:3;27615:12;27608:19;;27267:366;;;:::o;27639:419::-;27805:4;27843:2;27832:9;27828:18;27820:26;;27892:9;27886:4;27882:20;27878:1;27867:9;27863:17;27856:47;27920:131;28046:4;27920:131;:::i;:::-;27912:139;;27639:419;;;:::o;28064:180::-;28112:77;28109:1;28102:88;28209:4;28206:1;28199:15;28233:4;28230:1;28223:15;28250:180;28298:77;28295:1;28288:88;28395:4;28392:1;28385:15;28419:4;28416:1;28409:15;28436:143;28493:5;28524:6;28518:13;28509:22;;28540:33;28567:5;28540:33;:::i;:::-;28436:143;;;;:::o;28585:351::-;28655:6;28704:2;28692:9;28683:7;28679:23;28675:32;28672:119;;;28710:79;;:::i;:::-;28672:119;28830:1;28855:64;28911:7;28902:6;28891:9;28887:22;28855:64;:::i;:::-;28845:74;;28801:128;28585:351;;;;:::o;28942:85::-;28987:7;29016:5;29005:16;;28942:85;;;:::o;29033:158::-;29091:9;29124:61;29142:42;29151:32;29177:5;29151:32;:::i;:::-;29142:42;:::i;:::-;29124:61;:::i;:::-;29111:74;;29033:158;;;:::o;29197:147::-;29292:45;29331:5;29292:45;:::i;:::-;29287:3;29280:58;29197:147;;:::o;29350:114::-;29417:6;29451:5;29445:12;29435:22;;29350:114;;;:::o;29470:184::-;29569:11;29603:6;29598:3;29591:19;29643:4;29638:3;29634:14;29619:29;;29470:184;;;;:::o;29660:132::-;29727:4;29750:3;29742:11;;29780:4;29775:3;29771:14;29763:22;;29660:132;;;:::o;29798:108::-;29875:24;29893:5;29875:24;:::i;:::-;29870:3;29863:37;29798:108;;:::o;29912:179::-;29981:10;30002:46;30044:3;30036:6;30002:46;:::i;:::-;30080:4;30075:3;30071:14;30057:28;;29912:179;;;;:::o;30097:113::-;30167:4;30199;30194:3;30190:14;30182:22;;30097:113;;;:::o;30246:732::-;30365:3;30394:54;30442:5;30394:54;:::i;:::-;30464:86;30543:6;30538:3;30464:86;:::i;:::-;30457:93;;30574:56;30624:5;30574:56;:::i;:::-;30653:7;30684:1;30669:284;30694:6;30691:1;30688:13;30669:284;;;30770:6;30764:13;30797:63;30856:3;30841:13;30797:63;:::i;:::-;30790:70;;30883:60;30936:6;30883:60;:::i;:::-;30873:70;;30729:224;30716:1;30713;30709:9;30704:14;;30669:284;;;30673:14;30969:3;30962:10;;30370:608;;;30246:732;;;;:::o;30984:831::-;31247:4;31285:3;31274:9;31270:19;31262:27;;31299:71;31367:1;31356:9;31352:17;31343:6;31299:71;:::i;:::-;31380:80;31456:2;31445:9;31441:18;31432:6;31380:80;:::i;:::-;31507:9;31501:4;31497:20;31492:2;31481:9;31477:18;31470:48;31535:108;31638:4;31629:6;31535:108;:::i;:::-;31527:116;;31653:72;31721:2;31710:9;31706:18;31697:6;31653:72;:::i;:::-;31735:73;31803:3;31792:9;31788:19;31779:6;31735:73;:::i;:::-;30984:831;;;;;;;;:::o;31821:807::-;32070:4;32108:3;32097:9;32093:19;32085:27;;32122:71;32190:1;32179:9;32175:17;32166:6;32122:71;:::i;:::-;32203:72;32271:2;32260:9;32256:18;32247:6;32203:72;:::i;:::-;32285:80;32361:2;32350:9;32346:18;32337:6;32285:80;:::i;:::-;32375;32451:2;32440:9;32436:18;32427:6;32375:80;:::i;:::-;32465:73;32533:3;32522:9;32518:19;32509:6;32465:73;:::i;:::-;32548;32616:3;32605:9;32601:19;32592:6;32548:73;:::i;:::-;31821:807;;;;;;;;;:::o;32634:143::-;32691:5;32722:6;32716:13;32707:22;;32738:33;32765:5;32738:33;:::i;:::-;32634:143;;;;:::o;32783:663::-;32871:6;32879;32887;32936:2;32924:9;32915:7;32911:23;32907:32;32904:119;;;32942:79;;:::i;:::-;32904:119;33062:1;33087:64;33143:7;33134:6;33123:9;33119:22;33087:64;:::i;:::-;33077:74;;33033:128;33200:2;33226:64;33282:7;33273:6;33262:9;33258:22;33226:64;:::i;:::-;33216:74;;33171:129;33339:2;33365:64;33421:7;33412:6;33401:9;33397:22;33365:64;:::i;:::-;33355:74;;33310:129;32783:663;;;;;:::o

Swarm Source

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