ETH Price: $3,487.19 (+3.44%)
Gas: 4 Gwei

Token

0xAnon (0xAnon)
 

Overview

Max Total Supply

10,000,000 0xAnon

Holders

1,277 ( -0.156%)

Market

Price

$0.01 @ 0.000003 ETH (-0.17%)

Onchain Market Cap

$112,719.90

Circulating Supply Market Cap

$0.00

Other Info

Token Contract (WITH 8 Decimals)

Balance
91,594.53814265 0xAnon

Value
$1,032.45 ( ~0.296069098628873 Eth) [0.9159%]
0xefc2374fd16db90d778227aceb52d164338aa593
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

A complete privacy trading and liquidity leasing solutions for crypto users

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
OxAnonToken

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
No with 200 runs

Other Settings:
paris EvmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.18;

abstract contract Context {

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

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

interface IERC20 {

    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);

}

interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}


contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;
    uint8 private _decimals;

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

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

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

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

        return true;
    }

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

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

        return true;
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(
            senderBalance >= amount,
            "ERC20: transfer amount exceeds balance"
        );
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

library SafeMath {

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

        return c;
    }

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

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

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

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

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

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

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

library Address {

    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

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

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

contract Ownable is Context {
    address private _owner;
    address private _previousOwner;

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

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

    function owner() public view returns (address) {
        return _owner;
    }   
    
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
    
    function waiveOwnership() 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;
    }
}

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

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

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

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

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

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

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

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

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

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
    
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

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

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

    function initialize(address, address) external;
}

interface 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 OxAnonToken is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;

    bool private swapping;

    address private developmentWallet;
    address private treasuryWallet;
    uint256 public maxTransaction;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;

    mapping(address => uint256) private _holderLastTransferBlock;
    bool public transDelayActived = true;
    uint256 public launchBlockNo;

    uint256 public buyFees;
    uint256 public sellFees;
    uint256 private _maxSwapableTokens;

    uint256 public _preventSwapBefore = 20;
    uint256 public _removeLimitsAt = 30;
    uint256 public _totalBuys = 0;

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

  
    constructor() ERC20("0xAnon", "0xAnon", 8) {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(router);

        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;

        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

        uint256 totalSupply = 10_000_000 * 10 ** decimals();

        maxTransaction = (totalSupply * 150) / 10_000; // 1.5% max transaction at launch
        maxWallet = (totalSupply * 150) / 10_000; // 1.5% max wallet at launch
        swapTokensAtAmount = (totalSupply * 50) / 10_000;
        _maxSwapableTokens = (totalSupply * 100) / 10_000;

        buyFees = 2_500;
        sellFees = 2_500;

        developmentWallet = 0xDA0c05a04076162e42deCd4426B09B042C6103CF;
        treasuryWallet = 0x165D293f1F4c73d8c9ad95C6b8Ca35b122c3cD29;

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);

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

        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    function launch() external onlyOwner {
        require(!tradingActive, "Token launched");
        tradingActive = true;
        launchBlockNo = block.number;
        swapEnabled = true;
    }

    function removeLimits() internal returns (bool) {
        limitsInEffect = false;
        buyFees = 500;
        sellFees = 500;
        return true;
    }

    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner returns (bool) {
        transDelayActived = false;
        return true;
    }

    function excludeFromMaxTransaction(
        address updAds,
        bool isEx
    ) public onlyOwner {
        _isExcludedmaxTransaction[updAds] = isEx;
    }

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

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

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateTreasuryWallet(
        address newTreasuryWallet
    ) external onlyOwner {
        emit TreasuryWalletUpdated(newTreasuryWallet, treasuryWallet);
        treasuryWallet = newTreasuryWallet;
    }

    function updateDevelopmentWallet(
        address newWallet
    ) external onlyOwner {
        emit DevelopmentWalletUpdated(newWallet, developmentWallet);
        developmentWallet = newWallet;
    }

    function isExcludedFromFees(address account) public view returns (bool) {
        return _isExcludedFromFees[account];
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ) {
                if (!tradingActive) {
                    require(
                        _isExcludedFromFees[from] || _isExcludedFromFees[to],
                        "Trading is not active."
                    );
                }

                if (transDelayActived) {
                    if (
                        to != owner() &&
                        to != address(uniswapV2Router) &&
                        to != address(uniswapV2Pair)
                    ) {
                        require(
                            _holderLastTransferBlock[tx.origin] < block.number,
                            "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed."
                        );
                        _holderLastTransferBlock[tx.origin] = block.number;
                    }
                }

                // BUY
                if (
                    automatedMarketMakerPairs[from] &&
                    !_isExcludedmaxTransaction[to]
                ) {
                    require(
                        amount <= maxTransaction,
                        "Buy transfer amount exceeds the maxTransaction."
                    );
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
                // SELL
                else if (
                    automatedMarketMakerPairs[to] &&
                    !_isExcludedmaxTransaction[from]
                ) {
                    require(
                        amount <= maxTransaction,
                        "Sell transfer amount exceeds the maxTransaction."
                    );
                } else if (!_isExcludedmaxTransaction[to]) {
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to] &&
            _totalBuys > _preventSwapBefore
        ) {
            swapping = true;
            swapBack(min(contractTokenBalance, _maxSwapableTokens));
            swapping = false;
        }

        bool takeFee = !swapping;

        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;

        if (takeFee) {
            // SELL
            if (automatedMarketMakerPairs[to] && sellFees > 0) {
                fees = amount.mul(sellFees).div(10_000);
            }
            // BUY
            else if (automatedMarketMakerPairs[from] && buyFees > 0) {
                fees = amount.mul(buyFees).div(10_000);
                _totalBuys++;
            }

            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }

            amount -= fees;
        }

        super._transfer(from, to, amount);

        if (_totalBuys >= _removeLimitsAt && limitsInEffect) {
            removeLimits();
        }
    }

    function min(uint256 a, uint256 b) private pure returns (uint256) {
        return (a > b) ? b : a;
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function swapBack(uint256 amount) private {
        bool success;

        if (amount == 0) {
            return;
        }

        uint256 amountToSwapForETH = amount;

        swapTokensForEth(amountToSwapForETH);

        uint256 ethBalance = address(this).balance;
        uint256 treasuryNumerator = ethBalance.mul(200);
        uint256 treasuryAmount = treasuryNumerator.div(1000);
        uint256 operationsAmount = ethBalance.sub(treasuryAmount);

        (success, ) = address(treasuryWallet).call{value: treasuryAmount}("");
        (success, ) = address(developmentWallet).call{value: operationsAmount}("");
    }

      event UpdateUniswapV2Router(
        address indexed newAddress,
        address indexed oldAddress
    );

    function changeSwapTokensAtAmount(
        uint256 newValue
    ) external onlyOwner returns (bool) {
        require(
            newValue >= (totalSupply() * 1) / 100_000,
            "Swap amount < 0.001% total supply."
        );
        require(
            newValue <= (totalSupply() * 100) / 10_000,
            "Swap amount > 1% total supply."
        );
        swapTokensAtAmount = newValue;
        return true;
    }

    function changeMaxTransaction(uint256 newValue) external onlyOwner {
        require(
            newValue >= ((totalSupply() * 10) / 10_000),
            "maxTransaction < 0.1%"
        );
        maxTransaction = newValue * (10 ** decimals());
    }

    function changeMaxWallet(uint256 newValue) external onlyOwner {
        require(
            newValue >= ((totalSupply() * 50) / 10_000),
            "maxWallet < 0.5%"
        );
        maxWallet = newValue * (10 ** decimals());
    }

    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool _isEnable) external onlyOwner {
        swapEnabled = _isEnable;
    }

    function updateBuyFee(uint256 _newFee) external onlyOwner {
        require(buyFees <= 5_000);
        buyFees = _newFee;
    }

    function updateSellFee(uint256 _newFee) external onlyOwner {
        require(sellFees <= 5_000);
        sellFees = _newFee;
        
    }

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event DevelopmentWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event TreasuryWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );
}

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":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"DevelopmentWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"TreasuryWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedmaxTransaction","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_preventSwapBefore","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_removeLimitsAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalBuys","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"changeMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"changeMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"changeSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"launchBlockNo","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"transDelayActived","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newFee","type":"uint256"}],"name":"updateBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevelopmentWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newFee","type":"uint256"}],"name":"updateSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isEnable","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newTreasuryWallet","type":"address"}],"name":"updateTreasuryWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"waiveOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052737a250d5630b4cf539739df2c5dacb4c659f2488d600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600d60006101000a81548160ff0219169083151502179055506000600d60016101000a81548160ff0219169083151502179055506000600d60026101000a81548160ff0219169083151502179055506001600f60006101000a81548160ff02191690831515021790555060148055601e6015556000601655348015620000e057600080fd5b506040518060400160405280600681526020017f3078416e6f6e00000000000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f3078416e6f6e00000000000000000000000000000000000000000000000000008152506008826003908162000160919062000dce565b50816004908162000172919062000dce565b5080600560006101000a81548160ff021916908360ff1602179055505050506000620001a36200069e60201b60201c565b905080600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506200027c816001620006a660201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002fc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000322919062000f1f565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200038a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003b0919062000f1f565b6040518363ffffffff1660e01b8152600401620003cf92919062000f62565b6020604051808303816000875af1158015620003ef573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000415919062000f1f565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200045d60a0516001620006a660201b60201c565b6200047260a0516001620007a360201b60201c565b6000620004846200084460201b60201c565b600a6200049291906200111f565b62989680620004a2919062001170565b9050612710609682620004b6919062001170565b620004c29190620011ea565b600a81905550612710609682620004da919062001170565b620004e69190620011ea565b600c81905550612710603282620004fe919062001170565b6200050a9190620011ea565b600b8190555061271060648262000522919062001170565b6200052e9190620011ea565b6013819055506109c46011819055506109c460128190555073da0c05a04076162e42decd4426b09b042c6103cf600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073165d293f1f4c73d8c9ad95c6b8ca35b122c3cd29600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000612620006046200085b60201b60201c565b60016200088560201b60201c565b620006253060016200088560201b60201c565b6200063a61dead60016200088560201b60201c565b6200065c6200064e6200085b60201b60201c565b6001620006a660201b60201c565b6200066f306001620006a660201b60201c565b6200068461dead6001620006a660201b60201c565b620006963382620009d260201b60201c565b5050620013ba565b600033905090565b620006b66200069e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000748576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200073f9062001283565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900460ff16905090565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620008956200069e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000927576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200091e9062001283565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620009c69190620012c2565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000a44576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a3b906200132f565b60405180910390fd5b62000a586000838362000b4a60201b60201c565b806002600082825462000a6c919062001351565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000ac3919062001351565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b2a91906200139d565b60405180910390a362000b466000838362000b4f60201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000bd657607f821691505b60208210810362000bec5762000beb62000b8e565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000c567fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000c17565b62000c62868362000c17565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000caf62000ca962000ca38462000c7a565b62000c84565b62000c7a565b9050919050565b6000819050919050565b62000ccb8362000c8e565b62000ce362000cda8262000cb6565b84845462000c24565b825550505050565b600090565b62000cfa62000ceb565b62000d0781848462000cc0565b505050565b5b8181101562000d2f5762000d2360008262000cf0565b60018101905062000d0d565b5050565b601f82111562000d7e5762000d488162000bf2565b62000d538462000c07565b8101602085101562000d63578190505b62000d7b62000d728562000c07565b83018262000d0c565b50505b505050565b600082821c905092915050565b600062000da36000198460080262000d83565b1980831691505092915050565b600062000dbe838362000d90565b9150826002028217905092915050565b62000dd98262000b54565b67ffffffffffffffff81111562000df55762000df462000b5f565b5b62000e01825462000bbd565b62000e0e82828562000d33565b600060209050601f83116001811462000e46576000841562000e31578287015190505b62000e3d858262000db0565b86555062000ead565b601f19841662000e568662000bf2565b60005b8281101562000e805784890151825560018201915060208501945060208101905062000e59565b8683101562000ea0578489015162000e9c601f89168262000d90565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000ee78262000eba565b9050919050565b62000ef98162000eda565b811462000f0557600080fd5b50565b60008151905062000f198162000eee565b92915050565b60006020828403121562000f385762000f3762000eb5565b5b600062000f488482850162000f08565b91505092915050565b62000f5c8162000eda565b82525050565b600060408201905062000f79600083018562000f51565b62000f88602083018462000f51565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b60018511156200101d5780860481111562000ff55762000ff462000f8f565b5b6001851615620010055780820291505b8081029050620010158562000fbe565b945062000fd5565b94509492505050565b6000826200103857600190506200110b565b816200104857600090506200110b565b81600181146200106157600281146200106c57620010a2565b60019150506200110b565b60ff84111562001081576200108062000f8f565b5b8360020a9150848211156200109b576200109a62000f8f565b5b506200110b565b5060208310610133831016604e8410600b8410161715620010dc5782820a905083811115620010d657620010d562000f8f565b5b6200110b565b620010eb848484600162000fcb565b9250905081840481111562001105576200110462000f8f565b5b81810290505b9392505050565b600060ff82169050919050565b60006200112c8262000c7a565b9150620011398362001112565b9250620011687fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462001026565b905092915050565b60006200117d8262000c7a565b91506200118a8362000c7a565b92508282026200119a8162000c7a565b91508282048414831517620011b457620011b362000f8f565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620011f78262000c7a565b9150620012048362000c7a565b925082620012175762001216620011bb565b5b828204905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200126b60208362001222565b9150620012788262001233565b602082019050919050565b600060208201905081810360008301526200129e816200125c565b9050919050565b60008115159050919050565b620012bc81620012a5565b82525050565b6000602082019050620012d96000830184620012b1565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001317601f8362001222565b91506200132482620012df565b602082019050919050565b600060208201905081810360008301526200134a8162001308565b9050919050565b60006200135e8262000c7a565b91506200136b8362000c7a565b925082820190508082111562001386576200138562000f8f565b5b92915050565b620013978162000c7a565b82525050565b6000602082019050620013b460008301846200138c565b92915050565b60805160a051614e206200140a600039600081816112860152818161192801526127c2015260008181610f390152818161276a015281816136410152818161372201526137490152614e206000f3fe6080604052600436106102815760003560e01c8063914eb66a1161014f578063cd73ab02116100c1578063e4748b9e1161007a578063e4748b9e146109d1578063e884f260146109fc578063f023f57314610a27578063f2fde38b14610a50578063f887ea4014610a79578063f8b45b0514610aa457610288565b8063cd73ab02146108ad578063d14df239146108d6578063dd62ed3e14610901578063e0f3ccf51461093e578063e1bc339414610969578063e2f45605146109a657610288565b8063a9059cbb11610113578063a9059cbb14610789578063b62496f5146107c6578063bbc0c74214610803578063c02466681461082e578063c3f70b5214610857578063c81d92461461088257610288565b8063914eb66a146106b8578063924de9b7146106cf57806395d89b41146106f85780639a7a23d614610723578063a457c2d71461074c57610288565b8063467abe0a116101f35780636ddd1713116101ac5780636ddd1713146105a857806370a08231146105d357806373a94292146106105780637571336a1461063b578063809d458d146106645780638da5cb5b1461068d57610288565b8063467abe0a1461049657806349bd5a5e146104bf5780634a62bb65146104ea5780634fbee1931461051557806363ee4d1c14610552578063680182261461057d57610288565b80631694505e116102455780631694505e1461037257806318160ddd1461039d5780631d933a4a146103c857806323b872dd146103f1578063313ce5671461042e578063395093511461045957610288565b806301339c211461028d57806306fdde03146102a4578063095ea7b3146102cf57806309d6bf0a1461030c5780630b006d601461034957610288565b3661028857005b600080fd5b34801561029957600080fd5b506102a2610acf565b005b3480156102b057600080fd5b506102b9610bf5565b6040516102c69190613980565b60405180910390f35b3480156102db57600080fd5b506102f660048036038101906102f19190613a3b565b610c87565b6040516103039190613a96565b60405180910390f35b34801561031857600080fd5b50610333600480360381019061032e9190613ab1565b610ca5565b6040516103409190613a96565b60405180910390f35b34801561035557600080fd5b50610370600480360381019061036b9190613ab1565b610e15565b005b34801561037e57600080fd5b50610387610f37565b6040516103949190613b3d565b60405180910390f35b3480156103a957600080fd5b506103b2610f5b565b6040516103bf9190613b67565b60405180910390f35b3480156103d457600080fd5b506103ef60048036038101906103ea9190613ab1565b610f65565b005b3480156103fd57600080fd5b5061041860048036038101906104139190613b82565b611017565b6040516104259190613a96565b60405180910390f35b34801561043a57600080fd5b5061044361110f565b6040516104509190613bf1565b60405180910390f35b34801561046557600080fd5b50610480600480360381019061047b9190613a3b565b611126565b60405161048d9190613a96565b60405180910390f35b3480156104a257600080fd5b506104bd60048036038101906104b89190613ab1565b6111d2565b005b3480156104cb57600080fd5b506104d4611284565b6040516104e19190613c1b565b60405180910390f35b3480156104f657600080fd5b506104ff6112a8565b60405161050c9190613a96565b60405180910390f35b34801561052157600080fd5b5061053c60048036038101906105379190613c36565b6112bb565b6040516105499190613a96565b60405180910390f35b34801561055e57600080fd5b50610567611311565b6040516105749190613b67565b60405180910390f35b34801561058957600080fd5b50610592611317565b60405161059f9190613b67565b60405180910390f35b3480156105b457600080fd5b506105bd61131d565b6040516105ca9190613a96565b60405180910390f35b3480156105df57600080fd5b506105fa60048036038101906105f59190613c36565b611330565b6040516106079190613b67565b60405180910390f35b34801561061c57600080fd5b50610625611378565b6040516106329190613b67565b60405180910390f35b34801561064757600080fd5b50610662600480360381019061065d9190613c8f565b61137e565b005b34801561067057600080fd5b5061068b60048036038101906106869190613c36565b611470565b005b34801561069957600080fd5b506106a26115c7565b6040516106af9190613c1b565b60405180910390f35b3480156106c457600080fd5b506106cd6115f1565b005b3480156106db57600080fd5b506106f660048036038101906106f19190613ccf565b611749565b005b34801561070457600080fd5b5061070d6117fd565b60405161071a9190613980565b60405180910390f35b34801561072f57600080fd5b5061074a60048036038101906107459190613c8f565b61188f565b005b34801561075857600080fd5b50610773600480360381019061076e9190613a3b565b6119c2565b6040516107809190613a96565b60405180910390f35b34801561079557600080fd5b506107b060048036038101906107ab9190613a3b565b611aad565b6040516107bd9190613a96565b60405180910390f35b3480156107d257600080fd5b506107ed60048036038101906107e89190613c36565b611acb565b6040516107fa9190613a96565b60405180910390f35b34801561080f57600080fd5b50610818611aeb565b6040516108259190613a96565b60405180910390f35b34801561083a57600080fd5b5061085560048036038101906108509190613c8f565b611afe565b005b34801561086357600080fd5b5061086c611c3e565b6040516108799190613b67565b60405180910390f35b34801561088e57600080fd5b50610897611c44565b6040516108a49190613b67565b60405180910390f35b3480156108b957600080fd5b506108d460048036038101906108cf9190613ab1565b611c4a565b005b3480156108e257600080fd5b506108eb611d6c565b6040516108f89190613a96565b60405180910390f35b34801561090d57600080fd5b5061092860048036038101906109239190613cfc565b611d7f565b6040516109359190613b67565b60405180910390f35b34801561094a57600080fd5b50610953611e06565b6040516109609190613b67565b60405180910390f35b34801561097557600080fd5b50610990600480360381019061098b9190613c36565b611e0c565b60405161099d9190613a96565b60405180910390f35b3480156109b257600080fd5b506109bb611e2c565b6040516109c89190613b67565b60405180910390f35b3480156109dd57600080fd5b506109e6611e32565b6040516109f39190613b67565b60405180910390f35b348015610a0857600080fd5b50610a11611e38565b604051610a1e9190613a96565b60405180910390f35b348015610a3357600080fd5b50610a4e6004803603810190610a499190613c36565b611ef3565b005b348015610a5c57600080fd5b50610a776004803603810190610a729190613c36565b61204a565b005b348015610a8557600080fd5b50610a8e612210565b604051610a9b9190613c1b565b60405180910390f35b348015610ab057600080fd5b50610ab9612236565b604051610ac69190613b67565b60405180910390f35b610ad761223c565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5d90613d88565b60405180910390fd5b600d60019054906101000a900460ff1615610bb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bad90613df4565b60405180910390fd5b6001600d60016101000a81548160ff021916908315150217905550436010819055506001600d60026101000a81548160ff021916908315150217905550565b606060038054610c0490613e43565b80601f0160208091040260200160405190810160405280929190818152602001828054610c3090613e43565b8015610c7d5780601f10610c5257610100808354040283529160200191610c7d565b820191906000526020600020905b815481529060010190602001808311610c6057829003601f168201915b5050505050905090565b6000610c9b610c9461223c565b8484612244565b6001905092915050565b6000610caf61223c565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3590613d88565b60405180910390fd5b620186a06001610d4c610f5b565b610d569190613ea3565b610d609190613f14565b821015610da2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9990613fb7565b60405180910390fd5b6127106064610daf610f5b565b610db99190613ea3565b610dc39190613f14565b821115610e05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfc90614023565b60405180910390fd5b81600b8190555060019050919050565b610e1d61223c565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610eac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea390613d88565b60405180910390fd5b6127106032610eb9610f5b565b610ec39190613ea3565b610ecd9190613f14565b811015610f0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f069061408f565b60405180910390fd5b610f1761110f565b600a610f2391906141e2565b81610f2e9190613ea3565b600c8190555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610f6d61223c565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ffc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff390613d88565b60405180910390fd5b611388601254111561100d57600080fd5b8060128190555050565b600061102484848461240d565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061106f61223c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156110ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e69061429f565b60405180910390fd5b611103856110fb61223c565b858403612244565b60019150509392505050565b6000600560009054906101000a900460ff16905090565b60006111c861113361223c565b84846001600061114161223c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111c391906142bf565b612244565b6001905092915050565b6111da61223c565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611269576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126090613d88565b60405180910390fd5b611388601154111561127a57600080fd5b8060118190555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600d60009054906101000a900460ff1681565b6000601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60105481565b60155481565b600d60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60165481565b61138661223c565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611415576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140c90613d88565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61147861223c565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611507576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fe90613d88565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa982575859d7ad2f390dc12b23f7dab8bbda047f9d0140ac68344b27bf34bfb460405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6115f961223c565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611688576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167f90613d88565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61175161223c565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d790613d88565b60405180910390fd5b80600d60026101000a81548160ff02191690831515021790555050565b60606004805461180c90613e43565b80601f016020809104026020016040519081016040528092919081815260200182805461183890613e43565b80156118855780601f1061185a57610100808354040283529160200191611885565b820191906000526020600020905b81548152906001019060200180831161186857829003601f168201915b5050505050905090565b61189761223c565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611926576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191d90613d88565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036119b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ab90614365565b60405180910390fd5b6119be8282612fd6565b5050565b600080600160006119d161223c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611a8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a85906143f7565b60405180910390fd5b611aa2611a9961223c565b85858403612244565b600191505092915050565b6000611ac1611aba61223c565b848461240d565b6001905092915050565b60196020528060005260406000206000915054906101000a900460ff1681565b600d60019054906101000a900460ff1681565b611b0661223c565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8c90613d88565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611c329190613a96565b60405180910390a25050565b600a5481565b60145481565b611c5261223c565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ce1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd890613d88565b60405180910390fd5b612710600a611cee610f5b565b611cf89190613ea3565b611d029190613f14565b811015611d44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3b90614463565b60405180910390fd5b611d4c61110f565b600a611d5891906141e2565b81611d639190613ea3565b600a8190555050565b600f60009054906101000a900460ff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60125481565b60186020528060005260406000206000915054906101000a900460ff1681565b600b5481565b60115481565b6000611e4261223c565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ed1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec890613d88565b60405180910390fd5b6000600f60006101000a81548160ff0219169083151502179055506001905090565b611efb61223c565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8190613d88565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f94cc1498503be9a145caf3e96f856665f29cf9b26c7179a93fbe1c1e5f56a0fd60405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61205261223c565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d890613d88565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612150576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612147906144f5565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036122b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122aa90614587565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612322576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231990614619565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516124009190613b67565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361247c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612473906146ab565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036124eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e29061473d565b60405180910390fd5b60008103612504576124ff83836000613077565b612fd1565b600d60009054906101000a900460ff1615612bc7576125216115c7565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561258f575061255f6115c7565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156125c85750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612602575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561261b5750600760149054906101000a900460ff16155b15612bc657600d60019054906101000a900460ff1661271557601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806126d55750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612714576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270b906147a9565b60405180910390fd5b5b600f60009054906101000a900460ff16156128dd576127326115c7565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156127b957507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561281157507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156128dc5743600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612897576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288e90614861565b60405180910390fd5b43600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156129805750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612a2757600a548111156129ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c1906148f3565b60405180910390fd5b600c546129d683611330565b826129e191906142bf565b1115612a22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a199061495f565b60405180910390fd5b612bc5565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612aca5750601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612b1957600a54811115612b14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0b906149f1565b60405180910390fd5b612bc4565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612bc357600c54612b7683611330565b82612b8191906142bf565b1115612bc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bb99061495f565b60405180910390fd5b5b5b5b5b5b6000612bd230611330565b90506000600b548210159050808015612bf75750600d60029054906101000a900460ff165b8015612c105750600760149054906101000a900460ff16155b8015612c665750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612cbc5750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612d125750601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612d215750601454601654115b15612d71576001600760146101000a81548160ff021916908315150217905550612d55612d50836013546132f6565b61330f565b6000600760146101000a81548160ff0219169083151502179055505b6000600760149054906101000a900460ff16159050601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612e275750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612e3157600090505b60008115612f9257601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e9457506000601254115b15612ec957612ec2612710612eb46012548861349f90919063ffffffff16565b61351990919063ffffffff16565b9050612f6e565b601960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612f2457506000601154115b15612f6d57612f52612710612f446011548861349f90919063ffffffff16565b61351990919063ffffffff16565b905060166000815480929190612f6790614a11565b91905055505b5b6000811115612f8357612f82873083613077565b5b8085612f8f9190614a59565b94505b612f9d878787613077565b60155460165410158015612fbd5750600d60009054906101000a900460ff165b15612fcc57612fca613563565b505b505050505b505050565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036130e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130dd906146ab565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613155576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161314c9061473d565b60405180910390fd5b613160838383613598565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156131e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131dd90614aff565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461327991906142bf565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516132dd9190613b67565b60405180910390a36132f084848461359d565b50505050565b60008183116133055782613307565b815b905092915050565b600080820361331e575061349c565b600082905061332c816135a2565b6000479050600061334760c88361349f90919063ffffffff16565b905060006133606103e88361351990919063ffffffff16565b9050600061337782856137df90919063ffffffff16565b9050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516133bf90614b50565b60006040518083038185875af1925050503d80600081146133fc576040519150601f19603f3d011682016040523d82523d6000602084013e613401565b606091505b505080965050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168160405161344d90614b50565b60006040518083038185875af1925050503d806000811461348a576040519150601f19603f3d011682016040523d82523d6000602084013e61348f565b606091505b5050809650505050505050505b50565b60008083036134b15760009050613513565b600082846134bf9190613ea3565b90508284826134ce9190613f14565b1461350e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161350590614bd7565b60405180910390fd5b809150505b92915050565b600061355b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613829565b905092915050565b600080600d60006101000a81548160ff0219169083151502179055506101f46011819055506101f46012819055506001905090565b505050565b505050565b6000600267ffffffffffffffff8111156135bf576135be614bf7565b5b6040519080825280602002602001820160405280156135ed5781602001602082028036833780820191505090505b509050308160008151811061360557613604614c26565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156136aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136ce9190614c6a565b816001815181106136e2576136e1614c26565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613747307f000000000000000000000000000000000000000000000000000000000000000084612244565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016137a9959493929190614d90565b600060405180830381600087803b1580156137c357600080fd5b505af11580156137d7573d6000803e3d6000fd5b505050505050565b600061382183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061388c565b905092915050565b60008083118290613870576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138679190613980565b60405180910390fd5b506000838561387f9190613f14565b9050809150509392505050565b60008383111582906138d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138cb9190613980565b60405180910390fd5b50600083856138e39190614a59565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561392a57808201518184015260208101905061390f565b60008484015250505050565b6000601f19601f8301169050919050565b6000613952826138f0565b61395c81856138fb565b935061396c81856020860161390c565b61397581613936565b840191505092915050565b6000602082019050818103600083015261399a8184613947565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006139d2826139a7565b9050919050565b6139e2816139c7565b81146139ed57600080fd5b50565b6000813590506139ff816139d9565b92915050565b6000819050919050565b613a1881613a05565b8114613a2357600080fd5b50565b600081359050613a3581613a0f565b92915050565b60008060408385031215613a5257613a516139a2565b5b6000613a60858286016139f0565b9250506020613a7185828601613a26565b9150509250929050565b60008115159050919050565b613a9081613a7b565b82525050565b6000602082019050613aab6000830184613a87565b92915050565b600060208284031215613ac757613ac66139a2565b5b6000613ad584828501613a26565b91505092915050565b6000819050919050565b6000613b03613afe613af9846139a7565b613ade565b6139a7565b9050919050565b6000613b1582613ae8565b9050919050565b6000613b2782613b0a565b9050919050565b613b3781613b1c565b82525050565b6000602082019050613b526000830184613b2e565b92915050565b613b6181613a05565b82525050565b6000602082019050613b7c6000830184613b58565b92915050565b600080600060608486031215613b9b57613b9a6139a2565b5b6000613ba9868287016139f0565b9350506020613bba868287016139f0565b9250506040613bcb86828701613a26565b9150509250925092565b600060ff82169050919050565b613beb81613bd5565b82525050565b6000602082019050613c066000830184613be2565b92915050565b613c15816139c7565b82525050565b6000602082019050613c306000830184613c0c565b92915050565b600060208284031215613c4c57613c4b6139a2565b5b6000613c5a848285016139f0565b91505092915050565b613c6c81613a7b565b8114613c7757600080fd5b50565b600081359050613c8981613c63565b92915050565b60008060408385031215613ca657613ca56139a2565b5b6000613cb4858286016139f0565b9250506020613cc585828601613c7a565b9150509250929050565b600060208284031215613ce557613ce46139a2565b5b6000613cf384828501613c7a565b91505092915050565b60008060408385031215613d1357613d126139a2565b5b6000613d21858286016139f0565b9250506020613d32858286016139f0565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613d726020836138fb565b9150613d7d82613d3c565b602082019050919050565b60006020820190508181036000830152613da181613d65565b9050919050565b7f546f6b656e206c61756e63686564000000000000000000000000000000000000600082015250565b6000613dde600e836138fb565b9150613de982613da8565b602082019050919050565b60006020820190508181036000830152613e0d81613dd1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613e5b57607f821691505b602082108103613e6e57613e6d613e14565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613eae82613a05565b9150613eb983613a05565b9250828202613ec781613a05565b91508282048414831517613ede57613edd613e74565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613f1f82613a05565b9150613f2a83613a05565b925082613f3a57613f39613ee5565b5b828204905092915050565b7f5377617020616d6f756e74203c20302e3030312520746f74616c20737570706c60008201527f792e000000000000000000000000000000000000000000000000000000000000602082015250565b6000613fa16022836138fb565b9150613fac82613f45565b604082019050919050565b60006020820190508181036000830152613fd081613f94565b9050919050565b7f5377617020616d6f756e74203e20312520746f74616c20737570706c792e0000600082015250565b600061400d601e836138fb565b915061401882613fd7565b602082019050919050565b6000602082019050818103600083015261403c81614000565b9050919050565b7f6d617857616c6c6574203c20302e352500000000000000000000000000000000600082015250565b60006140796010836138fb565b915061408482614043565b602082019050919050565b600060208201905081810360008301526140a88161406c565b9050919050565b60008160011c9050919050565b6000808291508390505b6001851115614106578086048111156140e2576140e1613e74565b5b60018516156140f15780820291505b80810290506140ff856140af565b94506140c6565b94509492505050565b60008261411f57600190506141db565b8161412d57600090506141db565b8160018114614143576002811461414d5761417c565b60019150506141db565b60ff84111561415f5761415e613e74565b5b8360020a91508482111561417657614175613e74565b5b506141db565b5060208310610133831016604e8410600b84101617156141b15782820a9050838111156141ac576141ab613e74565b5b6141db565b6141be84848460016140bc565b925090508184048111156141d5576141d4613e74565b5b81810290505b9392505050565b60006141ed82613a05565b91506141f883613bd5565b92506142257fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461410f565b905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006142896028836138fb565b91506142948261422d565b604082019050919050565b600060208201905081810360008301526142b88161427c565b9050919050565b60006142ca82613a05565b91506142d583613a05565b92508282019050808211156142ed576142ec613e74565b5b92915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b600061434f6039836138fb565b915061435a826142f3565b604082019050919050565b6000602082019050818103600083015261437e81614342565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006143e16025836138fb565b91506143ec82614385565b604082019050919050565b60006020820190508181036000830152614410816143d4565b9050919050565b7f6d61785472616e73616374696f6e203c20302e31250000000000000000000000600082015250565b600061444d6015836138fb565b915061445882614417565b602082019050919050565b6000602082019050818103600083015261447c81614440565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006144df6026836138fb565b91506144ea82614483565b604082019050919050565b6000602082019050818103600083015261450e816144d2565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006145716024836138fb565b915061457c82614515565b604082019050919050565b600060208201905081810360008301526145a081614564565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006146036022836138fb565b915061460e826145a7565b604082019050919050565b60006020820190508181036000830152614632816145f6565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006146956025836138fb565b91506146a082614639565b604082019050919050565b600060208201905081810360008301526146c481614688565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006147276023836138fb565b9150614732826146cb565b604082019050919050565b600060208201905081810360008301526147568161471a565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006147936016836138fb565b915061479e8261475d565b602082019050919050565b600060208201905081810360008301526147c281614786565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b600061484b6049836138fb565b9150614856826147c9565b606082019050919050565b6000602082019050818103600083015261487a8161483e565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e2e0000000000000000000000000000000000602082015250565b60006148dd602f836138fb565b91506148e882614881565b604082019050919050565b6000602082019050818103600083015261490c816148d0565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006149496013836138fb565b915061495482614913565b602082019050919050565b600060208201905081810360008301526149788161493c565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e2e00000000000000000000000000000000602082015250565b60006149db6030836138fb565b91506149e68261497f565b604082019050919050565b60006020820190508181036000830152614a0a816149ce565b9050919050565b6000614a1c82613a05565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614a4e57614a4d613e74565b5b600182019050919050565b6000614a6482613a05565b9150614a6f83613a05565b9250828203905081811115614a8757614a86613e74565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614ae96026836138fb565b9150614af482614a8d565b604082019050919050565b60006020820190508181036000830152614b1881614adc565b9050919050565b600081905092915050565b50565b6000614b3a600083614b1f565b9150614b4582614b2a565b600082019050919050565b6000614b5b82614b2d565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614bc16021836138fb565b9150614bcc82614b65565b604082019050919050565b60006020820190508181036000830152614bf081614bb4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614c64816139d9565b92915050565b600060208284031215614c8057614c7f6139a2565b5b6000614c8e84828501614c55565b91505092915050565b6000819050919050565b6000614cbc614cb7614cb284614c97565b613ade565b613a05565b9050919050565b614ccc81614ca1565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614d07816139c7565b82525050565b6000614d198383614cfe565b60208301905092915050565b6000602082019050919050565b6000614d3d82614cd2565b614d478185614cdd565b9350614d5283614cee565b8060005b83811015614d83578151614d6a8882614d0d565b9750614d7583614d25565b925050600181019050614d56565b5085935050505092915050565b600060a082019050614da56000830188613b58565b614db26020830187614cc3565b8181036040830152614dc48186614d32565b9050614dd36060830185613c0c565b614de06080830184613b58565b969550505050505056fea26469706673582212202634d345615c8d153471c6c6ab5f6829794d3ad29bcb86a2084ae4e520bc937664736f6c63430008140033

Deployed Bytecode

0x6080604052600436106102815760003560e01c8063914eb66a1161014f578063cd73ab02116100c1578063e4748b9e1161007a578063e4748b9e146109d1578063e884f260146109fc578063f023f57314610a27578063f2fde38b14610a50578063f887ea4014610a79578063f8b45b0514610aa457610288565b8063cd73ab02146108ad578063d14df239146108d6578063dd62ed3e14610901578063e0f3ccf51461093e578063e1bc339414610969578063e2f45605146109a657610288565b8063a9059cbb11610113578063a9059cbb14610789578063b62496f5146107c6578063bbc0c74214610803578063c02466681461082e578063c3f70b5214610857578063c81d92461461088257610288565b8063914eb66a146106b8578063924de9b7146106cf57806395d89b41146106f85780639a7a23d614610723578063a457c2d71461074c57610288565b8063467abe0a116101f35780636ddd1713116101ac5780636ddd1713146105a857806370a08231146105d357806373a94292146106105780637571336a1461063b578063809d458d146106645780638da5cb5b1461068d57610288565b8063467abe0a1461049657806349bd5a5e146104bf5780634a62bb65146104ea5780634fbee1931461051557806363ee4d1c14610552578063680182261461057d57610288565b80631694505e116102455780631694505e1461037257806318160ddd1461039d5780631d933a4a146103c857806323b872dd146103f1578063313ce5671461042e578063395093511461045957610288565b806301339c211461028d57806306fdde03146102a4578063095ea7b3146102cf57806309d6bf0a1461030c5780630b006d601461034957610288565b3661028857005b600080fd5b34801561029957600080fd5b506102a2610acf565b005b3480156102b057600080fd5b506102b9610bf5565b6040516102c69190613980565b60405180910390f35b3480156102db57600080fd5b506102f660048036038101906102f19190613a3b565b610c87565b6040516103039190613a96565b60405180910390f35b34801561031857600080fd5b50610333600480360381019061032e9190613ab1565b610ca5565b6040516103409190613a96565b60405180910390f35b34801561035557600080fd5b50610370600480360381019061036b9190613ab1565b610e15565b005b34801561037e57600080fd5b50610387610f37565b6040516103949190613b3d565b60405180910390f35b3480156103a957600080fd5b506103b2610f5b565b6040516103bf9190613b67565b60405180910390f35b3480156103d457600080fd5b506103ef60048036038101906103ea9190613ab1565b610f65565b005b3480156103fd57600080fd5b5061041860048036038101906104139190613b82565b611017565b6040516104259190613a96565b60405180910390f35b34801561043a57600080fd5b5061044361110f565b6040516104509190613bf1565b60405180910390f35b34801561046557600080fd5b50610480600480360381019061047b9190613a3b565b611126565b60405161048d9190613a96565b60405180910390f35b3480156104a257600080fd5b506104bd60048036038101906104b89190613ab1565b6111d2565b005b3480156104cb57600080fd5b506104d4611284565b6040516104e19190613c1b565b60405180910390f35b3480156104f657600080fd5b506104ff6112a8565b60405161050c9190613a96565b60405180910390f35b34801561052157600080fd5b5061053c60048036038101906105379190613c36565b6112bb565b6040516105499190613a96565b60405180910390f35b34801561055e57600080fd5b50610567611311565b6040516105749190613b67565b60405180910390f35b34801561058957600080fd5b50610592611317565b60405161059f9190613b67565b60405180910390f35b3480156105b457600080fd5b506105bd61131d565b6040516105ca9190613a96565b60405180910390f35b3480156105df57600080fd5b506105fa60048036038101906105f59190613c36565b611330565b6040516106079190613b67565b60405180910390f35b34801561061c57600080fd5b50610625611378565b6040516106329190613b67565b60405180910390f35b34801561064757600080fd5b50610662600480360381019061065d9190613c8f565b61137e565b005b34801561067057600080fd5b5061068b60048036038101906106869190613c36565b611470565b005b34801561069957600080fd5b506106a26115c7565b6040516106af9190613c1b565b60405180910390f35b3480156106c457600080fd5b506106cd6115f1565b005b3480156106db57600080fd5b506106f660048036038101906106f19190613ccf565b611749565b005b34801561070457600080fd5b5061070d6117fd565b60405161071a9190613980565b60405180910390f35b34801561072f57600080fd5b5061074a60048036038101906107459190613c8f565b61188f565b005b34801561075857600080fd5b50610773600480360381019061076e9190613a3b565b6119c2565b6040516107809190613a96565b60405180910390f35b34801561079557600080fd5b506107b060048036038101906107ab9190613a3b565b611aad565b6040516107bd9190613a96565b60405180910390f35b3480156107d257600080fd5b506107ed60048036038101906107e89190613c36565b611acb565b6040516107fa9190613a96565b60405180910390f35b34801561080f57600080fd5b50610818611aeb565b6040516108259190613a96565b60405180910390f35b34801561083a57600080fd5b5061085560048036038101906108509190613c8f565b611afe565b005b34801561086357600080fd5b5061086c611c3e565b6040516108799190613b67565b60405180910390f35b34801561088e57600080fd5b50610897611c44565b6040516108a49190613b67565b60405180910390f35b3480156108b957600080fd5b506108d460048036038101906108cf9190613ab1565b611c4a565b005b3480156108e257600080fd5b506108eb611d6c565b6040516108f89190613a96565b60405180910390f35b34801561090d57600080fd5b5061092860048036038101906109239190613cfc565b611d7f565b6040516109359190613b67565b60405180910390f35b34801561094a57600080fd5b50610953611e06565b6040516109609190613b67565b60405180910390f35b34801561097557600080fd5b50610990600480360381019061098b9190613c36565b611e0c565b60405161099d9190613a96565b60405180910390f35b3480156109b257600080fd5b506109bb611e2c565b6040516109c89190613b67565b60405180910390f35b3480156109dd57600080fd5b506109e6611e32565b6040516109f39190613b67565b60405180910390f35b348015610a0857600080fd5b50610a11611e38565b604051610a1e9190613a96565b60405180910390f35b348015610a3357600080fd5b50610a4e6004803603810190610a499190613c36565b611ef3565b005b348015610a5c57600080fd5b50610a776004803603810190610a729190613c36565b61204a565b005b348015610a8557600080fd5b50610a8e612210565b604051610a9b9190613c1b565b60405180910390f35b348015610ab057600080fd5b50610ab9612236565b604051610ac69190613b67565b60405180910390f35b610ad761223c565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5d90613d88565b60405180910390fd5b600d60019054906101000a900460ff1615610bb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bad90613df4565b60405180910390fd5b6001600d60016101000a81548160ff021916908315150217905550436010819055506001600d60026101000a81548160ff021916908315150217905550565b606060038054610c0490613e43565b80601f0160208091040260200160405190810160405280929190818152602001828054610c3090613e43565b8015610c7d5780601f10610c5257610100808354040283529160200191610c7d565b820191906000526020600020905b815481529060010190602001808311610c6057829003601f168201915b5050505050905090565b6000610c9b610c9461223c565b8484612244565b6001905092915050565b6000610caf61223c565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3590613d88565b60405180910390fd5b620186a06001610d4c610f5b565b610d569190613ea3565b610d609190613f14565b821015610da2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9990613fb7565b60405180910390fd5b6127106064610daf610f5b565b610db99190613ea3565b610dc39190613f14565b821115610e05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfc90614023565b60405180910390fd5b81600b8190555060019050919050565b610e1d61223c565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610eac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea390613d88565b60405180910390fd5b6127106032610eb9610f5b565b610ec39190613ea3565b610ecd9190613f14565b811015610f0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f069061408f565b60405180910390fd5b610f1761110f565b600a610f2391906141e2565b81610f2e9190613ea3565b600c8190555050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610f6d61223c565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ffc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff390613d88565b60405180910390fd5b611388601254111561100d57600080fd5b8060128190555050565b600061102484848461240d565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061106f61223c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156110ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e69061429f565b60405180910390fd5b611103856110fb61223c565b858403612244565b60019150509392505050565b6000600560009054906101000a900460ff16905090565b60006111c861113361223c565b84846001600061114161223c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111c391906142bf565b612244565b6001905092915050565b6111da61223c565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611269576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126090613d88565b60405180910390fd5b611388601154111561127a57600080fd5b8060118190555050565b7f00000000000000000000000076bff3dd6368bfd9c2788a0e379f8a2dd8838ea881565b600d60009054906101000a900460ff1681565b6000601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60105481565b60155481565b600d60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60165481565b61138661223c565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611415576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140c90613d88565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61147861223c565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611507576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fe90613d88565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa982575859d7ad2f390dc12b23f7dab8bbda047f9d0140ac68344b27bf34bfb460405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6115f961223c565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611688576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167f90613d88565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61175161223c565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d790613d88565b60405180910390fd5b80600d60026101000a81548160ff02191690831515021790555050565b60606004805461180c90613e43565b80601f016020809104026020016040519081016040528092919081815260200182805461183890613e43565b80156118855780601f1061185a57610100808354040283529160200191611885565b820191906000526020600020905b81548152906001019060200180831161186857829003601f168201915b5050505050905090565b61189761223c565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611926576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191d90613d88565b60405180910390fd5b7f00000000000000000000000076bff3dd6368bfd9c2788a0e379f8a2dd8838ea873ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036119b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ab90614365565b60405180910390fd5b6119be8282612fd6565b5050565b600080600160006119d161223c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611a8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a85906143f7565b60405180910390fd5b611aa2611a9961223c565b85858403612244565b600191505092915050565b6000611ac1611aba61223c565b848461240d565b6001905092915050565b60196020528060005260406000206000915054906101000a900460ff1681565b600d60019054906101000a900460ff1681565b611b0661223c565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8c90613d88565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611c329190613a96565b60405180910390a25050565b600a5481565b60145481565b611c5261223c565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ce1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd890613d88565b60405180910390fd5b612710600a611cee610f5b565b611cf89190613ea3565b611d029190613f14565b811015611d44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3b90614463565b60405180910390fd5b611d4c61110f565b600a611d5891906141e2565b81611d639190613ea3565b600a8190555050565b600f60009054906101000a900460ff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60125481565b60186020528060005260406000206000915054906101000a900460ff1681565b600b5481565b60115481565b6000611e4261223c565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ed1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec890613d88565b60405180910390fd5b6000600f60006101000a81548160ff0219169083151502179055506001905090565b611efb61223c565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8190613d88565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f94cc1498503be9a145caf3e96f856665f29cf9b26c7179a93fbe1c1e5f56a0fd60405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61205261223c565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d890613d88565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612150576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612147906144f5565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036122b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122aa90614587565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612322576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231990614619565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516124009190613b67565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361247c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612473906146ab565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036124eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e29061473d565b60405180910390fd5b60008103612504576124ff83836000613077565b612fd1565b600d60009054906101000a900460ff1615612bc7576125216115c7565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561258f575061255f6115c7565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156125c85750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612602575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561261b5750600760149054906101000a900460ff16155b15612bc657600d60019054906101000a900460ff1661271557601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806126d55750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612714576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270b906147a9565b60405180910390fd5b5b600f60009054906101000a900460ff16156128dd576127326115c7565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156127b957507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561281157507f00000000000000000000000076bff3dd6368bfd9c2788a0e379f8a2dd8838ea873ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156128dc5743600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612897576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288e90614861565b60405180910390fd5b43600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156129805750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612a2757600a548111156129ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c1906148f3565b60405180910390fd5b600c546129d683611330565b826129e191906142bf565b1115612a22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a199061495f565b60405180910390fd5b612bc5565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612aca5750601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612b1957600a54811115612b14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0b906149f1565b60405180910390fd5b612bc4565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612bc357600c54612b7683611330565b82612b8191906142bf565b1115612bc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bb99061495f565b60405180910390fd5b5b5b5b5b5b6000612bd230611330565b90506000600b548210159050808015612bf75750600d60029054906101000a900460ff165b8015612c105750600760149054906101000a900460ff16155b8015612c665750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612cbc5750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612d125750601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612d215750601454601654115b15612d71576001600760146101000a81548160ff021916908315150217905550612d55612d50836013546132f6565b61330f565b6000600760146101000a81548160ff0219169083151502179055505b6000600760149054906101000a900460ff16159050601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612e275750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612e3157600090505b60008115612f9257601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e9457506000601254115b15612ec957612ec2612710612eb46012548861349f90919063ffffffff16565b61351990919063ffffffff16565b9050612f6e565b601960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612f2457506000601154115b15612f6d57612f52612710612f446011548861349f90919063ffffffff16565b61351990919063ffffffff16565b905060166000815480929190612f6790614a11565b91905055505b5b6000811115612f8357612f82873083613077565b5b8085612f8f9190614a59565b94505b612f9d878787613077565b60155460165410158015612fbd5750600d60009054906101000a900460ff165b15612fcc57612fca613563565b505b505050505b505050565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036130e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130dd906146ab565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613155576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161314c9061473d565b60405180910390fd5b613160838383613598565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156131e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131dd90614aff565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461327991906142bf565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516132dd9190613b67565b60405180910390a36132f084848461359d565b50505050565b60008183116133055782613307565b815b905092915050565b600080820361331e575061349c565b600082905061332c816135a2565b6000479050600061334760c88361349f90919063ffffffff16565b905060006133606103e88361351990919063ffffffff16565b9050600061337782856137df90919063ffffffff16565b9050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516133bf90614b50565b60006040518083038185875af1925050503d80600081146133fc576040519150601f19603f3d011682016040523d82523d6000602084013e613401565b606091505b505080965050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168160405161344d90614b50565b60006040518083038185875af1925050503d806000811461348a576040519150601f19603f3d011682016040523d82523d6000602084013e61348f565b606091505b5050809650505050505050505b50565b60008083036134b15760009050613513565b600082846134bf9190613ea3565b90508284826134ce9190613f14565b1461350e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161350590614bd7565b60405180910390fd5b809150505b92915050565b600061355b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613829565b905092915050565b600080600d60006101000a81548160ff0219169083151502179055506101f46011819055506101f46012819055506001905090565b505050565b505050565b6000600267ffffffffffffffff8111156135bf576135be614bf7565b5b6040519080825280602002602001820160405280156135ed5781602001602082028036833780820191505090505b509050308160008151811061360557613604614c26565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156136aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136ce9190614c6a565b816001815181106136e2576136e1614c26565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613747307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612244565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016137a9959493929190614d90565b600060405180830381600087803b1580156137c357600080fd5b505af11580156137d7573d6000803e3d6000fd5b505050505050565b600061382183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061388c565b905092915050565b60008083118290613870576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138679190613980565b60405180910390fd5b506000838561387f9190613f14565b9050809150509392505050565b60008383111582906138d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138cb9190613980565b60405180910390fd5b50600083856138e39190614a59565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561392a57808201518184015260208101905061390f565b60008484015250505050565b6000601f19601f8301169050919050565b6000613952826138f0565b61395c81856138fb565b935061396c81856020860161390c565b61397581613936565b840191505092915050565b6000602082019050818103600083015261399a8184613947565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006139d2826139a7565b9050919050565b6139e2816139c7565b81146139ed57600080fd5b50565b6000813590506139ff816139d9565b92915050565b6000819050919050565b613a1881613a05565b8114613a2357600080fd5b50565b600081359050613a3581613a0f565b92915050565b60008060408385031215613a5257613a516139a2565b5b6000613a60858286016139f0565b9250506020613a7185828601613a26565b9150509250929050565b60008115159050919050565b613a9081613a7b565b82525050565b6000602082019050613aab6000830184613a87565b92915050565b600060208284031215613ac757613ac66139a2565b5b6000613ad584828501613a26565b91505092915050565b6000819050919050565b6000613b03613afe613af9846139a7565b613ade565b6139a7565b9050919050565b6000613b1582613ae8565b9050919050565b6000613b2782613b0a565b9050919050565b613b3781613b1c565b82525050565b6000602082019050613b526000830184613b2e565b92915050565b613b6181613a05565b82525050565b6000602082019050613b7c6000830184613b58565b92915050565b600080600060608486031215613b9b57613b9a6139a2565b5b6000613ba9868287016139f0565b9350506020613bba868287016139f0565b9250506040613bcb86828701613a26565b9150509250925092565b600060ff82169050919050565b613beb81613bd5565b82525050565b6000602082019050613c066000830184613be2565b92915050565b613c15816139c7565b82525050565b6000602082019050613c306000830184613c0c565b92915050565b600060208284031215613c4c57613c4b6139a2565b5b6000613c5a848285016139f0565b91505092915050565b613c6c81613a7b565b8114613c7757600080fd5b50565b600081359050613c8981613c63565b92915050565b60008060408385031215613ca657613ca56139a2565b5b6000613cb4858286016139f0565b9250506020613cc585828601613c7a565b9150509250929050565b600060208284031215613ce557613ce46139a2565b5b6000613cf384828501613c7a565b91505092915050565b60008060408385031215613d1357613d126139a2565b5b6000613d21858286016139f0565b9250506020613d32858286016139f0565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613d726020836138fb565b9150613d7d82613d3c565b602082019050919050565b60006020820190508181036000830152613da181613d65565b9050919050565b7f546f6b656e206c61756e63686564000000000000000000000000000000000000600082015250565b6000613dde600e836138fb565b9150613de982613da8565b602082019050919050565b60006020820190508181036000830152613e0d81613dd1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613e5b57607f821691505b602082108103613e6e57613e6d613e14565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613eae82613a05565b9150613eb983613a05565b9250828202613ec781613a05565b91508282048414831517613ede57613edd613e74565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613f1f82613a05565b9150613f2a83613a05565b925082613f3a57613f39613ee5565b5b828204905092915050565b7f5377617020616d6f756e74203c20302e3030312520746f74616c20737570706c60008201527f792e000000000000000000000000000000000000000000000000000000000000602082015250565b6000613fa16022836138fb565b9150613fac82613f45565b604082019050919050565b60006020820190508181036000830152613fd081613f94565b9050919050565b7f5377617020616d6f756e74203e20312520746f74616c20737570706c792e0000600082015250565b600061400d601e836138fb565b915061401882613fd7565b602082019050919050565b6000602082019050818103600083015261403c81614000565b9050919050565b7f6d617857616c6c6574203c20302e352500000000000000000000000000000000600082015250565b60006140796010836138fb565b915061408482614043565b602082019050919050565b600060208201905081810360008301526140a88161406c565b9050919050565b60008160011c9050919050565b6000808291508390505b6001851115614106578086048111156140e2576140e1613e74565b5b60018516156140f15780820291505b80810290506140ff856140af565b94506140c6565b94509492505050565b60008261411f57600190506141db565b8161412d57600090506141db565b8160018114614143576002811461414d5761417c565b60019150506141db565b60ff84111561415f5761415e613e74565b5b8360020a91508482111561417657614175613e74565b5b506141db565b5060208310610133831016604e8410600b84101617156141b15782820a9050838111156141ac576141ab613e74565b5b6141db565b6141be84848460016140bc565b925090508184048111156141d5576141d4613e74565b5b81810290505b9392505050565b60006141ed82613a05565b91506141f883613bd5565b92506142257fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461410f565b905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006142896028836138fb565b91506142948261422d565b604082019050919050565b600060208201905081810360008301526142b88161427c565b9050919050565b60006142ca82613a05565b91506142d583613a05565b92508282019050808211156142ed576142ec613e74565b5b92915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b600061434f6039836138fb565b915061435a826142f3565b604082019050919050565b6000602082019050818103600083015261437e81614342565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006143e16025836138fb565b91506143ec82614385565b604082019050919050565b60006020820190508181036000830152614410816143d4565b9050919050565b7f6d61785472616e73616374696f6e203c20302e31250000000000000000000000600082015250565b600061444d6015836138fb565b915061445882614417565b602082019050919050565b6000602082019050818103600083015261447c81614440565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006144df6026836138fb565b91506144ea82614483565b604082019050919050565b6000602082019050818103600083015261450e816144d2565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006145716024836138fb565b915061457c82614515565b604082019050919050565b600060208201905081810360008301526145a081614564565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006146036022836138fb565b915061460e826145a7565b604082019050919050565b60006020820190508181036000830152614632816145f6565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006146956025836138fb565b91506146a082614639565b604082019050919050565b600060208201905081810360008301526146c481614688565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006147276023836138fb565b9150614732826146cb565b604082019050919050565b600060208201905081810360008301526147568161471a565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006147936016836138fb565b915061479e8261475d565b602082019050919050565b600060208201905081810360008301526147c281614786565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b600061484b6049836138fb565b9150614856826147c9565b606082019050919050565b6000602082019050818103600083015261487a8161483e565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e2e0000000000000000000000000000000000602082015250565b60006148dd602f836138fb565b91506148e882614881565b604082019050919050565b6000602082019050818103600083015261490c816148d0565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006149496013836138fb565b915061495482614913565b602082019050919050565b600060208201905081810360008301526149788161493c565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e2e00000000000000000000000000000000602082015250565b60006149db6030836138fb565b91506149e68261497f565b604082019050919050565b60006020820190508181036000830152614a0a816149ce565b9050919050565b6000614a1c82613a05565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614a4e57614a4d613e74565b5b600182019050919050565b6000614a6482613a05565b9150614a6f83613a05565b9250828203905081811115614a8757614a86613e74565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614ae96026836138fb565b9150614af482614a8d565b604082019050919050565b60006020820190508181036000830152614b1881614adc565b9050919050565b600081905092915050565b50565b6000614b3a600083614b1f565b9150614b4582614b2a565b600082019050919050565b6000614b5b82614b2d565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614bc16021836138fb565b9150614bcc82614b65565b604082019050919050565b60006020820190508181036000830152614bf081614bb4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614c64816139d9565b92915050565b600060208284031215614c8057614c7f6139a2565b5b6000614c8e84828501614c55565b91505092915050565b6000819050919050565b6000614cbc614cb7614cb284614c97565b613ade565b613a05565b9050919050565b614ccc81614ca1565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614d07816139c7565b82525050565b6000614d198383614cfe565b60208301905092915050565b6000602082019050919050565b6000614d3d82614cd2565b614d478185614cdd565b9350614d5283614cee565b8060005b83811015614d83578151614d6a8882614d0d565b9750614d7583614d25565b925050600181019050614d56565b5085935050505092915050565b600060a082019050614da56000830188613b58565b614db26020830187614cc3565b8181036040830152614dc48186614d32565b9050614dd36060830185613c0c565b614de06080830184613b58565b969550505050505056fea26469706673582212202634d345615c8d153471c6c6ab5f6829794d3ad29bcb86a2084ae4e520bc937664736f6c63430008140033

Deployed Bytecode Sourcemap

20083:12134:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22782:196;;;;;;;;;;;;;:::i;:::-;;2053:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3040:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30244:441;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30958:242;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20164:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2381:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31546:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3242:529;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2273:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3779:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31408:130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20222:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20558:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24656:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20788:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20972:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20638:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2497:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21014:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23347:163;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24218:217;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11620:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11845:145;;;;;;;;;;;;;:::i;:::-;;31296:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2161;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23708:306;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4077:475;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2648:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21175:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20598:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23518:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20449:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20927:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30693:257;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20745:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2856:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20854:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21111:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20485:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20825:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23207:132;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24443:205;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11998:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20267:66;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20525:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22782:196;11764:12;:10;:12::i;:::-;11754:22;;:6;;;;;;;;;;;:22;;;11746:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22839:13:::1;;;;;;;;;;;22838:14;22830:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;22898:4;22882:13;;:20;;;;;;;;;;;;;;;;;;22929:12;22913:13;:28;;;;22966:4;22952:11;;:18;;;;;;;;;;;;;;;;;;22782:196::o:0;2053:100::-;2107:13;2140:5;2133:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2053:100;:::o;3040:194::-;3148:4;3165:39;3174:12;:10;:12::i;:::-;3188:7;3197:6;3165:8;:39::i;:::-;3222:4;3215:11;;3040:194;;;;:::o;30244:441::-;30340:4;11764:12;:10;:12::i;:::-;11754:22;;:6;;;;;;;;;;;:22;;;11746:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30413:7:::1;30408:1;30392:13;:11;:13::i;:::-;:17;;;;:::i;:::-;30391:29;;;;:::i;:::-;30379:8;:41;;30357:125;;;;;;;;;;;;:::i;:::-;;;;;;;;;30551:6;30544:3;30528:13;:11;:13::i;:::-;:19;;;;:::i;:::-;30527:30;;;;:::i;:::-;30515:8;:42;;30493:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;30647:8;30626:18;:29;;;;30673:4;30666:11;;30244:441:::0;;;:::o;30958:242::-;11764:12;:10;:12::i;:::-;11754:22;;:6;;;;;;;;;;;:22;;;11746:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31089:6:::1;31083:2;31067:13;:11;:13::i;:::-;:18;;;;:::i;:::-;31066:29;;;;:::i;:::-;31053:8;:43;;31031:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;31181:10;:8;:10::i;:::-;31175:2;:16;;;;:::i;:::-;31163:8;:29;;;;:::i;:::-;31151:9;:41;;;;30958:242:::0;:::o;20164:51::-;;;:::o;2381:108::-;2442:7;2469:12;;2462:19;;2381:108;:::o;31546:143::-;11764:12;:10;:12::i;:::-;11754:22;;:6;;;;;;;;;;;:22;;;11746:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31636:5:::1;31624:8;;:17;;31616:26;;;::::0;::::1;;31664:7;31653:8;:18;;;;31546:143:::0;:::o;3242:529::-;3382:4;3399:36;3409:6;3417:9;3428:6;3399:9;:36::i;:::-;3448:24;3475:11;:19;3487:6;3475:19;;;;;;;;;;;;;;;:33;3495:12;:10;:12::i;:::-;3475:33;;;;;;;;;;;;;;;;3448:60;;3561:6;3541:16;:26;;3519:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;3671:57;3680:6;3688:12;:10;:12::i;:::-;3721:6;3702:16;:25;3671:8;:57::i;:::-;3759:4;3752:11;;;3242:529;;;;;:::o;2273:100::-;2331:5;2356:9;;;;;;;;;;;2349:16;;2273:100;:::o;3779:290::-;3892:4;3909:130;3932:12;:10;:12::i;:::-;3959:7;4018:10;3981:11;:25;3993:12;:10;:12::i;:::-;3981:25;;;;;;;;;;;;;;;:34;4007:7;3981:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;3909:8;:130::i;:::-;4057:4;4050:11;;3779:290;;;;:::o;31408:130::-;11764:12;:10;:12::i;:::-;11754:22;;:6;;;;;;;;;;;:22;;;11746:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31496:5:::1;31485:7;;:16;;31477:25;;;::::0;::::1;;31523:7;31513;:17;;;;31408:130:::0;:::o;20222:38::-;;;:::o;20558:33::-;;;;;;;;;;;;;:::o;24656:126::-;24722:4;24746:19;:28;24766:7;24746:28;;;;;;;;;;;;;;;;;;;;;;;;;24739:35;;24656:126;;;:::o;20788:28::-;;;;:::o;20972:35::-;;;;:::o;20638:31::-;;;;;;;;;;;;;:::o;2497:143::-;2587:7;2614:9;:18;2624:7;2614:18;;;;;;;;;;;;;;;;2607:25;;2497:143;;;:::o;21014:29::-;;;;:::o;23347:163::-;11764:12;:10;:12::i;:::-;11754:22;;:6;;;;;;;;;;;:22;;;11746:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23498:4:::1;23462:25;:33;23488:6;23462:33;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;23347:163:::0;;:::o;24218:217::-;11764:12;:10;:12::i;:::-;11754:22;;:6;;;;;;;;;;;:22;;;11746:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24367:14:::1;;;;;;;;;;;24326:56;;24348:17;24326:56;;;;;;;;;;;;24410:17;24393:14;;:34;;;;;;;;;;;;;;;;;;24218:217:::0;:::o;11620:79::-;11658:7;11685:6;;;;;;;;;;;11678:13;;11620:79;:::o;11845:145::-;11764:12;:10;:12::i;:::-;11754:22;;:6;;;;;;;;;;;:22;;;11746:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;11949:1:::1;11912:40;;11933:6;;;;;;;;;;;11912:40;;;;;;;;;;;;11980:1;11963:6;;:19;;;;;;;;;;;;;;;;;;11845:145::o:0;31296:104::-;11764:12;:10;:12::i;:::-;11754:22;;:6;;;;;;;;;;;:22;;;11746:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31383:9:::1;31369:11;;:23;;;;;;;;;;;;;;;;;;31296:104:::0;:::o;2161:::-;2217:13;2250:7;2243:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2161:104;:::o;23708:306::-;11764:12;:10;:12::i;:::-;11754:22;;:6;;;;;;;;;;;:22;;;11746:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23854:13:::1;23846:21;;:4;:21;;::::0;23824:128:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;23965:41;23994:4;24000:5;23965:28;:41::i;:::-;23708:306:::0;;:::o;4077:475::-;4195:4;4212:24;4239:11;:25;4251:12;:10;:12::i;:::-;4239:25;;;;;;;;;;;;;;;:34;4265:7;4239:34;;;;;;;;;;;;;;;;4212:61;;4326:15;4306:16;:35;;4284:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;4442:67;4451:12;:10;:12::i;:::-;4465:7;4493:15;4474:16;:34;4442:8;:67::i;:::-;4540:4;4533:11;;;4077:475;;;;:::o;2648:200::-;2759:4;2776:42;2786:12;:10;:12::i;:::-;2800:9;2811:6;2776:9;:42::i;:::-;2836:4;2829:11;;2648:200;;;;:::o;21175:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;20598:33::-;;;;;;;;;;;;;:::o;23518:182::-;11764:12;:10;:12::i;:::-;11754:22;;:6;;;;;;;;;;;:22;;;11746:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23634:8:::1;23603:19;:28;23623:7;23603:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;23674:7;23658:34;;;23683:8;23658:34;;;;;;:::i;:::-;;;;;;;;23518:182:::0;;:::o;20449:29::-;;;;:::o;20927:38::-;;;;:::o;30693:257::-;11764:12;:10;:12::i;:::-;11754:22;;:6;;;;;;;;;;;:22;;;11746:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30829:6:::1;30823:2;30807:13;:11;:13::i;:::-;:18;;;;:::i;:::-;30806:29;;;;:::i;:::-;30793:8;:43;;30771:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;30931:10;:8;:10::i;:::-;30925:2;:16;;;;:::i;:::-;30913:8;:29;;;;:::i;:::-;30896:14;:46;;;;30693:257:::0;:::o;20745:36::-;;;;;;;;;;;;;:::o;2856:176::-;2970:7;2997:11;:18;3009:5;2997:18;;;;;;;;;;;;;;;:27;3016:7;2997:27;;;;;;;;;;;;;;;;2990:34;;2856:176;;;;:::o;20854:23::-;;;;:::o;21111:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;20485:33::-;;;;:::o;20825:22::-;;;;:::o;23207:132::-;23267:4;11764:12;:10;:12::i;:::-;11754:22;;:6;;;;;;;;;;;:22;;;11746:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23304:5:::1;23284:17;;:25;;;;;;;;;;;;;;;;;;23327:4;23320:11;;23207:132:::0;:::o;24443:205::-;11764:12;:10;:12::i;:::-;11754:22;;:6;;;;;;;;;;;:22;;;11746:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24582:17:::1;;;;;;;;;;;24546:54;;24571:9;24546:54;;;;;;;;;;;;24631:9;24611:17;;:29;;;;;;;;;;;;;;;;;;24443:205:::0;:::o;11998:244::-;11764:12;:10;:12::i;:::-;11754:22;;:6;;;;;;;;;;;:22;;;11746:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;12107:1:::1;12087:22;;:8;:22;;::::0;12079:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;12197:8;12168:38;;12189:6;;;;;;;;;;;12168:38;;;;;;;;;;;;12226:8;12217:6;;:17;;;;;;;;;;;;;;;;;;11998:244:::0;:::o;20267:66::-;;;;;;;;;;;;;:::o;20525:24::-;;;;:::o;98:115::-;151:15;194:10;179:26;;98:115;:::o;6344:380::-;6497:1;6480:19;;:5;:19;;;6472:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6578:1;6559:21;;:7;:21;;;6551:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6662:6;6632:11;:18;6644:5;6632:18;;;;;;;;;;;;;;;:27;6651:7;6632:27;;;;;;;;;;;;;;;:36;;;;6700:7;6684:32;;6693:5;6684:32;;;6709:6;6684:32;;;;;;:::i;:::-;;;;;;;;6344:380;;;:::o;24790:4078::-;24938:1;24922:18;;:4;:18;;;24914:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25015:1;25001:16;;:2;:16;;;24993:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;25084:1;25074:6;:11;25070:93;;25102:28;25118:4;25124:2;25128:1;25102:15;:28::i;:::-;25145:7;;25070:93;25179:14;;;;;;;;;;;25175:2261;;;25240:7;:5;:7::i;:::-;25232:15;;:4;:15;;;;:49;;;;;25274:7;:5;:7::i;:::-;25268:13;;:2;:13;;;;25232:49;:86;;;;;25316:1;25302:16;;:2;:16;;;;25232:86;:128;;;;;25353:6;25339:21;;:2;:21;;;;25232:128;:158;;;;;25382:8;;;;;;;;;;;25381:9;25232:158;25210:2215;;;25430:13;;;;;;;;;;;25425:223;;25502:19;:25;25522:4;25502:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;25531:19;:23;25551:2;25531:23;;;;;;;;;;;;;;;;;;;;;;;;;25502:52;25468:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;25425:223;25672:17;;;;;;;;;;;25668:597;;;25750:7;:5;:7::i;:::-;25744:13;;:2;:13;;;;:72;;;;;25800:15;25786:30;;:2;:30;;;;25744:72;:129;;;;;25859:13;25845:28;;:2;:28;;;;25744:129;25714:532;;;26000:12;25962:24;:35;25987:9;25962:35;;;;;;;;;;;;;;;;:50;25924:221;;;;;;;;;;;;:::i;:::-;;;;;;;;;26210:12;26172:24;:35;26197:9;26172:35;;;;;;;;;;;;;;;:50;;;;25714:532;25668:597;26335:25;:31;26361:4;26335:31;;;;;;;;;;;;;;;;;;;;;;;;;:86;;;;;26392:25;:29;26418:2;26392:29;;;;;;;;;;;;;;;;;;;;;;;;;26391:30;26335:86;26309:1101;;;26508:14;;26498:6;:24;;26464:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;26704:9;;26687:13;26697:2;26687:9;:13::i;:::-;26678:6;:22;;;;:::i;:::-;:35;;26644:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;26309:1101;;;26878:25;:29;26904:2;26878:29;;;;;;;;;;;;;;;;;;;;;;;;;:86;;;;;26933:25;:31;26959:4;26933:31;;;;;;;;;;;;;;;;;;;;;;;;;26932:32;26878:86;26852:558;;;27051:14;;27041:6;:24;;27007:158;;;;;;;;;;;;:::i;:::-;;;;;;;;;26852:558;;;27196:25;:29;27222:2;27196:29;;;;;;;;;;;;;;;;;;;;;;;;;27191:219;;27310:9;;27293:13;27303:2;27293:9;:13::i;:::-;27284:6;:22;;;;:::i;:::-;:35;;27250:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;27191:219;26852:558;26309:1101;25210:2215;25175:2261;27448:28;27479:24;27497:4;27479:9;:24::i;:::-;27448:55;;27516:12;27555:18;;27531:20;:42;;27516:57;;27604:7;:35;;;;;27628:11;;;;;;;;;;;27604:35;:61;;;;;27657:8;;;;;;;;;;;27656:9;27604:61;:110;;;;;27683:25;:31;27709:4;27683:31;;;;;;;;;;;;;;;;;;;;;;;;;27682:32;27604:110;:153;;;;;27732:19;:25;27752:4;27732:25;;;;;;;;;;;;;;;;;;;;;;;;;27731:26;27604:153;:194;;;;;27775:19;:23;27795:2;27775:23;;;;;;;;;;;;;;;;;;;;;;;;;27774:24;27604:194;:242;;;;;27828:18;;27815:10;;:31;27604:242;27586:415;;;27884:4;27873:8;;:15;;;;;;;;;;;;;;;;;;27903:55;27912:45;27916:20;27938:18;;27912:3;:45::i;:::-;27903:8;:55::i;:::-;27984:5;27973:8;;:16;;;;;;;;;;;;;;;;;;27586:415;28013:12;28029:8;;;;;;;;;;;28028:9;28013:24;;28054:19;:25;28074:4;28054:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;28083:19;:23;28103:2;28083:23;;;;;;;;;;;;;;;;;;;;;;;;;28054:52;28050:100;;;28133:5;28123:15;;28050:100;28162:12;28195:7;28191:518;;;28244:25;:29;28270:2;28244:29;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;28288:1;28277:8;;:12;28244:45;28240:320;;;28317:32;28342:6;28317:20;28328:8;;28317:6;:10;;:20;;;;:::i;:::-;:24;;:32;;;;:::i;:::-;28310:39;;28240:320;;;28408:25;:31;28434:4;28408:31;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;28453:1;28443:7;;:11;28408:46;28404:156;;;28482:31;28506:6;28482:19;28493:7;;28482:6;:10;;:19;;;;:::i;:::-;:23;;:31;;;;:::i;:::-;28475:38;;28532:10;;:12;;;;;;;;;:::i;:::-;;;;;;28404:156;28240:320;28587:1;28580:4;:8;28576:91;;;28609:42;28625:4;28639;28646;28609:15;:42::i;:::-;28576:91;28693:4;28683:14;;;;;:::i;:::-;;;28191:518;28721:33;28737:4;28743:2;28747:6;28721:15;:33::i;:::-;28785:15;;28771:10;;:29;;:47;;;;;28804:14;;;;;;;;;;;28771:47;28767:94;;;28835:14;:12;:14::i;:::-;;28767:94;24903:3965;;;;24790:4078;;;;:::o;24022:188::-;24139:5;24105:25;:31;24131:4;24105:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;24196:5;24162:40;;24190:4;24162:40;;;;;;;;;;;;24022:188;;:::o;4560:770::-;4718:1;4700:20;;:6;:20;;;4692:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;4802:1;4781:23;;:9;:23;;;4773:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;4857:47;4878:6;4886:9;4897:6;4857:20;:47::i;:::-;4917:21;4941:9;:17;4951:6;4941:17;;;;;;;;;;;;;;;;4917:41;;5008:6;4991:13;:23;;4969:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;5152:6;5136:13;:22;5116:9;:17;5126:6;5116:17;;;;;;;;;;;;;;;:42;;;;5204:6;5180:9;:20;5190:9;5180:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;5245:9;5228:35;;5237:6;5228:35;;;5256:6;5228:35;;;;;;:::i;:::-;;;;;;;;5276:46;5296:6;5304:9;5315:6;5276:19;:46::i;:::-;4681:649;4560:770;;;:::o;28876:107::-;28933:7;28965:1;28961;:5;28960:15;;28974:1;28960:15;;;28970:1;28960:15;28953:22;;28876:107;;;;:::o;29474:643::-;29527:12;29566:1;29556:6;:11;29552:50;;29584:7;;;29552:50;29614:26;29643:6;29614:35;;29662:36;29679:18;29662:16;:36::i;:::-;29711:18;29732:21;29711:42;;29764:25;29792:19;29807:3;29792:10;:14;;:19;;;;:::i;:::-;29764:47;;29822:22;29847:27;29869:4;29847:17;:21;;:27;;;;:::i;:::-;29822:52;;29885:24;29912:30;29927:14;29912:10;:14;;:30;;;;:::i;:::-;29885:57;;29977:14;;;;;;;;;;;29969:28;;30005:14;29969:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29955:69;;;;;30057:17;;;;;;;;;;;30049:31;;30088:16;30049:60;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30035:74;;;;;29516:601;;;;;;29474:643;;:::o;7555:250::-;7613:7;7642:1;7637;:6;7633:47;;7667:1;7660:8;;;;7633:47;7692:9;7708:1;7704;:5;;;;:::i;:::-;7692:17;;7737:1;7732;7728;:5;;;;:::i;:::-;:10;7720:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;7796:1;7789:8;;;7555:250;;;;;:::o;7813:132::-;7871:7;7898:39;7902:1;7905;7898:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;7891:46;;7813:132;;;;:::o;22986:160::-;23028:4;23062:5;23045:14;;:22;;;;;;;;;;;;;;;;;;23088:3;23078:7;:13;;;;23113:3;23102:8;:14;;;;23134:4;23127:11;;22986:160;:::o;6732:125::-;;;;:::o;6865:124::-;;;;:::o;28991:475::-;29057:21;29095:1;29081:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29057:40;;29126:4;29108;29113:1;29108:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;29152:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29142:4;29147:1;29142:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;29187:62;29204:4;29219:15;29237:11;29187:8;:62::i;:::-;29262:15;:66;;;29343:11;29369:1;29385:4;29412;29432:15;29262:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29046:420;28991:475;:::o;7211:136::-;7269:7;7296:43;7300:1;7303;7296:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;7289:50;;7211:136;;;;:::o;7953:278::-;8039:7;8071:1;8067;:5;8074:12;8059:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;8098:9;8114:1;8110;:5;;;;:::i;:::-;8098:17;;8222:1;8215:8;;;7953:278;;;;;:::o;7355:192::-;7441:7;7474:1;7469;:6;;7477:12;7461:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;7501:9;7517:1;7513;:5;;;;:::i;:::-;7501:17;;7538:1;7531:8;;;7355:192;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:60::-;3809:3;3830:5;3823:12;;3781:60;;;:::o;3847:142::-;3897:9;3930:53;3948:34;3957:24;3975:5;3957:24;:::i;:::-;3948:34;:::i;:::-;3930:53;:::i;:::-;3917:66;;3847:142;;;:::o;3995:126::-;4045:9;4078:37;4109:5;4078:37;:::i;:::-;4065:50;;3995:126;;;:::o;4127:153::-;4204:9;4237:37;4268:5;4237:37;:::i;:::-;4224:50;;4127:153;;;:::o;4286:185::-;4400:64;4458:5;4400:64;:::i;:::-;4395:3;4388:77;4286:185;;:::o;4477:276::-;4597:4;4635:2;4624:9;4620:18;4612:26;;4648:98;4743:1;4732:9;4728:17;4719:6;4648:98;:::i;:::-;4477:276;;;;:::o;4759:118::-;4846:24;4864:5;4846:24;:::i;:::-;4841:3;4834:37;4759:118;;:::o;4883:222::-;4976:4;5014:2;5003:9;4999:18;4991:26;;5027:71;5095:1;5084:9;5080:17;5071:6;5027:71;:::i;:::-;4883:222;;;;:::o;5111:619::-;5188:6;5196;5204;5253:2;5241:9;5232:7;5228:23;5224:32;5221:119;;;5259:79;;:::i;:::-;5221:119;5379:1;5404:53;5449:7;5440:6;5429:9;5425:22;5404:53;:::i;:::-;5394:63;;5350:117;5506:2;5532:53;5577:7;5568:6;5557:9;5553:22;5532:53;:::i;:::-;5522:63;;5477:118;5634:2;5660:53;5705:7;5696:6;5685:9;5681:22;5660:53;:::i;:::-;5650:63;;5605:118;5111:619;;;;;:::o;5736:86::-;5771:7;5811:4;5804:5;5800:16;5789:27;;5736:86;;;:::o;5828:112::-;5911:22;5927:5;5911:22;:::i;:::-;5906:3;5899:35;5828:112;;:::o;5946:214::-;6035:4;6073:2;6062:9;6058:18;6050:26;;6086:67;6150:1;6139:9;6135:17;6126:6;6086:67;:::i;:::-;5946:214;;;;:::o;6166:118::-;6253:24;6271:5;6253:24;:::i;:::-;6248:3;6241:37;6166:118;;:::o;6290:222::-;6383:4;6421:2;6410:9;6406:18;6398:26;;6434:71;6502:1;6491:9;6487:17;6478:6;6434:71;:::i;:::-;6290:222;;;;:::o;6518:329::-;6577:6;6626:2;6614:9;6605:7;6601:23;6597:32;6594:119;;;6632:79;;:::i;:::-;6594:119;6752:1;6777:53;6822:7;6813:6;6802:9;6798:22;6777:53;:::i;:::-;6767:63;;6723:117;6518:329;;;;:::o;6853:116::-;6923:21;6938:5;6923:21;:::i;:::-;6916:5;6913:32;6903:60;;6959:1;6956;6949:12;6903:60;6853:116;:::o;6975:133::-;7018:5;7056:6;7043:20;7034:29;;7072:30;7096:5;7072:30;:::i;:::-;6975:133;;;;:::o;7114:468::-;7179:6;7187;7236:2;7224:9;7215:7;7211:23;7207:32;7204:119;;;7242:79;;:::i;:::-;7204:119;7362:1;7387:53;7432:7;7423:6;7412:9;7408:22;7387:53;:::i;:::-;7377:63;;7333:117;7489:2;7515:50;7557:7;7548:6;7537:9;7533:22;7515:50;:::i;:::-;7505:60;;7460:115;7114:468;;;;;:::o;7588:323::-;7644:6;7693:2;7681:9;7672:7;7668:23;7664:32;7661:119;;;7699:79;;:::i;:::-;7661:119;7819:1;7844:50;7886:7;7877:6;7866:9;7862:22;7844:50;:::i;:::-;7834:60;;7790:114;7588:323;;;;:::o;7917:474::-;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:53;8366:7;8357:6;8346:9;8342:22;8321:53;:::i;:::-;8311:63;;8266:118;7917:474;;;;;:::o;8397:182::-;8537:34;8533:1;8525:6;8521:14;8514:58;8397:182;:::o;8585:366::-;8727:3;8748:67;8812:2;8807:3;8748:67;:::i;:::-;8741:74;;8824:93;8913:3;8824:93;:::i;:::-;8942:2;8937:3;8933:12;8926:19;;8585:366;;;:::o;8957:419::-;9123:4;9161:2;9150:9;9146:18;9138:26;;9210:9;9204:4;9200:20;9196:1;9185:9;9181:17;9174:47;9238:131;9364:4;9238:131;:::i;:::-;9230:139;;8957:419;;;:::o;9382:164::-;9522:16;9518:1;9510:6;9506:14;9499:40;9382:164;:::o;9552:366::-;9694:3;9715:67;9779:2;9774:3;9715:67;:::i;:::-;9708:74;;9791:93;9880:3;9791:93;:::i;:::-;9909:2;9904:3;9900:12;9893:19;;9552:366;;;:::o;9924:419::-;10090:4;10128:2;10117:9;10113:18;10105:26;;10177:9;10171:4;10167:20;10163:1;10152:9;10148:17;10141:47;10205:131;10331:4;10205:131;:::i;:::-;10197:139;;9924:419;;;:::o;10349:180::-;10397:77;10394:1;10387:88;10494:4;10491:1;10484:15;10518:4;10515:1;10508:15;10535:320;10579:6;10616:1;10610:4;10606:12;10596:22;;10663:1;10657:4;10653:12;10684:18;10674:81;;10740:4;10732:6;10728:17;10718:27;;10674:81;10802:2;10794:6;10791:14;10771:18;10768:38;10765:84;;10821:18;;:::i;:::-;10765:84;10586:269;10535:320;;;:::o;10861:180::-;10909:77;10906:1;10899:88;11006:4;11003:1;10996:15;11030:4;11027:1;11020:15;11047:410;11087:7;11110:20;11128:1;11110:20;:::i;:::-;11105:25;;11144:20;11162:1;11144:20;:::i;:::-;11139:25;;11199:1;11196;11192:9;11221:30;11239:11;11221:30;:::i;:::-;11210:41;;11400:1;11391:7;11387:15;11384:1;11381:22;11361:1;11354:9;11334:83;11311:139;;11430:18;;:::i;:::-;11311:139;11095:362;11047:410;;;;:::o;11463:180::-;11511:77;11508:1;11501:88;11608:4;11605:1;11598:15;11632:4;11629:1;11622:15;11649:185;11689:1;11706:20;11724:1;11706:20;:::i;:::-;11701:25;;11740:20;11758:1;11740:20;:::i;:::-;11735:25;;11779:1;11769:35;;11784:18;;:::i;:::-;11769:35;11826:1;11823;11819:9;11814:14;;11649:185;;;;:::o;11840:221::-;11980:34;11976:1;11968:6;11964:14;11957:58;12049:4;12044:2;12036:6;12032:15;12025:29;11840:221;:::o;12067:366::-;12209:3;12230:67;12294:2;12289:3;12230:67;:::i;:::-;12223:74;;12306:93;12395:3;12306:93;:::i;:::-;12424:2;12419:3;12415:12;12408:19;;12067:366;;;:::o;12439:419::-;12605:4;12643:2;12632:9;12628:18;12620:26;;12692:9;12686:4;12682:20;12678:1;12667:9;12663:17;12656:47;12720:131;12846:4;12720:131;:::i;:::-;12712:139;;12439:419;;;:::o;12864:180::-;13004:32;13000:1;12992:6;12988:14;12981:56;12864:180;:::o;13050:366::-;13192:3;13213:67;13277:2;13272:3;13213:67;:::i;:::-;13206:74;;13289:93;13378:3;13289:93;:::i;:::-;13407:2;13402:3;13398:12;13391:19;;13050:366;;;:::o;13422:419::-;13588:4;13626:2;13615:9;13611:18;13603:26;;13675:9;13669:4;13665:20;13661:1;13650:9;13646:17;13639:47;13703:131;13829:4;13703:131;:::i;:::-;13695:139;;13422:419;;;:::o;13847:166::-;13987:18;13983:1;13975:6;13971:14;13964:42;13847:166;:::o;14019:366::-;14161:3;14182:67;14246:2;14241:3;14182:67;:::i;:::-;14175:74;;14258:93;14347:3;14258:93;:::i;:::-;14376:2;14371:3;14367:12;14360:19;;14019:366;;;:::o;14391:419::-;14557:4;14595:2;14584:9;14580:18;14572:26;;14644:9;14638:4;14634:20;14630:1;14619:9;14615:17;14608:47;14672:131;14798:4;14672:131;:::i;:::-;14664:139;;14391:419;;;:::o;14816:102::-;14858:8;14905:5;14902:1;14898:13;14877:34;;14816:102;;;:::o;14924:848::-;14985:5;14992:4;15016:6;15007:15;;15040:5;15031:14;;15054:712;15075:1;15065:8;15062:15;15054:712;;;15170:4;15165:3;15161:14;15155:4;15152:24;15149:50;;;15179:18;;:::i;:::-;15149:50;15229:1;15219:8;15215:16;15212:451;;;15644:4;15637:5;15633:16;15624:25;;15212:451;15694:4;15688;15684:15;15676:23;;15724:32;15747:8;15724:32;:::i;:::-;15712:44;;15054:712;;;14924:848;;;;;;;:::o;15778:1073::-;15832:5;16023:8;16013:40;;16044:1;16035:10;;16046:5;;16013:40;16072:4;16062:36;;16089:1;16080:10;;16091:5;;16062:36;16158:4;16206:1;16201:27;;;;16242:1;16237:191;;;;16151:277;;16201:27;16219:1;16210:10;;16221:5;;;16237:191;16282:3;16272:8;16269:17;16266:43;;;16289:18;;:::i;:::-;16266:43;16338:8;16335:1;16331:16;16322:25;;16373:3;16366:5;16363:14;16360:40;;;16380:18;;:::i;:::-;16360:40;16413:5;;;16151:277;;16537:2;16527:8;16524:16;16518:3;16512:4;16509:13;16505:36;16487:2;16477:8;16474:16;16469:2;16463:4;16460:12;16456:35;16440:111;16437:246;;;16593:8;16587:4;16583:19;16574:28;;16628:3;16621:5;16618:14;16615:40;;;16635:18;;:::i;:::-;16615:40;16668:5;;16437:246;16708:42;16746:3;16736:8;16730:4;16727:1;16708:42;:::i;:::-;16693:57;;;;16782:4;16777:3;16773:14;16766:5;16763:25;16760:51;;;16791:18;;:::i;:::-;16760:51;16840:4;16833:5;16829:16;16820:25;;15778:1073;;;;;;:::o;16857:281::-;16915:5;16939:23;16957:4;16939:23;:::i;:::-;16931:31;;16983:25;16999:8;16983:25;:::i;:::-;16971:37;;17027:104;17064:66;17054:8;17048:4;17027:104;:::i;:::-;17018:113;;16857:281;;;;:::o;17144:227::-;17284:34;17280:1;17272:6;17268:14;17261:58;17353:10;17348:2;17340:6;17336:15;17329:35;17144:227;:::o;17377:366::-;17519:3;17540:67;17604:2;17599:3;17540:67;:::i;:::-;17533:74;;17616:93;17705:3;17616:93;:::i;:::-;17734:2;17729:3;17725:12;17718:19;;17377:366;;;:::o;17749:419::-;17915:4;17953:2;17942:9;17938:18;17930:26;;18002:9;17996:4;17992:20;17988:1;17977:9;17973:17;17966:47;18030:131;18156:4;18030:131;:::i;:::-;18022:139;;17749:419;;;:::o;18174:191::-;18214:3;18233:20;18251:1;18233:20;:::i;:::-;18228:25;;18267:20;18285:1;18267:20;:::i;:::-;18262:25;;18310:1;18307;18303:9;18296:16;;18331:3;18328:1;18325:10;18322:36;;;18338:18;;:::i;:::-;18322:36;18174:191;;;;:::o;18371:244::-;18511:34;18507:1;18499:6;18495:14;18488:58;18580:27;18575:2;18567:6;18563:15;18556:52;18371:244;:::o;18621:366::-;18763:3;18784:67;18848:2;18843:3;18784:67;:::i;:::-;18777:74;;18860:93;18949:3;18860:93;:::i;:::-;18978:2;18973:3;18969:12;18962:19;;18621:366;;;:::o;18993:419::-;19159:4;19197:2;19186:9;19182:18;19174:26;;19246:9;19240:4;19236:20;19232:1;19221:9;19217:17;19210:47;19274:131;19400:4;19274:131;:::i;:::-;19266:139;;18993:419;;;:::o;19418:224::-;19558:34;19554:1;19546:6;19542:14;19535:58;19627:7;19622:2;19614:6;19610:15;19603:32;19418:224;:::o;19648:366::-;19790:3;19811:67;19875:2;19870:3;19811:67;:::i;:::-;19804:74;;19887:93;19976:3;19887:93;:::i;:::-;20005:2;20000:3;19996:12;19989:19;;19648:366;;;:::o;20020:419::-;20186:4;20224:2;20213:9;20209:18;20201:26;;20273:9;20267:4;20263:20;20259:1;20248:9;20244:17;20237:47;20301:131;20427:4;20301:131;:::i;:::-;20293:139;;20020:419;;;:::o;20445:171::-;20585:23;20581:1;20573:6;20569:14;20562:47;20445:171;:::o;20622:366::-;20764:3;20785:67;20849:2;20844:3;20785:67;:::i;:::-;20778:74;;20861:93;20950:3;20861:93;:::i;:::-;20979:2;20974:3;20970:12;20963:19;;20622:366;;;:::o;20994:419::-;21160:4;21198:2;21187:9;21183:18;21175:26;;21247:9;21241:4;21237:20;21233:1;21222:9;21218:17;21211:47;21275:131;21401:4;21275:131;:::i;:::-;21267:139;;20994:419;;;:::o;21419:225::-;21559:34;21555:1;21547:6;21543:14;21536:58;21628:8;21623:2;21615:6;21611:15;21604:33;21419:225;:::o;21650:366::-;21792:3;21813:67;21877:2;21872:3;21813:67;:::i;:::-;21806:74;;21889:93;21978:3;21889:93;:::i;:::-;22007:2;22002:3;21998:12;21991:19;;21650:366;;;:::o;22022:419::-;22188:4;22226:2;22215:9;22211:18;22203:26;;22275:9;22269:4;22265:20;22261:1;22250:9;22246:17;22239:47;22303:131;22429:4;22303:131;:::i;:::-;22295:139;;22022:419;;;:::o;22447:223::-;22587:34;22583:1;22575:6;22571:14;22564:58;22656:6;22651:2;22643:6;22639:15;22632:31;22447:223;:::o;22676:366::-;22818:3;22839:67;22903:2;22898:3;22839:67;:::i;:::-;22832:74;;22915:93;23004:3;22915:93;:::i;:::-;23033:2;23028:3;23024:12;23017:19;;22676:366;;;:::o;23048:419::-;23214:4;23252:2;23241:9;23237:18;23229:26;;23301:9;23295:4;23291:20;23287:1;23276:9;23272:17;23265:47;23329:131;23455:4;23329:131;:::i;:::-;23321:139;;23048:419;;;:::o;23473:221::-;23613:34;23609:1;23601:6;23597:14;23590:58;23682:4;23677:2;23669:6;23665:15;23658:29;23473:221;:::o;23700:366::-;23842:3;23863:67;23927:2;23922:3;23863:67;:::i;:::-;23856:74;;23939:93;24028:3;23939:93;:::i;:::-;24057:2;24052:3;24048:12;24041:19;;23700:366;;;:::o;24072:419::-;24238:4;24276:2;24265:9;24261:18;24253:26;;24325:9;24319:4;24315:20;24311:1;24300:9;24296:17;24289:47;24353:131;24479:4;24353:131;:::i;:::-;24345:139;;24072:419;;;:::o;24497:224::-;24637:34;24633:1;24625:6;24621:14;24614:58;24706:7;24701:2;24693:6;24689:15;24682:32;24497:224;:::o;24727:366::-;24869:3;24890:67;24954:2;24949:3;24890:67;:::i;:::-;24883:74;;24966:93;25055:3;24966:93;:::i;:::-;25084:2;25079:3;25075:12;25068:19;;24727:366;;;:::o;25099:419::-;25265:4;25303:2;25292:9;25288:18;25280:26;;25352:9;25346:4;25342:20;25338:1;25327:9;25323:17;25316:47;25380:131;25506:4;25380:131;:::i;:::-;25372:139;;25099:419;;;:::o;25524:222::-;25664:34;25660:1;25652:6;25648:14;25641:58;25733:5;25728:2;25720:6;25716:15;25709:30;25524:222;:::o;25752:366::-;25894:3;25915:67;25979:2;25974:3;25915:67;:::i;:::-;25908:74;;25991:93;26080:3;25991:93;:::i;:::-;26109:2;26104:3;26100:12;26093:19;;25752:366;;;:::o;26124:419::-;26290:4;26328:2;26317:9;26313:18;26305:26;;26377:9;26371:4;26367:20;26363:1;26352:9;26348:17;26341:47;26405:131;26531:4;26405:131;:::i;:::-;26397:139;;26124:419;;;:::o;26549:172::-;26689:24;26685:1;26677:6;26673:14;26666:48;26549:172;:::o;26727:366::-;26869:3;26890:67;26954:2;26949:3;26890:67;:::i;:::-;26883:74;;26966:93;27055:3;26966:93;:::i;:::-;27084:2;27079:3;27075:12;27068:19;;26727:366;;;:::o;27099:419::-;27265:4;27303:2;27292:9;27288:18;27280:26;;27352:9;27346:4;27342:20;27338:1;27327:9;27323:17;27316:47;27380:131;27506:4;27380:131;:::i;:::-;27372:139;;27099:419;;;:::o;27524:297::-;27664:34;27660:1;27652:6;27648:14;27641:58;27733:34;27728:2;27720:6;27716:15;27709:59;27802:11;27797:2;27789:6;27785:15;27778:36;27524:297;:::o;27827:366::-;27969:3;27990:67;28054:2;28049:3;27990:67;:::i;:::-;27983:74;;28066:93;28155:3;28066:93;:::i;:::-;28184:2;28179:3;28175:12;28168:19;;27827:366;;;:::o;28199:419::-;28365:4;28403:2;28392:9;28388:18;28380:26;;28452:9;28446:4;28442:20;28438:1;28427:9;28423:17;28416:47;28480:131;28606:4;28480:131;:::i;:::-;28472:139;;28199:419;;;:::o;28624:234::-;28764:34;28760:1;28752:6;28748:14;28741:58;28833:17;28828:2;28820:6;28816:15;28809:42;28624:234;:::o;28864:366::-;29006:3;29027:67;29091:2;29086:3;29027:67;:::i;:::-;29020:74;;29103:93;29192:3;29103:93;:::i;:::-;29221:2;29216:3;29212:12;29205:19;;28864:366;;;:::o;29236:419::-;29402:4;29440:2;29429:9;29425:18;29417:26;;29489:9;29483:4;29479:20;29475:1;29464:9;29460:17;29453:47;29517:131;29643:4;29517:131;:::i;:::-;29509:139;;29236:419;;;:::o;29661:169::-;29801:21;29797:1;29789:6;29785:14;29778:45;29661:169;:::o;29836:366::-;29978:3;29999:67;30063:2;30058:3;29999:67;:::i;:::-;29992:74;;30075:93;30164:3;30075:93;:::i;:::-;30193:2;30188:3;30184:12;30177:19;;29836:366;;;:::o;30208:419::-;30374:4;30412:2;30401:9;30397:18;30389:26;;30461:9;30455:4;30451:20;30447:1;30436:9;30432:17;30425:47;30489:131;30615:4;30489:131;:::i;:::-;30481:139;;30208:419;;;:::o;30633:235::-;30773:34;30769:1;30761:6;30757:14;30750:58;30842:18;30837:2;30829:6;30825:15;30818:43;30633:235;:::o;30874:366::-;31016:3;31037:67;31101:2;31096:3;31037:67;:::i;:::-;31030:74;;31113:93;31202:3;31113:93;:::i;:::-;31231:2;31226:3;31222:12;31215:19;;30874:366;;;:::o;31246:419::-;31412:4;31450:2;31439:9;31435:18;31427:26;;31499:9;31493:4;31489:20;31485:1;31474:9;31470:17;31463:47;31527:131;31653:4;31527:131;:::i;:::-;31519:139;;31246:419;;;:::o;31671:233::-;31710:3;31733:24;31751:5;31733:24;:::i;:::-;31724:33;;31779:66;31772:5;31769:77;31766:103;;31849:18;;:::i;:::-;31766:103;31896:1;31889:5;31885:13;31878:20;;31671:233;;;:::o;31910:194::-;31950:4;31970:20;31988:1;31970:20;:::i;:::-;31965:25;;32004:20;32022:1;32004:20;:::i;:::-;31999:25;;32048:1;32045;32041:9;32033:17;;32072:1;32066:4;32063:11;32060:37;;;32077:18;;:::i;:::-;32060:37;31910:194;;;;:::o;32110:225::-;32250:34;32246:1;32238:6;32234:14;32227:58;32319:8;32314:2;32306:6;32302:15;32295:33;32110:225;:::o;32341:366::-;32483:3;32504:67;32568:2;32563:3;32504:67;:::i;:::-;32497:74;;32580:93;32669:3;32580:93;:::i;:::-;32698:2;32693:3;32689:12;32682:19;;32341:366;;;:::o;32713:419::-;32879:4;32917:2;32906:9;32902:18;32894:26;;32966:9;32960:4;32956:20;32952:1;32941:9;32937:17;32930:47;32994:131;33120:4;32994:131;:::i;:::-;32986:139;;32713:419;;;:::o;33138:147::-;33239:11;33276:3;33261:18;;33138:147;;;;:::o;33291:114::-;;:::o;33411:398::-;33570:3;33591:83;33672:1;33667:3;33591:83;:::i;:::-;33584:90;;33683:93;33772:3;33683:93;:::i;:::-;33801:1;33796:3;33792:11;33785:18;;33411:398;;;:::o;33815:379::-;33999:3;34021:147;34164:3;34021:147;:::i;:::-;34014:154;;34185:3;34178:10;;33815:379;;;:::o;34200:220::-;34340:34;34336:1;34328:6;34324:14;34317:58;34409:3;34404:2;34396:6;34392:15;34385:28;34200:220;:::o;34426:366::-;34568:3;34589:67;34653:2;34648:3;34589:67;:::i;:::-;34582:74;;34665:93;34754:3;34665:93;:::i;:::-;34783:2;34778:3;34774:12;34767:19;;34426:366;;;:::o;34798:419::-;34964:4;35002:2;34991:9;34987:18;34979:26;;35051:9;35045:4;35041:20;35037:1;35026:9;35022:17;35015:47;35079:131;35205:4;35079:131;:::i;:::-;35071:139;;34798:419;;;:::o;35223:180::-;35271:77;35268:1;35261:88;35368:4;35365:1;35358:15;35392:4;35389:1;35382:15;35409:180;35457:77;35454:1;35447:88;35554:4;35551:1;35544:15;35578:4;35575:1;35568:15;35595:143;35652:5;35683:6;35677:13;35668:22;;35699:33;35726:5;35699:33;:::i;:::-;35595:143;;;;:::o;35744:351::-;35814:6;35863:2;35851:9;35842:7;35838:23;35834:32;35831:119;;;35869:79;;:::i;:::-;35831:119;35989:1;36014:64;36070:7;36061:6;36050:9;36046:22;36014:64;:::i;:::-;36004:74;;35960:128;35744:351;;;;:::o;36101:85::-;36146:7;36175:5;36164:16;;36101:85;;;:::o;36192:158::-;36250:9;36283:61;36301:42;36310:32;36336:5;36310:32;:::i;:::-;36301:42;:::i;:::-;36283:61;:::i;:::-;36270:74;;36192:158;;;:::o;36356:147::-;36451:45;36490:5;36451:45;:::i;:::-;36446:3;36439:58;36356:147;;:::o;36509:114::-;36576:6;36610:5;36604:12;36594:22;;36509:114;;;:::o;36629:184::-;36728:11;36762:6;36757:3;36750:19;36802:4;36797:3;36793:14;36778:29;;36629:184;;;;:::o;36819:132::-;36886:4;36909:3;36901:11;;36939:4;36934:3;36930:14;36922:22;;36819:132;;;:::o;36957:108::-;37034:24;37052:5;37034:24;:::i;:::-;37029:3;37022:37;36957:108;;:::o;37071:179::-;37140:10;37161:46;37203:3;37195:6;37161:46;:::i;:::-;37239:4;37234:3;37230:14;37216:28;;37071:179;;;;:::o;37256:113::-;37326:4;37358;37353:3;37349:14;37341:22;;37256:113;;;:::o;37405:732::-;37524:3;37553:54;37601:5;37553:54;:::i;:::-;37623:86;37702:6;37697:3;37623:86;:::i;:::-;37616:93;;37733:56;37783:5;37733:56;:::i;:::-;37812:7;37843:1;37828:284;37853:6;37850:1;37847:13;37828:284;;;37929:6;37923:13;37956:63;38015:3;38000:13;37956:63;:::i;:::-;37949:70;;38042:60;38095:6;38042:60;:::i;:::-;38032:70;;37888:224;37875:1;37872;37868:9;37863:14;;37828:284;;;37832:14;38128:3;38121:10;;37529:608;;;37405:732;;;;:::o;38143:831::-;38406:4;38444:3;38433:9;38429:19;38421:27;;38458:71;38526:1;38515:9;38511:17;38502:6;38458:71;:::i;:::-;38539:80;38615:2;38604:9;38600:18;38591:6;38539:80;:::i;:::-;38666:9;38660:4;38656:20;38651:2;38640:9;38636:18;38629:48;38694:108;38797:4;38788:6;38694:108;:::i;:::-;38686:116;;38812:72;38880:2;38869:9;38865:18;38856:6;38812:72;:::i;:::-;38894:73;38962:3;38951:9;38947:19;38938:6;38894:73;:::i;:::-;38143:831;;;;;;;;:::o

Swarm Source

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