ETH Price: $3,368.73 (+4.58%)

Token

BEN 2.0 (BEN2.0)
 

Overview

Max Total Supply

1,000,000,000 BEN2.0

Holders

9

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
8,406,595.674548126027143672 BEN2.0

Value
$0.00
0x4aA68e07bDf2CAFBd589697770Ab4AAc890579Dc
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
BEN2

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-06-28
*/

/*
###########################################
https://t.me/ben2erc
##########################################
*/

// SPDX-License-Identifier: No License

pragma solidity 0.8.7;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby disabling any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

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

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

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

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

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

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

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

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

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

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

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

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

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

    function initialize(address, address) external;
}

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

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

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

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

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

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @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);

    /**
     * @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 `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, 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 `from` to `to` 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 from, address to, uint256 amount) external returns (bool);
}

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
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);
}

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * The default value of {decimals} is 18. To change this, you should override
 * this function so it returns a different value.
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
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;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5.05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the default value returned by this function, unless
     * it's overridden.
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `from` to `to`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(address from, address to, uint256 amount) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
            // decrementing then incrementing.
            _balances[to] += amount;
        }

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

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

        _totalSupply += amount;
        unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _balances[account] += amount;
        }
        emit Transfer(address(0), account, amount);

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

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

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

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _totalSupply -= amount;
        }

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

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

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    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);
    }

    /**
     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {}
}

/**
 * @dev Extension of {ERC20} that allows token holders to destroy both their own
 * tokens and those that they have an allowance for, in a way that can be
 * recognized off-chain (via event analysis).
 */
abstract contract ERC20Burnable is Context, ERC20 {
    /**
     * @dev Destroys `amount` tokens from the caller.
     *
     * See {ERC20-_burn}.
     */
    function burn(uint256 amount) public virtual {
        _burn(_msgSender(), amount);
    }
}

contract BEN2 is ERC20, ERC20Burnable, Ownable {
    
    uint256 public swapThreshold;
    
    uint256 private _projectPending;
    uint256 private _liquidityPending;

    address public projectAddress;
    uint16[3] public projectFees;

    address public lpTokensReceiver;
    uint16[3] public liquidityFees;

    mapping (address => bool) public isExcludedFromFees;

    uint16[3] public totalFees;
    bool private _swapping;

    IUniswapV2Router02 public routerV2;
    address public pairV2;
    mapping (address => bool) public AMMPairs;
 
    event SwapThresholdUpdated(uint256 swapThreshold);

    event projectAddressUpdated(address projectAddress);
    event projectFeesUpdated(uint16 buyFee, uint16 sellFee, uint16 transferFee);
    event projectFeeSent(address recipient, uint256 amount);

    event LpTokensReceiverUpdated(address lpTokensReceiver);
    event liquidityFeesUpdated(uint16 buyFee, uint16 sellFee, uint16 transferFee);
    event liquidityAdded(uint amountToken, uint amountCoin, uint liquidity);

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event RouterV2Updated(address indexed routerV2);
    event AMMPairsUpdated(address indexed AMMPair, bool isPair);
 
    constructor()
        ERC20(unicode"BEN 2.0", unicode"BEN2.0") 
    {
        address supplyRecipient = 0x87932282a5d6a31B34799c5dea409eFE846DC159;
        
        updateSwapThreshold(500000 * (10 ** decimals()));

        projectAddressSetup(0x87932282a5d6a31B34799c5dea409eFE846DC159);
        projectFeesSetup(100, 100, 0);

        lpTokensReceiverSetup(0x87932282a5d6a31B34799c5dea409eFE846DC159);
        liquidityFeesSetup(0, 0, 0);

        excludeFromFees(supplyRecipient, true);
        excludeFromFees(address(this), true); 

        _updateRouterV2(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

        _mint(supplyRecipient, 1000000000 * (10 ** decimals()));
        _transferOwnership(0x87932282a5d6a31B34799c5dea409eFE846DC159);
    }

    receive() external payable {}

    function decimals() public pure override returns (uint8) {
        return 18;
    }
    
    function _swapTokensForCoin(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = routerV2.WETH();

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

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

    function updateSwapThreshold(uint256 _swapThreshold) public onlyOwner {
        swapThreshold = _swapThreshold;
        
        emit SwapThresholdUpdated(_swapThreshold);
    }

    function getAllPending() public view returns (uint256) {
        return 0 + _projectPending + _liquidityPending;
    }

    function projectAddressSetup(address _newAddress) public onlyOwner {
        projectAddress = _newAddress;

        excludeFromFees(_newAddress, true);

        emit projectAddressUpdated(_newAddress);
    }

    function projectFeesSetup(uint16 _buyFee, uint16 _sellFee, uint16 _transferFee) public onlyOwner {
        projectFees = [_buyFee, _sellFee, _transferFee];

        totalFees[0] = 0 + projectFees[0] + liquidityFees[0];
        totalFees[1] = 0 + projectFees[1] + liquidityFees[1];
        totalFees[2] = 0 + projectFees[2] + liquidityFees[2];
        require(totalFees[0] <= 500 && totalFees[1] <= 500 && totalFees[2] <= 500, "TaxesDefaultRouter: Cannot exceed max total fee of 5%");

        emit projectFeesUpdated(_buyFee, _sellFee, _transferFee);
    }

    function _swapAndLiquify(uint256 tokenAmount) private returns (uint256 leftover) {
        // Sub-optimal method for supplying liquidity
        uint256 halfAmount = tokenAmount / 2;
        uint256 otherHalf = tokenAmount - halfAmount;

        _swapTokensForCoin(halfAmount);

        uint256 coinBalance = address(this).balance;

        if (coinBalance > 0) {
            (uint amountToken, uint amountCoin, uint liquidity) = _addLiquidity(otherHalf, coinBalance);

            emit liquidityAdded(amountToken, amountCoin, liquidity);

            return otherHalf - amountToken;
        } else {
            return otherHalf;
        }
    }

    function _addLiquidity(uint256 tokenAmount, uint256 coinAmount) private returns (uint, uint, uint) {
        _approve(address(this), address(routerV2), tokenAmount);

        return routerV2.addLiquidityETH{value: coinAmount}(address(this), tokenAmount, 0, 0, lpTokensReceiver, block.timestamp);
    }

    function lpTokensReceiverSetup(address _newAddress) public onlyOwner {
        lpTokensReceiver = _newAddress;

        emit LpTokensReceiverUpdated(_newAddress);
    }

    function liquidityFeesSetup(uint16 _buyFee, uint16 _sellFee, uint16 _transferFee) public onlyOwner {
        liquidityFees = [_buyFee, _sellFee, _transferFee];

        totalFees[0] = 0 + projectFees[0] + liquidityFees[0];
        totalFees[1] = 0 + projectFees[1] + liquidityFees[1];
        totalFees[2] = 0 + projectFees[2] + liquidityFees[2];
        require(totalFees[0] <= 500 && totalFees[1] <= 500 && totalFees[2] <= 500, "TaxesDefaultRouter: Cannot exceed max total fee of 5%");

        emit liquidityFeesUpdated(_buyFee, _sellFee, _transferFee);
    }

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        
        bool canSwap = getAllPending() >= swapThreshold;
        
        if (!_swapping && !AMMPairs[from] && canSwap) {
            _swapping = true;
            
            if (false || _projectPending > 0) {
                uint256 token2Swap = 0 + _projectPending;
                bool success = false;

                _swapTokensForCoin(token2Swap);
                uint256 coinsReceived = address(this).balance;
                
                uint256 projectPortion = coinsReceived * _projectPending / token2Swap;
                if (projectPortion > 0) {
                    (success,) = payable(address(projectAddress)).call{value: projectPortion}("");
                    require(success, "TaxesDefaultRouterWalletCoin: Fee transfer error");
                    emit projectFeeSent(projectAddress, projectPortion);
                }
                _projectPending = 0;

            }

            if (_liquidityPending > 0) {
                _swapAndLiquify(_liquidityPending);
                _liquidityPending = 0;
            }

            _swapping = false;
        }

        if (!_swapping && amount > 0 && to != address(routerV2) && !isExcludedFromFees[from] && !isExcludedFromFees[to]) {
            uint256 fees = 0;
            uint8 txType = 3;
            
            if (AMMPairs[from]) {
                if (totalFees[0] > 0) txType = 0;
            }
            else if (AMMPairs[to]) {
                if (totalFees[1] > 0) txType = 1;
            }
            else if (totalFees[2] > 0) txType = 2;
            
            if (txType < 3) {
                
                fees = amount * totalFees[txType] / 10000;
                amount -= fees;
                
                _projectPending += fees * projectFees[txType] / totalFees[txType];

                _liquidityPending += fees * liquidityFees[txType] / totalFees[txType];

                
            }

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

    function _updateRouterV2(address router) private {
        routerV2 = IUniswapV2Router02(router);
        pairV2 = IUniswapV2Factory(routerV2.factory()).createPair(address(this), routerV2.WETH());
        
        _setAMMPair(pairV2, true);

        emit RouterV2Updated(router);
    }

    function setAMMPair(address pair, bool isPair) public onlyOwner {
        require(pair != pairV2, "DefaultRouter: Cannot remove initial pair from list");

        _setAMMPair(pair, isPair);
    }

    function _setAMMPair(address pair, bool isPair) private {
        AMMPairs[pair] = isPair;

        if (isPair) { 
        }

        emit AMMPairsUpdated(pair, isPair);
    }

    function _beforeTokenTransfer(address from, address to, uint256 amount)
        internal
        override
    {
        super._beforeTokenTransfer(from, to, amount);
    }

    function _afterTokenTransfer(address from, address to, uint256 amount)
        internal
        override
    {
        super._afterTokenTransfer(from, to, amount);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"AMMPair","type":"address"},{"indexed":false,"internalType":"bool","name":"isPair","type":"bool"}],"name":"AMMPairsUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"lpTokensReceiver","type":"address"}],"name":"LpTokensReceiverUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"routerV2","type":"address"}],"name":"RouterV2Updated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"swapThreshold","type":"uint256"}],"name":"SwapThresholdUpdated","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":false,"internalType":"uint256","name":"amountToken","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountCoin","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidity","type":"uint256"}],"name":"liquidityAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint16","name":"buyFee","type":"uint16"},{"indexed":false,"internalType":"uint16","name":"sellFee","type":"uint16"},{"indexed":false,"internalType":"uint16","name":"transferFee","type":"uint16"}],"name":"liquidityFeesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"projectAddress","type":"address"}],"name":"projectAddressUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"projectFeeSent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint16","name":"buyFee","type":"uint16"},{"indexed":false,"internalType":"uint16","name":"sellFee","type":"uint16"},{"indexed":false,"internalType":"uint16","name":"transferFee","type":"uint16"}],"name":"projectFeesUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"AMMPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","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":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAllPending","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"liquidityFees","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_buyFee","type":"uint16"},{"internalType":"uint16","name":"_sellFee","type":"uint16"},{"internalType":"uint16","name":"_transferFee","type":"uint16"}],"name":"liquidityFeesSetup","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lpTokensReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newAddress","type":"address"}],"name":"lpTokensReceiverSetup","outputs":[],"stateMutability":"nonpayable","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":"pairV2","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"projectAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newAddress","type":"address"}],"name":"projectAddressSetup","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"projectFees","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_buyFee","type":"uint16"},{"internalType":"uint16","name":"_sellFee","type":"uint16"},{"internalType":"uint16","name":"_transferFee","type":"uint16"}],"name":"projectFeesSetup","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"routerV2","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"isPair","type":"bool"}],"name":"setAMMPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"totalFees","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","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":[{"internalType":"uint256","name":"_swapThreshold","type":"uint256"}],"name":"updateSwapThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040523480156200001157600080fd5b506040518060400160405280600781526020017f42454e20322e30000000000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f42454e322e300000000000000000000000000000000000000000000000000000815250816003908051906020019062000096929190620012ef565b508060049080519060200190620000af929190620012ef565b505050620000d2620000c66200025460201b60201c565b6200025c60201b60201c565b60007387932282a5d6a31b34799c5dea409efe846dc159905062000129620000ff6200032260201b60201c565b600a6200010d919062001774565b6207a1206200011d9190620018b1565b6200032b60201b60201c565b6200014e7387932282a5d6a31b34799c5dea409efe846dc1596200037e60201b60201c565b6200016360648060006200041e60201b60201c565b620001887387932282a5d6a31b34799c5dea409efe846dc159620007ec60201b60201c565b6200019d60008060006200087960201b60201c565b620001b081600162000c4760201b60201c565b620001c330600162000c4760201b60201c565b620001e8737a250d5630b4cf539739df2c5dacb4c659f2488d62000d0260201b60201c565b6200022881620001fd6200032260201b60201c565b600a6200020b919062001774565b633b9aca006200021c9190620018b1565b62000fd760201b60201c565b6200024d7387932282a5d6a31b34799c5dea409efe846dc1596200025c60201b60201c565b5062001b07565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006012905090565b6200033b6200114560201b60201c565b806006819055507f18ff2fc8464635e4f668567019152095047e34d7a2ab4b97661ba4dc7fd06476816040516200037391906200164f565b60405180910390a150565b6200038e6200114560201b60201c565b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620003e281600162000c4760201b60201c565b7f90632ba5ab1cfd6c41f5aead332503e9536d7bfd7b7f158129f1af2d9fe6180f8160405162000413919062001545565b60405180910390a150565b6200042e6200114560201b60201c565b60405180606001604052808461ffff1661ffff1681526020018361ffff1661ffff1681526020018261ffff1661ffff16815250600a9060036200047392919062001380565b50600c6000600381106200048c576200048b62001a0b565b5b601091828204019190066002029054906101000a900461ffff16600a600060038110620004be57620004bd62001a0b565b5b601091828204019190066002029054906101000a900461ffff166000620004e691906200167d565b620004f291906200167d565b600e6000600381106200050a576200050962001a0b565b5b601091828204019190066002026101000a81548161ffff021916908361ffff160217905550600c60016003811062000547576200054662001a0b565b5b601091828204019190066002029054906101000a900461ffff16600a60016003811062000579576200057862001a0b565b5b601091828204019190066002029054906101000a900461ffff166000620005a191906200167d565b620005ad91906200167d565b600e600160038110620005c557620005c462001a0b565b5b601091828204019190066002026101000a81548161ffff021916908361ffff160217905550600c60026003811062000602576200060162001a0b565b5b601091828204019190066002029054906101000a900461ffff16600a60026003811062000634576200063362001a0b565b5b601091828204019190066002029054906101000a900461ffff1660006200065c91906200167d565b6200066891906200167d565b600e60026003811062000680576200067f62001a0b565b5b601091828204019190066002026101000a81548161ffff021916908361ffff1602179055506101f4600e600060038110620006c057620006bf62001a0b565b5b601091828204019190066002029054906101000a900461ffff1661ffff16111580156200072457506101f4600e60016003811062000703576200070262001a0b565b5b601091828204019190066002029054906101000a900461ffff1661ffff1611155b80156200076857506101f4600e60026003811062000747576200074662001a0b565b5b601091828204019190066002029054906101000a900461ffff1661ffff1611155b620007aa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007a190620015ce565b60405180910390fd5b7fd9435692c57df900cf343502b3044ff0dca4c5b7af6c1236df4557416ad92b8f838383604051620007df9392919062001612565b60405180910390a1505050565b620007fc6200114560201b60201c565b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f1c75c7e1dcc8d5c68921dfeb6ac2a2a801ac4e38b295aec5c41e03fdc1ef0c4f816040516200086e919062001545565b60405180910390a150565b620008896200114560201b60201c565b60405180606001604052808461ffff1661ffff1681526020018361ffff1661ffff1681526020018261ffff1661ffff16815250600c906003620008ce92919062001380565b50600c600060038110620008e757620008e662001a0b565b5b601091828204019190066002029054906101000a900461ffff16600a60006003811062000919576200091862001a0b565b5b601091828204019190066002029054906101000a900461ffff1660006200094191906200167d565b6200094d91906200167d565b600e60006003811062000965576200096462001a0b565b5b601091828204019190066002026101000a81548161ffff021916908361ffff160217905550600c600160038110620009a257620009a162001a0b565b5b601091828204019190066002029054906101000a900461ffff16600a600160038110620009d457620009d362001a0b565b5b601091828204019190066002029054906101000a900461ffff166000620009fc91906200167d565b62000a0891906200167d565b600e60016003811062000a205762000a1f62001a0b565b5b601091828204019190066002026101000a81548161ffff021916908361ffff160217905550600c60026003811062000a5d5762000a5c62001a0b565b5b601091828204019190066002029054906101000a900461ffff16600a60026003811062000a8f5762000a8e62001a0b565b5b601091828204019190066002029054906101000a900461ffff16600062000ab791906200167d565b62000ac391906200167d565b600e60026003811062000adb5762000ada62001a0b565b5b601091828204019190066002026101000a81548161ffff021916908361ffff1602179055506101f4600e60006003811062000b1b5762000b1a62001a0b565b5b601091828204019190066002029054906101000a900461ffff1661ffff161115801562000b7f57506101f4600e60016003811062000b5e5762000b5d62001a0b565b5b601091828204019190066002029054906101000a900461ffff1661ffff1611155b801562000bc357506101f4600e60026003811062000ba25762000ba162001a0b565b5b601091828204019190066002029054906101000a900461ffff1661ffff1611155b62000c05576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000bfc90620015ce565b60405180910390fd5b7f2524ccb75260c9a50c71af1740c212c049a01232ef122061416b51815ec57a1883838360405162000c3a9392919062001612565b60405180910390a1505050565b62000c576200114560201b60201c565b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000cf691906200158f565b60405180910390a25050565b80600f60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801562000dac57600080fd5b505afa15801562000dc1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000de791906200145a565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801562000e6c57600080fd5b505afa15801562000e81573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000ea791906200145a565b6040518363ffffffff1660e01b815260040162000ec692919062001562565b602060405180830381600087803b15801562000ee157600080fd5b505af115801562000ef6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000f1c91906200145a565b601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000f91601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620011d660201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff167fbc052db65df144ad4f71f02da93cae3d4401104c30ac374d7cc10d87ee07b60260405160405180910390a250565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200104a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200104190620015f0565b60405180910390fd5b6200105e600083836200128160201b60201c565b8060026000828254620010729190620016bc565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200112591906200164f565b60405180910390a362001141600083836200129e60201b60201c565b5050565b620011556200025460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200117b620012bb60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620011d4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620011cb90620015ac565b60405180910390fd5b565b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f911aa18ddbbbc33c9b4c704a71bdaa0984b0aa2e82726a7f51e64bad0b0a8455826040516200127591906200158f565b60405180910390a25050565b62001299838383620012e560201b620017911760201c565b505050565b620012b6838383620012ea60201b620017961760201c565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b505050565b505050565b828054620012fd9062001977565b90600052602060002090601f0160209004810192826200132157600085556200136d565b82601f106200133c57805160ff19168380011785556200136d565b828001600101855582156200136d579182015b828111156200136c5782518255916020019190600101906200134f565b5b5090506200137c919062001424565b5090565b826003600f01601090048101928215620014115791602002820160005b83821115620013df57835183826101000a81548161ffff021916908361ffff16021790555092602001926002016020816001010492830192600103026200139d565b80156200140f5782816101000a81549061ffff0219169055600201602081600101049283019260010302620013df565b505b50905062001420919062001424565b5090565b5b808211156200143f57600081600090555060010162001425565b5090565b600081519050620014548162001aed565b92915050565b60006020828403121562001473576200147262001a3a565b5b6000620014838482850162001443565b91505092915050565b620014978162001912565b82525050565b620014a88162001926565b82525050565b6000620014bd6020836200166c565b9150620014ca8262001a4c565b602082019050919050565b6000620014e46035836200166c565b9150620014f18262001a75565b604082019050919050565b60006200150b601f836200166c565b9150620015188262001ac4565b602082019050919050565b6200152e8162001932565b82525050565b6200153f8162001960565b82525050565b60006020820190506200155c60008301846200148c565b92915050565b60006040820190506200157960008301856200148c565b6200158860208301846200148c565b9392505050565b6000602082019050620015a660008301846200149d565b92915050565b60006020820190508181036000830152620015c781620014ae565b9050919050565b60006020820190508181036000830152620015e981620014d5565b9050919050565b600060208201905081810360008301526200160b81620014fc565b9050919050565b600060608201905062001629600083018662001523565b62001638602083018562001523565b62001647604083018462001523565b949350505050565b600060208201905062001666600083018462001534565b92915050565b600082825260208201905092915050565b60006200168a8262001932565b9150620016978362001932565b92508261ffff03821115620016b157620016b0620019ad565b5b828201905092915050565b6000620016c98262001960565b9150620016d68362001960565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156200170e576200170d620019ad565b5b828201905092915050565b6000808291508390505b60018511156200176b57808604811115620017435762001742620019ad565b5b6001851615620017535780820291505b8081029050620017638562001a3f565b945062001723565b94509492505050565b6000620017818262001960565b91506200178e836200196a565b9250620017bd7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620017c5565b905092915050565b600082620017d75760019050620018aa565b81620017e75760009050620018aa565b81600181146200180057600281146200180b5762001841565b6001915050620018aa565b60ff84111562001820576200181f620019ad565b5b8360020a9150848211156200183a5762001839620019ad565b5b50620018aa565b5060208310610133831016604e8410600b84101617156200187b5782820a905083811115620018755762001874620019ad565b5b620018aa565b6200188a848484600162001719565b92509050818404811115620018a457620018a3620019ad565b5b81810290505b9392505050565b6000620018be8262001960565b9150620018cb8362001960565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620019075762001906620019ad565b5b828202905092915050565b60006200191f8262001940565b9050919050565b60008115159050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600060028204905060018216806200199057607f821691505b60208210811415620019a757620019a6620019dc565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b60008160011c9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f546178657344656661756c74526f757465723a2043616e6e6f7420657863656560008201527f64206d617820746f74616c20666565206f662035250000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b62001af88162001912565b811462001b0457600080fd5b50565b613e288062001b176000396000f3fe6080604052600436106101f25760003560e01c8063715018a61161010d578063a9059cbb116100a0578063e62681581161006f578063e62681581461076c578063ee3c4bb214610795578063f112ba72146107be578063f2fde38b146107e9578063f3bf087e14610812576101f9565b8063a9059cbb146106a0578063c0246668146106dd578063cc274b2914610706578063dd62ed3e1461072f576101f9565b80638fffabed116100dc5780638fffabed146105d057806395d89b41146105fb578063966b53c414610626578063a457c2d714610663576101f9565b8063715018a614610526578063768565571461053d5780638089dbfd1461057a5780638da5cb5b146105a5576101f9565b8063395093511161018557806346d803b01161015457806346d803b0146104585780634fbee19314610481578063502f7446146104be57806370a08231146104e9576101f9565b8063395093511461038a5780633cf96af1146103c7578063408ccbdf146103f257806342966c681461042f576101f9565b806323b872dd116101c157806323b872dd146102bc5780632d99d32e146102f9578063313ce56714610322578063314a37fb1461034d576101f9565b80630445b667146101fe57806306fdde0314610229578063095ea7b31461025457806318160ddd14610291576101f9565b366101f957005b600080fd5b34801561020a57600080fd5b5061021361083b565b6040516102209190613508565b60405180910390f35b34801561023557600080fd5b5061023e610841565b60405161024b91906132d4565b60405180910390f35b34801561026057600080fd5b5061027b60048036038101906102769190612d9d565b6108d3565b604051610288919061329e565b60405180910390f35b34801561029d57600080fd5b506102a66108f6565b6040516102b39190613508565b60405180910390f35b3480156102c857600080fd5b506102e360048036038101906102de9190612d0a565b610900565b6040516102f0919061329e565b60405180910390f35b34801561030557600080fd5b50610320600480360381019061031b9190612d5d565b61092f565b005b34801561032e57600080fd5b506103376109d6565b60405161034491906135b4565b60405180910390f35b34801561035957600080fd5b50610374600480360381019061036f9190612e30565b6109df565b60405161038191906134b6565b60405180910390f35b34801561039657600080fd5b506103b160048036038101906103ac9190612d9d565b610a0d565b6040516103be919061329e565b60405180910390f35b3480156103d357600080fd5b506103dc610a44565b6040516103e991906131f9565b60405180910390f35b3480156103fe57600080fd5b5061041960048036038101906104149190612e30565b610a6a565b60405161042691906134b6565b60405180910390f35b34801561043b57600080fd5b5061045660048036038101906104519190612e30565b610a98565b005b34801561046457600080fd5b5061047f600480360381019061047a9190612ddd565b610aac565b005b34801561048d57600080fd5b506104a860048036038101906104a39190612c70565b610e39565b6040516104b5919061329e565b60405180910390f35b3480156104ca57600080fd5b506104d3610e59565b6040516104e091906132b9565b60405180910390f35b3480156104f557600080fd5b50610510600480360381019061050b9190612c70565b610e7f565b60405161051d9190613508565b60405180910390f35b34801561053257600080fd5b5061053b610ec7565b005b34801561054957600080fd5b50610564600480360381019061055f9190612c70565b610edb565b604051610571919061329e565b60405180910390f35b34801561058657600080fd5b5061058f610efb565b60405161059c91906131f9565b60405180910390f35b3480156105b157600080fd5b506105ba610f21565b6040516105c791906131f9565b60405180910390f35b3480156105dc57600080fd5b506105e5610f4b565b6040516105f291906131f9565b60405180910390f35b34801561060757600080fd5b50610610610f71565b60405161061d91906132d4565b60405180910390f35b34801561063257600080fd5b5061064d60048036038101906106489190612e30565b611003565b60405161065a91906134b6565b60405180910390f35b34801561066f57600080fd5b5061068a60048036038101906106859190612d9d565b611031565b604051610697919061329e565b60405180910390f35b3480156106ac57600080fd5b506106c760048036038101906106c29190612d9d565b6110a8565b6040516106d4919061329e565b60405180910390f35b3480156106e957600080fd5b5061070460048036038101906106ff9190612d5d565b6110cb565b005b34801561071257600080fd5b5061072d60048036038101906107289190612e30565b61117c565b005b34801561073b57600080fd5b5061075660048036038101906107519190612cca565b6111c5565b6040516107639190613508565b60405180910390f35b34801561077857600080fd5b50610793600480360381019061078e9190612ddd565b61124c565b005b3480156107a157600080fd5b506107bc60048036038101906107b79190612c70565b6115d9565b005b3480156107ca57600080fd5b506107d3611667565b6040516107e09190613508565b60405180910390f35b3480156107f557600080fd5b50610810600480360381019061080b9190612c70565b61168a565b005b34801561081e57600080fd5b5061083960048036038101906108349190612c70565b61170e565b005b60065481565b6060600380546108509061385a565b80601f016020809104026020016040519081016040528092919081815260200182805461087c9061385a565b80156108c95780601f1061089e576101008083540402835291602001916108c9565b820191906000526020600020905b8154815290600101906020018083116108ac57829003601f168201915b5050505050905090565b6000806108de61179b565b90506108eb8185856117a3565b600191505092915050565b6000600254905090565b60008061090b61179b565b905061091885828561196e565b6109238585856119fa565b60019150509392505050565b6109376120cb565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156109c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109bf906133b6565b60405180910390fd5b6109d28282612149565b5050565b60006012905090565b600a81600381106109ef57600080fd5b60109182820401919006600202915054906101000a900461ffff1681565b600080610a1861179b565b9050610a39818585610a2a85896111c5565b610a349190613667565b6117a3565b600191505092915050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e8160038110610a7a57600080fd5b60109182820401919006600202915054906101000a900461ffff1681565b610aa9610aa361179b565b826121f2565b50565b610ab46120cb565b60405180606001604052808461ffff1661ffff1681526020018361ffff1661ffff1681526020018261ffff1661ffff16815250600a906003610af7929190612b38565b50600c600060038110610b0d57610b0c613919565b5b601091828204019190066002029054906101000a900461ffff16600a600060038110610b3c57610b3b613919565b5b601091828204019190066002029054906101000a900461ffff166000610b62919061362f565b610b6c919061362f565b600e600060038110610b8157610b80613919565b5b601091828204019190066002026101000a81548161ffff021916908361ffff160217905550600c600160038110610bbb57610bba613919565b5b601091828204019190066002029054906101000a900461ffff16600a600160038110610bea57610be9613919565b5b601091828204019190066002029054906101000a900461ffff166000610c10919061362f565b610c1a919061362f565b600e600160038110610c2f57610c2e613919565b5b601091828204019190066002026101000a81548161ffff021916908361ffff160217905550600c600260038110610c6957610c68613919565b5b601091828204019190066002029054906101000a900461ffff16600a600260038110610c9857610c97613919565b5b601091828204019190066002029054906101000a900461ffff166000610cbe919061362f565b610cc8919061362f565b600e600260038110610cdd57610cdc613919565b5b601091828204019190066002026101000a81548161ffff021916908361ffff1602179055506101f4600e600060038110610d1a57610d19613919565b5b601091828204019190066002029054906101000a900461ffff1661ffff1611158015610d7a57506101f4600e600160038110610d5957610d58613919565b5b601091828204019190066002029054906101000a900461ffff1661ffff1611155b8015610dba57506101f4600e600260038110610d9957610d98613919565b5b601091828204019190066002029054906101000a900461ffff1661ffff1611155b610df9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df090613456565b60405180910390fd5b7fd9435692c57df900cf343502b3044ff0dca4c5b7af6c1236df4557416ad92b8f838383604051610e2c939291906134d1565b60405180910390a1505050565b600d6020528060005260406000206000915054906101000a900460ff1681565b600f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ecf6120cb565b610ed960006123c0565b565b60116020528060005260406000206000915054906101000a900460ff1681565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060048054610f809061385a565b80601f0160208091040260200160405190810160405280929190818152602001828054610fac9061385a565b8015610ff95780601f10610fce57610100808354040283529160200191610ff9565b820191906000526020600020905b815481529060010190602001808311610fdc57829003601f168201915b5050505050905090565b600c816003811061101357600080fd5b60109182820401919006600202915054906101000a900461ffff1681565b60008061103c61179b565b9050600061104a82866111c5565b90508381101561108f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108690613496565b60405180910390fd5b61109c82868684036117a3565b60019250505092915050565b6000806110b361179b565b90506110c08185856119fa565b600191505092915050565b6110d36120cb565b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611170919061329e565b60405180910390a25050565b6111846120cb565b806006819055507f18ff2fc8464635e4f668567019152095047e34d7a2ab4b97661ba4dc7fd06476816040516111ba9190613508565b60405180910390a150565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6112546120cb565b60405180606001604052808461ffff1661ffff1681526020018361ffff1661ffff1681526020018261ffff1661ffff16815250600c906003611297929190612b38565b50600c6000600381106112ad576112ac613919565b5b601091828204019190066002029054906101000a900461ffff16600a6000600381106112dc576112db613919565b5b601091828204019190066002029054906101000a900461ffff166000611302919061362f565b61130c919061362f565b600e60006003811061132157611320613919565b5b601091828204019190066002026101000a81548161ffff021916908361ffff160217905550600c60016003811061135b5761135a613919565b5b601091828204019190066002029054906101000a900461ffff16600a60016003811061138a57611389613919565b5b601091828204019190066002029054906101000a900461ffff1660006113b0919061362f565b6113ba919061362f565b600e6001600381106113cf576113ce613919565b5b601091828204019190066002026101000a81548161ffff021916908361ffff160217905550600c60026003811061140957611408613919565b5b601091828204019190066002029054906101000a900461ffff16600a60026003811061143857611437613919565b5b601091828204019190066002029054906101000a900461ffff16600061145e919061362f565b611468919061362f565b600e60026003811061147d5761147c613919565b5b601091828204019190066002026101000a81548161ffff021916908361ffff1602179055506101f4600e6000600381106114ba576114b9613919565b5b601091828204019190066002029054906101000a900461ffff1661ffff161115801561151a57506101f4600e6001600381106114f9576114f8613919565b5b601091828204019190066002029054906101000a900461ffff1661ffff1611155b801561155a57506101f4600e60026003811061153957611538613919565b5b601091828204019190066002029054906101000a900461ffff1661ffff1611155b611599576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159090613456565b60405180910390fd5b7f2524ccb75260c9a50c71af1740c212c049a01232ef122061416b51815ec57a188383836040516115cc939291906134d1565b60405180910390a1505050565b6115e16120cb565b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061162d8160016110cb565b7f90632ba5ab1cfd6c41f5aead332503e9536d7bfd7b7f158129f1af2d9fe6180f8160405161165c91906131f9565b60405180910390a150565b6000600854600754600061167b9190613667565b6116859190613667565b905090565b6116926120cb565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611702576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f990613336565b60405180910390fd5b61170b816123c0565b50565b6117166120cb565b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f1c75c7e1dcc8d5c68921dfeb6ac2a2a801ac4e38b295aec5c41e03fdc1ef0c4f8160405161178691906131f9565b60405180910390a150565b505050565b505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611813576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180a90613476565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611883576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187a90613356565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516119619190613508565b60405180910390a3505050565b600061197a84846111c5565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146119f457818110156119e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119dd90613376565b60405180910390fd5b6119f384848484036117a3565b5b50505050565b6000600654611a07611667565b10159050600f60009054906101000a900460ff16158015611a725750601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611a7b5750805b15611c6b576001600f60006101000a81548160ff021916908315150217905550600080611aaa57506000600754115b15611c2f5760006007546000611ac09190613667565b90506000611acd82612486565b600047905060008360075483611ae391906136ee565b611aed91906136bd565b90506000811115611c2257600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051611b3e906131e4565b60006040518083038185875af1925050503d8060008114611b7b576040519150601f19603f3d011682016040523d82523d6000602084013e611b80565b606091505b50508093505082611bc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bbd906133d6565b60405180910390fd5b7fa9f1ac23a06dd71e5c0f0680edbde2396d7725a55b222709d70f55d14f51e0fd600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682604051611c19929190613214565b60405180910390a15b6000600781905550505050505b60006008541115611c4f57611c456008546126d8565b5060006008819055505b6000600f60006101000a81548160ff0219169083151502179055505b600f60009054906101000a900460ff16158015611c885750600082115b8015611ce25750600f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015611d385750600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611d8e5750600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156120ba5760008060039050601160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611e31576000600e600060038110611e0357611e02613919565b5b601091828204019190066002029054906101000a900461ffff1661ffff161115611e2c57600090505b611f0a565b601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611ec8576000600e600160038110611e9a57611e99613919565b5b601091828204019190066002029054906101000a900461ffff1661ffff161115611ec357600190505b611f09565b6000600e600260038110611edf57611ede613919565b5b601091828204019190066002029054906101000a900461ffff1661ffff161115611f0857600290505b5b5b60038160ff1610156120a257612710600e8260ff1660038110611f3057611f2f613919565b5b601091828204019190066002029054906101000a900461ffff1661ffff1685611f5991906136ee565b611f6391906136bd565b91508184611f719190613748565b9350600e8160ff1660038110611f8a57611f89613919565b5b601091828204019190066002029054906101000a900461ffff1661ffff16600a8260ff1660038110611fbf57611fbe613919565b5b601091828204019190066002029054906101000a900461ffff1661ffff1683611fe891906136ee565b611ff291906136bd565b600760008282546120039190613667565b92505081905550600e8160ff166003811061202157612020613919565b5b601091828204019190066002029054906101000a900461ffff1661ffff16600c8260ff166003811061205657612055613919565b5b601091828204019190066002029054906101000a900461ffff1661ffff168361207f91906136ee565b61208991906136bd565b6008600082825461209a9190613667565b925050819055505b60008211156120b7576120b6863084612786565b5b50505b6120c5848484612786565b50505050565b6120d361179b565b73ffffffffffffffffffffffffffffffffffffffff166120f1610f21565b73ffffffffffffffffffffffffffffffffffffffff1614612147576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213e906133f6565b60405180910390fd5b565b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f911aa18ddbbbc33c9b4c704a71bdaa0984b0aa2e82726a7f51e64bad0b0a8455826040516121e6919061329e565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612262576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225990613416565b60405180910390fd5b61226e826000836129fe565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156122f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122eb90613316565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516123a79190613508565b60405180910390a36123bb83600084612a0e565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600267ffffffffffffffff8111156124a3576124a2613948565b5b6040519080825280602002602001820160405280156124d15781602001602082028036833780820191505090505b50905030816000815181106124e9576124e8613919565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561258b57600080fd5b505afa15801561259f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125c39190612c9d565b816001815181106125d7576125d6613919565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061263e30600f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846117a3565b600f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016126a2959493929190613523565b600060405180830381600087803b1580156126bc57600080fd5b505af11580156126d0573d6000803e3d6000fd5b505050505050565b6000806002836126e891906136bd565b9050600081846126f89190613748565b905061270382612486565b6000479050600081111561277a5760008060006127208585612a1e565b9250925092507f3db50c324c27fb39c451e35d4d23abba3e20d96d036e7a40f4adc681c1ce30138383836040516127599392919061357d565b60405180910390a1828561276d9190613748565b9650505050505050612781565b8193505050505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156127f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ed90613436565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612866576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285d906132f6565b60405180910390fd5b6128718383836129fe565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156128f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ee90613396565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516129e59190613508565b60405180910390a36129f8848484612a0e565b50505050565b612a09838383611791565b505050565b612a19838383611796565b505050565b6000806000612a5030600f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16876117a3565b600f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719853088600080600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401612ad99695949392919061323d565b6060604051808303818588803b158015612af257600080fd5b505af1158015612b06573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612b2b9190612e5d565b9250925092509250925092565b826003600f01601090048101928215612bc45791602002820160005b83821115612b9457835183826101000a81548161ffff021916908361ffff1602179055509260200192600201602081600101049283019260010302612b54565b8015612bc25782816101000a81549061ffff0219169055600201602081600101049283019260010302612b94565b505b509050612bd19190612bd5565b5090565b5b80821115612bee576000816000905550600101612bd6565b5090565b600081359050612c0181613d96565b92915050565b600081519050612c1681613d96565b92915050565b600081359050612c2b81613dad565b92915050565b600081359050612c4081613dc4565b92915050565b600081359050612c5581613ddb565b92915050565b600081519050612c6a81613ddb565b92915050565b600060208284031215612c8657612c85613977565b5b6000612c9484828501612bf2565b91505092915050565b600060208284031215612cb357612cb2613977565b5b6000612cc184828501612c07565b91505092915050565b60008060408385031215612ce157612ce0613977565b5b6000612cef85828601612bf2565b9250506020612d0085828601612bf2565b9150509250929050565b600080600060608486031215612d2357612d22613977565b5b6000612d3186828701612bf2565b9350506020612d4286828701612bf2565b9250506040612d5386828701612c46565b9150509250925092565b60008060408385031215612d7457612d73613977565b5b6000612d8285828601612bf2565b9250506020612d9385828601612c1c565b9150509250929050565b60008060408385031215612db457612db3613977565b5b6000612dc285828601612bf2565b9250506020612dd385828601612c46565b9150509250929050565b600080600060608486031215612df657612df5613977565b5b6000612e0486828701612c31565b9350506020612e1586828701612c31565b9250506040612e2686828701612c31565b9150509250925092565b600060208284031215612e4657612e45613977565b5b6000612e5484828501612c46565b91505092915050565b600080600060608486031215612e7657612e75613977565b5b6000612e8486828701612c5b565b9350506020612e9586828701612c5b565b9250506040612ea686828701612c5b565b9150509250925092565b6000612ebc8383612ec8565b60208301905092915050565b612ed18161377c565b82525050565b612ee08161377c565b82525050565b6000612ef1826135df565b612efb8185613602565b9350612f06836135cf565b8060005b83811015612f37578151612f1e8882612eb0565b9750612f29836135f5565b925050600181019050612f0a565b5085935050505092915050565b612f4d8161378e565b82525050565b612f5c816137df565b82525050565b612f6b816137f1565b82525050565b6000612f7c826135ea565b612f86818561361e565b9350612f96818560208601613827565b612f9f8161397c565b840191505092915050565b6000612fb760238361361e565b9150612fc28261398d565b604082019050919050565b6000612fda60228361361e565b9150612fe5826139dc565b604082019050919050565b6000612ffd60268361361e565b915061300882613a2b565b604082019050919050565b600061302060228361361e565b915061302b82613a7a565b604082019050919050565b6000613043601d8361361e565b915061304e82613ac9565b602082019050919050565b600061306660268361361e565b915061307182613af2565b604082019050919050565b600061308960338361361e565b915061309482613b41565b604082019050919050565b60006130ac60308361361e565b91506130b782613b90565b604082019050919050565b60006130cf60208361361e565b91506130da82613bdf565b602082019050919050565b60006130f260218361361e565b91506130fd82613c08565b604082019050919050565b600061311560258361361e565b915061312082613c57565b604082019050919050565b600061313860358361361e565b915061314382613ca6565b604082019050919050565b600061315b600083613613565b915061316682613cf5565b600082019050919050565b600061317e60248361361e565b915061318982613cf8565b604082019050919050565b60006131a160258361361e565b91506131ac82613d47565b604082019050919050565b6131c08161379a565b82525050565b6131cf816137c8565b82525050565b6131de816137d2565b82525050565b60006131ef8261314e565b9150819050919050565b600060208201905061320e6000830184612ed7565b92915050565b60006040820190506132296000830185612ed7565b61323660208301846131c6565b9392505050565b600060c0820190506132526000830189612ed7565b61325f60208301886131c6565b61326c6040830187612f62565b6132796060830186612f62565b6132866080830185612ed7565b61329360a08301846131c6565b979650505050505050565b60006020820190506132b36000830184612f44565b92915050565b60006020820190506132ce6000830184612f53565b92915050565b600060208201905081810360008301526132ee8184612f71565b905092915050565b6000602082019050818103600083015261330f81612faa565b9050919050565b6000602082019050818103600083015261332f81612fcd565b9050919050565b6000602082019050818103600083015261334f81612ff0565b9050919050565b6000602082019050818103600083015261336f81613013565b9050919050565b6000602082019050818103600083015261338f81613036565b9050919050565b600060208201905081810360008301526133af81613059565b9050919050565b600060208201905081810360008301526133cf8161307c565b9050919050565b600060208201905081810360008301526133ef8161309f565b9050919050565b6000602082019050818103600083015261340f816130c2565b9050919050565b6000602082019050818103600083015261342f816130e5565b9050919050565b6000602082019050818103600083015261344f81613108565b9050919050565b6000602082019050818103600083015261346f8161312b565b9050919050565b6000602082019050818103600083015261348f81613171565b9050919050565b600060208201905081810360008301526134af81613194565b9050919050565b60006020820190506134cb60008301846131b7565b92915050565b60006060820190506134e660008301866131b7565b6134f360208301856131b7565b61350060408301846131b7565b949350505050565b600060208201905061351d60008301846131c6565b92915050565b600060a08201905061353860008301886131c6565b6135456020830187612f62565b81810360408301526135578186612ee6565b90506135666060830185612ed7565b61357360808301846131c6565b9695505050505050565b600060608201905061359260008301866131c6565b61359f60208301856131c6565b6135ac60408301846131c6565b949350505050565b60006020820190506135c960008301846131d5565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600061363a8261379a565b91506136458361379a565b92508261ffff0382111561365c5761365b61388c565b5b828201905092915050565b6000613672826137c8565b915061367d836137c8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156136b2576136b161388c565b5b828201905092915050565b60006136c8826137c8565b91506136d3836137c8565b9250826136e3576136e26138bb565b5b828204905092915050565b60006136f9826137c8565b9150613704836137c8565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561373d5761373c61388c565b5b828202905092915050565b6000613753826137c8565b915061375e836137c8565b9250828210156137715761377061388c565b5b828203905092915050565b6000613787826137a8565b9050919050565b60008115159050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006137ea82613803565b9050919050565b60006137fc826137c8565b9050919050565b600061380e82613815565b9050919050565b6000613820826137a8565b9050919050565b60005b8381101561384557808201518184015260208101905061382a565b83811115613854576000848401525b50505050565b6000600282049050600182168061387257607f821691505b60208210811415613886576138856138ea565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f44656661756c74526f757465723a2043616e6e6f742072656d6f766520696e6960008201527f7469616c20706169722066726f6d206c69737400000000000000000000000000602082015250565b7f546178657344656661756c74526f7574657257616c6c6574436f696e3a20466560008201527f65207472616e73666572206572726f7200000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f546178657344656661756c74526f757465723a2043616e6e6f7420657863656560008201527f64206d617820746f74616c20666565206f662035250000000000000000000000602082015250565b50565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b613d9f8161377c565b8114613daa57600080fd5b50565b613db68161378e565b8114613dc157600080fd5b50565b613dcd8161379a565b8114613dd857600080fd5b50565b613de4816137c8565b8114613def57600080fd5b5056fea26469706673582212204443e8dfd1d138869bf77e53c69dc8e5e0fc2db0db547025558d5330d515398664736f6c63430008070033

Deployed Bytecode

0x6080604052600436106101f25760003560e01c8063715018a61161010d578063a9059cbb116100a0578063e62681581161006f578063e62681581461076c578063ee3c4bb214610795578063f112ba72146107be578063f2fde38b146107e9578063f3bf087e14610812576101f9565b8063a9059cbb146106a0578063c0246668146106dd578063cc274b2914610706578063dd62ed3e1461072f576101f9565b80638fffabed116100dc5780638fffabed146105d057806395d89b41146105fb578063966b53c414610626578063a457c2d714610663576101f9565b8063715018a614610526578063768565571461053d5780638089dbfd1461057a5780638da5cb5b146105a5576101f9565b8063395093511161018557806346d803b01161015457806346d803b0146104585780634fbee19314610481578063502f7446146104be57806370a08231146104e9576101f9565b8063395093511461038a5780633cf96af1146103c7578063408ccbdf146103f257806342966c681461042f576101f9565b806323b872dd116101c157806323b872dd146102bc5780632d99d32e146102f9578063313ce56714610322578063314a37fb1461034d576101f9565b80630445b667146101fe57806306fdde0314610229578063095ea7b31461025457806318160ddd14610291576101f9565b366101f957005b600080fd5b34801561020a57600080fd5b5061021361083b565b6040516102209190613508565b60405180910390f35b34801561023557600080fd5b5061023e610841565b60405161024b91906132d4565b60405180910390f35b34801561026057600080fd5b5061027b60048036038101906102769190612d9d565b6108d3565b604051610288919061329e565b60405180910390f35b34801561029d57600080fd5b506102a66108f6565b6040516102b39190613508565b60405180910390f35b3480156102c857600080fd5b506102e360048036038101906102de9190612d0a565b610900565b6040516102f0919061329e565b60405180910390f35b34801561030557600080fd5b50610320600480360381019061031b9190612d5d565b61092f565b005b34801561032e57600080fd5b506103376109d6565b60405161034491906135b4565b60405180910390f35b34801561035957600080fd5b50610374600480360381019061036f9190612e30565b6109df565b60405161038191906134b6565b60405180910390f35b34801561039657600080fd5b506103b160048036038101906103ac9190612d9d565b610a0d565b6040516103be919061329e565b60405180910390f35b3480156103d357600080fd5b506103dc610a44565b6040516103e991906131f9565b60405180910390f35b3480156103fe57600080fd5b5061041960048036038101906104149190612e30565b610a6a565b60405161042691906134b6565b60405180910390f35b34801561043b57600080fd5b5061045660048036038101906104519190612e30565b610a98565b005b34801561046457600080fd5b5061047f600480360381019061047a9190612ddd565b610aac565b005b34801561048d57600080fd5b506104a860048036038101906104a39190612c70565b610e39565b6040516104b5919061329e565b60405180910390f35b3480156104ca57600080fd5b506104d3610e59565b6040516104e091906132b9565b60405180910390f35b3480156104f557600080fd5b50610510600480360381019061050b9190612c70565b610e7f565b60405161051d9190613508565b60405180910390f35b34801561053257600080fd5b5061053b610ec7565b005b34801561054957600080fd5b50610564600480360381019061055f9190612c70565b610edb565b604051610571919061329e565b60405180910390f35b34801561058657600080fd5b5061058f610efb565b60405161059c91906131f9565b60405180910390f35b3480156105b157600080fd5b506105ba610f21565b6040516105c791906131f9565b60405180910390f35b3480156105dc57600080fd5b506105e5610f4b565b6040516105f291906131f9565b60405180910390f35b34801561060757600080fd5b50610610610f71565b60405161061d91906132d4565b60405180910390f35b34801561063257600080fd5b5061064d60048036038101906106489190612e30565b611003565b60405161065a91906134b6565b60405180910390f35b34801561066f57600080fd5b5061068a60048036038101906106859190612d9d565b611031565b604051610697919061329e565b60405180910390f35b3480156106ac57600080fd5b506106c760048036038101906106c29190612d9d565b6110a8565b6040516106d4919061329e565b60405180910390f35b3480156106e957600080fd5b5061070460048036038101906106ff9190612d5d565b6110cb565b005b34801561071257600080fd5b5061072d60048036038101906107289190612e30565b61117c565b005b34801561073b57600080fd5b5061075660048036038101906107519190612cca565b6111c5565b6040516107639190613508565b60405180910390f35b34801561077857600080fd5b50610793600480360381019061078e9190612ddd565b61124c565b005b3480156107a157600080fd5b506107bc60048036038101906107b79190612c70565b6115d9565b005b3480156107ca57600080fd5b506107d3611667565b6040516107e09190613508565b60405180910390f35b3480156107f557600080fd5b50610810600480360381019061080b9190612c70565b61168a565b005b34801561081e57600080fd5b5061083960048036038101906108349190612c70565b61170e565b005b60065481565b6060600380546108509061385a565b80601f016020809104026020016040519081016040528092919081815260200182805461087c9061385a565b80156108c95780601f1061089e576101008083540402835291602001916108c9565b820191906000526020600020905b8154815290600101906020018083116108ac57829003601f168201915b5050505050905090565b6000806108de61179b565b90506108eb8185856117a3565b600191505092915050565b6000600254905090565b60008061090b61179b565b905061091885828561196e565b6109238585856119fa565b60019150509392505050565b6109376120cb565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156109c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109bf906133b6565b60405180910390fd5b6109d28282612149565b5050565b60006012905090565b600a81600381106109ef57600080fd5b60109182820401919006600202915054906101000a900461ffff1681565b600080610a1861179b565b9050610a39818585610a2a85896111c5565b610a349190613667565b6117a3565b600191505092915050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e8160038110610a7a57600080fd5b60109182820401919006600202915054906101000a900461ffff1681565b610aa9610aa361179b565b826121f2565b50565b610ab46120cb565b60405180606001604052808461ffff1661ffff1681526020018361ffff1661ffff1681526020018261ffff1661ffff16815250600a906003610af7929190612b38565b50600c600060038110610b0d57610b0c613919565b5b601091828204019190066002029054906101000a900461ffff16600a600060038110610b3c57610b3b613919565b5b601091828204019190066002029054906101000a900461ffff166000610b62919061362f565b610b6c919061362f565b600e600060038110610b8157610b80613919565b5b601091828204019190066002026101000a81548161ffff021916908361ffff160217905550600c600160038110610bbb57610bba613919565b5b601091828204019190066002029054906101000a900461ffff16600a600160038110610bea57610be9613919565b5b601091828204019190066002029054906101000a900461ffff166000610c10919061362f565b610c1a919061362f565b600e600160038110610c2f57610c2e613919565b5b601091828204019190066002026101000a81548161ffff021916908361ffff160217905550600c600260038110610c6957610c68613919565b5b601091828204019190066002029054906101000a900461ffff16600a600260038110610c9857610c97613919565b5b601091828204019190066002029054906101000a900461ffff166000610cbe919061362f565b610cc8919061362f565b600e600260038110610cdd57610cdc613919565b5b601091828204019190066002026101000a81548161ffff021916908361ffff1602179055506101f4600e600060038110610d1a57610d19613919565b5b601091828204019190066002029054906101000a900461ffff1661ffff1611158015610d7a57506101f4600e600160038110610d5957610d58613919565b5b601091828204019190066002029054906101000a900461ffff1661ffff1611155b8015610dba57506101f4600e600260038110610d9957610d98613919565b5b601091828204019190066002029054906101000a900461ffff1661ffff1611155b610df9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df090613456565b60405180910390fd5b7fd9435692c57df900cf343502b3044ff0dca4c5b7af6c1236df4557416ad92b8f838383604051610e2c939291906134d1565b60405180910390a1505050565b600d6020528060005260406000206000915054906101000a900460ff1681565b600f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ecf6120cb565b610ed960006123c0565b565b60116020528060005260406000206000915054906101000a900460ff1681565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060048054610f809061385a565b80601f0160208091040260200160405190810160405280929190818152602001828054610fac9061385a565b8015610ff95780601f10610fce57610100808354040283529160200191610ff9565b820191906000526020600020905b815481529060010190602001808311610fdc57829003601f168201915b5050505050905090565b600c816003811061101357600080fd5b60109182820401919006600202915054906101000a900461ffff1681565b60008061103c61179b565b9050600061104a82866111c5565b90508381101561108f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108690613496565b60405180910390fd5b61109c82868684036117a3565b60019250505092915050565b6000806110b361179b565b90506110c08185856119fa565b600191505092915050565b6110d36120cb565b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611170919061329e565b60405180910390a25050565b6111846120cb565b806006819055507f18ff2fc8464635e4f668567019152095047e34d7a2ab4b97661ba4dc7fd06476816040516111ba9190613508565b60405180910390a150565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6112546120cb565b60405180606001604052808461ffff1661ffff1681526020018361ffff1661ffff1681526020018261ffff1661ffff16815250600c906003611297929190612b38565b50600c6000600381106112ad576112ac613919565b5b601091828204019190066002029054906101000a900461ffff16600a6000600381106112dc576112db613919565b5b601091828204019190066002029054906101000a900461ffff166000611302919061362f565b61130c919061362f565b600e60006003811061132157611320613919565b5b601091828204019190066002026101000a81548161ffff021916908361ffff160217905550600c60016003811061135b5761135a613919565b5b601091828204019190066002029054906101000a900461ffff16600a60016003811061138a57611389613919565b5b601091828204019190066002029054906101000a900461ffff1660006113b0919061362f565b6113ba919061362f565b600e6001600381106113cf576113ce613919565b5b601091828204019190066002026101000a81548161ffff021916908361ffff160217905550600c60026003811061140957611408613919565b5b601091828204019190066002029054906101000a900461ffff16600a60026003811061143857611437613919565b5b601091828204019190066002029054906101000a900461ffff16600061145e919061362f565b611468919061362f565b600e60026003811061147d5761147c613919565b5b601091828204019190066002026101000a81548161ffff021916908361ffff1602179055506101f4600e6000600381106114ba576114b9613919565b5b601091828204019190066002029054906101000a900461ffff1661ffff161115801561151a57506101f4600e6001600381106114f9576114f8613919565b5b601091828204019190066002029054906101000a900461ffff1661ffff1611155b801561155a57506101f4600e60026003811061153957611538613919565b5b601091828204019190066002029054906101000a900461ffff1661ffff1611155b611599576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159090613456565b60405180910390fd5b7f2524ccb75260c9a50c71af1740c212c049a01232ef122061416b51815ec57a188383836040516115cc939291906134d1565b60405180910390a1505050565b6115e16120cb565b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061162d8160016110cb565b7f90632ba5ab1cfd6c41f5aead332503e9536d7bfd7b7f158129f1af2d9fe6180f8160405161165c91906131f9565b60405180910390a150565b6000600854600754600061167b9190613667565b6116859190613667565b905090565b6116926120cb565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611702576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f990613336565b60405180910390fd5b61170b816123c0565b50565b6117166120cb565b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f1c75c7e1dcc8d5c68921dfeb6ac2a2a801ac4e38b295aec5c41e03fdc1ef0c4f8160405161178691906131f9565b60405180910390a150565b505050565b505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611813576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180a90613476565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611883576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187a90613356565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516119619190613508565b60405180910390a3505050565b600061197a84846111c5565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146119f457818110156119e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119dd90613376565b60405180910390fd5b6119f384848484036117a3565b5b50505050565b6000600654611a07611667565b10159050600f60009054906101000a900460ff16158015611a725750601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611a7b5750805b15611c6b576001600f60006101000a81548160ff021916908315150217905550600080611aaa57506000600754115b15611c2f5760006007546000611ac09190613667565b90506000611acd82612486565b600047905060008360075483611ae391906136ee565b611aed91906136bd565b90506000811115611c2257600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051611b3e906131e4565b60006040518083038185875af1925050503d8060008114611b7b576040519150601f19603f3d011682016040523d82523d6000602084013e611b80565b606091505b50508093505082611bc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bbd906133d6565b60405180910390fd5b7fa9f1ac23a06dd71e5c0f0680edbde2396d7725a55b222709d70f55d14f51e0fd600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682604051611c19929190613214565b60405180910390a15b6000600781905550505050505b60006008541115611c4f57611c456008546126d8565b5060006008819055505b6000600f60006101000a81548160ff0219169083151502179055505b600f60009054906101000a900460ff16158015611c885750600082115b8015611ce25750600f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015611d385750600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611d8e5750600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156120ba5760008060039050601160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611e31576000600e600060038110611e0357611e02613919565b5b601091828204019190066002029054906101000a900461ffff1661ffff161115611e2c57600090505b611f0a565b601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611ec8576000600e600160038110611e9a57611e99613919565b5b601091828204019190066002029054906101000a900461ffff1661ffff161115611ec357600190505b611f09565b6000600e600260038110611edf57611ede613919565b5b601091828204019190066002029054906101000a900461ffff1661ffff161115611f0857600290505b5b5b60038160ff1610156120a257612710600e8260ff1660038110611f3057611f2f613919565b5b601091828204019190066002029054906101000a900461ffff1661ffff1685611f5991906136ee565b611f6391906136bd565b91508184611f719190613748565b9350600e8160ff1660038110611f8a57611f89613919565b5b601091828204019190066002029054906101000a900461ffff1661ffff16600a8260ff1660038110611fbf57611fbe613919565b5b601091828204019190066002029054906101000a900461ffff1661ffff1683611fe891906136ee565b611ff291906136bd565b600760008282546120039190613667565b92505081905550600e8160ff166003811061202157612020613919565b5b601091828204019190066002029054906101000a900461ffff1661ffff16600c8260ff166003811061205657612055613919565b5b601091828204019190066002029054906101000a900461ffff1661ffff168361207f91906136ee565b61208991906136bd565b6008600082825461209a9190613667565b925050819055505b60008211156120b7576120b6863084612786565b5b50505b6120c5848484612786565b50505050565b6120d361179b565b73ffffffffffffffffffffffffffffffffffffffff166120f1610f21565b73ffffffffffffffffffffffffffffffffffffffff1614612147576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213e906133f6565b60405180910390fd5b565b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f911aa18ddbbbc33c9b4c704a71bdaa0984b0aa2e82726a7f51e64bad0b0a8455826040516121e6919061329e565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612262576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225990613416565b60405180910390fd5b61226e826000836129fe565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156122f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122eb90613316565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516123a79190613508565b60405180910390a36123bb83600084612a0e565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600267ffffffffffffffff8111156124a3576124a2613948565b5b6040519080825280602002602001820160405280156124d15781602001602082028036833780820191505090505b50905030816000815181106124e9576124e8613919565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561258b57600080fd5b505afa15801561259f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125c39190612c9d565b816001815181106125d7576125d6613919565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061263e30600f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846117a3565b600f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016126a2959493929190613523565b600060405180830381600087803b1580156126bc57600080fd5b505af11580156126d0573d6000803e3d6000fd5b505050505050565b6000806002836126e891906136bd565b9050600081846126f89190613748565b905061270382612486565b6000479050600081111561277a5760008060006127208585612a1e565b9250925092507f3db50c324c27fb39c451e35d4d23abba3e20d96d036e7a40f4adc681c1ce30138383836040516127599392919061357d565b60405180910390a1828561276d9190613748565b9650505050505050612781565b8193505050505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156127f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ed90613436565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612866576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285d906132f6565b60405180910390fd5b6128718383836129fe565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156128f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ee90613396565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516129e59190613508565b60405180910390a36129f8848484612a0e565b50505050565b612a09838383611791565b505050565b612a19838383611796565b505050565b6000806000612a5030600f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16876117a3565b600f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719853088600080600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401612ad99695949392919061323d565b6060604051808303818588803b158015612af257600080fd5b505af1158015612b06573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612b2b9190612e5d565b9250925092509250925092565b826003600f01601090048101928215612bc45791602002820160005b83821115612b9457835183826101000a81548161ffff021916908361ffff1602179055509260200192600201602081600101049283019260010302612b54565b8015612bc25782816101000a81549061ffff0219169055600201602081600101049283019260010302612b94565b505b509050612bd19190612bd5565b5090565b5b80821115612bee576000816000905550600101612bd6565b5090565b600081359050612c0181613d96565b92915050565b600081519050612c1681613d96565b92915050565b600081359050612c2b81613dad565b92915050565b600081359050612c4081613dc4565b92915050565b600081359050612c5581613ddb565b92915050565b600081519050612c6a81613ddb565b92915050565b600060208284031215612c8657612c85613977565b5b6000612c9484828501612bf2565b91505092915050565b600060208284031215612cb357612cb2613977565b5b6000612cc184828501612c07565b91505092915050565b60008060408385031215612ce157612ce0613977565b5b6000612cef85828601612bf2565b9250506020612d0085828601612bf2565b9150509250929050565b600080600060608486031215612d2357612d22613977565b5b6000612d3186828701612bf2565b9350506020612d4286828701612bf2565b9250506040612d5386828701612c46565b9150509250925092565b60008060408385031215612d7457612d73613977565b5b6000612d8285828601612bf2565b9250506020612d9385828601612c1c565b9150509250929050565b60008060408385031215612db457612db3613977565b5b6000612dc285828601612bf2565b9250506020612dd385828601612c46565b9150509250929050565b600080600060608486031215612df657612df5613977565b5b6000612e0486828701612c31565b9350506020612e1586828701612c31565b9250506040612e2686828701612c31565b9150509250925092565b600060208284031215612e4657612e45613977565b5b6000612e5484828501612c46565b91505092915050565b600080600060608486031215612e7657612e75613977565b5b6000612e8486828701612c5b565b9350506020612e9586828701612c5b565b9250506040612ea686828701612c5b565b9150509250925092565b6000612ebc8383612ec8565b60208301905092915050565b612ed18161377c565b82525050565b612ee08161377c565b82525050565b6000612ef1826135df565b612efb8185613602565b9350612f06836135cf565b8060005b83811015612f37578151612f1e8882612eb0565b9750612f29836135f5565b925050600181019050612f0a565b5085935050505092915050565b612f4d8161378e565b82525050565b612f5c816137df565b82525050565b612f6b816137f1565b82525050565b6000612f7c826135ea565b612f86818561361e565b9350612f96818560208601613827565b612f9f8161397c565b840191505092915050565b6000612fb760238361361e565b9150612fc28261398d565b604082019050919050565b6000612fda60228361361e565b9150612fe5826139dc565b604082019050919050565b6000612ffd60268361361e565b915061300882613a2b565b604082019050919050565b600061302060228361361e565b915061302b82613a7a565b604082019050919050565b6000613043601d8361361e565b915061304e82613ac9565b602082019050919050565b600061306660268361361e565b915061307182613af2565b604082019050919050565b600061308960338361361e565b915061309482613b41565b604082019050919050565b60006130ac60308361361e565b91506130b782613b90565b604082019050919050565b60006130cf60208361361e565b91506130da82613bdf565b602082019050919050565b60006130f260218361361e565b91506130fd82613c08565b604082019050919050565b600061311560258361361e565b915061312082613c57565b604082019050919050565b600061313860358361361e565b915061314382613ca6565b604082019050919050565b600061315b600083613613565b915061316682613cf5565b600082019050919050565b600061317e60248361361e565b915061318982613cf8565b604082019050919050565b60006131a160258361361e565b91506131ac82613d47565b604082019050919050565b6131c08161379a565b82525050565b6131cf816137c8565b82525050565b6131de816137d2565b82525050565b60006131ef8261314e565b9150819050919050565b600060208201905061320e6000830184612ed7565b92915050565b60006040820190506132296000830185612ed7565b61323660208301846131c6565b9392505050565b600060c0820190506132526000830189612ed7565b61325f60208301886131c6565b61326c6040830187612f62565b6132796060830186612f62565b6132866080830185612ed7565b61329360a08301846131c6565b979650505050505050565b60006020820190506132b36000830184612f44565b92915050565b60006020820190506132ce6000830184612f53565b92915050565b600060208201905081810360008301526132ee8184612f71565b905092915050565b6000602082019050818103600083015261330f81612faa565b9050919050565b6000602082019050818103600083015261332f81612fcd565b9050919050565b6000602082019050818103600083015261334f81612ff0565b9050919050565b6000602082019050818103600083015261336f81613013565b9050919050565b6000602082019050818103600083015261338f81613036565b9050919050565b600060208201905081810360008301526133af81613059565b9050919050565b600060208201905081810360008301526133cf8161307c565b9050919050565b600060208201905081810360008301526133ef8161309f565b9050919050565b6000602082019050818103600083015261340f816130c2565b9050919050565b6000602082019050818103600083015261342f816130e5565b9050919050565b6000602082019050818103600083015261344f81613108565b9050919050565b6000602082019050818103600083015261346f8161312b565b9050919050565b6000602082019050818103600083015261348f81613171565b9050919050565b600060208201905081810360008301526134af81613194565b9050919050565b60006020820190506134cb60008301846131b7565b92915050565b60006060820190506134e660008301866131b7565b6134f360208301856131b7565b61350060408301846131b7565b949350505050565b600060208201905061351d60008301846131c6565b92915050565b600060a08201905061353860008301886131c6565b6135456020830187612f62565b81810360408301526135578186612ee6565b90506135666060830185612ed7565b61357360808301846131c6565b9695505050505050565b600060608201905061359260008301866131c6565b61359f60208301856131c6565b6135ac60408301846131c6565b949350505050565b60006020820190506135c960008301846131d5565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600061363a8261379a565b91506136458361379a565b92508261ffff0382111561365c5761365b61388c565b5b828201905092915050565b6000613672826137c8565b915061367d836137c8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156136b2576136b161388c565b5b828201905092915050565b60006136c8826137c8565b91506136d3836137c8565b9250826136e3576136e26138bb565b5b828204905092915050565b60006136f9826137c8565b9150613704836137c8565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561373d5761373c61388c565b5b828202905092915050565b6000613753826137c8565b915061375e836137c8565b9250828210156137715761377061388c565b5b828203905092915050565b6000613787826137a8565b9050919050565b60008115159050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006137ea82613803565b9050919050565b60006137fc826137c8565b9050919050565b600061380e82613815565b9050919050565b6000613820826137a8565b9050919050565b60005b8381101561384557808201518184015260208101905061382a565b83811115613854576000848401525b50505050565b6000600282049050600182168061387257607f821691505b60208210811415613886576138856138ea565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f44656661756c74526f757465723a2043616e6e6f742072656d6f766520696e6960008201527f7469616c20706169722066726f6d206c69737400000000000000000000000000602082015250565b7f546178657344656661756c74526f7574657257616c6c6574436f696e3a20466560008201527f65207472616e73666572206572726f7200000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f546178657344656661756c74526f757465723a2043616e6e6f7420657863656560008201527f64206d617820746f74616c20666565206f662035250000000000000000000000602082015250565b50565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b613d9f8161377c565b8114613daa57600080fd5b50565b613db68161378e565b8114613dc157600080fd5b50565b613dcd8161379a565b8114613dd857600080fd5b50565b613de4816137c8565b8114613def57600080fd5b5056fea26469706673582212204443e8dfd1d138869bf77e53c69dc8e5e0fc2db0db547025558d5330d515398664736f6c63430008070033

Deployed Bytecode Sourcemap

28118:8956:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28178:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16648:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19008:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17777:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19789:261;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36316:199;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30191:85;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28335:28;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20459:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28299:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28509:26;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28020:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31214:565;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28449:51;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28573:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17948:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2661:103;;;;;;;;;;;;;:::i;:::-;;28642:41;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28372:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2020:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28614:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16867:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28410:30;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21200:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18281:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33531:197;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30676:181;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18537:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32952:571;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30993:213;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30865:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2919:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32772:172;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28178:28;;;;:::o;16648:100::-;16702:13;16735:5;16728:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16648:100;:::o;19008:201::-;19091:4;19108:13;19124:12;:10;:12::i;:::-;19108:28;;19147:32;19156:5;19163:7;19172:6;19147:8;:32::i;:::-;19197:4;19190:11;;;19008:201;;;;:::o;17777:108::-;17838:7;17865:12;;17858:19;;17777:108;:::o;19789:261::-;19886:4;19903:15;19921:12;:10;:12::i;:::-;19903:30;;19944:38;19960:4;19966:7;19975:6;19944:15;:38::i;:::-;19993:27;20003:4;20009:2;20013:6;19993:9;:27::i;:::-;20038:4;20031:11;;;19789:261;;;;;:::o;36316:199::-;1906:13;:11;:13::i;:::-;36407:6:::1;;;;;;;;;;;36399:14;;:4;:14;;;;36391:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;36482:25;36494:4;36500:6;36482:11;:25::i;:::-;36316:199:::0;;:::o;30191:85::-;30241:5;30266:2;30259:9;;30191:85;:::o;28335:28::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;20459:238::-;20547:4;20564:13;20580:12;:10;:12::i;:::-;20564:28;;20603:64;20612:5;20619:7;20656:10;20628:25;20638:5;20645:7;20628:9;:25::i;:::-;:38;;;;:::i;:::-;20603:8;:64::i;:::-;20685:4;20678:11;;;20459:238;;;;:::o;28299:29::-;;;;;;;;;;;;;:::o;28509:26::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;28020:91::-;28076:27;28082:12;:10;:12::i;:::-;28096:6;28076:5;:27::i;:::-;28020:91;:::o;31214:565::-;1906:13;:11;:13::i;:::-;31322:47:::1;;;;;;;;31337:7;31322:47;;;;;;;;31346:8;31322:47;;;;;;;;31356:12;31322:47;;;;;;::::0;:11:::1;:47;;;;;;;:::i;:::-;;31418:13;31432:1;31418:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;31401:11;31413:1;31401:14;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;31397:1;:18;;;;:::i;:::-;:37;;;;:::i;:::-;31382:9;31392:1;31382:12;;;;;;;:::i;:::-;;;;;;;;;;;;;:52;;;;;;;;;;;;;;;;;;31481:13;31495:1;31481:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;31464:11;31476:1;31464:14;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;31460:1;:18;;;;:::i;:::-;:37;;;;:::i;:::-;31445:9;31455:1;31445:12;;;;;;;:::i;:::-;;;;;;;;;;;;;:52;;;;;;;;;;;;;;;;;;31544:13;31558:1;31544:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;31527:11;31539:1;31527:14;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;31523:1;:18;;;;:::i;:::-;:37;;;;:::i;:::-;31508:9;31518:1;31508:12;;;;;;;:::i;:::-;;;;;;;;;;;;;:52;;;;;;;;;;;;;;;;;;31595:3;31579:9;31589:1;31579:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;:19;;;;:42;;;;;31618:3;31602:9;31612:1;31602:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;:19;;;;31579:42;:65;;;;;31641:3;31625:9;31635:1;31625:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;:19;;;;31579:65;31571:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;31720:51;31739:7;31748:8;31758:12;31720:51;;;;;;;;:::i;:::-;;;;;;;;31214:565:::0;;;:::o;28449:51::-;;;;;;;;;;;;;;;;;;;;;;:::o;28573:34::-;;;;;;;;;;;;;:::o;17948:127::-;18022:7;18049:9;:18;18059:7;18049:18;;;;;;;;;;;;;;;;18042:25;;17948:127;;;:::o;2661:103::-;1906:13;:11;:13::i;:::-;2726:30:::1;2753:1;2726:18;:30::i;:::-;2661:103::o:0;28642:41::-;;;;;;;;;;;;;;;;;;;;;;:::o;28372:31::-;;;;;;;;;;;;;:::o;2020:87::-;2066:7;2093:6;;;;;;;;;;;2086:13;;2020:87;:::o;28614:21::-;;;;;;;;;;;;;:::o;16867:104::-;16923:13;16956:7;16949:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16867:104;:::o;28410:30::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;21200:436::-;21293:4;21310:13;21326:12;:10;:12::i;:::-;21310:28;;21349:24;21376:25;21386:5;21393:7;21376:9;:25::i;:::-;21349:52;;21440:15;21420:16;:35;;21412:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;21533:60;21542:5;21549:7;21577:15;21558:16;:34;21533:8;:60::i;:::-;21624:4;21617:11;;;;21200:436;;;;:::o;18281:193::-;18360:4;18377:13;18393:12;:10;:12::i;:::-;18377:28;;18416;18426:5;18433:2;18437:6;18416:9;:28::i;:::-;18462:4;18455:11;;;18281:193;;;;:::o;33531:197::-;1906:13;:11;:13::i;:::-;33648:10:::1;33618:18;:27;33637:7;33618:27;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;33700:7;33684:36;;;33709:10;33684:36;;;;;;:::i;:::-;;;;;;;;33531:197:::0;;:::o;30676:181::-;1906:13;:11;:13::i;:::-;30773:14:::1;30757:13;:30;;;;30813:36;30834:14;30813:36;;;;;;:::i;:::-;;;;;;;;30676:181:::0;:::o;18537:151::-;18626:7;18653:11;:18;18665:5;18653:18;;;;;;;;;;;;;;;:27;18672:7;18653:27;;;;;;;;;;;;;;;;18646:34;;18537:151;;;;:::o;32952:571::-;1906:13;:11;:13::i;:::-;33062:49:::1;;;;;;;;33079:7;33062:49;;;;;;;;33088:8;33062:49;;;;;;;;33098:12;33062:49;;;;;;::::0;:13:::1;:49;;;;;;;:::i;:::-;;33160:13;33174:1;33160:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;33143:11;33155:1;33143:14;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;33139:1;:18;;;;:::i;:::-;:37;;;;:::i;:::-;33124:9;33134:1;33124:12;;;;;;;:::i;:::-;;;;;;;;;;;;;:52;;;;;;;;;;;;;;;;;;33223:13;33237:1;33223:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;33206:11;33218:1;33206:14;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;33202:1;:18;;;;:::i;:::-;:37;;;;:::i;:::-;33187:9;33197:1;33187:12;;;;;;;:::i;:::-;;;;;;;;;;;;;:52;;;;;;;;;;;;;;;;;;33286:13;33300:1;33286:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;33269:11;33281:1;33269:14;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;33265:1;:18;;;;:::i;:::-;:37;;;;:::i;:::-;33250:9;33260:1;33250:12;;;;;;;:::i;:::-;;;;;;;;;;;;;:52;;;;;;;;;;;;;;;;;;33337:3;33321:9;33331:1;33321:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;:19;;;;:42;;;;;33360:3;33344:9;33354:1;33344:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;:19;;;;33321:42;:65;;;;;33383:3;33367:9;33377:1;33367:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;:19;;;;33321:65;33313:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;33462:53;33483:7;33492:8;33502:12;33462:53;;;;;;;;:::i;:::-;;;;;;;;32952:571:::0;;;:::o;30993:213::-;1906:13;:11;:13::i;:::-;31088:11:::1;31071:14;;:28;;;;;;;;;;;;;;;;;;31112:34;31128:11;31141:4;31112:15;:34::i;:::-;31164;31186:11;31164:34;;;;;;:::i;:::-;;;;;;;;30993:213:::0;:::o;30865:120::-;30911:7;30960:17;;30942:15;;30938:1;:19;;;;:::i;:::-;:39;;;;:::i;:::-;30931:46;;30865:120;:::o;2919:201::-;1906:13;:11;:13::i;:::-;3028:1:::1;3008:22;;:8;:22;;;;3000:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3084:28;3103:8;3084:18;:28::i;:::-;2919:201:::0;:::o;32772:172::-;1906:13;:11;:13::i;:::-;32871:11:::1;32852:16;;:30;;;;;;;;;;;;;;;;;;32900:36;32924:11;32900:36;;;;;;:::i;:::-;;;;;;;;32772:172:::0;:::o;26849:91::-;;;;:::o;27544:90::-;;;;:::o;729:98::-;782:7;809:10;802:17;;729:98;:::o;25193:346::-;25312:1;25295:19;;:5;:19;;;;25287:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25393:1;25374:21;;:7;:21;;;;25366:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25477:6;25447:11;:18;25459:5;25447:18;;;;;;;;;;;;;;;:27;25466:7;25447:27;;;;;;;;;;;;;;;:36;;;;25515:7;25499:32;;25508:5;25499:32;;;25524:6;25499:32;;;;;;:::i;:::-;;;;;;;;25193:346;;;:::o;25830:419::-;25931:24;25958:25;25968:5;25975:7;25958:9;:25::i;:::-;25931:52;;26018:17;25998:16;:37;25994:248;;26080:6;26060:16;:26;;26052:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26164:51;26173:5;26180:7;26208:6;26189:16;:25;26164:8;:51::i;:::-;25994:248;25920:329;25830:419;;;:::o;33736:2272::-;33870:12;33904:13;;33885:15;:13;:15::i;:::-;:32;;33870:47;;33943:9;;;;;;;;;;;33942:10;:29;;;;;33957:8;:14;33966:4;33957:14;;;;;;;;;;;;;;;;;;;;;;;;;33956:15;33942:29;:40;;;;;33975:7;33942:40;33938:1039;;;34011:4;33999:9;;:16;;;;;;;;;;;;;;;;;;34048:5;:28;;;;34075:1;34057:15;;:19;34048:28;34044:736;;;34097:18;34122:15;;34118:1;:19;;;;:::i;:::-;34097:40;;34156:12;34197:30;34216:10;34197:18;:30::i;:::-;34246:21;34270;34246:45;;34328:22;34387:10;34369:15;;34353:13;:31;;;;:::i;:::-;:44;;;;:::i;:::-;34328:69;;34437:1;34420:14;:18;34416:309;;;34492:14;;;;;;;;;;;34476:37;;34521:14;34476:64;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34463:77;;;;;34571:7;34563:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34659:46;34674:14;;;;;;;;;;;34690;34659:46;;;;;;;:::i;:::-;;;;;;;;34416:309;34761:1;34743:15;:19;;;;34078:702;;;;34044:736;34820:1;34800:17;;:21;34796:136;;;34842:34;34858:17;;34842:15;:34::i;:::-;;34915:1;34895:17;:21;;;;34796:136;34960:5;34948:9;;:17;;;;;;;;;;;;;;;;;;33938:1039;34994:9;;;;;;;;;;;34993:10;:24;;;;;35016:1;35007:6;:10;34993:24;:51;;;;;35035:8;;;;;;;;;;;35021:23;;:2;:23;;;;34993:51;:80;;;;;35049:18;:24;35068:4;35049:24;;;;;;;;;;;;;;;;;;;;;;;;;35048:25;34993:80;:107;;;;;35078:18;:22;35097:2;35078:22;;;;;;;;;;;;;;;;;;;;;;;;;35077:23;34993:107;34989:948;;;35117:12;35148;35163:1;35148:16;;35197:8;:14;35206:4;35197:14;;;;;;;;;;;;;;;;;;;;;;;;;35193:242;;;35251:1;35236:9;35246:1;35236:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;:16;;;35232:32;;;35263:1;35254:10;;35232:32;35193:242;;;35303:8;:12;35312:2;35303:12;;;;;;;;;;;;;;;;;;;;;;;;;35299:136;;;35355:1;35340:9;35350:1;35340:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;:16;;;35336:32;;;35367:1;35358:10;;35336:32;35299:136;;;35422:1;35407:9;35417:1;35407:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;:16;;;35403:32;;;35434:1;35425:10;;35403:32;35299:136;35193:242;35477:1;35468:6;:10;;;35464:355;;;35553:5;35533:9;35543:6;35533:17;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;35524:26;;:6;:26;;;;:::i;:::-;:34;;;;:::i;:::-;35517:41;;35587:4;35577:14;;;;;:::i;:::-;;;35676:9;35686:6;35676:17;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;35647:46;;35654:11;35666:6;35654:19;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;35647:26;;:4;:26;;;;:::i;:::-;:46;;;;:::i;:::-;35628:15;;:65;;;;;;;:::i;:::-;;;;;;;;35766:9;35776:6;35766:17;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;35735:48;;35742:13;35756:6;35742:21;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;35735:28;;:4;:28;;;;:::i;:::-;:48;;;;:::i;:::-;35714:17;;:69;;;;;;;:::i;:::-;;;;;;;;35464:355;35846:1;35839:4;:8;35835:91;;;35868:42;35884:4;35898;35905;35868:15;:42::i;:::-;35835:91;35102:835;;34989:948;35957:33;35973:4;35979:2;35983:6;35957:15;:33::i;:::-;33849:2159;33736:2272;;;:::o;2185:132::-;2260:12;:10;:12::i;:::-;2249:23;;:7;:5;:7::i;:::-;:23;;;2241:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2185:132::o;36523:182::-;36607:6;36590:8;:14;36599:4;36590:14;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;36684:4;36668:29;;;36690:6;36668:29;;;;;;:::i;:::-;;;;;;;;36523:182;;:::o;24080:675::-;24183:1;24164:21;;:7;:21;;;;24156:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24236:49;24257:7;24274:1;24278:6;24236:20;:49::i;:::-;24298:22;24323:9;:18;24333:7;24323:18;;;;;;;;;;;;;;;;24298:43;;24378:6;24360:14;:24;;24352:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;24497:6;24480:14;:23;24459:9;:18;24469:7;24459:18;;;;;;;;;;;;;;;:44;;;;24614:6;24598:12;;:22;;;;;;;;;;;24675:1;24649:37;;24658:7;24649:37;;;24679:6;24649:37;;;;;;:::i;:::-;;;;;;;;24699:48;24719:7;24736:1;24740:6;24699:19;:48::i;:::-;24145:610;24080:675;;:::o;3280:191::-;3354:16;3373:6;;;;;;;;;;;3354:25;;3399:8;3390:6;;:17;;;;;;;;;;;;;;;;;;3454:8;3423:40;;3444:8;3423:40;;;;;;;;;;;;3343:128;3280:191;:::o;30288:380::-;30356:21;30394:1;30380:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30356:40;;30425:4;30407;30412:1;30407:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;30451:8;;;;;;;;;;;:13;;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30441:4;30446:1;30441:7;;;;;;;;:::i;:::-;;;;;;;:25;;;;;;;;;;;30479:55;30496:4;30511:8;;;;;;;;;;;30522:11;30479:8;:55::i;:::-;30547:8;;;;;;;;;;;:59;;;30607:11;30620:1;30623:4;30637;30644:15;30547:113;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30345:323;30288:380;:::o;31787:664::-;31850:16;31934:18;31969:1;31955:11;:15;;;;:::i;:::-;31934:36;;31981:17;32015:10;32001:11;:24;;;;:::i;:::-;31981:44;;32038:30;32057:10;32038:18;:30::i;:::-;32081:19;32103:21;32081:43;;32155:1;32141:11;:15;32137:307;;;32174:16;32192:15;32209:14;32227:37;32241:9;32252:11;32227:13;:37::i;:::-;32173:91;;;;;;32286:50;32301:11;32314:10;32326:9;32286:50;;;;;;;;:::i;:::-;;;;;;;;32372:11;32360:9;:23;;;;:::i;:::-;32353:30;;;;;;;;;;32137:307;32423:9;32416:16;;;;;31787:664;;;;:::o;22106:806::-;22219:1;22203:18;;:4;:18;;;;22195:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22296:1;22282:16;;:2;:16;;;;22274:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;22351:38;22372:4;22378:2;22382:6;22351:20;:38::i;:::-;22402:19;22424:9;:15;22434:4;22424:15;;;;;;;;;;;;;;;;22402:37;;22473:6;22458:11;:21;;22450:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;22590:6;22576:11;:20;22558:9;:15;22568:4;22558:15;;;;;;;;;;;;;;;:38;;;;22793:6;22776:9;:13;22786:2;22776:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;22843:2;22828:26;;22837:4;22828:26;;;22847:6;22828:26;;;;;;:::i;:::-;;;;;;;;22867:37;22887:4;22893:2;22897:6;22867:19;:37::i;:::-;22184:728;22106:806;;;:::o;36713:176::-;36837:44;36864:4;36870:2;36874:6;36837:26;:44::i;:::-;36713:176;;;:::o;36897:174::-;37020:43;37046:4;37052:2;37056:6;37020:25;:43::i;:::-;36897:174;;;:::o;32459:305::-;32540:4;32546;32552;32569:55;32586:4;32601:8;;;;;;;;;;;32612:11;32569:8;:55::i;:::-;32644:8;;;;;;;;;;;:24;;;32676:10;32696:4;32703:11;32716:1;32719;32722:16;;;;;;;;;;;32740:15;32644:112;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32637:119;;;;;;32459:305;;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;7:139;;;;:::o;152:143::-;209:5;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;152:143;;;;:::o;301:133::-;344:5;382:6;369:20;360:29;;398:30;422:5;398:30;:::i;:::-;301:133;;;;:::o;440:137::-;485:5;523:6;510:20;501:29;;539:32;565:5;539:32;:::i;:::-;440:137;;;;:::o;583:139::-;629:5;667:6;654:20;645:29;;683:33;710:5;683:33;:::i;:::-;583:139;;;;:::o;728:143::-;785:5;816:6;810:13;801:22;;832:33;859:5;832:33;:::i;:::-;728:143;;;;:::o;877:329::-;936:6;985:2;973:9;964:7;960:23;956:32;953:119;;;991:79;;:::i;:::-;953:119;1111:1;1136:53;1181:7;1172:6;1161:9;1157:22;1136:53;:::i;:::-;1126:63;;1082:117;877:329;;;;:::o;1212:351::-;1282:6;1331:2;1319:9;1310:7;1306:23;1302:32;1299:119;;;1337:79;;:::i;:::-;1299:119;1457:1;1482:64;1538:7;1529:6;1518:9;1514:22;1482:64;:::i;:::-;1472:74;;1428:128;1212:351;;;;:::o;1569:474::-;1637:6;1645;1694:2;1682:9;1673:7;1669:23;1665:32;1662:119;;;1700:79;;:::i;:::-;1662:119;1820:1;1845:53;1890:7;1881:6;1870:9;1866:22;1845:53;:::i;:::-;1835:63;;1791:117;1947:2;1973:53;2018:7;2009:6;1998:9;1994:22;1973:53;:::i;:::-;1963:63;;1918:118;1569:474;;;;;:::o;2049:619::-;2126:6;2134;2142;2191:2;2179:9;2170:7;2166:23;2162:32;2159:119;;;2197:79;;:::i;:::-;2159:119;2317:1;2342:53;2387:7;2378:6;2367:9;2363:22;2342:53;:::i;:::-;2332:63;;2288:117;2444:2;2470:53;2515:7;2506:6;2495:9;2491:22;2470:53;:::i;:::-;2460:63;;2415:118;2572:2;2598:53;2643:7;2634:6;2623:9;2619:22;2598:53;:::i;:::-;2588:63;;2543:118;2049:619;;;;;:::o;2674:468::-;2739:6;2747;2796:2;2784:9;2775:7;2771:23;2767:32;2764:119;;;2802:79;;:::i;:::-;2764:119;2922:1;2947:53;2992:7;2983:6;2972:9;2968:22;2947:53;:::i;:::-;2937:63;;2893:117;3049:2;3075:50;3117:7;3108:6;3097:9;3093:22;3075:50;:::i;:::-;3065:60;;3020:115;2674:468;;;;;:::o;3148:474::-;3216:6;3224;3273:2;3261:9;3252:7;3248:23;3244:32;3241:119;;;3279:79;;:::i;:::-;3241:119;3399:1;3424:53;3469:7;3460:6;3449:9;3445:22;3424:53;:::i;:::-;3414:63;;3370:117;3526:2;3552:53;3597:7;3588:6;3577:9;3573:22;3552:53;:::i;:::-;3542:63;;3497:118;3148:474;;;;;:::o;3628:613::-;3702:6;3710;3718;3767:2;3755:9;3746:7;3742:23;3738:32;3735:119;;;3773:79;;:::i;:::-;3735:119;3893:1;3918:52;3962:7;3953:6;3942:9;3938:22;3918:52;:::i;:::-;3908:62;;3864:116;4019:2;4045:52;4089:7;4080:6;4069:9;4065:22;4045:52;:::i;:::-;4035:62;;3990:117;4146:2;4172:52;4216:7;4207:6;4196:9;4192:22;4172:52;:::i;:::-;4162:62;;4117:117;3628:613;;;;;:::o;4247:329::-;4306:6;4355:2;4343:9;4334:7;4330:23;4326:32;4323:119;;;4361:79;;:::i;:::-;4323:119;4481:1;4506:53;4551:7;4542:6;4531:9;4527:22;4506:53;:::i;:::-;4496:63;;4452:117;4247:329;;;;:::o;4582:663::-;4670:6;4678;4686;4735:2;4723:9;4714:7;4710:23;4706:32;4703:119;;;4741:79;;:::i;:::-;4703:119;4861:1;4886:64;4942:7;4933:6;4922:9;4918:22;4886:64;:::i;:::-;4876:74;;4832:128;4999:2;5025:64;5081:7;5072:6;5061:9;5057:22;5025:64;:::i;:::-;5015:74;;4970:129;5138:2;5164:64;5220:7;5211:6;5200:9;5196:22;5164:64;:::i;:::-;5154:74;;5109:129;4582:663;;;;;:::o;5251:179::-;5320:10;5341:46;5383:3;5375:6;5341:46;:::i;:::-;5419:4;5414:3;5410:14;5396:28;;5251:179;;;;:::o;5436:108::-;5513:24;5531:5;5513:24;:::i;:::-;5508:3;5501:37;5436:108;;:::o;5550:118::-;5637:24;5655:5;5637:24;:::i;:::-;5632:3;5625:37;5550:118;;:::o;5704:732::-;5823:3;5852:54;5900:5;5852:54;:::i;:::-;5922:86;6001:6;5996:3;5922:86;:::i;:::-;5915:93;;6032:56;6082:5;6032:56;:::i;:::-;6111:7;6142:1;6127:284;6152:6;6149:1;6146:13;6127:284;;;6228:6;6222:13;6255:63;6314:3;6299:13;6255:63;:::i;:::-;6248:70;;6341:60;6394:6;6341:60;:::i;:::-;6331:70;;6187:224;6174:1;6171;6167:9;6162:14;;6127:284;;;6131:14;6427:3;6420:10;;5828:608;;;5704:732;;;;:::o;6442:109::-;6523:21;6538:5;6523:21;:::i;:::-;6518:3;6511:34;6442:109;;:::o;6557:183::-;6670:63;6727:5;6670:63;:::i;:::-;6665:3;6658:76;6557:183;;:::o;6746:147::-;6841:45;6880:5;6841:45;:::i;:::-;6836:3;6829:58;6746:147;;:::o;6899:364::-;6987:3;7015:39;7048:5;7015:39;:::i;:::-;7070:71;7134:6;7129:3;7070:71;:::i;:::-;7063:78;;7150:52;7195:6;7190:3;7183:4;7176:5;7172:16;7150:52;:::i;:::-;7227:29;7249:6;7227:29;:::i;:::-;7222:3;7218:39;7211:46;;6991:272;6899:364;;;;:::o;7269:366::-;7411:3;7432:67;7496:2;7491:3;7432:67;:::i;:::-;7425:74;;7508:93;7597:3;7508:93;:::i;:::-;7626:2;7621:3;7617:12;7610:19;;7269:366;;;:::o;7641:::-;7783:3;7804:67;7868:2;7863:3;7804:67;:::i;:::-;7797:74;;7880:93;7969:3;7880:93;:::i;:::-;7998:2;7993:3;7989:12;7982:19;;7641:366;;;:::o;8013:::-;8155:3;8176:67;8240:2;8235:3;8176:67;:::i;:::-;8169:74;;8252:93;8341:3;8252:93;:::i;:::-;8370:2;8365:3;8361:12;8354:19;;8013:366;;;:::o;8385:::-;8527:3;8548:67;8612:2;8607:3;8548:67;:::i;:::-;8541:74;;8624:93;8713:3;8624:93;:::i;:::-;8742:2;8737:3;8733:12;8726:19;;8385:366;;;:::o;8757:::-;8899:3;8920:67;8984:2;8979:3;8920:67;:::i;:::-;8913:74;;8996:93;9085:3;8996:93;:::i;:::-;9114:2;9109:3;9105:12;9098:19;;8757:366;;;:::o;9129:::-;9271:3;9292:67;9356:2;9351:3;9292:67;:::i;:::-;9285:74;;9368:93;9457:3;9368:93;:::i;:::-;9486:2;9481:3;9477:12;9470:19;;9129:366;;;:::o;9501:::-;9643:3;9664:67;9728:2;9723:3;9664:67;:::i;:::-;9657:74;;9740:93;9829:3;9740:93;:::i;:::-;9858:2;9853:3;9849:12;9842:19;;9501:366;;;:::o;9873:::-;10015:3;10036:67;10100:2;10095:3;10036:67;:::i;:::-;10029:74;;10112:93;10201:3;10112:93;:::i;:::-;10230:2;10225:3;10221:12;10214:19;;9873:366;;;:::o;10245:::-;10387:3;10408:67;10472:2;10467:3;10408:67;:::i;:::-;10401:74;;10484:93;10573:3;10484:93;:::i;:::-;10602:2;10597:3;10593:12;10586:19;;10245:366;;;:::o;10617:::-;10759:3;10780:67;10844:2;10839:3;10780:67;:::i;:::-;10773:74;;10856:93;10945:3;10856:93;:::i;:::-;10974:2;10969:3;10965:12;10958:19;;10617:366;;;:::o;10989:::-;11131:3;11152:67;11216:2;11211:3;11152:67;:::i;:::-;11145:74;;11228:93;11317:3;11228:93;:::i;:::-;11346:2;11341:3;11337:12;11330:19;;10989:366;;;:::o;11361:::-;11503:3;11524:67;11588:2;11583:3;11524:67;:::i;:::-;11517:74;;11600:93;11689:3;11600:93;:::i;:::-;11718:2;11713:3;11709:12;11702:19;;11361:366;;;:::o;11733:398::-;11892:3;11913:83;11994:1;11989:3;11913:83;:::i;:::-;11906:90;;12005:93;12094:3;12005:93;:::i;:::-;12123:1;12118:3;12114:11;12107:18;;11733:398;;;:::o;12137:366::-;12279:3;12300:67;12364:2;12359:3;12300:67;:::i;:::-;12293:74;;12376:93;12465:3;12376:93;:::i;:::-;12494:2;12489:3;12485:12;12478:19;;12137:366;;;:::o;12509:::-;12651:3;12672:67;12736:2;12731:3;12672:67;:::i;:::-;12665:74;;12748:93;12837:3;12748:93;:::i;:::-;12866:2;12861:3;12857:12;12850:19;;12509:366;;;:::o;12881:115::-;12966:23;12983:5;12966:23;:::i;:::-;12961:3;12954:36;12881:115;;:::o;13002:118::-;13089:24;13107:5;13089:24;:::i;:::-;13084:3;13077:37;13002:118;;:::o;13126:112::-;13209:22;13225:5;13209:22;:::i;:::-;13204:3;13197:35;13126:112;;:::o;13244:379::-;13428:3;13450:147;13593:3;13450:147;:::i;:::-;13443:154;;13614:3;13607:10;;13244:379;;;:::o;13629:222::-;13722:4;13760:2;13749:9;13745:18;13737:26;;13773:71;13841:1;13830:9;13826:17;13817:6;13773:71;:::i;:::-;13629:222;;;;:::o;13857:332::-;13978:4;14016:2;14005:9;14001:18;13993:26;;14029:71;14097:1;14086:9;14082:17;14073:6;14029:71;:::i;:::-;14110:72;14178:2;14167:9;14163:18;14154:6;14110:72;:::i;:::-;13857:332;;;;;:::o;14195:807::-;14444:4;14482:3;14471:9;14467:19;14459:27;;14496:71;14564:1;14553:9;14549:17;14540:6;14496:71;:::i;:::-;14577:72;14645:2;14634:9;14630:18;14621:6;14577:72;:::i;:::-;14659:80;14735:2;14724:9;14720:18;14711:6;14659:80;:::i;:::-;14749;14825:2;14814:9;14810:18;14801:6;14749:80;:::i;:::-;14839:73;14907:3;14896:9;14892:19;14883:6;14839:73;:::i;:::-;14922;14990:3;14979:9;14975:19;14966:6;14922:73;:::i;:::-;14195:807;;;;;;;;;:::o;15008:210::-;15095:4;15133:2;15122:9;15118:18;15110:26;;15146:65;15208:1;15197:9;15193:17;15184:6;15146:65;:::i;:::-;15008:210;;;;:::o;15224:274::-;15343:4;15381:2;15370:9;15366:18;15358:26;;15394:97;15488:1;15477:9;15473:17;15464:6;15394:97;:::i;:::-;15224:274;;;;:::o;15504:313::-;15617:4;15655:2;15644:9;15640:18;15632:26;;15704:9;15698:4;15694:20;15690:1;15679:9;15675:17;15668:47;15732:78;15805:4;15796:6;15732:78;:::i;:::-;15724:86;;15504:313;;;;:::o;15823:419::-;15989:4;16027:2;16016:9;16012:18;16004:26;;16076:9;16070:4;16066:20;16062:1;16051:9;16047:17;16040:47;16104:131;16230:4;16104:131;:::i;:::-;16096:139;;15823:419;;;:::o;16248:::-;16414:4;16452:2;16441:9;16437:18;16429:26;;16501:9;16495:4;16491:20;16487:1;16476:9;16472:17;16465:47;16529:131;16655:4;16529:131;:::i;:::-;16521:139;;16248:419;;;:::o;16673:::-;16839:4;16877:2;16866:9;16862:18;16854:26;;16926:9;16920:4;16916:20;16912:1;16901:9;16897:17;16890:47;16954:131;17080:4;16954:131;:::i;:::-;16946:139;;16673:419;;;:::o;17098:::-;17264:4;17302:2;17291:9;17287:18;17279:26;;17351:9;17345:4;17341:20;17337:1;17326:9;17322:17;17315:47;17379:131;17505:4;17379:131;:::i;:::-;17371:139;;17098:419;;;:::o;17523:::-;17689:4;17727:2;17716:9;17712:18;17704:26;;17776:9;17770:4;17766:20;17762:1;17751:9;17747:17;17740:47;17804:131;17930:4;17804:131;:::i;:::-;17796:139;;17523:419;;;:::o;17948:::-;18114:4;18152:2;18141:9;18137:18;18129:26;;18201:9;18195:4;18191:20;18187:1;18176:9;18172:17;18165:47;18229:131;18355:4;18229:131;:::i;:::-;18221:139;;17948:419;;;:::o;18373:::-;18539:4;18577:2;18566:9;18562:18;18554:26;;18626:9;18620:4;18616:20;18612:1;18601:9;18597:17;18590:47;18654:131;18780:4;18654:131;:::i;:::-;18646:139;;18373:419;;;:::o;18798:::-;18964:4;19002:2;18991:9;18987:18;18979:26;;19051:9;19045:4;19041:20;19037:1;19026:9;19022:17;19015:47;19079:131;19205:4;19079:131;:::i;:::-;19071:139;;18798:419;;;:::o;19223:::-;19389:4;19427:2;19416:9;19412:18;19404:26;;19476:9;19470:4;19466:20;19462:1;19451:9;19447:17;19440:47;19504:131;19630:4;19504:131;:::i;:::-;19496:139;;19223:419;;;:::o;19648:::-;19814:4;19852:2;19841:9;19837:18;19829:26;;19901:9;19895:4;19891:20;19887:1;19876:9;19872:17;19865:47;19929:131;20055:4;19929:131;:::i;:::-;19921:139;;19648:419;;;:::o;20073:::-;20239:4;20277:2;20266:9;20262:18;20254:26;;20326:9;20320:4;20316:20;20312:1;20301:9;20297:17;20290:47;20354:131;20480:4;20354:131;:::i;:::-;20346:139;;20073:419;;;:::o;20498:::-;20664:4;20702:2;20691:9;20687:18;20679:26;;20751:9;20745:4;20741:20;20737:1;20726:9;20722:17;20715:47;20779:131;20905:4;20779:131;:::i;:::-;20771:139;;20498:419;;;:::o;20923:::-;21089:4;21127:2;21116:9;21112:18;21104:26;;21176:9;21170:4;21166:20;21162:1;21151:9;21147:17;21140:47;21204:131;21330:4;21204:131;:::i;:::-;21196:139;;20923:419;;;:::o;21348:::-;21514:4;21552:2;21541:9;21537:18;21529:26;;21601:9;21595:4;21591:20;21587:1;21576:9;21572:17;21565:47;21629:131;21755:4;21629:131;:::i;:::-;21621:139;;21348:419;;;:::o;21773:218::-;21864:4;21902:2;21891:9;21887:18;21879:26;;21915:69;21981:1;21970:9;21966:17;21957:6;21915:69;:::i;:::-;21773:218;;;;:::o;21997:430::-;22140:4;22178:2;22167:9;22163:18;22155:26;;22191:69;22257:1;22246:9;22242:17;22233:6;22191:69;:::i;:::-;22270:70;22336:2;22325:9;22321:18;22312:6;22270:70;:::i;:::-;22350;22416:2;22405:9;22401:18;22392:6;22350:70;:::i;:::-;21997:430;;;;;;:::o;22433:222::-;22526:4;22564:2;22553:9;22549:18;22541:26;;22577:71;22645:1;22634:9;22630:17;22621:6;22577:71;:::i;:::-;22433:222;;;;:::o;22661:831::-;22924:4;22962:3;22951:9;22947:19;22939:27;;22976:71;23044:1;23033:9;23029:17;23020:6;22976:71;:::i;:::-;23057:80;23133:2;23122:9;23118:18;23109:6;23057:80;:::i;:::-;23184:9;23178:4;23174:20;23169:2;23158:9;23154:18;23147:48;23212:108;23315:4;23306:6;23212:108;:::i;:::-;23204:116;;23330:72;23398:2;23387:9;23383:18;23374:6;23330:72;:::i;:::-;23412:73;23480:3;23469:9;23465:19;23456:6;23412:73;:::i;:::-;22661:831;;;;;;;;:::o;23498:442::-;23647:4;23685:2;23674:9;23670:18;23662:26;;23698:71;23766:1;23755:9;23751:17;23742:6;23698:71;:::i;:::-;23779:72;23847:2;23836:9;23832:18;23823:6;23779:72;:::i;:::-;23861;23929:2;23918:9;23914:18;23905:6;23861:72;:::i;:::-;23498:442;;;;;;:::o;23946:214::-;24035:4;24073:2;24062:9;24058:18;24050:26;;24086:67;24150:1;24139:9;24135:17;24126:6;24086:67;:::i;:::-;23946:214;;;;:::o;24247:132::-;24314:4;24337:3;24329:11;;24367:4;24362:3;24358:14;24350:22;;24247:132;;;:::o;24385:114::-;24452:6;24486:5;24480:12;24470:22;;24385:114;;;:::o;24505:99::-;24557:6;24591:5;24585:12;24575:22;;24505:99;;;:::o;24610:113::-;24680:4;24712;24707:3;24703:14;24695:22;;24610:113;;;:::o;24729:184::-;24828:11;24862:6;24857:3;24850:19;24902:4;24897:3;24893:14;24878:29;;24729:184;;;;:::o;24919:147::-;25020:11;25057:3;25042:18;;24919:147;;;;:::o;25072:169::-;25156:11;25190:6;25185:3;25178:19;25230:4;25225:3;25221:14;25206:29;;25072:169;;;;:::o;25247:242::-;25286:3;25305:19;25322:1;25305:19;:::i;:::-;25300:24;;25338:19;25355:1;25338:19;:::i;:::-;25333:24;;25431:1;25423:6;25419:14;25416:1;25413:21;25410:47;;;25437:18;;:::i;:::-;25410:47;25481:1;25478;25474:9;25467:16;;25247:242;;;;:::o;25495:305::-;25535:3;25554:20;25572:1;25554:20;:::i;:::-;25549:25;;25588:20;25606:1;25588:20;:::i;:::-;25583:25;;25742:1;25674:66;25670:74;25667:1;25664:81;25661:107;;;25748:18;;:::i;:::-;25661:107;25792:1;25789;25785:9;25778:16;;25495:305;;;;:::o;25806:185::-;25846:1;25863:20;25881:1;25863:20;:::i;:::-;25858:25;;25897:20;25915:1;25897:20;:::i;:::-;25892:25;;25936:1;25926:35;;25941:18;;:::i;:::-;25926:35;25983:1;25980;25976:9;25971:14;;25806:185;;;;:::o;25997:348::-;26037:7;26060:20;26078:1;26060:20;:::i;:::-;26055:25;;26094:20;26112:1;26094:20;:::i;:::-;26089:25;;26282:1;26214:66;26210:74;26207:1;26204:81;26199:1;26192:9;26185:17;26181:105;26178:131;;;26289:18;;:::i;:::-;26178:131;26337:1;26334;26330:9;26319:20;;25997:348;;;;:::o;26351:191::-;26391:4;26411:20;26429:1;26411:20;:::i;:::-;26406:25;;26445:20;26463:1;26445:20;:::i;:::-;26440:25;;26484:1;26481;26478:8;26475:34;;;26489:18;;:::i;:::-;26475:34;26534:1;26531;26527:9;26519:17;;26351:191;;;;:::o;26548:96::-;26585:7;26614:24;26632:5;26614:24;:::i;:::-;26603:35;;26548:96;;;:::o;26650:90::-;26684:7;26727:5;26720:13;26713:21;26702:32;;26650:90;;;:::o;26746:89::-;26782:7;26822:6;26815:5;26811:18;26800:29;;26746:89;;;:::o;26841:126::-;26878:7;26918:42;26911:5;26907:54;26896:65;;26841:126;;;:::o;26973:77::-;27010:7;27039:5;27028:16;;26973:77;;;:::o;27056:86::-;27091:7;27131:4;27124:5;27120:16;27109:27;;27056:86;;;:::o;27148:152::-;27224:9;27257:37;27288:5;27257:37;:::i;:::-;27244:50;;27148:152;;;:::o;27306:121::-;27364:9;27397:24;27415:5;27397:24;:::i;:::-;27384:37;;27306:121;;;:::o;27433:126::-;27483:9;27516:37;27547:5;27516:37;:::i;:::-;27503:50;;27433:126;;;:::o;27565:113::-;27615:9;27648:24;27666:5;27648:24;:::i;:::-;27635:37;;27565:113;;;:::o;27684:307::-;27752:1;27762:113;27776:6;27773:1;27770:13;27762:113;;;27861:1;27856:3;27852:11;27846:18;27842:1;27837:3;27833:11;27826:39;27798:2;27795:1;27791:10;27786:15;;27762:113;;;27893:6;27890:1;27887:13;27884:101;;;27973:1;27964:6;27959:3;27955:16;27948:27;27884:101;27733:258;27684:307;;;:::o;27997:320::-;28041:6;28078:1;28072:4;28068:12;28058:22;;28125:1;28119:4;28115:12;28146:18;28136:81;;28202:4;28194:6;28190:17;28180:27;;28136:81;28264:2;28256:6;28253:14;28233:18;28230:38;28227:84;;;28283:18;;:::i;:::-;28227:84;28048:269;27997:320;;;:::o;28323:180::-;28371:77;28368:1;28361:88;28468:4;28465:1;28458:15;28492:4;28489:1;28482:15;28509:180;28557:77;28554:1;28547:88;28654:4;28651:1;28644:15;28678:4;28675:1;28668:15;28695:180;28743:77;28740:1;28733:88;28840:4;28837:1;28830:15;28864:4;28861:1;28854:15;28881:180;28929:77;28926:1;28919:88;29026:4;29023:1;29016:15;29050:4;29047:1;29040:15;29067:180;29115:77;29112:1;29105:88;29212:4;29209:1;29202:15;29236:4;29233:1;29226:15;29376:117;29485:1;29482;29475:12;29499:102;29540:6;29591:2;29587:7;29582:2;29575:5;29571:14;29567:28;29557:38;;29499:102;;;:::o;29607:222::-;29747:34;29743:1;29735:6;29731:14;29724:58;29816:5;29811:2;29803:6;29799:15;29792:30;29607:222;:::o;29835:221::-;29975:34;29971:1;29963:6;29959:14;29952:58;30044:4;30039:2;30031:6;30027:15;30020:29;29835:221;:::o;30062:225::-;30202:34;30198:1;30190:6;30186:14;30179:58;30271:8;30266:2;30258:6;30254:15;30247:33;30062:225;:::o;30293:221::-;30433:34;30429:1;30421:6;30417:14;30410:58;30502:4;30497:2;30489:6;30485:15;30478:29;30293:221;:::o;30520:179::-;30660:31;30656:1;30648:6;30644:14;30637:55;30520:179;:::o;30705:225::-;30845:34;30841:1;30833:6;30829:14;30822:58;30914:8;30909:2;30901:6;30897:15;30890:33;30705:225;:::o;30936:238::-;31076:34;31072:1;31064:6;31060:14;31053:58;31145:21;31140:2;31132:6;31128:15;31121:46;30936:238;:::o;31180:235::-;31320:34;31316:1;31308:6;31304:14;31297:58;31389:18;31384:2;31376:6;31372:15;31365:43;31180:235;:::o;31421:182::-;31561:34;31557:1;31549:6;31545:14;31538:58;31421:182;:::o;31609:220::-;31749:34;31745:1;31737:6;31733:14;31726:58;31818:3;31813:2;31805:6;31801:15;31794:28;31609:220;:::o;31835:224::-;31975:34;31971:1;31963:6;31959:14;31952:58;32044:7;32039:2;32031:6;32027:15;32020:32;31835:224;:::o;32065:240::-;32205:34;32201:1;32193:6;32189:14;32182:58;32274:23;32269:2;32261:6;32257:15;32250:48;32065:240;:::o;32311:114::-;;:::o;32431:223::-;32571:34;32567:1;32559:6;32555:14;32548:58;32640:6;32635:2;32627:6;32623:15;32616:31;32431:223;:::o;32660:224::-;32800:34;32796:1;32788:6;32784:14;32777:58;32869:7;32864:2;32856:6;32852:15;32845:32;32660:224;:::o;32890:122::-;32963:24;32981:5;32963:24;:::i;:::-;32956:5;32953:35;32943:63;;33002:1;32999;32992:12;32943:63;32890:122;:::o;33018:116::-;33088:21;33103:5;33088:21;:::i;:::-;33081:5;33078:32;33068:60;;33124:1;33121;33114:12;33068:60;33018:116;:::o;33140:120::-;33212:23;33229:5;33212:23;:::i;:::-;33205:5;33202:34;33192:62;;33250:1;33247;33240:12;33192:62;33140:120;:::o;33266:122::-;33339:24;33357:5;33339:24;:::i;:::-;33332:5;33329:35;33319:63;;33378:1;33375;33368:12;33319:63;33266:122;:::o

Swarm Source

ipfs://4443e8dfd1d138869bf77e53c69dc8e5e0fc2db0db547025558d5330d5153986
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.