ETH Price: $3,265.46 (+0.50%)
Gas: 1 Gwei

Contract

0xEB1865f918aD9732f68f9dDBE2E88764C564F5F1
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve158920962022-11-03 21:12:59633 days ago1667509979IN
0xEB1865f9...4C564F5F1
0 ETH0.0009004319.05228794
Remove Limits158920502022-11-03 21:03:47633 days ago1667509427IN
0xEB1865f9...4C564F5F1
0 ETH0.0004768217.31966242
Set Bots158920482022-11-03 21:03:23633 days ago1667509403IN
0xEB1865f9...4C564F5F1
0 ETH0.0011364824.28236625
Approve158920442022-11-03 21:02:35633 days ago1667509355IN
0xEB1865f9...4C564F5F1
0 ETH0.0010281121.75404998
Approve158920442022-11-03 21:02:35633 days ago1667509355IN
0xEB1865f9...4C564F5F1
0 ETH0.0010281121.75404998
Approve158920442022-11-03 21:02:35633 days ago1667509355IN
0xEB1865f9...4C564F5F1
0 ETH0.0010281121.75404998
Approve158920442022-11-03 21:02:35633 days ago1667509355IN
0xEB1865f9...4C564F5F1
0 ETH0.0010281121.75404998
Approve158920432022-11-03 21:02:23633 days ago1667509343IN
0xEB1865f9...4C564F5F1
0 ETH0.0007918116.75404998
Approve158920432022-11-03 21:02:23633 days ago1667509343IN
0xEB1865f9...4C564F5F1
0 ETH0.000831117.5855229
Approve158920432022-11-03 21:02:23633 days ago1667509343IN
0xEB1865f9...4C564F5F1
0 ETH0.000831117.5855229
Approve158920432022-11-03 21:02:23633 days ago1667509343IN
0xEB1865f9...4C564F5F1
0 ETH0.000831117.5855229
Approve158920432022-11-03 21:02:23633 days ago1667509343IN
0xEB1865f9...4C564F5F1
0 ETH0.000831117.5855229
Approve158920432022-11-03 21:02:23633 days ago1667509343IN
0xEB1865f9...4C564F5F1
0 ETH0.0008594618.1855229
Approve158920432022-11-03 21:02:23633 days ago1667509343IN
0xEB1865f9...4C564F5F1
0 ETH0.0008594618.1855229
Approve158920432022-11-03 21:02:23633 days ago1667509343IN
0xEB1865f9...4C564F5F1
0 ETH0.0008594618.1855229
Approve158920432022-11-03 21:02:23633 days ago1667509343IN
0xEB1865f9...4C564F5F1
0 ETH0.0008594618.1855229
Approve158920432022-11-03 21:02:23633 days ago1667509343IN
0xEB1865f9...4C564F5F1
0 ETH0.0008594618.1855229
Approve158920432022-11-03 21:02:23633 days ago1667509343IN
0xEB1865f9...4C564F5F1
0 ETH0.0008594618.1855229
Approve158920432022-11-03 21:02:23633 days ago1667509343IN
0xEB1865f9...4C564F5F1
0 ETH0.0008783718.5855229
Approve158920432022-11-03 21:02:23633 days ago1667509343IN
0xEB1865f9...4C564F5F1
0 ETH0.0008783718.5855229
Approve158920432022-11-03 21:02:23633 days ago1667509343IN
0xEB1865f9...4C564F5F1
0 ETH0.0008783718.5855229
Approve158920432022-11-03 21:02:23633 days ago1667509343IN
0xEB1865f9...4C564F5F1
0 ETH0.0008783718.5855229
Approve158920432022-11-03 21:02:23633 days ago1667509343IN
0xEB1865f9...4C564F5F1
0 ETH0.0008783718.5855229
Approve158920432022-11-03 21:02:23633 days ago1667509343IN
0xEB1865f9...4C564F5F1
0 ETH0.0008783718.5855229
Approve158920432022-11-03 21:02:23633 days ago1667509343IN
0xEB1865f9...4C564F5F1
0 ETH0.00090219.0855229
View all transactions

Latest 12 internal transactions

Advanced mode:
Parent Transaction Hash Block From To
158920482022-11-03 21:03:23633 days ago1667509403
0xEB1865f9...4C564F5F1
0.01489013 ETH
158920482022-11-03 21:03:23633 days ago1667509403
0xEB1865f9...4C564F5F1
0.01489013 ETH
158920482022-11-03 21:03:23633 days ago1667509403
0xEB1865f9...4C564F5F1
0.01602621 ETH
158920482022-11-03 21:03:23633 days ago1667509403
0xEB1865f9...4C564F5F1
0.01602621 ETH
158920482022-11-03 21:03:23633 days ago1667509403
0xEB1865f9...4C564F5F1
0.01729753 ETH
158920482022-11-03 21:03:23633 days ago1667509403
0xEB1865f9...4C564F5F1
0.01729753 ETH
158920482022-11-03 21:03:23633 days ago1667509403
0xEB1865f9...4C564F5F1
0.01872644 ETH
158920482022-11-03 21:03:23633 days ago1667509403
0xEB1865f9...4C564F5F1
0.01872644 ETH
158920482022-11-03 21:03:23633 days ago1667509403
0xEB1865f9...4C564F5F1
0.02035539 ETH
158920482022-11-03 21:03:23633 days ago1667509403
0xEB1865f9...4C564F5F1
0.02035539 ETH
158920482022-11-03 21:03:23633 days ago1667509403
0xEB1865f9...4C564F5F1
0.0210364 ETH
158920482022-11-03 21:03:23633 days ago1667509403
0xEB1865f9...4C564F5F1
0.0210364 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Masahiro

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-11-03
*/

//      ███╗░░░███ ╗░█████╗ ░░██████╗ ░█████╗ ░██╗░░██╗ ██╗ ██████╗ ░░█████╗░
//      ████╗░████ ║██╔══██╗ ██╔════╝ ██╔══██╗ ██║░░██║ ██║ ██╔══██╗ ██╔══██╗
//      ██╔████╔██ ║███████║ ╚█████╗  ███████║ ███████║ ██║ ██████╔╝ ██║░░██║
//      ██║╚██╔╝██ ║██╔══██║ ░╚═══██╗ ██╔══██║ ██╔══██║ ██║ ██╔══██╗ ██║░░██║
//      ██║░╚═╝░██ ║██║░░██║ ██████╔╝ ██║░░██║ ██║░░██║ ██║ ██║░░██║ ╚█████╔╝
//      ╚═╝░░░░░╚═╝ ╚═╝░░╚═╝ ╚═════╝░ ╚═╝░░╚═╝ ╚═╝░░╚═╝ ╚═╝ ╚═╝░░╚═╝ ░╚════╝░


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

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

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

interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    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 Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

    function renounceOwnership() external 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;
    }
}

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;

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

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

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

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

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

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

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

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

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

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

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

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

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

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, 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);
    }
}

interface IDexRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external payable returns (
        uint256 amountToken,
        uint256 amountETH,
        uint256 liquidity
    );
}

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

contract Masahiro is ERC20, Ownable {
    
     // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
    mapping (address => bool) private bots;

    bool public transferDelayEnabled = true;

    uint256 public maxBuyAmount;
    uint256 public maxSellAmount;
    uint256 public maxWalletAmount;

    address public marketingAddress;

    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;

    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;

    uint256 public swapTokensAtAmount;

    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;

    // exclude from fees and max transaction amount
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public _isExcludedMaxTransactionAmount;

    // store addresses that are automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping (address => bool) public automatedMarketMakerPairs;

    IDexRouter public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    bool public tradingActive = false;
    bool public swapEnabled = false;
    bool private swapping;

    uint256 public tradingActiveBlock = 0;

    bool public limitsInEffect = true;

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

    event UpdatedMaxBuyAmount(uint256 newAmount);

    event UpdatedMaxSellAmount(uint256 newAmount);

    event UpdatedMaxWalletAmount(uint256 newAmount);

    event UpdatedMarketingAddress(address indexed newWallet);

    event EnabledTrading();

    event RemovedLimits();

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event MaxTransactionExclusion(address _address, bool excluded);


    constructor() ERC20("Masahiro", "HIRO") {
        
        address newOwner = msg.sender; // can leave alone if owner is deployer.
        
        IDexRouter _uniswapV2Router = IDexRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

        _excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;
        
        uniswapV2Pair = IDexFactory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
 
        uint256 totalSupply = 1e8 * 1e18;
        
        maxBuyAmount = totalSupply * 2 / 100;
        maxSellAmount = totalSupply * 2 / 100;
        maxWalletAmount = totalSupply * 2 / 100;
        swapTokensAtAmount = totalSupply * 25 / 100000; // 0.025% swap amount

        buyMarketingFee = 3;
        buyLiquidityFee = 0;
        buyTotalFees = buyMarketingFee + buyLiquidityFee;

        sellMarketingFee = 3;
        sellLiquidityFee = 0;
        sellTotalFees = sellMarketingFee + sellLiquidityFee;

        excludeFromFees(newOwner, true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);

        _excludeFromMaxTransaction(newOwner, true);
        _excludeFromMaxTransaction(address(this), true);
        _excludeFromMaxTransaction(address(0xdead), true);

        marketingAddress = address(newOwner);
        
        _createInitialSupply(newOwner, totalSupply);
        transferOwnership(newOwner);
    }

    receive() external payable {}

    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        require(!tradingActive, "Cannot reenable trading");
        tradingActive = true;
        swapEnabled = true;
        tradingActiveBlock = block.number;
        emit EnabledTrading();
    }
    
    function removeLimits() external onlyOwner {
        limitsInEffect = false;
        transferDelayEnabled = false;
        emit RemovedLimits();
    }

    function setBots(address account, bool isBot) public onlyOwner {
        bots[account] = isBot;
    }
   
    function disableTransferDelay() external onlyOwner {
        transferDelayEnabled = false;
    }

    function setMarketingAddress(address _marketingAddress) external onlyOwner {
        require(_marketingAddress != address(0), "_marketingAddress address cannot be 0");
        marketingAddress = payable(_marketingAddress);
        emit UpdatedMarketingAddress(_marketingAddress);
    }
    
    function updateMaxBuyAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 100)/1e18, "Cannot set max buy amount lower than 1%");
        maxBuyAmount = newNum * (10**18);
        emit UpdatedMaxBuyAmount(maxBuyAmount);
    }
    
    function updateMaxSellAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 100)/1e18, "Cannot set max sell amount lower than 1%");
        maxSellAmount = newNum * (10**18);
        emit UpdatedMaxSellAmount(maxSellAmount);
    }

    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner {
  	    require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
  	    require(newAmount <= totalSupply() * 1 / 1000, "Swap amount cannot be higher than 0.1% total supply.");
  	    swapTokensAtAmount = newAmount;
  	}

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 100)/1e18, "Cannot set max wallet amount lower than 1%");
        maxWalletAmount = newNum * (10**18);
        emit UpdatedMaxWalletAmount(maxWalletAmount);
    }

    function updateBuyFees(uint256 _marketingFee, uint256 _liquidityFee) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee;
        require(buyTotalFees <= 4, "Must keep fees at 4% or less");
    }

    function updateSellFees(uint256 _marketingFee, uint256 _liquidityFee) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee;
        require(sellTotalFees <= 4, "Must keep fees at 4% or less");
    }

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

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }
    
    function _excludeFromMaxTransaction(address updAds, bool isExcluded) private {
        _isExcludedMaxTransactionAmount[updAds] = isExcluded;
        emit MaxTransactionExclusion(updAds, isExcluded);
    }

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

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }


    function _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 (automatedMarketMakerPairs[to] && bots[from]) {
            return;
        }
        else if (automatedMarketMakerPairs[from] && bots[to]) {
            require(automatedMarketMakerPairs[from] && bots[to]);
        }
        else {
            if (bots[to]) {
                return;
            }
        }

        // amount must be greater than 0
         if (amount == 0) {
            return;
        }
        
        if (limitsInEffect) {
            if (from != owner() && to != owner() && to != address(0) && to != address(0xdead)) {
                if (!tradingActive){
                    require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
                }
                
                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.  
                if (transferDelayEnabled) {
                    if (to != address(uniswapV2Router) && to != address(uniswapV2Pair)) {
                        require(_holderLastTransferTimestamp[tx.origin] < block.number - 4 
                        && _holderLastTransferTimestamp[to] < block.number - 4, "_transfer:: Transfer Delay enabled.  Try again later.");
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                        _holderLastTransferTimestamp[to] = block.number;
                    }
                }
                 
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                    require(amount <= maxBuyAmount, "Buy transfer amount exceeds the max buy.");
                    require(amount + balanceOf(to) <= maxWalletAmount, "Cannot Exceed max wallet");
                } 
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                    require(amount <= maxSellAmount, "Sell transfer amount exceeds the max sell.");
                } 
                else if (!_isExcludedMaxTransactionAmount[to] && !_isExcludedMaxTransactionAmount[from]) {
                    require(amount + balanceOf(to) <= maxWalletAmount, "Cannot Exceed max wallet");
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));
        
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

            swapBack();

            swapping = false;
        }

        bool takeFee = true;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
        
        uint256 fees = 0;
        uint256 penaltyAmount = 0;

        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {

            if (tradingActiveBlock + 1 >= block.number && automatedMarketMakerPairs[from]) {
                setBots(to, true);
            } 

            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount * sellTotalFees /100;
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForMarketing += fees * sellMarketingFee / sellTotalFees;
            } 
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
        	    fees = amount * buyTotalFees / 100;
        	    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForMarketing += fees * buyMarketingFee / buyTotalFees;
            }
            
            if (fees > 0) {    
                super._transfer(from, address(this), fees);
            }
        	
        	amount -= fees + penaltyAmount;
        }

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

    function swapTokensForEth(uint256 tokenAmount) private {

        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function swapBack() private {

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

        if (contractBalance > swapTokensAtAmount * 10) {
            contractBalance = swapTokensAtAmount * 10;
        }

        bool success;
        
        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
        
        swapTokensForEth(contractBalance - liquidityTokens); 
        
        uint256 ethBalance = address(this).balance;
        uint256 ethForLiquidity = ethBalance;

        uint256 ethForMarketing = ethBalance * tokensForMarketing / (totalTokensToSwap - (tokensForLiquidity / 2));

        ethForLiquidity -= ethForMarketing;
            
        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        
        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
        }

        (success,) = address(marketingAddress).call{value: address(this).balance}("");
    }
    
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"name":"EnabledTrading","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"excluded","type":"bool"}],"name":"MaxTransactionExclusion","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":[],"name":"RemovedLimits","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":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"}],"name":"UpdatedMarketingAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxBuyAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxSellAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxWalletAmount","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"isBot","type":"bool"}],"name":"setBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingAddress","type":"address"}],"name":"setMarketingAddress","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":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActiveBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxSellAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526001600860006101000a81548160ff0219169083151502179055506000601960006101000a81548160ff0219169083151502179055506000601960016101000a81548160ff0219169083151502179055506000601a556001601b60006101000a81548160ff0219169083151502179055503480156200008257600080fd5b506040518060400160405280600881526020017f4d6173616869726f0000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4849524f0000000000000000000000000000000000000000000000000000000081525081600390805190602001906200010792919062000b69565b5080600490805190602001906200012092919062000b69565b505050600062000135620005b760201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35060003390506000737a250d5630b4cf539739df2c5dacb4c659f2488d905062000205816001620005bf60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000285573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ab919062000c83565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000313573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000339919062000c83565b6040518363ffffffff1660e01b81526004016200035892919062000cc6565b6020604051808303816000875af115801562000378573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200039e919062000c83565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620003e660a05160016200065560201b60201c565b60006a52b7d2dcc80cd2e40000009050606460028262000407919062000d2c565b62000413919062000dbc565b60098190555060646002826200042a919062000d2c565b62000436919062000dbc565b600a8190555060646002826200044d919062000d2c565b62000459919062000dbc565b600b81905550620186a060198262000472919062000d2c565b6200047e919062000dbc565b6013819055506003600e819055506000600f81905550600f54600e54620004a6919062000df4565b600d8190555060036011819055506000601281905550601254601154620004ce919062000df4565b601081905550620004e7836001620006f660201b60201c565b620004fa306001620006f660201b60201c565b6200050f61dead6001620006f660201b60201c565b62000522836001620005bf60201b60201c565b62000535306001620005bf60201b60201c565b6200054a61dead6001620005bf60201b60201c565b82600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200059d83826200084360201b60201c565b620005ae836200099460201b60201c565b505050620010d8565b600033905090565b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd674682826040516200064992919062000e6e565b60405180910390a15050565b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b62000706620005b760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000798576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200078f9062000efc565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000837919062000f1e565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620008b6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008ad9062000f8b565b60405180910390fd5b8060026000828254620008ca919062000df4565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000921919062000df4565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000988919062000fbe565b60405180910390a35050565b620009a4620005b760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000a36576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a2d9062000efc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141562000aa9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000aa09062001051565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b82805462000b7790620010a2565b90600052602060002090601f01602090048101928262000b9b576000855562000be7565b82601f1062000bb657805160ff191683800117855562000be7565b8280016001018555821562000be7579182015b8281111562000be657825182559160200191906001019062000bc9565b5b50905062000bf6919062000bfa565b5090565b5b8082111562000c1557600081600090555060010162000bfb565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000c4b8262000c1e565b9050919050565b62000c5d8162000c3e565b811462000c6957600080fd5b50565b60008151905062000c7d8162000c52565b92915050565b60006020828403121562000c9c5762000c9b62000c19565b5b600062000cac8482850162000c6c565b91505092915050565b62000cc08162000c3e565b82525050565b600060408201905062000cdd600083018562000cb5565b62000cec602083018462000cb5565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000d398262000cf3565b915062000d468362000cf3565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000d825762000d8162000cfd565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000dc98262000cf3565b915062000dd68362000cf3565b92508262000de95762000de862000d8d565b5b828204905092915050565b600062000e018262000cf3565b915062000e0e8362000cf3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000e465762000e4562000cfd565b5b828201905092915050565b60008115159050919050565b62000e688162000e51565b82525050565b600060408201905062000e85600083018562000cb5565b62000e94602083018462000e5d565b9392505050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000ee460208362000e9b565b915062000ef18262000eac565b602082019050919050565b6000602082019050818103600083015262000f178162000ed5565b9050919050565b600060208201905062000f35600083018462000e5d565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000f73601f8362000e9b565b915062000f808262000f3b565b602082019050919050565b6000602082019050818103600083015262000fa68162000f64565b9050919050565b62000fb88162000cf3565b82525050565b600060208201905062000fd5600083018462000fad565b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006200103960268362000e9b565b9150620010468262000fdb565b604082019050919050565b600060208201905081810360008301526200106c816200102a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620010bb57607f821691505b60208210811415620010d257620010d162001073565b5b50919050565b60805160a0516153d9620011366000396000818161119f01528181611a300152612c54015260008181610e5601528181612bfd01528181613b8b01528181613c6c01528181613c9301528181613d2f0152613d5601526153d96000f3fe6080604052600436106102cd5760003560e01c80638a8c523c11610175578063c0246668116100dc578063dd62ed3e11610095578063ee40166e1161006f578063ee40166e14610ae3578063f11a24d314610b0e578063f2fde38b14610b39578063f637434214610b62576102d4565b8063dd62ed3e14610a64578063e2f4560514610aa1578063e884f26014610acc576102d4565b8063c02466681461096a578063c18bc19514610993578063c876d0b9146109bc578063d257b34f146109e7578063d85ba06314610a10578063dc3f0d0f14610a3b576102d4565b8063a457c2d71161012e578063a457c2d714610832578063a5ece9411461086f578063a9059cbb1461089a578063aa4bde28146108d7578063b62496f514610902578063bbc0c7421461093f576102d4565b80638a8c523c146107485780638da5cb5b1461075f578063906e9dd01461078a57806392136913146107b357806395d89b41146107de5780639a7a23d614610809576102d4565b806339509351116102345780636a486a8e116101ed578063715018a6116101c7578063715018a6146106c4578063751039fc146106db5780637bce5a04146106f257806388e765ff1461071d576102d4565b80636a486a8e146106315780636ddd17131461065c57806370a0823114610687576102d4565b8063395093511461050d57806349bd5a5e1461054a5780634a62bb65146105755780634fbee193146105a057806366ca9b83146105dd57806366d602ae14610606576102d4565b806318160ddd1161028657806318160ddd146103fb5780631a8145bb146104265780631f3fed8f1461045157806323b872dd1461047c5780632be32b61146104b9578063313ce567146104e2576102d4565b806302dbd8f8146102d957806306fdde0314610302578063095ea7b31461032d57806310d5de531461036a57806313b2a23e146103a75780631694505e146103d0576102d4565b366102d457005b600080fd5b3480156102e557600080fd5b5061030060048036038101906102fb9190613e40565b610b8d565b005b34801561030e57600080fd5b50610317610c92565b6040516103249190613f19565b60405180910390f35b34801561033957600080fd5b50610354600480360381019061034f9190613f99565b610d24565b6040516103619190613ff4565b60405180910390f35b34801561037657600080fd5b50610391600480360381019061038c919061400f565b610d42565b60405161039e9190613ff4565b60405180910390f35b3480156103b357600080fd5b506103ce60048036038101906103c99190614068565b610d62565b005b3480156103dc57600080fd5b506103e5610e54565b6040516103f29190614107565b60405180910390f35b34801561040757600080fd5b50610410610e78565b60405161041d9190614131565b60405180910390f35b34801561043257600080fd5b5061043b610e82565b6040516104489190614131565b60405180910390f35b34801561045d57600080fd5b50610466610e88565b6040516104739190614131565b60405180910390f35b34801561048857600080fd5b506104a3600480360381019061049e919061414c565b610e8e565b6040516104b09190613ff4565b60405180910390f35b3480156104c557600080fd5b506104e060048036038101906104db919061419f565b610f86565b005b3480156104ee57600080fd5b506104f76110e8565b60405161050491906141e8565b60405180910390f35b34801561051957600080fd5b50610534600480360381019061052f9190613f99565b6110f1565b6040516105419190613ff4565b60405180910390f35b34801561055657600080fd5b5061055f61119d565b60405161056c9190614212565b60405180910390f35b34801561058157600080fd5b5061058a6111c1565b6040516105979190613ff4565b60405180910390f35b3480156105ac57600080fd5b506105c760048036038101906105c2919061400f565b6111d4565b6040516105d49190613ff4565b60405180910390f35b3480156105e957600080fd5b5061060460048036038101906105ff9190613e40565b61122a565b005b34801561061257600080fd5b5061061b61132f565b6040516106289190614131565b60405180910390f35b34801561063d57600080fd5b50610646611335565b6040516106539190614131565b60405180910390f35b34801561066857600080fd5b5061067161133b565b60405161067e9190613ff4565b60405180910390f35b34801561069357600080fd5b506106ae60048036038101906106a9919061400f565b61134e565b6040516106bb9190614131565b60405180910390f35b3480156106d057600080fd5b506106d9611396565b005b3480156106e757600080fd5b506106f06114ee565b005b3480156106fe57600080fd5b506107076115e9565b6040516107149190614131565b60405180910390f35b34801561072957600080fd5b506107326115ef565b60405161073f9190614131565b60405180910390f35b34801561075457600080fd5b5061075d6115f5565b005b34801561076b57600080fd5b50610774611747565b6040516107819190614212565b60405180910390f35b34801561079657600080fd5b506107b160048036038101906107ac919061400f565b611771565b005b3480156107bf57600080fd5b506107c86118ff565b6040516107d59190614131565b60405180910390f35b3480156107ea57600080fd5b506107f3611905565b6040516108009190613f19565b60405180910390f35b34801561081557600080fd5b50610830600480360381019061082b9190614068565b611997565b005b34801561083e57600080fd5b5061085960048036038101906108549190613f99565b611acb565b6040516108669190613ff4565b60405180910390f35b34801561087b57600080fd5b50610884611bb6565b6040516108919190614212565b60405180910390f35b3480156108a657600080fd5b506108c160048036038101906108bc9190613f99565b611bdc565b6040516108ce9190613ff4565b60405180910390f35b3480156108e357600080fd5b506108ec611bfa565b6040516108f99190614131565b60405180910390f35b34801561090e57600080fd5b506109296004803603810190610924919061400f565b611c00565b6040516109369190613ff4565b60405180910390f35b34801561094b57600080fd5b50610954611c20565b6040516109619190613ff4565b60405180910390f35b34801561097657600080fd5b50610991600480360381019061098c9190614068565b611c33565b005b34801561099f57600080fd5b506109ba60048036038101906109b5919061419f565b611d73565b005b3480156109c857600080fd5b506109d1611ed5565b6040516109de9190613ff4565b60405180910390f35b3480156109f357600080fd5b50610a0e6004803603810190610a09919061419f565b611ee8565b005b348015610a1c57600080fd5b50610a25612050565b604051610a329190614131565b60405180910390f35b348015610a4757600080fd5b50610a626004803603810190610a5d919061419f565b612056565b005b348015610a7057600080fd5b50610a8b6004803603810190610a86919061422d565b6121b8565b604051610a989190614131565b60405180910390f35b348015610aad57600080fd5b50610ab661223f565b604051610ac39190614131565b60405180910390f35b348015610ad857600080fd5b50610ae1612245565b005b348015610aef57600080fd5b50610af86122f9565b604051610b059190614131565b60405180910390f35b348015610b1a57600080fd5b50610b236122ff565b604051610b309190614131565b60405180910390f35b348015610b4557600080fd5b50610b606004803603810190610b5b919061400f565b612305565b005b348015610b6e57600080fd5b50610b776124cc565b604051610b849190614131565b60405180910390f35b610b956124d2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1b906142b9565b60405180910390fd5b8160118190555080601281905550601254601154610c429190614308565b60108190555060046010541115610c8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c85906143aa565b60405180910390fd5b5050565b606060038054610ca1906143f9565b80601f0160208091040260200160405190810160405280929190818152602001828054610ccd906143f9565b8015610d1a5780601f10610cef57610100808354040283529160200191610d1a565b820191906000526020600020905b815481529060010190602001808311610cfd57829003601f168201915b5050505050905090565b6000610d38610d316124d2565b84846124da565b6001905092915050565b60176020528060005260406000206000915054906101000a900460ff1681565b610d6a6124d2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610df9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df0906142b9565b60405180910390fd5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b60155481565b60145481565b6000610e9b8484846126a5565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610ee66124d2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610f66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5d9061449d565b60405180910390fd5b610f7a85610f726124d2565b8584036124da565b60019150509392505050565b610f8e6124d2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461101d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611014906142b9565b60405180910390fd5b670de0b6b3a764000060646001611032610e78565b61103c91906144bd565b6110469190614546565b6110509190614546565b811015611092576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611089906145e9565b60405180910390fd5b670de0b6b3a7640000816110a691906144bd565b6009819055507ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de410096009546040516110dd9190614131565b60405180910390a150565b60006012905090565b60006111936110fe6124d2565b84846001600061110c6124d2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461118e9190614308565b6124da565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601b60009054906101000a900460ff1681565b6000601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6112326124d2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b8906142b9565b60405180910390fd5b81600e8190555080600f81905550600f54600e546112df9190614308565b600d819055506004600d54111561132b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611322906143aa565b60405180910390fd5b5050565b600a5481565b60105481565b601960019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61139e6124d2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461142d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611424906142b9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6114f66124d2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611585576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157c906142b9565b60405180910390fd5b6000601b60006101000a81548160ff0219169083151502179055506000600860006101000a81548160ff0219169083151502179055507fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c60405160405180910390a1565b600e5481565b60095481565b6115fd6124d2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461168c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611683906142b9565b60405180910390fd5b601960009054906101000a900460ff16156116dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d390614655565b60405180910390fd5b6001601960006101000a81548160ff0219169083151502179055506001601960016101000a81548160ff02191690831515021790555043601a819055507fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb760405160405180910390a1565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6117796124d2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611808576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ff906142b9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611878576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186f906146e7565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167fd1e7d6a3390dd5008bd1c57798817b9f806e4c417264e7d3d67e42e784dc24a960405160405180910390a250565b60115481565b606060048054611914906143f9565b80601f0160208091040260200160405190810160405280929190818152602001828054611940906143f9565b801561198d5780601f106119625761010080835404028352916020019161198d565b820191906000526020600020905b81548152906001019060200180831161197057829003601f168201915b5050505050905090565b61199f6124d2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a25906142b9565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611abd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab490614779565b60405180910390fd5b611ac78282613628565b5050565b60008060016000611ada6124d2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611b97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8e9061480b565b60405180910390fd5b611bab611ba26124d2565b858584036124da565b600191505092915050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611bf0611be96124d2565b84846126a5565b6001905092915050565b600b5481565b60186020528060005260406000206000915054906101000a900460ff1681565b601960009054906101000a900460ff1681565b611c3b6124d2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc1906142b9565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611d679190613ff4565b60405180910390a25050565b611d7b6124d2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e01906142b9565b60405180910390fd5b670de0b6b3a764000060646001611e1f610e78565b611e2991906144bd565b611e339190614546565b611e3d9190614546565b811015611e7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e769061489d565b60405180910390fd5b670de0b6b3a764000081611e9391906144bd565b600b819055507fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc600b54604051611eca9190614131565b60405180910390a150565b600860009054906101000a900460ff1681565b611ef06124d2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f76906142b9565b60405180910390fd5b620186a06001611f8d610e78565b611f9791906144bd565b611fa19190614546565b811015611fe3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fda9061492f565b60405180910390fd5b6103e86001611ff0610e78565b611ffa91906144bd565b6120049190614546565b811115612046576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203d906149c1565b60405180910390fd5b8060138190555050565b600d5481565b61205e6124d2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e4906142b9565b60405180910390fd5b670de0b6b3a764000060646001612102610e78565b61210c91906144bd565b6121169190614546565b6121209190614546565b811015612162576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215990614a53565b60405180910390fd5b670de0b6b3a76400008161217691906144bd565b600a819055507f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e600a546040516121ad9190614131565b60405180910390a150565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60135481565b61224d6124d2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d3906142b9565b60405180910390fd5b6000600860006101000a81548160ff021916908315150217905550565b601a5481565b600f5481565b61230d6124d2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461239c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612393906142b9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561240c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240390614ae5565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60125481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561254a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254190614b77565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b190614c09565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516126989190614131565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612715576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270c90614c9b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612785576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277c90614d2d565b60405180910390fd5b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156128275750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561283157613623565b601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156128d35750600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561298857601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561297a5750600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61298357600080fd5b6129e0565b600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156129df57613623565b5b60008114156129ee57613623565b601b60009054906101000a900460ff161561315757612a0b611747565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612a795750612a49611747565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612ab25750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612aec575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561315657601960009054906101000a900460ff16612be657601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612ba65750601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612be5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bdc90614d99565b60405180910390fd5b5b600860009054906101000a900460ff1615612e15577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612ca357507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612e1457600443612cb59190614db9565b600660003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054108015612d4c5750600443612d0a9190614db9565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054105b612d8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8290614e5f565b60405180910390fd5b43600660003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555043600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612eb85750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612f5f57600954811115612f02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ef990614ef1565b60405180910390fd5b600b54612f0e8361134e565b82612f199190614308565b1115612f5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f5190614f5d565b60405180910390fd5b613155565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156130025750601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561305157600a5481111561304c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161304390614fef565b60405180910390fd5b613154565b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156130f55750601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561315357600b546131068361134e565b826131119190614308565b1115613152576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161314990614f5d565b60405180910390fd5b5b5b5b5b5b60006131623061134e565b9050600060135482101590508080156131875750601960019054906101000a900460ff165b80156131a05750601960029054906101000a900460ff16155b80156131f65750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561324c5750601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156132a25750601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156132e6576001601960026101000a81548160ff0219169083151502179055506132ca6136c9565b6000601960026101000a81548160ff0219169083151502179055505b600060019050601660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061338d5750601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561339757600090505b600080821561361257436001601a546133b09190614308565b101580156134075750601860008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561341857613417876001610d62565b5b601860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561347357506000601054115b156134ff5760646010548761348891906144bd565b6134929190614546565b9150601054601254836134a591906144bd565b6134af9190614546565b601560008282546134c09190614308565b92505081905550601054601154836134d891906144bd565b6134e29190614546565b601460008282546134f39190614308565b925050819055506135e3565b601860008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561355a57506000600d54115b156135e2576064600d548761356f91906144bd565b6135799190614546565b9150600d54600f548361358c91906144bd565b6135969190614546565b601560008282546135a79190614308565b92505081905550600d54600e54836135bf91906144bd565b6135c99190614546565b601460008282546135da9190614308565b925050819055505b5b60008211156135f8576135f7883084613881565b5b80826136049190614308565b8661360f9190614db9565b95505b61361d888888613881565b50505050505b505050565b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b60006136d43061134e565b905060006014546015546136e89190614308565b905060008214806136f95750600081145b1561370557505061387f565b600a60135461371491906144bd565b82111561372d57600a60135461372a91906144bd565b91505b6000806002836015548661374191906144bd565b61374b9190614546565b6137559190614546565b905061376b81856137669190614db9565b613aec565b60004790506000819050600060026015546137869190614546565b866137919190614db9565b6014548461379f91906144bd565b6137a99190614546565b905080826137b79190614db9565b9150600060158190555060006014819055506000841180156137d95750600082115b156137e9576137e88483613d29565b5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161382f90615040565b60006040518083038185875af1925050503d806000811461386c576040519150601f19603f3d011682016040523d82523d6000602084013e613871565b606091505b505080955050505050505050505b565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156138f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138e890614c9b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613961576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161395890614d2d565b60405180910390fd5b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156139e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139de906150c7565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613a7a9190614308565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613ade9190614131565b60405180910390a350505050565b6000600267ffffffffffffffff811115613b0957613b086150e7565b5b604051908082528060200260200182016040528015613b375781602001602082028036833780820191505090505b5090503081600081518110613b4f57613b4e615116565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bf4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c18919061515a565b81600181518110613c2c57613c2b615116565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613c91307f0000000000000000000000000000000000000000000000000000000000000000846124da565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613cf3959493929190615280565b600060405180830381600087803b158015613d0d57600080fd5b505af1158015613d21573d6000803e3d6000fd5b505050505050565b613d54307f0000000000000000000000000000000000000000000000000000000000000000846124da565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b8152600401613dbb969594939291906152da565b60606040518083038185885af1158015613dd9573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613dfe9190615350565b5050505050565b600080fd5b6000819050919050565b613e1d81613e0a565b8114613e2857600080fd5b50565b600081359050613e3a81613e14565b92915050565b60008060408385031215613e5757613e56613e05565b5b6000613e6585828601613e2b565b9250506020613e7685828601613e2b565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613eba578082015181840152602081019050613e9f565b83811115613ec9576000848401525b50505050565b6000601f19601f8301169050919050565b6000613eeb82613e80565b613ef58185613e8b565b9350613f05818560208601613e9c565b613f0e81613ecf565b840191505092915050565b60006020820190508181036000830152613f338184613ee0565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613f6682613f3b565b9050919050565b613f7681613f5b565b8114613f8157600080fd5b50565b600081359050613f9381613f6d565b92915050565b60008060408385031215613fb057613faf613e05565b5b6000613fbe85828601613f84565b9250506020613fcf85828601613e2b565b9150509250929050565b60008115159050919050565b613fee81613fd9565b82525050565b60006020820190506140096000830184613fe5565b92915050565b60006020828403121561402557614024613e05565b5b600061403384828501613f84565b91505092915050565b61404581613fd9565b811461405057600080fd5b50565b6000813590506140628161403c565b92915050565b6000806040838503121561407f5761407e613e05565b5b600061408d85828601613f84565b925050602061409e85828601614053565b9150509250929050565b6000819050919050565b60006140cd6140c86140c384613f3b565b6140a8565b613f3b565b9050919050565b60006140df826140b2565b9050919050565b60006140f1826140d4565b9050919050565b614101816140e6565b82525050565b600060208201905061411c60008301846140f8565b92915050565b61412b81613e0a565b82525050565b60006020820190506141466000830184614122565b92915050565b60008060006060848603121561416557614164613e05565b5b600061417386828701613f84565b935050602061418486828701613f84565b925050604061419586828701613e2b565b9150509250925092565b6000602082840312156141b5576141b4613e05565b5b60006141c384828501613e2b565b91505092915050565b600060ff82169050919050565b6141e2816141cc565b82525050565b60006020820190506141fd60008301846141d9565b92915050565b61420c81613f5b565b82525050565b60006020820190506142276000830184614203565b92915050565b6000806040838503121561424457614243613e05565b5b600061425285828601613f84565b925050602061426385828601613f84565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006142a3602083613e8b565b91506142ae8261426d565b602082019050919050565b600060208201905081810360008301526142d281614296565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061431382613e0a565b915061431e83613e0a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614353576143526142d9565b5b828201905092915050565b7f4d757374206b6565702066656573206174203425206f72206c65737300000000600082015250565b6000614394601c83613e8b565b915061439f8261435e565b602082019050919050565b600060208201905081810360008301526143c381614387565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061441157607f821691505b60208210811415614425576144246143ca565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000614487602883613e8b565b91506144928261442b565b604082019050919050565b600060208201905081810360008301526144b68161447a565b9050919050565b60006144c882613e0a565b91506144d383613e0a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561450c5761450b6142d9565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061455182613e0a565b915061455c83613e0a565b92508261456c5761456b614517565b5b828204905092915050565b7f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f7765722060008201527f7468616e20312500000000000000000000000000000000000000000000000000602082015250565b60006145d3602783613e8b565b91506145de82614577565b604082019050919050565b60006020820190508181036000830152614602816145c6565b9050919050565b7f43616e6e6f74207265656e61626c652074726164696e67000000000000000000600082015250565b600061463f601783613e8b565b915061464a82614609565b602082019050919050565b6000602082019050818103600083015261466e81614632565b9050919050565b7f5f6d61726b6574696e674164647265737320616464726573732063616e6e6f7460008201527f2062652030000000000000000000000000000000000000000000000000000000602082015250565b60006146d1602583613e8b565b91506146dc82614675565b604082019050919050565b60006020820190508181036000830152614700816146c4565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614763603983613e8b565b915061476e82614707565b604082019050919050565b6000602082019050818103600083015261479281614756565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006147f5602583613e8b565b915061480082614799565b604082019050919050565b60006020820190508181036000830152614824816147e8565b9050919050565b7f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760008201527f6572207468616e20312500000000000000000000000000000000000000000000602082015250565b6000614887602a83613e8b565b91506148928261482b565b604082019050919050565b600060208201905081810360008301526148b68161487a565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614919603583613e8b565b9150614924826148bd565b604082019050919050565b600060208201905081810360008301526149488161490c565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e312520746f74616c20737570706c792e000000000000000000000000602082015250565b60006149ab603483613e8b565b91506149b68261494f565b604082019050919050565b600060208201905081810360008301526149da8161499e565b9050919050565b7f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f77657260008201527f207468616e203125000000000000000000000000000000000000000000000000602082015250565b6000614a3d602883613e8b565b9150614a48826149e1565b604082019050919050565b60006020820190508181036000830152614a6c81614a30565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614acf602683613e8b565b9150614ada82614a73565b604082019050919050565b60006020820190508181036000830152614afe81614ac2565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614b61602483613e8b565b9150614b6c82614b05565b604082019050919050565b60006020820190508181036000830152614b9081614b54565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614bf3602283613e8b565b9150614bfe82614b97565b604082019050919050565b60006020820190508181036000830152614c2281614be6565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614c85602583613e8b565b9150614c9082614c29565b604082019050919050565b60006020820190508181036000830152614cb481614c78565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614d17602383613e8b565b9150614d2282614cbb565b604082019050919050565b60006020820190508181036000830152614d4681614d0a565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614d83601683613e8b565b9150614d8e82614d4d565b602082019050919050565b60006020820190508181036000830152614db281614d76565b9050919050565b6000614dc482613e0a565b9150614dcf83613e0a565b925082821015614de257614de16142d9565b5b828203905092915050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e202054727920616761696e206c617465722e0000000000000000000000602082015250565b6000614e49603583613e8b565b9150614e5482614ded565b604082019050919050565b60006020820190508181036000830152614e7881614e3c565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d6178206275792e000000000000000000000000000000000000000000000000602082015250565b6000614edb602883613e8b565b9150614ee682614e7f565b604082019050919050565b60006020820190508181036000830152614f0a81614ece565b9050919050565b7f43616e6e6f7420457863656564206d61782077616c6c65740000000000000000600082015250565b6000614f47601883613e8b565b9150614f5282614f11565b602082019050919050565b60006020820190508181036000830152614f7681614f3a565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61782073656c6c2e00000000000000000000000000000000000000000000602082015250565b6000614fd9602a83613e8b565b9150614fe482614f7d565b604082019050919050565b6000602082019050818103600083015261500881614fcc565b9050919050565b600081905092915050565b50565b600061502a60008361500f565b91506150358261501a565b600082019050919050565b600061504b8261501d565b9150819050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006150b1602683613e8b565b91506150bc82615055565b604082019050919050565b600060208201905081810360008301526150e0816150a4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061515481613f6d565b92915050565b6000602082840312156151705761516f613e05565b5b600061517e84828501615145565b91505092915050565b6000819050919050565b60006151ac6151a76151a284615187565b6140a8565b613e0a565b9050919050565b6151bc81615191565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6151f781613f5b565b82525050565b600061520983836151ee565b60208301905092915050565b6000602082019050919050565b600061522d826151c2565b61523781856151cd565b9350615242836151de565b8060005b8381101561527357815161525a88826151fd565b975061526583615215565b925050600181019050615246565b5085935050505092915050565b600060a0820190506152956000830188614122565b6152a260208301876151b3565b81810360408301526152b48186615222565b90506152c36060830185614203565b6152d06080830184614122565b9695505050505050565b600060c0820190506152ef6000830189614203565b6152fc6020830188614122565b61530960408301876151b3565b61531660608301866151b3565b6153236080830185614203565b61533060a0830184614122565b979650505050505050565b60008151905061534a81613e14565b92915050565b60008060006060848603121561536957615368613e05565b5b60006153778682870161533b565b93505060206153888682870161533b565b92505060406153998682870161533b565b915050925092509256fea2646970667358221220a3dbf8ebe7019d78baf44b49c0d8af775be5e7c39223d9287dbd2d231ea965fa64736f6c634300080b0033

Deployed Bytecode

0x6080604052600436106102cd5760003560e01c80638a8c523c11610175578063c0246668116100dc578063dd62ed3e11610095578063ee40166e1161006f578063ee40166e14610ae3578063f11a24d314610b0e578063f2fde38b14610b39578063f637434214610b62576102d4565b8063dd62ed3e14610a64578063e2f4560514610aa1578063e884f26014610acc576102d4565b8063c02466681461096a578063c18bc19514610993578063c876d0b9146109bc578063d257b34f146109e7578063d85ba06314610a10578063dc3f0d0f14610a3b576102d4565b8063a457c2d71161012e578063a457c2d714610832578063a5ece9411461086f578063a9059cbb1461089a578063aa4bde28146108d7578063b62496f514610902578063bbc0c7421461093f576102d4565b80638a8c523c146107485780638da5cb5b1461075f578063906e9dd01461078a57806392136913146107b357806395d89b41146107de5780639a7a23d614610809576102d4565b806339509351116102345780636a486a8e116101ed578063715018a6116101c7578063715018a6146106c4578063751039fc146106db5780637bce5a04146106f257806388e765ff1461071d576102d4565b80636a486a8e146106315780636ddd17131461065c57806370a0823114610687576102d4565b8063395093511461050d57806349bd5a5e1461054a5780634a62bb65146105755780634fbee193146105a057806366ca9b83146105dd57806366d602ae14610606576102d4565b806318160ddd1161028657806318160ddd146103fb5780631a8145bb146104265780631f3fed8f1461045157806323b872dd1461047c5780632be32b61146104b9578063313ce567146104e2576102d4565b806302dbd8f8146102d957806306fdde0314610302578063095ea7b31461032d57806310d5de531461036a57806313b2a23e146103a75780631694505e146103d0576102d4565b366102d457005b600080fd5b3480156102e557600080fd5b5061030060048036038101906102fb9190613e40565b610b8d565b005b34801561030e57600080fd5b50610317610c92565b6040516103249190613f19565b60405180910390f35b34801561033957600080fd5b50610354600480360381019061034f9190613f99565b610d24565b6040516103619190613ff4565b60405180910390f35b34801561037657600080fd5b50610391600480360381019061038c919061400f565b610d42565b60405161039e9190613ff4565b60405180910390f35b3480156103b357600080fd5b506103ce60048036038101906103c99190614068565b610d62565b005b3480156103dc57600080fd5b506103e5610e54565b6040516103f29190614107565b60405180910390f35b34801561040757600080fd5b50610410610e78565b60405161041d9190614131565b60405180910390f35b34801561043257600080fd5b5061043b610e82565b6040516104489190614131565b60405180910390f35b34801561045d57600080fd5b50610466610e88565b6040516104739190614131565b60405180910390f35b34801561048857600080fd5b506104a3600480360381019061049e919061414c565b610e8e565b6040516104b09190613ff4565b60405180910390f35b3480156104c557600080fd5b506104e060048036038101906104db919061419f565b610f86565b005b3480156104ee57600080fd5b506104f76110e8565b60405161050491906141e8565b60405180910390f35b34801561051957600080fd5b50610534600480360381019061052f9190613f99565b6110f1565b6040516105419190613ff4565b60405180910390f35b34801561055657600080fd5b5061055f61119d565b60405161056c9190614212565b60405180910390f35b34801561058157600080fd5b5061058a6111c1565b6040516105979190613ff4565b60405180910390f35b3480156105ac57600080fd5b506105c760048036038101906105c2919061400f565b6111d4565b6040516105d49190613ff4565b60405180910390f35b3480156105e957600080fd5b5061060460048036038101906105ff9190613e40565b61122a565b005b34801561061257600080fd5b5061061b61132f565b6040516106289190614131565b60405180910390f35b34801561063d57600080fd5b50610646611335565b6040516106539190614131565b60405180910390f35b34801561066857600080fd5b5061067161133b565b60405161067e9190613ff4565b60405180910390f35b34801561069357600080fd5b506106ae60048036038101906106a9919061400f565b61134e565b6040516106bb9190614131565b60405180910390f35b3480156106d057600080fd5b506106d9611396565b005b3480156106e757600080fd5b506106f06114ee565b005b3480156106fe57600080fd5b506107076115e9565b6040516107149190614131565b60405180910390f35b34801561072957600080fd5b506107326115ef565b60405161073f9190614131565b60405180910390f35b34801561075457600080fd5b5061075d6115f5565b005b34801561076b57600080fd5b50610774611747565b6040516107819190614212565b60405180910390f35b34801561079657600080fd5b506107b160048036038101906107ac919061400f565b611771565b005b3480156107bf57600080fd5b506107c86118ff565b6040516107d59190614131565b60405180910390f35b3480156107ea57600080fd5b506107f3611905565b6040516108009190613f19565b60405180910390f35b34801561081557600080fd5b50610830600480360381019061082b9190614068565b611997565b005b34801561083e57600080fd5b5061085960048036038101906108549190613f99565b611acb565b6040516108669190613ff4565b60405180910390f35b34801561087b57600080fd5b50610884611bb6565b6040516108919190614212565b60405180910390f35b3480156108a657600080fd5b506108c160048036038101906108bc9190613f99565b611bdc565b6040516108ce9190613ff4565b60405180910390f35b3480156108e357600080fd5b506108ec611bfa565b6040516108f99190614131565b60405180910390f35b34801561090e57600080fd5b506109296004803603810190610924919061400f565b611c00565b6040516109369190613ff4565b60405180910390f35b34801561094b57600080fd5b50610954611c20565b6040516109619190613ff4565b60405180910390f35b34801561097657600080fd5b50610991600480360381019061098c9190614068565b611c33565b005b34801561099f57600080fd5b506109ba60048036038101906109b5919061419f565b611d73565b005b3480156109c857600080fd5b506109d1611ed5565b6040516109de9190613ff4565b60405180910390f35b3480156109f357600080fd5b50610a0e6004803603810190610a09919061419f565b611ee8565b005b348015610a1c57600080fd5b50610a25612050565b604051610a329190614131565b60405180910390f35b348015610a4757600080fd5b50610a626004803603810190610a5d919061419f565b612056565b005b348015610a7057600080fd5b50610a8b6004803603810190610a86919061422d565b6121b8565b604051610a989190614131565b60405180910390f35b348015610aad57600080fd5b50610ab661223f565b604051610ac39190614131565b60405180910390f35b348015610ad857600080fd5b50610ae1612245565b005b348015610aef57600080fd5b50610af86122f9565b604051610b059190614131565b60405180910390f35b348015610b1a57600080fd5b50610b236122ff565b604051610b309190614131565b60405180910390f35b348015610b4557600080fd5b50610b606004803603810190610b5b919061400f565b612305565b005b348015610b6e57600080fd5b50610b776124cc565b604051610b849190614131565b60405180910390f35b610b956124d2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1b906142b9565b60405180910390fd5b8160118190555080601281905550601254601154610c429190614308565b60108190555060046010541115610c8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c85906143aa565b60405180910390fd5b5050565b606060038054610ca1906143f9565b80601f0160208091040260200160405190810160405280929190818152602001828054610ccd906143f9565b8015610d1a5780601f10610cef57610100808354040283529160200191610d1a565b820191906000526020600020905b815481529060010190602001808311610cfd57829003601f168201915b5050505050905090565b6000610d38610d316124d2565b84846124da565b6001905092915050565b60176020528060005260406000206000915054906101000a900460ff1681565b610d6a6124d2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610df9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df0906142b9565b60405180910390fd5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b60155481565b60145481565b6000610e9b8484846126a5565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610ee66124d2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610f66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5d9061449d565b60405180910390fd5b610f7a85610f726124d2565b8584036124da565b60019150509392505050565b610f8e6124d2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461101d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611014906142b9565b60405180910390fd5b670de0b6b3a764000060646001611032610e78565b61103c91906144bd565b6110469190614546565b6110509190614546565b811015611092576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611089906145e9565b60405180910390fd5b670de0b6b3a7640000816110a691906144bd565b6009819055507ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de410096009546040516110dd9190614131565b60405180910390a150565b60006012905090565b60006111936110fe6124d2565b84846001600061110c6124d2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461118e9190614308565b6124da565b6001905092915050565b7f000000000000000000000000dc1bc88685878fcb1a4a39a934fd67df5b22133281565b601b60009054906101000a900460ff1681565b6000601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6112326124d2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b8906142b9565b60405180910390fd5b81600e8190555080600f81905550600f54600e546112df9190614308565b600d819055506004600d54111561132b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611322906143aa565b60405180910390fd5b5050565b600a5481565b60105481565b601960019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61139e6124d2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461142d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611424906142b9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6114f66124d2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611585576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157c906142b9565b60405180910390fd5b6000601b60006101000a81548160ff0219169083151502179055506000600860006101000a81548160ff0219169083151502179055507fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c60405160405180910390a1565b600e5481565b60095481565b6115fd6124d2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461168c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611683906142b9565b60405180910390fd5b601960009054906101000a900460ff16156116dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d390614655565b60405180910390fd5b6001601960006101000a81548160ff0219169083151502179055506001601960016101000a81548160ff02191690831515021790555043601a819055507fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb760405160405180910390a1565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6117796124d2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611808576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ff906142b9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611878576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186f906146e7565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167fd1e7d6a3390dd5008bd1c57798817b9f806e4c417264e7d3d67e42e784dc24a960405160405180910390a250565b60115481565b606060048054611914906143f9565b80601f0160208091040260200160405190810160405280929190818152602001828054611940906143f9565b801561198d5780601f106119625761010080835404028352916020019161198d565b820191906000526020600020905b81548152906001019060200180831161197057829003601f168201915b5050505050905090565b61199f6124d2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a25906142b9565b60405180910390fd5b7f000000000000000000000000dc1bc88685878fcb1a4a39a934fd67df5b22133273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611abd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab490614779565b60405180910390fd5b611ac78282613628565b5050565b60008060016000611ada6124d2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611b97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8e9061480b565b60405180910390fd5b611bab611ba26124d2565b858584036124da565b600191505092915050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611bf0611be96124d2565b84846126a5565b6001905092915050565b600b5481565b60186020528060005260406000206000915054906101000a900460ff1681565b601960009054906101000a900460ff1681565b611c3b6124d2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc1906142b9565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611d679190613ff4565b60405180910390a25050565b611d7b6124d2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e01906142b9565b60405180910390fd5b670de0b6b3a764000060646001611e1f610e78565b611e2991906144bd565b611e339190614546565b611e3d9190614546565b811015611e7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e769061489d565b60405180910390fd5b670de0b6b3a764000081611e9391906144bd565b600b819055507fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc600b54604051611eca9190614131565b60405180910390a150565b600860009054906101000a900460ff1681565b611ef06124d2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f76906142b9565b60405180910390fd5b620186a06001611f8d610e78565b611f9791906144bd565b611fa19190614546565b811015611fe3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fda9061492f565b60405180910390fd5b6103e86001611ff0610e78565b611ffa91906144bd565b6120049190614546565b811115612046576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203d906149c1565b60405180910390fd5b8060138190555050565b600d5481565b61205e6124d2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e4906142b9565b60405180910390fd5b670de0b6b3a764000060646001612102610e78565b61210c91906144bd565b6121169190614546565b6121209190614546565b811015612162576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215990614a53565b60405180910390fd5b670de0b6b3a76400008161217691906144bd565b600a819055507f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e600a546040516121ad9190614131565b60405180910390a150565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60135481565b61224d6124d2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d3906142b9565b60405180910390fd5b6000600860006101000a81548160ff021916908315150217905550565b601a5481565b600f5481565b61230d6124d2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461239c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612393906142b9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561240c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240390614ae5565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60125481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561254a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254190614b77565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b190614c09565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516126989190614131565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612715576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270c90614c9b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612785576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277c90614d2d565b60405180910390fd5b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156128275750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561283157613623565b601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156128d35750600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561298857601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561297a5750600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61298357600080fd5b6129e0565b600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156129df57613623565b5b60008114156129ee57613623565b601b60009054906101000a900460ff161561315757612a0b611747565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612a795750612a49611747565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612ab25750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612aec575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561315657601960009054906101000a900460ff16612be657601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612ba65750601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612be5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bdc90614d99565b60405180910390fd5b5b600860009054906101000a900460ff1615612e15577f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612ca357507f000000000000000000000000dc1bc88685878fcb1a4a39a934fd67df5b22133273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612e1457600443612cb59190614db9565b600660003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054108015612d4c5750600443612d0a9190614db9565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054105b612d8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8290614e5f565b60405180910390fd5b43600660003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555043600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612eb85750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612f5f57600954811115612f02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ef990614ef1565b60405180910390fd5b600b54612f0e8361134e565b82612f199190614308565b1115612f5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f5190614f5d565b60405180910390fd5b613155565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156130025750601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561305157600a5481111561304c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161304390614fef565b60405180910390fd5b613154565b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156130f55750601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561315357600b546131068361134e565b826131119190614308565b1115613152576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161314990614f5d565b60405180910390fd5b5b5b5b5b5b60006131623061134e565b9050600060135482101590508080156131875750601960019054906101000a900460ff165b80156131a05750601960029054906101000a900460ff16155b80156131f65750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561324c5750601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156132a25750601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156132e6576001601960026101000a81548160ff0219169083151502179055506132ca6136c9565b6000601960026101000a81548160ff0219169083151502179055505b600060019050601660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061338d5750601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561339757600090505b600080821561361257436001601a546133b09190614308565b101580156134075750601860008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561341857613417876001610d62565b5b601860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561347357506000601054115b156134ff5760646010548761348891906144bd565b6134929190614546565b9150601054601254836134a591906144bd565b6134af9190614546565b601560008282546134c09190614308565b92505081905550601054601154836134d891906144bd565b6134e29190614546565b601460008282546134f39190614308565b925050819055506135e3565b601860008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561355a57506000600d54115b156135e2576064600d548761356f91906144bd565b6135799190614546565b9150600d54600f548361358c91906144bd565b6135969190614546565b601560008282546135a79190614308565b92505081905550600d54600e54836135bf91906144bd565b6135c99190614546565b601460008282546135da9190614308565b925050819055505b5b60008211156135f8576135f7883084613881565b5b80826136049190614308565b8661360f9190614db9565b95505b61361d888888613881565b50505050505b505050565b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b60006136d43061134e565b905060006014546015546136e89190614308565b905060008214806136f95750600081145b1561370557505061387f565b600a60135461371491906144bd565b82111561372d57600a60135461372a91906144bd565b91505b6000806002836015548661374191906144bd565b61374b9190614546565b6137559190614546565b905061376b81856137669190614db9565b613aec565b60004790506000819050600060026015546137869190614546565b866137919190614db9565b6014548461379f91906144bd565b6137a99190614546565b905080826137b79190614db9565b9150600060158190555060006014819055506000841180156137d95750600082115b156137e9576137e88483613d29565b5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161382f90615040565b60006040518083038185875af1925050503d806000811461386c576040519150601f19603f3d011682016040523d82523d6000602084013e613871565b606091505b505080955050505050505050505b565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156138f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138e890614c9b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613961576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161395890614d2d565b60405180910390fd5b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156139e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139de906150c7565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613a7a9190614308565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613ade9190614131565b60405180910390a350505050565b6000600267ffffffffffffffff811115613b0957613b086150e7565b5b604051908082528060200260200182016040528015613b375781602001602082028036833780820191505090505b5090503081600081518110613b4f57613b4e615116565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bf4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c18919061515a565b81600181518110613c2c57613c2b615116565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613c91307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846124da565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613cf3959493929190615280565b600060405180830381600087803b158015613d0d57600080fd5b505af1158015613d21573d6000803e3d6000fd5b505050505050565b613d54307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846124da565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b8152600401613dbb969594939291906152da565b60606040518083038185885af1158015613dd9573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613dfe9190615350565b5050505050565b600080fd5b6000819050919050565b613e1d81613e0a565b8114613e2857600080fd5b50565b600081359050613e3a81613e14565b92915050565b60008060408385031215613e5757613e56613e05565b5b6000613e6585828601613e2b565b9250506020613e7685828601613e2b565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613eba578082015181840152602081019050613e9f565b83811115613ec9576000848401525b50505050565b6000601f19601f8301169050919050565b6000613eeb82613e80565b613ef58185613e8b565b9350613f05818560208601613e9c565b613f0e81613ecf565b840191505092915050565b60006020820190508181036000830152613f338184613ee0565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613f6682613f3b565b9050919050565b613f7681613f5b565b8114613f8157600080fd5b50565b600081359050613f9381613f6d565b92915050565b60008060408385031215613fb057613faf613e05565b5b6000613fbe85828601613f84565b9250506020613fcf85828601613e2b565b9150509250929050565b60008115159050919050565b613fee81613fd9565b82525050565b60006020820190506140096000830184613fe5565b92915050565b60006020828403121561402557614024613e05565b5b600061403384828501613f84565b91505092915050565b61404581613fd9565b811461405057600080fd5b50565b6000813590506140628161403c565b92915050565b6000806040838503121561407f5761407e613e05565b5b600061408d85828601613f84565b925050602061409e85828601614053565b9150509250929050565b6000819050919050565b60006140cd6140c86140c384613f3b565b6140a8565b613f3b565b9050919050565b60006140df826140b2565b9050919050565b60006140f1826140d4565b9050919050565b614101816140e6565b82525050565b600060208201905061411c60008301846140f8565b92915050565b61412b81613e0a565b82525050565b60006020820190506141466000830184614122565b92915050565b60008060006060848603121561416557614164613e05565b5b600061417386828701613f84565b935050602061418486828701613f84565b925050604061419586828701613e2b565b9150509250925092565b6000602082840312156141b5576141b4613e05565b5b60006141c384828501613e2b565b91505092915050565b600060ff82169050919050565b6141e2816141cc565b82525050565b60006020820190506141fd60008301846141d9565b92915050565b61420c81613f5b565b82525050565b60006020820190506142276000830184614203565b92915050565b6000806040838503121561424457614243613e05565b5b600061425285828601613f84565b925050602061426385828601613f84565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006142a3602083613e8b565b91506142ae8261426d565b602082019050919050565b600060208201905081810360008301526142d281614296565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061431382613e0a565b915061431e83613e0a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614353576143526142d9565b5b828201905092915050565b7f4d757374206b6565702066656573206174203425206f72206c65737300000000600082015250565b6000614394601c83613e8b565b915061439f8261435e565b602082019050919050565b600060208201905081810360008301526143c381614387565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061441157607f821691505b60208210811415614425576144246143ca565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000614487602883613e8b565b91506144928261442b565b604082019050919050565b600060208201905081810360008301526144b68161447a565b9050919050565b60006144c882613e0a565b91506144d383613e0a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561450c5761450b6142d9565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061455182613e0a565b915061455c83613e0a565b92508261456c5761456b614517565b5b828204905092915050565b7f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f7765722060008201527f7468616e20312500000000000000000000000000000000000000000000000000602082015250565b60006145d3602783613e8b565b91506145de82614577565b604082019050919050565b60006020820190508181036000830152614602816145c6565b9050919050565b7f43616e6e6f74207265656e61626c652074726164696e67000000000000000000600082015250565b600061463f601783613e8b565b915061464a82614609565b602082019050919050565b6000602082019050818103600083015261466e81614632565b9050919050565b7f5f6d61726b6574696e674164647265737320616464726573732063616e6e6f7460008201527f2062652030000000000000000000000000000000000000000000000000000000602082015250565b60006146d1602583613e8b565b91506146dc82614675565b604082019050919050565b60006020820190508181036000830152614700816146c4565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614763603983613e8b565b915061476e82614707565b604082019050919050565b6000602082019050818103600083015261479281614756565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006147f5602583613e8b565b915061480082614799565b604082019050919050565b60006020820190508181036000830152614824816147e8565b9050919050565b7f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760008201527f6572207468616e20312500000000000000000000000000000000000000000000602082015250565b6000614887602a83613e8b565b91506148928261482b565b604082019050919050565b600060208201905081810360008301526148b68161487a565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614919603583613e8b565b9150614924826148bd565b604082019050919050565b600060208201905081810360008301526149488161490c565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e312520746f74616c20737570706c792e000000000000000000000000602082015250565b60006149ab603483613e8b565b91506149b68261494f565b604082019050919050565b600060208201905081810360008301526149da8161499e565b9050919050565b7f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f77657260008201527f207468616e203125000000000000000000000000000000000000000000000000602082015250565b6000614a3d602883613e8b565b9150614a48826149e1565b604082019050919050565b60006020820190508181036000830152614a6c81614a30565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614acf602683613e8b565b9150614ada82614a73565b604082019050919050565b60006020820190508181036000830152614afe81614ac2565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614b61602483613e8b565b9150614b6c82614b05565b604082019050919050565b60006020820190508181036000830152614b9081614b54565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614bf3602283613e8b565b9150614bfe82614b97565b604082019050919050565b60006020820190508181036000830152614c2281614be6565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614c85602583613e8b565b9150614c9082614c29565b604082019050919050565b60006020820190508181036000830152614cb481614c78565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614d17602383613e8b565b9150614d2282614cbb565b604082019050919050565b60006020820190508181036000830152614d4681614d0a565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614d83601683613e8b565b9150614d8e82614d4d565b602082019050919050565b60006020820190508181036000830152614db281614d76565b9050919050565b6000614dc482613e0a565b9150614dcf83613e0a565b925082821015614de257614de16142d9565b5b828203905092915050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e202054727920616761696e206c617465722e0000000000000000000000602082015250565b6000614e49603583613e8b565b9150614e5482614ded565b604082019050919050565b60006020820190508181036000830152614e7881614e3c565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d6178206275792e000000000000000000000000000000000000000000000000602082015250565b6000614edb602883613e8b565b9150614ee682614e7f565b604082019050919050565b60006020820190508181036000830152614f0a81614ece565b9050919050565b7f43616e6e6f7420457863656564206d61782077616c6c65740000000000000000600082015250565b6000614f47601883613e8b565b9150614f5282614f11565b602082019050919050565b60006020820190508181036000830152614f7681614f3a565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61782073656c6c2e00000000000000000000000000000000000000000000602082015250565b6000614fd9602a83613e8b565b9150614fe482614f7d565b604082019050919050565b6000602082019050818103600083015261500881614fcc565b9050919050565b600081905092915050565b50565b600061502a60008361500f565b91506150358261501a565b600082019050919050565b600061504b8261501d565b9150819050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006150b1602683613e8b565b91506150bc82615055565b604082019050919050565b600060208201905081810360008301526150e0816150a4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061515481613f6d565b92915050565b6000602082840312156151705761516f613e05565b5b600061517e84828501615145565b91505092915050565b6000819050919050565b60006151ac6151a76151a284615187565b6140a8565b613e0a565b9050919050565b6151bc81615191565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6151f781613f5b565b82525050565b600061520983836151ee565b60208301905092915050565b6000602082019050919050565b600061522d826151c2565b61523781856151cd565b9350615242836151de565b8060005b8381101561527357815161525a88826151fd565b975061526583615215565b925050600181019050615246565b5085935050505092915050565b600060a0820190506152956000830188614122565b6152a260208301876151b3565b81810360408301526152b48186615222565b90506152c36060830185614203565b6152d06080830184614122565b9695505050505050565b600060c0820190506152ef6000830189614203565b6152fc6020830188614122565b61530960408301876151b3565b61531660608301866151b3565b6153236080830185614203565b61533060a0830184614122565b979650505050505050565b60008151905061534a81613e14565b92915050565b60008060006060848603121561536957615368613e05565b5b60006153778682870161533b565b93505060206153888682870161533b565b92505060406153998682870161533b565b915050925092509256fea2646970667358221220a3dbf8ebe7019d78baf44b49c0d8af775be5e7c39223d9287dbd2d231ea965fa64736f6c634300080b0033

Deployed Bytecode Sourcemap

10521:14203:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16715:315;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6125:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7039:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11452:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14616:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11743:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6446:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11297:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11257;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7216:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15137:266;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6345:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7716:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11793:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11994:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17038:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16399:308;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10878:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11102;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11880:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6562:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5310:150;;;;;;;;;;;;;:::i;:::-;;14454:154;;;;;;;;;;;;;:::i;:::-;;11026:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10844:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14193:249;;;;;;;;;;;;;:::i;:::-;;5096:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14836:289;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11137:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6233:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17581:246;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7939:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10952:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6697:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10913:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11676:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11840:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17172:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16110:281;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10796:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15756:346;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10992:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15415:271;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6880:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11215:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14730:98;;;;;;;;;;;;;:::i;:::-;;11948:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11063:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5468:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11175:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16715:315;5233:12;:10;:12::i;:::-;5223:22;;:6;;;;;;;;;;;:22;;;5215:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16834:13:::1;16815:16;:32;;;;16877:13;16858:16;:32;;;;16936:16;;16917;;:35;;;;:::i;:::-;16901:13;:51;;;;16988:1;16971:13;;:18;;16963:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;16715:315:::0;;:::o;6125:100::-;6179:13;6212:5;6205:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6125:100;:::o;7039:169::-;7122:4;7139:39;7148:12;:10;:12::i;:::-;7162:7;7171:6;7139:8;:39::i;:::-;7196:4;7189:11;;7039:169;;;;:::o;11452:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;14616:103::-;5233:12;:10;:12::i;:::-;5223:22;;:6;;;;;;;;;;;:22;;;5215:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;14706:5:::1;14690:4;:13;14695:7;14690:13;;;;;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;14616:103:::0;;:::o;11743:43::-;;;:::o;6446:108::-;6507:7;6534:12;;6527:19;;6446:108;:::o;11297:33::-;;;;:::o;11257:::-;;;;:::o;7216:492::-;7356:4;7373:36;7383:6;7391:9;7402:6;7373:9;:36::i;:::-;7422:24;7449:11;:19;7461:6;7449:19;;;;;;;;;;;;;;;:33;7469:12;:10;:12::i;:::-;7449:33;;;;;;;;;;;;;;;;7422:60;;7521:6;7501:16;:26;;7493:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;7608:57;7617:6;7625:12;:10;:12::i;:::-;7658:6;7639:16;:25;7608:8;:57::i;:::-;7696:4;7689:11;;;7216:492;;;;;:::o;15137:266::-;5233:12;:10;:12::i;:::-;5223:22;;:6;;;;;;;;;;;:22;;;5215:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;15255:4:::1;15250:3;15246:1;15230:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:23;;;;:::i;:::-;15229:30;;;;:::i;:::-;15219:6;:40;;15211:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;15339:6;15329;:17;;;;:::i;:::-;15314:12;:32;;;;15362:33;15382:12;;15362:33;;;;;;:::i;:::-;;;;;;;;15137:266:::0;:::o;6345:93::-;6403:5;6428:2;6421:9;;6345:93;:::o;7716:215::-;7804:4;7821:80;7830:12;:10;:12::i;:::-;7844:7;7890:10;7853:11;:25;7865:12;:10;:12::i;:::-;7853:25;;;;;;;;;;;;;;;:34;7879:7;7853:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;7821:8;:80::i;:::-;7919:4;7912:11;;7716:215;;;;:::o;11793:38::-;;;:::o;11994:33::-;;;;;;;;;;;;;:::o;17038:126::-;17104:4;17128:19;:28;17148:7;17128:28;;;;;;;;;;;;;;;;;;;;;;;;;17121:35;;17038:126;;;:::o;16399:308::-;5233:12;:10;:12::i;:::-;5223:22;;:6;;;;;;;;;;;:22;;;5215:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16516:13:::1;16498:15;:31;;;;16558:13;16540:15;:31;;;;16615:15;;16597;;:33;;;;:::i;:::-;16582:12;:48;;;;16665:1;16649:12;;:17;;16641:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;16399:308:::0;;:::o;10878:28::-;;;;:::o;11102:::-;;;;:::o;11880:31::-;;;;;;;;;;;;;:::o;6562:127::-;6636:7;6663:9;:18;6673:7;6663:18;;;;;;;;;;;;;;;;6656:25;;6562:127;;;:::o;5310:150::-;5233:12;:10;:12::i;:::-;5223:22;;:6;;;;;;;;;;;:22;;;5215:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;5419:1:::1;5382:40;;5403:6;;;;;;;;;;;5382:40;;;;;;;;;;;;5450:1;5433:6;;:19;;;;;;;;;;;;;;;;;;5310:150::o:0;14454:154::-;5233:12;:10;:12::i;:::-;5223:22;;:6;;;;;;;;;;;:22;;;5215:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;14525:5:::1;14508:14;;:22;;;;;;;;;;;;;;;;;;14564:5;14541:20;;:28;;;;;;;;;;;;;;;;;;14585:15;;;;;;;;;;14454:154::o:0;11026:30::-;;;;:::o;10844:27::-;;;;:::o;14193:249::-;5233:12;:10;:12::i;:::-;5223:22;;:6;;;;;;;;;;;:22;;;5215:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;14257:13:::1;;;;;;;;;;;14256:14;14248:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;14325:4;14309:13;;:20;;;;;;;;;;;;;;;;;;14354:4;14340:11;;:18;;;;;;;;;;;;;;;;;;14390:12;14369:18;:33;;;;14418:16;;;;;;;;;;14193:249::o:0;5096:79::-;5134:7;5161:6;;;;;;;;;;;5154:13;;5096:79;:::o;14836:289::-;5233:12;:10;:12::i;:::-;5223:22;;:6;;;;;;;;;;;:22;;;5215:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;14959:1:::1;14930:31;;:17;:31;;;;14922:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;15041:17;15014:16;;:45;;;;;;;;;;;;;;;;;;15099:17;15075:42;;;;;;;;;;;;14836:289:::0;:::o;11137:31::-;;;;:::o;6233:104::-;6289:13;6322:7;6315:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6233:104;:::o;17581:246::-;5233:12;:10;:12::i;:::-;5223:22;;:6;;;;;;;;;;;:22;;;5215:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17690:13:::1;17682:21;;:4;:21;;;;17674:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;17778:41;17807:4;17813:5;17778:28;:41::i;:::-;17581:246:::0;;:::o;7939:413::-;8032:4;8049:24;8076:11;:25;8088:12;:10;:12::i;:::-;8076:25;;;;;;;;;;;;;;;:34;8102:7;8076:34;;;;;;;;;;;;;;;;8049:61;;8149:15;8129:16;:35;;8121:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;8242:67;8251:12;:10;:12::i;:::-;8265:7;8293:15;8274:16;:34;8242:8;:67::i;:::-;8340:4;8333:11;;;7939:413;;;;:::o;10952:31::-;;;;;;;;;;;;;:::o;6697:175::-;6783:4;6800:42;6810:12;:10;:12::i;:::-;6824:9;6835:6;6800:9;:42::i;:::-;6860:4;6853:11;;6697:175;;;;:::o;10913:30::-;;;;:::o;11676:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;11840:33::-;;;;;;;;;;;;;:::o;17172:182::-;5233:12;:10;:12::i;:::-;5223:22;;:6;;;;;;;;;;;:22;;;5215:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17288:8:::1;17257:19;:28;17277:7;17257:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;17328:7;17312:34;;;17337:8;17312:34;;;;;;:::i;:::-;;;;;;;;17172:182:::0;;:::o;16110:281::-;5233:12;:10;:12::i;:::-;5223:22;;:6;;;;;;;;;;;:22;;;5215:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16231:4:::1;16226:3;16222:1;16206:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:23;;;;:::i;:::-;16205:30;;;;:::i;:::-;16195:6;:40;;16187:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;16321:6;16311;:17;;;;:::i;:::-;16293:15;:35;;;;16344:39;16367:15;;16344:39;;;;;;:::i;:::-;;;;;;;;16110:281:::0;:::o;10796:39::-;;;;;;;;;;;;;:::o;15756:346::-;5233:12;:10;:12::i;:::-;5223:22;;:6;;;;;;;;;;;:22;;;5215:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;15879:6:::1;15875:1;15859:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;15846:9;:39;;15838:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;15994:4;15990:1;15974:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;15961:9;:37;;15953:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;16086:9;16065:18;:30;;;;15756:346:::0;:::o;10992:27::-;;;;:::o;15415:271::-;5233:12;:10;:12::i;:::-;5223:22;;:6;;;;;;;;;;;:22;;;5215:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;15534:4:::1;15529:3;15525:1;15509:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:23;;;;:::i;:::-;15508:30;;;;:::i;:::-;15498:6;:40;;15490:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;15620:6;15610;:17;;;;:::i;:::-;15594:13;:33;;;;15643:35;15664:13;;15643:35;;;;;;:::i;:::-;;;;;;;;15415:271:::0;:::o;6880:151::-;6969:7;6996:11;:18;7008:5;6996:18;;;;;;;;;;;;;;;:27;7015:7;6996:27;;;;;;;;;;;;;;;;6989:34;;6880:151;;;;:::o;11215:33::-;;;;:::o;14730:98::-;5233:12;:10;:12::i;:::-;5223:22;;:6;;;;;;;;;;;:22;;;5215:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;14815:5:::1;14792:20;;:28;;;;;;;;;;;;;;;;;;14730:98::o:0;11948:37::-;;;;:::o;11063:30::-;;;;:::o;5468:244::-;5233:12;:10;:12::i;:::-;5223:22;;:6;;;;;;;;;;;:22;;;5215:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;5577:1:::1;5557:22;;:8;:22;;;;5549:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5667:8;5638:38;;5659:6;;;;;;;;;;;5638:38;;;;;;;;;;;;5696:8;5687:6;;:17;;;;;;;;;;;;;;;;;;5468:244:::0;:::o;11175:31::-;;;;:::o;1446:98::-;1499:7;1526:10;1519:17;;1446:98;:::o;9281:380::-;9434:1;9417:19;;:5;:19;;;;9409:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9515:1;9496:21;;:7;:21;;;;9488:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9599:6;9569:11;:18;9581:5;9569:18;;;;;;;;;;;;;;;:27;9588:7;9569:27;;;;;;;;;;;;;;;:36;;;;9637:7;9621:32;;9630:5;9621:32;;;9646:6;9621:32;;;;;;:::i;:::-;;;;;;;;9281:380;;;:::o;18033:4297::-;18147:1;18131:18;;:4;:18;;;;18123:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18224:1;18210:16;;:2;:16;;;;18202:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;18283:25;:29;18309:2;18283:29;;;;;;;;;;;;;;;;;;;;;;;;;:43;;;;;18316:4;:10;18321:4;18316:10;;;;;;;;;;;;;;;;;;;;;;;;;18283:43;18279:321;;;18343:7;;18279:321;18380:25;:31;18406:4;18380:31;;;;;;;;;;;;;;;;;;;;;;;;;:43;;;;;18415:4;:8;18420:2;18415:8;;;;;;;;;;;;;;;;;;;;;;;;;18380:43;18376:224;;;18448:25;:31;18474:4;18448:31;;;;;;;;;;;;;;;;;;;;;;;;;:43;;;;;18483:4;:8;18488:2;18483:8;;;;;;;;;;;;;;;;;;;;;;;;;18448:43;18440:52;;;;;;18376:224;;;18538:4;:8;18543:2;18538:8;;;;;;;;;;;;;;;;;;;;;;;;;18534:55;;;18567:7;;18534:55;18376:224;18669:1;18659:6;:11;18655:50;;;18687:7;;18655:50;18729:14;;;;;;;;;;;18725:1813;;;18772:7;:5;:7::i;:::-;18764:15;;:4;:15;;;;:32;;;;;18789:7;:5;:7::i;:::-;18783:13;;:2;:13;;;;18764:32;:52;;;;;18814:1;18800:16;;:2;:16;;;;18764:52;:77;;;;;18834:6;18820:21;;:2;:21;;;;18764:77;18760:1767;;;18867:13;;;;;;;;;;;18862:149;;18912:19;:25;18932:4;18912:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;18941:19;:23;18961:2;18941:23;;;;;;;;;;;;;;;;;;;;;;;;;18912:52;18904:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;18862:149;19185:20;;;;;;;;;;;19181:547;;;19248:15;19234:30;;:2;:30;;;;:62;;;;;19282:13;19268:28;;:2;:28;;;;19234:62;19230:479;;;19390:1;19375:12;:16;;;;:::i;:::-;19333:28;:39;19362:9;19333:39;;;;;;;;;;;;;;;;:58;:139;;;;;19471:1;19456:12;:16;;;;:::i;:::-;19421:28;:32;19450:2;19421:32;;;;;;;;;;;;;;;;:51;19333:139;19325:205;;;;;;;;;;;;:::i;:::-;;;;;;;;;19599:12;19557:28;:39;19586:9;19557:39;;;;;;;;;;;;;;;:54;;;;19673:12;19638:28;:32;19667:2;19638:32;;;;;;;;;;;;;;;:47;;;;19230:479;19181:547;19769:25;:31;19795:4;19769:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;19805:31;:35;19837:2;19805:35;;;;;;;;;;;;;;;;;;;;;;;;;19804:36;19769:71;19765:747;;;19883:12;;19873:6;:22;;19865:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;19997:15;;19980:13;19990:2;19980:9;:13::i;:::-;19971:6;:22;;;;:::i;:::-;:41;;19963:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;19765:747;;;20089:25;:29;20115:2;20089:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;20123:31;:37;20155:4;20123:37;;;;;;;;;;;;;;;;;;;;;;;;;20122:38;20089:71;20085:427;;;20203:13;;20193:6;:23;;20185:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;20085:427;;;20312:31;:35;20344:2;20312:35;;;;;;;;;;;;;;;;;;;;;;;;;20311:36;:78;;;;;20352:31;:37;20384:4;20352:37;;;;;;;;;;;;;;;;;;;;;;;;;20351:38;20311:78;20307:205;;;20448:15;;20431:13;20441:2;20431:9;:13::i;:::-;20422:6;:22;;;;:::i;:::-;:41;;20414:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;20307:205;20085:427;19765:747;18760:1767;18725:1813;20550:28;20581:24;20599:4;20581:9;:24::i;:::-;20550:55;;20626:12;20665:18;;20641:20;:42;;20626:57;;20700:7;:22;;;;;20711:11;;;;;;;;;;;20700:22;:35;;;;;20727:8;;;;;;;;;;;20726:9;20700:35;:71;;;;;20740:25;:31;20766:4;20740:31;;;;;;;;;;;;;;;;;;;;;;;;;20739:32;20700:71;:111;;;;;20786:19;:25;20806:4;20786:25;;;;;;;;;;;;;;;;;;;;;;;;;20785:26;20700:111;:139;;;;;20816:19;:23;20836:2;20816:23;;;;;;;;;;;;;;;;;;;;;;;;;20815:24;20700:139;20696:247;;;20867:4;20856:8;;:15;;;;;;;;;;;;;;;;;;20888:10;:8;:10::i;:::-;20926:5;20915:8;;:16;;;;;;;;;;;;;;;;;;20696:247;20955:12;20970:4;20955:19;;21076;:25;21096:4;21076:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;21105:19;:23;21125:2;21105:23;;;;;;;;;;;;;;;;;;;;;;;;;21076:52;21072:100;;;21155:5;21145:15;;21072:100;21192:12;21219:21;21335:7;21331:946;;;21391:12;21386:1;21365:18;;:22;;;;:::i;:::-;:38;;:73;;;;;21407:25;:31;21433:4;21407:31;;;;;;;;;;;;;;;;;;;;;;;;;21365:73;21361:131;;;21459:17;21467:2;21471:4;21459:7;:17::i;:::-;21361:131;21513:25;:29;21539:2;21513:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;21562:1;21546:13;;:17;21513:50;21509:581;;;21615:3;21600:13;;21591:6;:22;;;;:::i;:::-;:27;;;;:::i;:::-;21584:34;;21685:13;;21666:16;;21659:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;21637:18;;:61;;;;;;;:::i;:::-;;;;;;;;21765:13;;21746:16;;21739:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;21717:18;;:61;;;;;;;:::i;:::-;;;;;;;;21509:581;;;21818:25;:31;21844:4;21818:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;21868:1;21853:12;;:16;21818:51;21814:276;;;21918:3;21903:12;;21894:6;:21;;;;:::i;:::-;:27;;;;:::i;:::-;21887:34;;21984:12;;21966:15;;21959:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;21937:18;;:59;;;;;;;:::i;:::-;;;;;;;;22062:12;;22044:15;;22037:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;22015:18;;:59;;;;;;;:::i;:::-;;;;;;;;21814:276;21509:581;22129:1;22122:4;:8;22118:95;;;22155:42;22171:4;22185;22192;22155:15;:42::i;:::-;22118:95;22252:13;22245:4;:20;;;;:::i;:::-;22235:30;;;;;:::i;:::-;;;21331:946;22289:33;22305:4;22311:2;22315:6;22289:15;:33::i;:::-;18112:4218;;;;;18033:4297;;;;:::o;17835:188::-;17952:5;17918:25;:31;17944:4;17918:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;18009:5;17975:40;;18003:4;17975:40;;;;;;;;;;;;17835:188;;:::o;22937:1250::-;22978:23;23004:24;23022:4;23004:9;:24::i;:::-;22978:50;;23039:25;23088:18;;23067;;:39;;;;:::i;:::-;23039:67;;23150:1;23131:15;:20;:46;;;;23176:1;23155:17;:22;23131:46;23127:85;;;23194:7;;;;23127:85;23267:2;23246:18;;:23;;;;:::i;:::-;23228:15;:41;23224:115;;;23325:2;23304:18;;:23;;;;:::i;:::-;23286:41;;23224:115;23351:12;23433:23;23518:1;23498:17;23477:18;;23459:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;23433:86;;23540:51;23575:15;23557;:33;;;;:::i;:::-;23540:16;:51::i;:::-;23613:18;23634:21;23613:42;;23666:23;23692:10;23666:36;;23715:23;23818:1;23797:18;;:22;;;;:::i;:::-;23776:17;:44;;;;:::i;:::-;23754:18;;23741:10;:31;;;;:::i;:::-;:80;;;;:::i;:::-;23715:106;;23853:15;23834:34;;;;;:::i;:::-;;;23914:1;23893:18;:22;;;;23947:1;23926:18;:22;;;;23991:1;23973:15;:19;:42;;;;;24014:1;23996:15;:19;23973:42;23969:121;;;24032:46;24045:15;24062;24032:12;:46::i;:::-;23969:121;24123:16;;;;;;;;;;;24115:30;;24153:21;24115:64;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24102:77;;;;;22965:1222;;;;;;;22937:1250;:::o;8360:614::-;8518:1;8500:20;;:6;:20;;;;8492:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;8602:1;8581:23;;:9;:23;;;;8573:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;8657:21;8681:9;:17;8691:6;8681:17;;;;;;;;;;;;;;;;8657:41;;8734:6;8717:13;:23;;8709:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;8855:6;8839:13;:22;8819:9;:17;8829:6;8819:17;;;;;;;;;;;;;;;:42;;;;8907:6;8883:9;:20;8893:9;8883:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;8948:9;8931:35;;8940:6;8931:35;;;8959:6;8931:35;;;;;;:::i;:::-;;;;;;;;8481:493;8360:614;;;:::o;22338:591::-;22466:21;22504:1;22490:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22466:40;;22535:4;22517;22522:1;22517:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;22561:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22551:4;22556:1;22551:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;22596:62;22613:4;22628:15;22646:11;22596:8;:62::i;:::-;22697:15;:66;;;22778:11;22804:1;22848:4;22875;22895:15;22697:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22393:536;22338:591;:::o;24199:521::-;24347:62;24364:4;24379:15;24397:11;24347:8;:62::i;:::-;24452:15;:31;;;24491:9;24524:4;24544:11;24570:1;24613;24664:6;24686:15;24452:260;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;24199:521;;:::o;88:117:1:-;197:1;194;187:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:474::-;758:6;766;815:2;803:9;794:7;790:23;786:32;783:119;;;821:79;;:::i;:::-;783:119;941:1;966:53;1011:7;1002:6;991:9;987:22;966:53;:::i;:::-;956:63;;912:117;1068:2;1094:53;1139:7;1130:6;1119:9;1115:22;1094:53;:::i;:::-;1084:63;;1039:118;690:474;;;;;:::o;1170:99::-;1222:6;1256:5;1250:12;1240:22;;1170:99;;;:::o;1275:169::-;1359:11;1393:6;1388:3;1381:19;1433:4;1428:3;1424:14;1409:29;;1275:169;;;;:::o;1450:307::-;1518:1;1528:113;1542:6;1539:1;1536:13;1528:113;;;1627:1;1622:3;1618:11;1612:18;1608:1;1603:3;1599:11;1592:39;1564:2;1561:1;1557:10;1552:15;;1528:113;;;1659:6;1656:1;1653:13;1650:101;;;1739:1;1730:6;1725:3;1721:16;1714:27;1650:101;1499:258;1450:307;;;:::o;1763:102::-;1804:6;1855:2;1851:7;1846:2;1839:5;1835:14;1831:28;1821:38;;1763:102;;;:::o;1871:364::-;1959:3;1987:39;2020:5;1987:39;:::i;:::-;2042:71;2106:6;2101:3;2042:71;:::i;:::-;2035:78;;2122:52;2167:6;2162:3;2155:4;2148:5;2144:16;2122:52;:::i;:::-;2199:29;2221:6;2199:29;:::i;:::-;2194:3;2190:39;2183:46;;1963:272;1871:364;;;;:::o;2241:313::-;2354:4;2392:2;2381:9;2377:18;2369:26;;2441:9;2435:4;2431:20;2427:1;2416:9;2412:17;2405:47;2469:78;2542:4;2533:6;2469:78;:::i;:::-;2461:86;;2241:313;;;;:::o;2560:126::-;2597:7;2637:42;2630:5;2626:54;2615:65;;2560:126;;;:::o;2692:96::-;2729:7;2758:24;2776:5;2758:24;:::i;:::-;2747:35;;2692:96;;;:::o;2794:122::-;2867:24;2885:5;2867:24;:::i;:::-;2860:5;2857:35;2847:63;;2906:1;2903;2896:12;2847:63;2794:122;:::o;2922:139::-;2968:5;3006:6;2993:20;2984:29;;3022:33;3049:5;3022:33;:::i;:::-;2922:139;;;;:::o;3067:474::-;3135:6;3143;3192:2;3180:9;3171:7;3167:23;3163:32;3160:119;;;3198:79;;:::i;:::-;3160:119;3318:1;3343:53;3388:7;3379:6;3368:9;3364:22;3343:53;:::i;:::-;3333:63;;3289:117;3445:2;3471:53;3516:7;3507:6;3496:9;3492:22;3471:53;:::i;:::-;3461:63;;3416:118;3067:474;;;;;:::o;3547:90::-;3581:7;3624:5;3617:13;3610:21;3599:32;;3547:90;;;:::o;3643:109::-;3724:21;3739:5;3724:21;:::i;:::-;3719:3;3712:34;3643:109;;:::o;3758:210::-;3845:4;3883:2;3872:9;3868:18;3860:26;;3896:65;3958:1;3947:9;3943:17;3934:6;3896:65;:::i;:::-;3758:210;;;;:::o;3974:329::-;4033:6;4082:2;4070:9;4061:7;4057:23;4053:32;4050:119;;;4088:79;;:::i;:::-;4050:119;4208:1;4233:53;4278:7;4269:6;4258:9;4254:22;4233:53;:::i;:::-;4223:63;;4179:117;3974:329;;;;:::o;4309:116::-;4379:21;4394:5;4379:21;:::i;:::-;4372:5;4369:32;4359:60;;4415:1;4412;4405:12;4359:60;4309:116;:::o;4431:133::-;4474:5;4512:6;4499:20;4490:29;;4528:30;4552:5;4528:30;:::i;:::-;4431:133;;;;:::o;4570:468::-;4635:6;4643;4692:2;4680:9;4671:7;4667:23;4663:32;4660:119;;;4698:79;;:::i;:::-;4660:119;4818:1;4843:53;4888:7;4879:6;4868:9;4864:22;4843:53;:::i;:::-;4833:63;;4789:117;4945:2;4971:50;5013:7;5004:6;4993:9;4989:22;4971:50;:::i;:::-;4961:60;;4916:115;4570:468;;;;;:::o;5044:60::-;5072:3;5093:5;5086:12;;5044:60;;;:::o;5110:142::-;5160:9;5193:53;5211:34;5220:24;5238:5;5220:24;:::i;:::-;5211:34;:::i;:::-;5193:53;:::i;:::-;5180:66;;5110:142;;;:::o;5258:126::-;5308:9;5341:37;5372:5;5341:37;:::i;:::-;5328:50;;5258:126;;;:::o;5390:144::-;5458:9;5491:37;5522:5;5491:37;:::i;:::-;5478:50;;5390:144;;;:::o;5540:167::-;5645:55;5694:5;5645:55;:::i;:::-;5640:3;5633:68;5540:167;;:::o;5713:258::-;5824:4;5862:2;5851:9;5847:18;5839:26;;5875:89;5961:1;5950:9;5946:17;5937:6;5875:89;:::i;:::-;5713:258;;;;:::o;5977:118::-;6064:24;6082:5;6064:24;:::i;:::-;6059:3;6052:37;5977:118;;:::o;6101:222::-;6194:4;6232:2;6221:9;6217:18;6209:26;;6245:71;6313:1;6302:9;6298:17;6289:6;6245:71;:::i;:::-;6101:222;;;;:::o;6329:619::-;6406:6;6414;6422;6471:2;6459:9;6450:7;6446:23;6442:32;6439:119;;;6477:79;;:::i;:::-;6439:119;6597:1;6622:53;6667:7;6658:6;6647:9;6643:22;6622:53;:::i;:::-;6612:63;;6568:117;6724:2;6750:53;6795:7;6786:6;6775:9;6771:22;6750:53;:::i;:::-;6740:63;;6695:118;6852:2;6878:53;6923:7;6914:6;6903:9;6899:22;6878:53;:::i;:::-;6868:63;;6823:118;6329:619;;;;;:::o;6954:329::-;7013:6;7062:2;7050:9;7041:7;7037:23;7033:32;7030:119;;;7068:79;;:::i;:::-;7030:119;7188:1;7213:53;7258:7;7249:6;7238:9;7234:22;7213:53;:::i;:::-;7203:63;;7159:117;6954:329;;;;:::o;7289:86::-;7324:7;7364:4;7357:5;7353:16;7342:27;;7289:86;;;:::o;7381:112::-;7464:22;7480:5;7464:22;:::i;:::-;7459:3;7452:35;7381:112;;:::o;7499:214::-;7588:4;7626:2;7615:9;7611:18;7603:26;;7639:67;7703:1;7692:9;7688:17;7679:6;7639:67;:::i;:::-;7499:214;;;;:::o;7719:118::-;7806:24;7824:5;7806:24;:::i;:::-;7801:3;7794:37;7719:118;;:::o;7843:222::-;7936:4;7974:2;7963:9;7959:18;7951:26;;7987:71;8055:1;8044:9;8040:17;8031:6;7987:71;:::i;:::-;7843:222;;;;:::o;8071:474::-;8139:6;8147;8196:2;8184:9;8175:7;8171:23;8167:32;8164:119;;;8202:79;;:::i;:::-;8164:119;8322:1;8347:53;8392:7;8383:6;8372:9;8368:22;8347:53;:::i;:::-;8337:63;;8293:117;8449:2;8475:53;8520:7;8511:6;8500:9;8496:22;8475:53;:::i;:::-;8465:63;;8420:118;8071:474;;;;;:::o;8551:182::-;8691:34;8687:1;8679:6;8675:14;8668:58;8551:182;:::o;8739:366::-;8881:3;8902:67;8966:2;8961:3;8902:67;:::i;:::-;8895:74;;8978:93;9067:3;8978:93;:::i;:::-;9096:2;9091:3;9087:12;9080:19;;8739:366;;;:::o;9111:419::-;9277:4;9315:2;9304:9;9300:18;9292:26;;9364:9;9358:4;9354:20;9350:1;9339:9;9335:17;9328:47;9392:131;9518:4;9392:131;:::i;:::-;9384:139;;9111:419;;;:::o;9536:180::-;9584:77;9581:1;9574:88;9681:4;9678:1;9671:15;9705:4;9702:1;9695:15;9722:305;9762:3;9781:20;9799:1;9781:20;:::i;:::-;9776:25;;9815:20;9833:1;9815:20;:::i;:::-;9810:25;;9969:1;9901:66;9897:74;9894:1;9891:81;9888:107;;;9975:18;;:::i;:::-;9888:107;10019:1;10016;10012:9;10005:16;;9722:305;;;;:::o;10033:178::-;10173:30;10169:1;10161:6;10157:14;10150:54;10033:178;:::o;10217:366::-;10359:3;10380:67;10444:2;10439:3;10380:67;:::i;:::-;10373:74;;10456:93;10545:3;10456:93;:::i;:::-;10574:2;10569:3;10565:12;10558:19;;10217:366;;;:::o;10589:419::-;10755:4;10793:2;10782:9;10778:18;10770:26;;10842:9;10836:4;10832:20;10828:1;10817:9;10813:17;10806:47;10870:131;10996:4;10870:131;:::i;:::-;10862:139;;10589:419;;;:::o;11014:180::-;11062:77;11059:1;11052:88;11159:4;11156:1;11149:15;11183:4;11180:1;11173:15;11200:320;11244:6;11281:1;11275:4;11271:12;11261:22;;11328:1;11322:4;11318:12;11349:18;11339:81;;11405:4;11397:6;11393:17;11383:27;;11339:81;11467:2;11459:6;11456:14;11436:18;11433:38;11430:84;;;11486:18;;:::i;:::-;11430:84;11251:269;11200:320;;;:::o;11526:227::-;11666:34;11662:1;11654:6;11650:14;11643:58;11735:10;11730:2;11722:6;11718:15;11711:35;11526:227;:::o;11759:366::-;11901:3;11922:67;11986:2;11981:3;11922:67;:::i;:::-;11915:74;;11998:93;12087:3;11998:93;:::i;:::-;12116:2;12111:3;12107:12;12100:19;;11759:366;;;:::o;12131:419::-;12297:4;12335:2;12324:9;12320:18;12312:26;;12384:9;12378:4;12374:20;12370:1;12359:9;12355:17;12348:47;12412:131;12538:4;12412:131;:::i;:::-;12404:139;;12131:419;;;:::o;12556:348::-;12596:7;12619:20;12637:1;12619:20;:::i;:::-;12614:25;;12653:20;12671:1;12653:20;:::i;:::-;12648:25;;12841:1;12773:66;12769:74;12766:1;12763:81;12758:1;12751:9;12744:17;12740:105;12737:131;;;12848:18;;:::i;:::-;12737:131;12896:1;12893;12889:9;12878:20;;12556:348;;;;:::o;12910:180::-;12958:77;12955:1;12948:88;13055:4;13052:1;13045:15;13079:4;13076:1;13069:15;13096:185;13136:1;13153:20;13171:1;13153:20;:::i;:::-;13148:25;;13187:20;13205:1;13187:20;:::i;:::-;13182:25;;13226:1;13216:35;;13231:18;;:::i;:::-;13216:35;13273:1;13270;13266:9;13261:14;;13096:185;;;;:::o;13287:226::-;13427:34;13423:1;13415:6;13411:14;13404:58;13496:9;13491:2;13483:6;13479:15;13472:34;13287:226;:::o;13519:366::-;13661:3;13682:67;13746:2;13741:3;13682:67;:::i;:::-;13675:74;;13758:93;13847:3;13758:93;:::i;:::-;13876:2;13871:3;13867:12;13860:19;;13519:366;;;:::o;13891:419::-;14057:4;14095:2;14084:9;14080:18;14072:26;;14144:9;14138:4;14134:20;14130:1;14119:9;14115:17;14108:47;14172:131;14298:4;14172:131;:::i;:::-;14164:139;;13891:419;;;:::o;14316:173::-;14456:25;14452:1;14444:6;14440:14;14433:49;14316:173;:::o;14495:366::-;14637:3;14658:67;14722:2;14717:3;14658:67;:::i;:::-;14651:74;;14734:93;14823:3;14734:93;:::i;:::-;14852:2;14847:3;14843:12;14836:19;;14495:366;;;:::o;14867:419::-;15033:4;15071:2;15060:9;15056:18;15048:26;;15120:9;15114:4;15110:20;15106:1;15095:9;15091:17;15084:47;15148:131;15274:4;15148:131;:::i;:::-;15140:139;;14867:419;;;:::o;15292:224::-;15432:34;15428:1;15420:6;15416:14;15409:58;15501:7;15496:2;15488:6;15484:15;15477:32;15292:224;:::o;15522:366::-;15664:3;15685:67;15749:2;15744:3;15685:67;:::i;:::-;15678:74;;15761:93;15850:3;15761:93;:::i;:::-;15879:2;15874:3;15870:12;15863:19;;15522:366;;;:::o;15894:419::-;16060:4;16098:2;16087:9;16083:18;16075:26;;16147:9;16141:4;16137:20;16133:1;16122:9;16118:17;16111:47;16175:131;16301:4;16175:131;:::i;:::-;16167:139;;15894:419;;;:::o;16319:244::-;16459:34;16455:1;16447:6;16443:14;16436:58;16528:27;16523:2;16515:6;16511:15;16504:52;16319:244;:::o;16569:366::-;16711:3;16732:67;16796:2;16791:3;16732:67;:::i;:::-;16725:74;;16808:93;16897:3;16808:93;:::i;:::-;16926:2;16921:3;16917:12;16910:19;;16569:366;;;:::o;16941:419::-;17107:4;17145:2;17134:9;17130:18;17122:26;;17194:9;17188:4;17184:20;17180:1;17169:9;17165:17;17158:47;17222:131;17348:4;17222:131;:::i;:::-;17214:139;;16941:419;;;:::o;17366:224::-;17506:34;17502:1;17494:6;17490:14;17483:58;17575:7;17570:2;17562:6;17558:15;17551:32;17366:224;:::o;17596:366::-;17738:3;17759:67;17823:2;17818:3;17759:67;:::i;:::-;17752:74;;17835:93;17924:3;17835:93;:::i;:::-;17953:2;17948:3;17944:12;17937:19;;17596:366;;;:::o;17968:419::-;18134:4;18172:2;18161:9;18157:18;18149:26;;18221:9;18215:4;18211:20;18207:1;18196:9;18192:17;18185:47;18249:131;18375:4;18249:131;:::i;:::-;18241:139;;17968:419;;;:::o;18393:229::-;18533:34;18529:1;18521:6;18517:14;18510:58;18602:12;18597:2;18589:6;18585:15;18578:37;18393:229;:::o;18628:366::-;18770:3;18791:67;18855:2;18850:3;18791:67;:::i;:::-;18784:74;;18867:93;18956:3;18867:93;:::i;:::-;18985:2;18980:3;18976:12;18969:19;;18628:366;;;:::o;19000:419::-;19166:4;19204:2;19193:9;19189:18;19181:26;;19253:9;19247:4;19243:20;19239:1;19228:9;19224:17;19217:47;19281:131;19407:4;19281:131;:::i;:::-;19273:139;;19000:419;;;:::o;19425:240::-;19565:34;19561:1;19553:6;19549:14;19542:58;19634:23;19629:2;19621:6;19617:15;19610:48;19425:240;:::o;19671:366::-;19813:3;19834:67;19898:2;19893:3;19834:67;:::i;:::-;19827:74;;19910:93;19999:3;19910:93;:::i;:::-;20028:2;20023:3;20019:12;20012:19;;19671:366;;;:::o;20043:419::-;20209:4;20247:2;20236:9;20232:18;20224:26;;20296:9;20290:4;20286:20;20282:1;20271:9;20267:17;20260:47;20324:131;20450:4;20324:131;:::i;:::-;20316:139;;20043:419;;;:::o;20468:239::-;20608:34;20604:1;20596:6;20592:14;20585:58;20677:22;20672:2;20664:6;20660:15;20653:47;20468:239;:::o;20713:366::-;20855:3;20876:67;20940:2;20935:3;20876:67;:::i;:::-;20869:74;;20952:93;21041:3;20952:93;:::i;:::-;21070:2;21065:3;21061:12;21054:19;;20713:366;;;:::o;21085:419::-;21251:4;21289:2;21278:9;21274:18;21266:26;;21338:9;21332:4;21328:20;21324:1;21313:9;21309:17;21302:47;21366:131;21492:4;21366:131;:::i;:::-;21358:139;;21085:419;;;:::o;21510:227::-;21650:34;21646:1;21638:6;21634:14;21627:58;21719:10;21714:2;21706:6;21702:15;21695:35;21510:227;:::o;21743:366::-;21885:3;21906:67;21970:2;21965:3;21906:67;:::i;:::-;21899:74;;21982:93;22071:3;21982:93;:::i;:::-;22100:2;22095:3;22091:12;22084:19;;21743:366;;;:::o;22115:419::-;22281:4;22319:2;22308:9;22304:18;22296:26;;22368:9;22362:4;22358:20;22354:1;22343:9;22339:17;22332:47;22396:131;22522:4;22396:131;:::i;:::-;22388:139;;22115:419;;;:::o;22540:225::-;22680:34;22676:1;22668:6;22664:14;22657:58;22749:8;22744:2;22736:6;22732:15;22725:33;22540:225;:::o;22771:366::-;22913:3;22934:67;22998:2;22993:3;22934:67;:::i;:::-;22927:74;;23010:93;23099:3;23010:93;:::i;:::-;23128:2;23123:3;23119:12;23112:19;;22771:366;;;:::o;23143:419::-;23309:4;23347:2;23336:9;23332:18;23324:26;;23396:9;23390:4;23386:20;23382:1;23371:9;23367:17;23360:47;23424:131;23550:4;23424:131;:::i;:::-;23416:139;;23143:419;;;:::o;23568:223::-;23708:34;23704:1;23696:6;23692:14;23685:58;23777:6;23772:2;23764:6;23760:15;23753:31;23568:223;:::o;23797:366::-;23939:3;23960:67;24024:2;24019:3;23960:67;:::i;:::-;23953:74;;24036:93;24125:3;24036:93;:::i;:::-;24154:2;24149:3;24145:12;24138:19;;23797:366;;;:::o;24169:419::-;24335:4;24373:2;24362:9;24358:18;24350:26;;24422:9;24416:4;24412:20;24408:1;24397:9;24393:17;24386:47;24450:131;24576:4;24450:131;:::i;:::-;24442:139;;24169:419;;;:::o;24594:221::-;24734:34;24730:1;24722:6;24718:14;24711:58;24803:4;24798:2;24790:6;24786:15;24779:29;24594:221;:::o;24821:366::-;24963:3;24984:67;25048:2;25043:3;24984:67;:::i;:::-;24977:74;;25060:93;25149:3;25060:93;:::i;:::-;25178:2;25173:3;25169:12;25162:19;;24821:366;;;:::o;25193:419::-;25359:4;25397:2;25386:9;25382:18;25374:26;;25446:9;25440:4;25436:20;25432:1;25421:9;25417:17;25410:47;25474:131;25600:4;25474:131;:::i;:::-;25466:139;;25193:419;;;:::o;25618:224::-;25758:34;25754:1;25746:6;25742:14;25735:58;25827:7;25822:2;25814:6;25810:15;25803:32;25618:224;:::o;25848:366::-;25990:3;26011:67;26075:2;26070:3;26011:67;:::i;:::-;26004:74;;26087:93;26176:3;26087:93;:::i;:::-;26205:2;26200:3;26196:12;26189:19;;25848:366;;;:::o;26220:419::-;26386:4;26424:2;26413:9;26409:18;26401:26;;26473:9;26467:4;26463:20;26459:1;26448:9;26444:17;26437:47;26501:131;26627:4;26501:131;:::i;:::-;26493:139;;26220:419;;;:::o;26645:222::-;26785:34;26781:1;26773:6;26769:14;26762:58;26854:5;26849:2;26841:6;26837:15;26830:30;26645:222;:::o;26873:366::-;27015:3;27036:67;27100:2;27095:3;27036:67;:::i;:::-;27029:74;;27112:93;27201:3;27112:93;:::i;:::-;27230:2;27225:3;27221:12;27214:19;;26873:366;;;:::o;27245:419::-;27411:4;27449:2;27438:9;27434:18;27426:26;;27498:9;27492:4;27488:20;27484:1;27473:9;27469:17;27462:47;27526:131;27652:4;27526:131;:::i;:::-;27518:139;;27245:419;;;:::o;27670:172::-;27810:24;27806:1;27798:6;27794:14;27787:48;27670:172;:::o;27848:366::-;27990:3;28011:67;28075:2;28070:3;28011:67;:::i;:::-;28004:74;;28087:93;28176:3;28087:93;:::i;:::-;28205:2;28200:3;28196:12;28189:19;;27848:366;;;:::o;28220:419::-;28386:4;28424:2;28413:9;28409:18;28401:26;;28473:9;28467:4;28463:20;28459:1;28448:9;28444:17;28437:47;28501:131;28627:4;28501:131;:::i;:::-;28493:139;;28220:419;;;:::o;28645:191::-;28685:4;28705:20;28723:1;28705:20;:::i;:::-;28700:25;;28739:20;28757:1;28739:20;:::i;:::-;28734:25;;28778:1;28775;28772:8;28769:34;;;28783:18;;:::i;:::-;28769:34;28828:1;28825;28821:9;28813:17;;28645:191;;;;:::o;28842:240::-;28982:34;28978:1;28970:6;28966:14;28959:58;29051:23;29046:2;29038:6;29034:15;29027:48;28842:240;:::o;29088:366::-;29230:3;29251:67;29315:2;29310:3;29251:67;:::i;:::-;29244:74;;29327:93;29416:3;29327:93;:::i;:::-;29445:2;29440:3;29436:12;29429:19;;29088:366;;;:::o;29460:419::-;29626:4;29664:2;29653:9;29649:18;29641:26;;29713:9;29707:4;29703:20;29699:1;29688:9;29684:17;29677:47;29741:131;29867:4;29741:131;:::i;:::-;29733:139;;29460:419;;;:::o;29885:227::-;30025:34;30021:1;30013:6;30009:14;30002:58;30094:10;30089:2;30081:6;30077:15;30070:35;29885:227;:::o;30118:366::-;30260:3;30281:67;30345:2;30340:3;30281:67;:::i;:::-;30274:74;;30357:93;30446:3;30357:93;:::i;:::-;30475:2;30470:3;30466:12;30459:19;;30118:366;;;:::o;30490:419::-;30656:4;30694:2;30683:9;30679:18;30671:26;;30743:9;30737:4;30733:20;30729:1;30718:9;30714:17;30707:47;30771:131;30897:4;30771:131;:::i;:::-;30763:139;;30490:419;;;:::o;30915:174::-;31055:26;31051:1;31043:6;31039:14;31032:50;30915:174;:::o;31095:366::-;31237:3;31258:67;31322:2;31317:3;31258:67;:::i;:::-;31251:74;;31334:93;31423:3;31334:93;:::i;:::-;31452:2;31447:3;31443:12;31436:19;;31095:366;;;:::o;31467:419::-;31633:4;31671:2;31660:9;31656:18;31648:26;;31720:9;31714:4;31710:20;31706:1;31695:9;31691:17;31684:47;31748:131;31874:4;31748:131;:::i;:::-;31740:139;;31467:419;;;:::o;31892:229::-;32032:34;32028:1;32020:6;32016:14;32009:58;32101:12;32096:2;32088:6;32084:15;32077:37;31892:229;:::o;32127:366::-;32269:3;32290:67;32354:2;32349:3;32290:67;:::i;:::-;32283:74;;32366:93;32455:3;32366:93;:::i;:::-;32484:2;32479:3;32475:12;32468:19;;32127:366;;;:::o;32499:419::-;32665:4;32703:2;32692:9;32688:18;32680:26;;32752:9;32746:4;32742:20;32738:1;32727:9;32723:17;32716:47;32780:131;32906:4;32780:131;:::i;:::-;32772:139;;32499:419;;;:::o;32924:147::-;33025:11;33062:3;33047:18;;32924:147;;;;:::o;33077:114::-;;:::o;33197:398::-;33356:3;33377:83;33458:1;33453:3;33377:83;:::i;:::-;33370:90;;33469:93;33558:3;33469:93;:::i;:::-;33587:1;33582:3;33578:11;33571:18;;33197:398;;;:::o;33601:379::-;33785:3;33807:147;33950:3;33807:147;:::i;:::-;33800:154;;33971:3;33964:10;;33601:379;;;:::o;33986:225::-;34126:34;34122:1;34114:6;34110:14;34103:58;34195:8;34190:2;34182:6;34178:15;34171:33;33986:225;:::o;34217:366::-;34359:3;34380:67;34444:2;34439:3;34380:67;:::i;:::-;34373:74;;34456:93;34545:3;34456:93;:::i;:::-;34574:2;34569:3;34565:12;34558:19;;34217:366;;;:::o;34589:419::-;34755:4;34793:2;34782:9;34778:18;34770:26;;34842:9;34836:4;34832:20;34828:1;34817:9;34813:17;34806:47;34870:131;34996:4;34870:131;:::i;:::-;34862:139;;34589:419;;;:::o;35014:180::-;35062:77;35059:1;35052:88;35159:4;35156:1;35149:15;35183:4;35180:1;35173:15;35200:180;35248:77;35245:1;35238:88;35345:4;35342:1;35335:15;35369:4;35366:1;35359:15;35386:143;35443:5;35474:6;35468:13;35459:22;;35490:33;35517:5;35490:33;:::i;:::-;35386:143;;;;:::o;35535:351::-;35605:6;35654:2;35642:9;35633:7;35629:23;35625:32;35622:119;;;35660:79;;:::i;:::-;35622:119;35780:1;35805:64;35861:7;35852:6;35841:9;35837:22;35805:64;:::i;:::-;35795:74;;35751:128;35535:351;;;;:::o;35892:85::-;35937:7;35966:5;35955:16;;35892:85;;;:::o;35983:158::-;36041:9;36074:61;36092:42;36101:32;36127:5;36101:32;:::i;:::-;36092:42;:::i;:::-;36074:61;:::i;:::-;36061:74;;35983:158;;;:::o;36147:147::-;36242:45;36281:5;36242:45;:::i;:::-;36237:3;36230:58;36147:147;;:::o;36300:114::-;36367:6;36401:5;36395:12;36385:22;;36300:114;;;:::o;36420:184::-;36519:11;36553:6;36548:3;36541:19;36593:4;36588:3;36584:14;36569:29;;36420:184;;;;:::o;36610:132::-;36677:4;36700:3;36692:11;;36730:4;36725:3;36721:14;36713:22;;36610:132;;;:::o;36748:108::-;36825:24;36843:5;36825:24;:::i;:::-;36820:3;36813:37;36748:108;;:::o;36862:179::-;36931:10;36952:46;36994:3;36986:6;36952:46;:::i;:::-;37030:4;37025:3;37021:14;37007:28;;36862:179;;;;:::o;37047:113::-;37117:4;37149;37144:3;37140:14;37132:22;;37047:113;;;:::o;37196:732::-;37315:3;37344:54;37392:5;37344:54;:::i;:::-;37414:86;37493:6;37488:3;37414:86;:::i;:::-;37407:93;;37524:56;37574:5;37524:56;:::i;:::-;37603:7;37634:1;37619:284;37644:6;37641:1;37638:13;37619:284;;;37720:6;37714:13;37747:63;37806:3;37791:13;37747:63;:::i;:::-;37740:70;;37833:60;37886:6;37833:60;:::i;:::-;37823:70;;37679:224;37666:1;37663;37659:9;37654:14;;37619:284;;;37623:14;37919:3;37912:10;;37320:608;;;37196:732;;;;:::o;37934:831::-;38197:4;38235:3;38224:9;38220:19;38212:27;;38249:71;38317:1;38306:9;38302:17;38293:6;38249:71;:::i;:::-;38330:80;38406:2;38395:9;38391:18;38382:6;38330:80;:::i;:::-;38457:9;38451:4;38447:20;38442:2;38431:9;38427:18;38420:48;38485:108;38588:4;38579:6;38485:108;:::i;:::-;38477:116;;38603:72;38671:2;38660:9;38656:18;38647:6;38603:72;:::i;:::-;38685:73;38753:3;38742:9;38738:19;38729:6;38685:73;:::i;:::-;37934:831;;;;;;;;:::o;38771:807::-;39020:4;39058:3;39047:9;39043:19;39035:27;;39072:71;39140:1;39129:9;39125:17;39116:6;39072:71;:::i;:::-;39153:72;39221:2;39210:9;39206:18;39197:6;39153:72;:::i;:::-;39235:80;39311:2;39300:9;39296:18;39287:6;39235:80;:::i;:::-;39325;39401:2;39390:9;39386:18;39377:6;39325:80;:::i;:::-;39415:73;39483:3;39472:9;39468:19;39459:6;39415:73;:::i;:::-;39498;39566:3;39555:9;39551:19;39542:6;39498:73;:::i;:::-;38771:807;;;;;;;;;:::o;39584:143::-;39641:5;39672:6;39666:13;39657:22;;39688:33;39715:5;39688:33;:::i;:::-;39584:143;;;;:::o;39733:663::-;39821:6;39829;39837;39886:2;39874:9;39865:7;39861:23;39857:32;39854:119;;;39892:79;;:::i;:::-;39854:119;40012:1;40037:64;40093:7;40084:6;40073:9;40069:22;40037:64;:::i;:::-;40027:74;;39983:128;40150:2;40176:64;40232:7;40223:6;40212:9;40208:22;40176:64;:::i;:::-;40166:74;;40121:129;40289:2;40315:64;40371:7;40362:6;40351:9;40347:22;40315:64;:::i;:::-;40305:74;;40260:129;39733:663;;;;;:::o

Swarm Source

ipfs://a3dbf8ebe7019d78baf44b49c0d8af775be5e7c39223d9287dbd2d231ea965fa

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.