ETH Price: $2,520.75 (-0.17%)

Token

Captain Elon (cELON)
 

Overview

Max Total Supply

970,644.484369 cELON

Holders

9

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 6 Decimals)

Balance
0.000001 cELON

Value
$0.00
0xd873d47495e2c9f8b17580cc322fa4a8057cafae
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:
CaptainElon

Compiler Version
v0.8.16+commit.07a7930e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-12-09
*/

/*
 $cELON - Captain Elon
  
 https://t.me/CaptainElonEth

🔥 Hyper deflationary 

🔥 Buy and Sell taxes are the following (post Trading Enabled): 1% Buy (burn) tax / 1% Sell (burn) tax

🔥 Burns $cELON on EVERY transaction

🔥 The burn will be a true burn and actually remove the tokens from the total tokens, reducing the total supply with every transaction. 


*/
pragma solidity 0.8.16;

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

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

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

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

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

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

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

    event Mint(address indexed sender, uint amount0, uint amount1);
    event 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 IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

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

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

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

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

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

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

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

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

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

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

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

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

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

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

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


contract ERC20 is Context, IERC20, IERC20Metadata {
    using SafeMath for uint256;

    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * 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 value {ERC20} uses, unless this function is
     * 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 6;
    }

    /**
     * @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:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, 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}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), 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}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    /**
     * @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) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(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) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is 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:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

    /** @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 = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(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);

        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(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 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 to 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 {}
}

library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

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

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    
    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = 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");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}



library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

    /**
     * @dev Multiplies two int256 variables and fails on overflow.
     */
    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;

        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

    /**
     * @dev Division of two int256 variables and fails on overflow.
     */
    function div(int256 a, int256 b) internal pure returns (int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);

        // Solidity already throws when dividing by 0.
        return a / b;
    }

    /**
     * @dev Subtracts two int256 variables and fails on overflow.
     */
    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }

    /**
     * @dev Adds two int256 variables and fails on overflow.
     */
    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }

    /**
     * @dev Converts to absolute value, and fails on overflow.
     */
    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }


    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}

library SafeMathUint {
  function toInt256Safe(uint256 a) internal pure returns (int256) {
    int256 b = int256(a);
    require(b >= 0);
    return b;
  }
}


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

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

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

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

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

pragma solidity 0.8.16;

contract CaptainElon is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant deadAddress = address(0xdead);

    bool private swapping;
        
    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;
    
    uint256 public supply;

    address public devWallet;
    
    bool public limitsInEffect = true;
    bool public tradingActive = true;
    bool public swapEnabled = true;

    mapping(address => uint256) private _holderLastTransferTimestamp;

    bool public transferDelayEnabled = false;

    uint256 public buyBurnFee;
    uint256 public buyDevFee;
    uint256 public buyTotalFees;

    uint256 public sellBurnFee;
    uint256 public sellDevFee;
    uint256 public sellTotalFees;   
    
    uint256 public tokensForBurn;
    uint256 public tokensForDev;

    uint256 public walletDigit;
    uint256 public transDigit;
    uint256 public delayDigit;
    
    /******************/

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

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

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

    event ExcludeFromFees(address indexed account, bool isExcluded);

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

    constructor() ERC20("Captain Elon", "cELON") {
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;
        
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
        
        uint256 _buyBurnFee = 1;
        uint256 _buyDevFee = 0;

        uint256 _sellBurnFee = 1;
        uint256 _sellDevFee = 0;
        
        uint256 totalSupply = 1000000 * 1e6;
        supply += totalSupply;
        
        walletDigit = 15;
        transDigit = 15;
        delayDigit = 0;

        maxTransactionAmount = 1000000  * transDigit / 1000;
        swapTokensAtAmount = 1000000 * 5 / 10000; // 0.05% swap wallet;
        maxWallet = 1000000 * walletDigit / 1000;

        buyBurnFee = _buyBurnFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyBurnFee + buyDevFee;
        
        sellBurnFee = _sellBurnFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellBurnFee + sellDevFee;
        
        devWallet = 0xe66904B4f88Fc215AeC7f95d09bd72A228E15F4e;

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

        _approve(owner(), address(uniswapV2Router), totalSupply);
        _mint(msg.sender, totalSupply);

    }

    receive() external payable {

  	}

    function enableTrading() external onlyOwner {
        buyBurnFee = 1;
        buyDevFee = 0;
        buyTotalFees = buyBurnFee + buyDevFee;

        sellBurnFee = 1;
        sellDevFee = 0;
        sellTotalFees = sellBurnFee + sellDevFee;

        delayDigit = 0;
    }
    
    function updateTransDigit(uint256 newNum) external onlyOwner {
        require(newNum >= 1);
        transDigit = newNum;
        updateLimits();
    }

    function updateWalletDigit(uint256 newNum) external onlyOwner {
        require(newNum >= 1);
        walletDigit = newNum;
        updateLimits();
    }

    function updateDelayDigit(uint256 newNum) external onlyOwner{
        delayDigit = newNum;
    }
    
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }
    
    function updateBuyFees(uint256 _burnFee, uint256 _devFee) external onlyOwner {
        buyBurnFee = _burnFee;
        buyDevFee = _devFee;
        buyTotalFees = buyBurnFee + buyDevFee;
    }
    
    function updateSellFees(uint256 _burnFee, uint256 _devFee) external onlyOwner {
        sellBurnFee = _burnFee;
        sellDevFee = _devFee;
        sellTotalFees = sellBurnFee + sellDevFee;
    }

    function updateDevWallet(address newWallet) external onlyOwner {
        devWallet = newWallet;
    }

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

    function updateLimits() private {
        maxTransactionAmount = supply * transDigit / 100;
        swapTokensAtAmount = supply * 5 / 10000; // 0.05% swap wallet;
        maxWallet = supply * walletDigit / 100;
    }

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

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }
    
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        
         if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
        
        if(limitsInEffect){
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ){
                if(!tradingActive){
                    require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
                }

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.  
                if (transferDelayEnabled){
                    if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)){
                        require(_holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed.");
                        _holderLastTransferTimestamp[tx.origin] = block.number + delayDigit;
                    }
                }
                 
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                        require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
                        require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
                
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                        require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
                }
                else if(!_isExcludedMaxTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
            }
        }
        uint256 contractTokenBalance = balanceOf(address(this));
        
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

            swapping = false;
        }
        
        bool takeFee = !swapping;

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

        if(takeFee){
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                fees = amount.mul(sellTotalFees).div(100);
                tokensForBurn += fees * sellBurnFee / sellTotalFees;
                tokensForDev += fees * sellDevFee / sellTotalFees;
            }

            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {

        	    fees = amount.mul(buyTotalFees).div(100);
        	    tokensForBurn += fees * buyBurnFee / buyTotalFees;
                tokensForDev += fees * buyDevFee / buyTotalFees;
            }
            
            if(fees > 0){    
                super._transfer(from, address(this), fees);
                if (tokensForBurn > 0) {
                    _burn(address(this), tokensForBurn);
                    supply = totalSupply();
                    updateLimits();
                    tokensForBurn = 0;
                }
            }
        	
        	amount -= fees;
        }

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

    function swapTokensForEth(uint256 tokenAmount) private {

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

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

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
        
    }
    
    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        bool success;
        
        if(contractBalance == 0) {return;}

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

        swapTokensForEth(contractBalance); 
        
        tokensForDev = 0;

        (success,) = address(devWallet).call{value: address(this).balance}("");
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"delayDigit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"supply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"transDigit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_burnFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateDelayDigit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_burnFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateTransDigit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateWalletDigit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"walletDigit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526001600a60146101000a81548160ff0219169083151502179055506001600a60156101000a81548160ff0219169083151502179055506001600a60166101000a81548160ff0219169083151502179055506000600c60006101000a81548160ff0219169083151502179055503480156200007d57600080fd5b506040518060400160405280600c81526020017f4361707461696e20456c6f6e00000000000000000000000000000000000000008152506040518060400160405280600581526020017f63454c4f4e0000000000000000000000000000000000000000000000000000008152508160039081620000fb919062000f7c565b5080600490816200010d919062000f7c565b505050600062000122620005fe60201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001ed8160016200060660201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200026d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002939190620010cd565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002fb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003219190620010cd565b6040518363ffffffff1660e01b81526004016200034092919062001110565b6020604051808303816000875af115801562000360573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003869190620010cd565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620003ce60a05160016200060660201b60201c565b620003e360a05160016200070360201b60201c565b6000600190506000806001905060008064e8d4a51000905080600960008282546200040f91906200116c565b92505081905550600f601581905550600f60168190555060006017819055506103e8601654620f4240620004449190620011a7565b62000450919062001237565b6006819055506101f46007819055506103e8601554620f4240620004759190620011a7565b62000481919062001237565b60088190555084600d8190555083600e81905550600e54600d54620004a791906200116c565b600f819055508260108190555081601181905550601154601054620004cd91906200116c565b60128190555073e66904b4f88fc215aec7f95d09bd72a228e15f4e600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200054a6200053c620007a460201b60201c565b6001620007ce60201b60201c565b6200055d306001620007ce60201b60201c565b6200057261dead6001620007ce60201b60201c565b6200059462000586620007a460201b60201c565b60016200060660201b60201c565b620005a73060016200060660201b60201c565b620005bc61dead60016200060660201b60201c565b620005e0620005d0620007a460201b60201c565b608051836200091b60201b60201c565b620005f2338262000aec60201b60201c565b5050505050506200156e565b600033905090565b62000616620005fe60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620006a8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200069f90620012d0565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620007de620005fe60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000870576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200086790620012d0565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516200090f91906200130f565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036200098d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200098490620013a2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620009ff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009f6906200143a565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405162000adf91906200146d565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000b5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b5590620014da565b60405180910390fd5b62000b726000838362000c9a60201b60201c565b62000b8e8160025462000c9f60201b62001e041790919060201c565b60028190555062000bec816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000c9f60201b62001e041790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000c8e91906200146d565b60405180910390a35050565b505050565b600080828462000cb091906200116c565b90508381101562000cf8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000cef906200154c565b60405180910390fd5b8091505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000d8457607f821691505b60208210810362000d9a5762000d9962000d3c565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000e047fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000dc5565b62000e10868362000dc5565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000e5d62000e5762000e518462000e28565b62000e32565b62000e28565b9050919050565b6000819050919050565b62000e798362000e3c565b62000e9162000e888262000e64565b84845462000dd2565b825550505050565b600090565b62000ea862000e99565b62000eb581848462000e6e565b505050565b5b8181101562000edd5762000ed160008262000e9e565b60018101905062000ebb565b5050565b601f82111562000f2c5762000ef68162000da0565b62000f018462000db5565b8101602085101562000f11578190505b62000f2962000f208562000db5565b83018262000eba565b50505b505050565b600082821c905092915050565b600062000f516000198460080262000f31565b1980831691505092915050565b600062000f6c838362000f3e565b9150826002028217905092915050565b62000f878262000d02565b67ffffffffffffffff81111562000fa35762000fa262000d0d565b5b62000faf825462000d6b565b62000fbc82828562000ee1565b600060209050601f83116001811462000ff4576000841562000fdf578287015190505b62000feb858262000f5e565b8655506200105b565b601f198416620010048662000da0565b60005b828110156200102e5784890151825560018201915060208501945060208101905062001007565b868310156200104e57848901516200104a601f89168262000f3e565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620010958262001068565b9050919050565b620010a78162001088565b8114620010b357600080fd5b50565b600081519050620010c7816200109c565b92915050565b600060208284031215620010e657620010e562001063565b5b6000620010f684828501620010b6565b91505092915050565b6200110a8162001088565b82525050565b6000604082019050620011276000830185620010ff565b620011366020830184620010ff565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620011798262000e28565b9150620011868362000e28565b9250828201905080821115620011a157620011a06200113d565b5b92915050565b6000620011b48262000e28565b9150620011c18362000e28565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620011fd57620011fc6200113d565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620012448262000e28565b9150620012518362000e28565b92508262001264576200126362001208565b5b828204905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620012b86020836200126f565b9150620012c58262001280565b602082019050919050565b60006020820190508181036000830152620012eb81620012a9565b9050919050565b60008115159050919050565b6200130981620012f2565b82525050565b6000602082019050620013266000830184620012fe565b92915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006200138a6024836200126f565b915062001397826200132c565b604082019050919050565b60006020820190508181036000830152620013bd816200137b565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000620014226022836200126f565b91506200142f82620013c4565b604082019050919050565b60006020820190508181036000830152620014558162001413565b9050919050565b620014678162000e28565b82525050565b60006020820190506200148460008301846200145c565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620014c2601f836200126f565b9150620014cf826200148a565b602082019050919050565b60006020820190508181036000830152620014f581620014b3565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062001534601b836200126f565b91506200154182620014fc565b602082019050919050565b60006020820190508181036000830152620015678162001525565b9050919050565b60805160a051614820620015be60003960008181611166015281816117cf0152612450015260008181610e05015281816123f8015281816134a50152818161358601526135ad01526148206000f3fe6080604052600436106102cd5760003560e01c80638a8c523c11610175578063adb873bd116100dc578063d85ba06311610095578063e71dc3f51161006f578063e71dc3f514610b0d578063f203acb614610b38578063f2fde38b14610b63578063f8b45b0514610b8c576102d4565b8063d85ba06314610a7a578063dd62ed3e14610aa5578063e2f4560514610ae2576102d4565b8063adb873bd14610968578063b62496f514610993578063bbc0c742146109d0578063c0246668146109fb578063c876d0b914610a24578063c8c8ebe414610a4f576102d4565b80639c3b4fdc1161012e5780639c3b4fdc146108445780639fccce321461086f5780639fdc48241461089a578063a0d82dc5146108c3578063a457c2d7146108ee578063a9059cbb1461092b576102d4565b80638a8c523c146107585780638da5cb5b1461076f5780638ea5220f1461079a57806395d89b41146107c5578063975d71e2146107f05780639a7a23d61461081b576102d4565b806327c8f8351161023457806366ca9b83116101ed57806370a08231116101c757806370a08231146106b0578063715018a6146106ed5780637571336a146107045780637ab439831461072d576102d4565b806366ca9b83146106315780636a486a8e1461065a5780636ddd171314610685576102d4565b806327c8f8351461050b578063313ce56714610536578063395093511461056157806349bd5a5e1461059e5780634a62bb65146105c95780634fbee193146105f4576102d4565b80631694505e116102865780631694505e146103fb57806318160ddd146104265780631816467f146104515780631d7778561461047a5780631fa07da5146104a557806323b872dd146104ce576102d4565b806302dbd8f8146102d9578063047fc9aa1461030257806306fdde031461032d578063095ea7b31461035857806310d5de5314610395578063150de0bb146103d2576102d4565b366102d457005b600080fd5b3480156102e557600080fd5b5061030060048036038101906102fb919061372b565b610bb7565b005b34801561030e57600080fd5b50610317610c76565b604051610324919061377a565b60405180910390f35b34801561033957600080fd5b50610342610c7c565b60405161034f9190613825565b60405180910390f35b34801561036457600080fd5b5061037f600480360381019061037a91906138a5565b610d0e565b60405161038c9190613900565b60405180910390f35b3480156103a157600080fd5b506103bc60048036038101906103b7919061391b565b610d2c565b6040516103c99190613900565b60405180910390f35b3480156103de57600080fd5b506103f960048036038101906103f49190613948565b610d4c565b005b34801561040757600080fd5b50610410610e03565b60405161041d91906139d4565b60405180910390f35b34801561043257600080fd5b5061043b610e27565b604051610448919061377a565b60405180910390f35b34801561045d57600080fd5b506104786004803603810190610473919061391b565b610e31565b005b34801561048657600080fd5b5061048f610f0c565b60405161049c919061377a565b60405180910390f35b3480156104b157600080fd5b506104cc60048036038101906104c79190613948565b610f12565b005b3480156104da57600080fd5b506104f560048036038101906104f091906139ef565b610fc9565b6040516105029190613900565b60405180910390f35b34801561051757600080fd5b506105206110a2565b60405161052d9190613a51565b60405180910390f35b34801561054257600080fd5b5061054b6110a8565b6040516105589190613a88565b60405180910390f35b34801561056d57600080fd5b50610588600480360381019061058391906138a5565b6110b1565b6040516105959190613900565b60405180910390f35b3480156105aa57600080fd5b506105b3611164565b6040516105c09190613a51565b60405180910390f35b3480156105d557600080fd5b506105de611188565b6040516105eb9190613900565b60405180910390f35b34801561060057600080fd5b5061061b6004803603810190610616919061391b565b61119b565b6040516106289190613900565b60405180910390f35b34801561063d57600080fd5b506106586004803603810190610653919061372b565b6111f1565b005b34801561066657600080fd5b5061066f6112b0565b60405161067c919061377a565b60405180910390f35b34801561069157600080fd5b5061069a6112b6565b6040516106a79190613900565b60405180910390f35b3480156106bc57600080fd5b506106d760048036038101906106d2919061391b565b6112c9565b6040516106e4919061377a565b60405180910390f35b3480156106f957600080fd5b50610702611311565b005b34801561071057600080fd5b5061072b60048036038101906107269190613acf565b611469565b005b34801561073957600080fd5b5061074261155b565b60405161074f919061377a565b60405180910390f35b34801561076457600080fd5b5061076d611561565b005b34801561077b57600080fd5b5061078461164e565b6040516107919190613a51565b60405180910390f35b3480156107a657600080fd5b506107af611678565b6040516107bc9190613a51565b60405180910390f35b3480156107d157600080fd5b506107da61169e565b6040516107e79190613825565b60405180910390f35b3480156107fc57600080fd5b50610805611730565b604051610812919061377a565b60405180910390f35b34801561082757600080fd5b50610842600480360381019061083d9190613acf565b611736565b005b34801561085057600080fd5b50610859611869565b604051610866919061377a565b60405180910390f35b34801561087b57600080fd5b5061088461186f565b604051610891919061377a565b60405180910390f35b3480156108a657600080fd5b506108c160048036038101906108bc9190613948565b611875565b005b3480156108cf57600080fd5b506108d8611916565b6040516108e5919061377a565b60405180910390f35b3480156108fa57600080fd5b50610915600480360381019061091091906138a5565b61191c565b6040516109229190613900565b60405180910390f35b34801561093757600080fd5b50610952600480360381019061094d91906138a5565b6119e9565b60405161095f9190613900565b60405180910390f35b34801561097457600080fd5b5061097d611a07565b60405161098a919061377a565b60405180910390f35b34801561099f57600080fd5b506109ba60048036038101906109b5919061391b565b611a0d565b6040516109c79190613900565b60405180910390f35b3480156109dc57600080fd5b506109e5611a2d565b6040516109f29190613900565b60405180910390f35b348015610a0757600080fd5b50610a226004803603810190610a1d9190613acf565b611a40565b005b348015610a3057600080fd5b50610a39611b80565b604051610a469190613900565b60405180910390f35b348015610a5b57600080fd5b50610a64611b93565b604051610a71919061377a565b60405180910390f35b348015610a8657600080fd5b50610a8f611b99565b604051610a9c919061377a565b60405180910390f35b348015610ab157600080fd5b50610acc6004803603810190610ac79190613b0f565b611b9f565b604051610ad9919061377a565b60405180910390f35b348015610aee57600080fd5b50610af7611c26565b604051610b04919061377a565b60405180910390f35b348015610b1957600080fd5b50610b22611c2c565b604051610b2f919061377a565b60405180910390f35b348015610b4457600080fd5b50610b4d611c32565b604051610b5a919061377a565b60405180910390f35b348015610b6f57600080fd5b50610b8a6004803603810190610b85919061391b565b611c38565b005b348015610b9857600080fd5b50610ba1611dfe565b604051610bae919061377a565b60405180910390f35b610bbf611e62565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4590613b9b565b60405180910390fd5b8160108190555080601181905550601154601054610c6c9190613bea565b6012819055505050565b60095481565b606060038054610c8b90613c4d565b80601f0160208091040260200160405190810160405280929190818152602001828054610cb790613c4d565b8015610d045780601f10610cd957610100808354040283529160200191610d04565b820191906000526020600020905b815481529060010190602001808311610ce757829003601f168201915b5050505050905090565b6000610d22610d1b611e62565b8484611e6a565b6001905092915050565b60196020528060005260406000206000915054906101000a900460ff1681565b610d54611e62565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610de3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dda90613b9b565b60405180910390fd5b6001811015610df157600080fd5b80601581905550610e00612033565b50565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610e39611e62565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ec8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebf90613b9b565b60405180910390fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60135481565b610f1a611e62565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fa9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa090613b9b565b60405180910390fd5b6001811015610fb757600080fd5b80601681905550610fc6612033565b50565b6000610fd684848461209b565b61109784610fe2611e62565b6110928560405180606001604052806028815260200161479e60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611048611e62565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d0f9092919063ffffffff16565b611e6a565b600190509392505050565b61dead81565b60006006905090565b600061115a6110be611e62565b8461115585600160006110cf611e62565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611e0490919063ffffffff16565b611e6a565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600a60149054906101000a900460ff1681565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6111f9611e62565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611288576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127f90613b9b565b60405180910390fd5b81600d8190555080600e81905550600e54600d546112a69190613bea565b600f819055505050565b60125481565b600a60169054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611319611e62565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139f90613b9b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611471611e62565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611500576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f790613b9b565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60155481565b611569611e62565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ef90613b9b565b60405180910390fd5b6001600d819055506000600e81905550600e54600d546116189190613bea565b600f819055506001601081905550600060118190555060115460105461163e9190613bea565b6012819055506000601781905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600480546116ad90613c4d565b80601f01602080910402602001604051908101604052809291908181526020018280546116d990613c4d565b80156117265780601f106116fb57610100808354040283529160200191611726565b820191906000526020600020905b81548152906001019060200180831161170957829003601f168201915b5050505050905090565b60165481565b61173e611e62565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c490613b9b565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361185b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185290613cf0565b60405180910390fd5b6118658282612d73565b5050565b600e5481565b60145481565b61187d611e62565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461190c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190390613b9b565b60405180910390fd5b8060178190555050565b60115481565b60006119df611929611e62565b846119da856040518060600160405280602581526020016147c66025913960016000611953611e62565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d0f9092919063ffffffff16565b611e6a565b6001905092915050565b60006119fd6119f6611e62565b848461209b565b6001905092915050565b60105481565b601a6020528060005260406000206000915054906101000a900460ff1681565b600a60159054906101000a900460ff1681565b611a48611e62565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ad7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ace90613b9b565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611b749190613900565b60405180910390a25050565b600c60009054906101000a900460ff1681565b60065481565b600f5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60075481565b600d5481565b60175481565b611c40611e62565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ccf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc690613b9b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611d3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3590613d82565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60085481565b6000808284611e139190613bea565b905083811015611e58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4f90613dee565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611ed9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed090613e80565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3f90613f12565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612026919061377a565b60405180910390a3505050565b60646016546009546120459190613f32565b61204f9190613fbb565b60068190555061271060056009546120679190613f32565b6120719190613fbb565b60078190555060646015546009546120899190613f32565b6120939190613fbb565b600881905550565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361210a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121019061405e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612179576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612170906140f0565b60405180910390fd5b600081036121925761218d83836000612e14565b612d0a565b600a60149054906101000a900460ff1615612862576121af61164e565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561221d57506121ed61164e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156122565750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612290575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156122a95750600560149054906101000a900460ff16155b1561286157600a60159054906101000a900460ff166123a357601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806123635750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6123a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123999061415c565b60405180910390fd5b5b600c60009054906101000a900460ff1615612578576123c061164e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561244757507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561249f57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156125775743600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612525576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251c90614214565b60405180910390fd5b601754436125339190613bea565b600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561261b5750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156126c257600654811115612665576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265c906142a6565b60405180910390fd5b600854612671836112c9565b8261267c9190613bea565b11156126bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b490614312565b60405180910390fd5b612860565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156127655750601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156127b4576006548111156127af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a6906143a4565b60405180910390fd5b61285f565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661285e57600854612811836112c9565b8261281c9190613bea565b111561285d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285490614312565b60405180910390fd5b5b5b5b5b5b600061286d306112c9565b9050600060075482101590508080156128935750600560149054906101000a900460ff16155b80156128ab5750600a60169054906101000a900460ff165b80156129015750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156129575750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156129ad5750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156129f1576001600560146101000a81548160ff0219169083151502179055506129d56130a7565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612aa75750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612ab157600090505b60008115612cfa57601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612b1457506000601254115b15612bae57612b416064612b336012548861319090919063ffffffff16565b61320a90919063ffffffff16565b905060125460105482612b549190613f32565b612b5e9190613fbb565b60136000828254612b6f9190613bea565b9250508190555060125460115482612b879190613f32565b612b919190613fbb565b60146000828254612ba29190613bea565b92505081905550612ca0565b601a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612c0957506000600f54115b15612c9f57612c366064612c28600f548861319090919063ffffffff16565b61320a90919063ffffffff16565b9050600f54600d5482612c499190613f32565b612c539190613fbb565b60136000828254612c649190613bea565b92505081905550600f54600e5482612c7c9190613f32565b612c869190613fbb565b60146000828254612c979190613bea565b925050819055505b5b6000811115612ceb57612cb4873083612e14565b60006013541115612cea57612ccb30601354613254565b612cd3610e27565b600981905550612ce1612033565b60006013819055505b5b8085612cf791906143c4565b94505b612d05878787612e14565b505050505b505050565b6000838311158290612d57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d4e9190613825565b60405180910390fd5b5060008385612d6691906143c4565b9050809150509392505050565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612e83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e7a9061405e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612ef2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ee9906140f0565b60405180910390fd5b612efd838383613401565b612f6881604051806060016040528060268152602001614778602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d0f9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612ffb816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611e0490919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161309a919061377a565b60405180910390a3505050565b60006130b2306112c9565b905060008082036130c457505061318e565b60146007546130d39190613f32565b8211156130ec5760146007546130e99190613f32565b91505b6130f582613406565b6000601481905550600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161314390614429565b60006040518083038185875af1925050503d8060008114613180576040519150601f19603f3d011682016040523d82523d6000602084013e613185565b606091505b50508091505050505b565b60008083036131a25760009050613204565b600082846131b09190613f32565b90508284826131bf9190613fbb565b146131ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131f6906144b0565b60405180910390fd5b809150505b92915050565b600061324c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613643565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036132c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132ba90614542565b60405180910390fd5b6132cf82600083613401565b61333a81604051806060016040528060228152602001614756602291396000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d0f9092919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613391816002546136a690919063ffffffff16565b600281905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516133f5919061377a565b60405180910390a35050565b505050565b6000600267ffffffffffffffff81111561342357613422614562565b5b6040519080825280602002602001820160405280156134515781602001602082028036833780820191505090505b509050308160008151811061346957613468614591565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561350e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061353291906145d5565b8160018151811061354657613545614591565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506135ab307f000000000000000000000000000000000000000000000000000000000000000084611e6a565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161360d9594939291906146fb565b600060405180830381600087803b15801561362757600080fd5b505af115801561363b573d6000803e3d6000fd5b505050505050565b6000808311829061368a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136819190613825565b60405180910390fd5b50600083856136999190613fbb565b9050809150509392505050565b60006136e883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612d0f565b905092915050565b600080fd5b6000819050919050565b613708816136f5565b811461371357600080fd5b50565b600081359050613725816136ff565b92915050565b60008060408385031215613742576137416136f0565b5b600061375085828601613716565b925050602061376185828601613716565b9150509250929050565b613774816136f5565b82525050565b600060208201905061378f600083018461376b565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156137cf5780820151818401526020810190506137b4565b60008484015250505050565b6000601f19601f8301169050919050565b60006137f782613795565b61380181856137a0565b93506138118185602086016137b1565b61381a816137db565b840191505092915050565b6000602082019050818103600083015261383f81846137ec565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061387282613847565b9050919050565b61388281613867565b811461388d57600080fd5b50565b60008135905061389f81613879565b92915050565b600080604083850312156138bc576138bb6136f0565b5b60006138ca85828601613890565b92505060206138db85828601613716565b9150509250929050565b60008115159050919050565b6138fa816138e5565b82525050565b600060208201905061391560008301846138f1565b92915050565b600060208284031215613931576139306136f0565b5b600061393f84828501613890565b91505092915050565b60006020828403121561395e5761395d6136f0565b5b600061396c84828501613716565b91505092915050565b6000819050919050565b600061399a61399561399084613847565b613975565b613847565b9050919050565b60006139ac8261397f565b9050919050565b60006139be826139a1565b9050919050565b6139ce816139b3565b82525050565b60006020820190506139e960008301846139c5565b92915050565b600080600060608486031215613a0857613a076136f0565b5b6000613a1686828701613890565b9350506020613a2786828701613890565b9250506040613a3886828701613716565b9150509250925092565b613a4b81613867565b82525050565b6000602082019050613a666000830184613a42565b92915050565b600060ff82169050919050565b613a8281613a6c565b82525050565b6000602082019050613a9d6000830184613a79565b92915050565b613aac816138e5565b8114613ab757600080fd5b50565b600081359050613ac981613aa3565b92915050565b60008060408385031215613ae657613ae56136f0565b5b6000613af485828601613890565b9250506020613b0585828601613aba565b9150509250929050565b60008060408385031215613b2657613b256136f0565b5b6000613b3485828601613890565b9250506020613b4585828601613890565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613b856020836137a0565b9150613b9082613b4f565b602082019050919050565b60006020820190508181036000830152613bb481613b78565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613bf5826136f5565b9150613c00836136f5565b9250828201905080821115613c1857613c17613bbb565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613c6557607f821691505b602082108103613c7857613c77613c1e565b5b50919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000613cda6039836137a0565b9150613ce582613c7e565b604082019050919050565b60006020820190508181036000830152613d0981613ccd565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613d6c6026836137a0565b9150613d7782613d10565b604082019050919050565b60006020820190508181036000830152613d9b81613d5f565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000613dd8601b836137a0565b9150613de382613da2565b602082019050919050565b60006020820190508181036000830152613e0781613dcb565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613e6a6024836137a0565b9150613e7582613e0e565b604082019050919050565b60006020820190508181036000830152613e9981613e5d565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613efc6022836137a0565b9150613f0782613ea0565b604082019050919050565b60006020820190508181036000830152613f2b81613eef565b9050919050565b6000613f3d826136f5565b9150613f48836136f5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613f8157613f80613bbb565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613fc6826136f5565b9150613fd1836136f5565b925082613fe157613fe0613f8c565b5b828204905092915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006140486025836137a0565b915061405382613fec565b604082019050919050565b600060208201905081810360008301526140778161403b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006140da6023836137a0565b91506140e58261407e565b604082019050919050565b60006020820190508181036000830152614109816140cd565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006141466016836137a0565b915061415182614110565b602082019050919050565b6000602082019050818103600083015261417581614139565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006141fe6049836137a0565b91506142098261417c565b606082019050919050565b6000602082019050818103600083015261422d816141f1565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006142906035836137a0565b915061429b82614234565b604082019050919050565b600060208201905081810360008301526142bf81614283565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006142fc6013836137a0565b9150614307826142c6565b602082019050919050565b6000602082019050818103600083015261432b816142ef565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061438e6036836137a0565b915061439982614332565b604082019050919050565b600060208201905081810360008301526143bd81614381565b9050919050565b60006143cf826136f5565b91506143da836136f5565b92508282039050818111156143f2576143f1613bbb565b5b92915050565b600081905092915050565b50565b60006144136000836143f8565b915061441e82614403565b600082019050919050565b600061443482614406565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061449a6021836137a0565b91506144a58261443e565b604082019050919050565b600060208201905081810360008301526144c98161448d565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600061452c6021836137a0565b9150614537826144d0565b604082019050919050565b6000602082019050818103600083015261455b8161451f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506145cf81613879565b92915050565b6000602082840312156145eb576145ea6136f0565b5b60006145f9848285016145c0565b91505092915050565b6000819050919050565b600061462761462261461d84614602565b613975565b6136f5565b9050919050565b6146378161460c565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61467281613867565b82525050565b60006146848383614669565b60208301905092915050565b6000602082019050919050565b60006146a88261463d565b6146b28185614648565b93506146bd83614659565b8060005b838110156146ee5781516146d58882614678565b97506146e083614690565b9250506001810190506146c1565b5085935050505092915050565b600060a082019050614710600083018861376b565b61471d602083018761462e565b818103604083015261472f818661469d565b905061473e6060830185613a42565b61474b608083018461376b565b969550505050505056fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212205f01d398abf38010340f5cc23000d9402ecf759d502ce6a18dcdff82257d8af664736f6c63430008100033

Deployed Bytecode

0x6080604052600436106102cd5760003560e01c80638a8c523c11610175578063adb873bd116100dc578063d85ba06311610095578063e71dc3f51161006f578063e71dc3f514610b0d578063f203acb614610b38578063f2fde38b14610b63578063f8b45b0514610b8c576102d4565b8063d85ba06314610a7a578063dd62ed3e14610aa5578063e2f4560514610ae2576102d4565b8063adb873bd14610968578063b62496f514610993578063bbc0c742146109d0578063c0246668146109fb578063c876d0b914610a24578063c8c8ebe414610a4f576102d4565b80639c3b4fdc1161012e5780639c3b4fdc146108445780639fccce321461086f5780639fdc48241461089a578063a0d82dc5146108c3578063a457c2d7146108ee578063a9059cbb1461092b576102d4565b80638a8c523c146107585780638da5cb5b1461076f5780638ea5220f1461079a57806395d89b41146107c5578063975d71e2146107f05780639a7a23d61461081b576102d4565b806327c8f8351161023457806366ca9b83116101ed57806370a08231116101c757806370a08231146106b0578063715018a6146106ed5780637571336a146107045780637ab439831461072d576102d4565b806366ca9b83146106315780636a486a8e1461065a5780636ddd171314610685576102d4565b806327c8f8351461050b578063313ce56714610536578063395093511461056157806349bd5a5e1461059e5780634a62bb65146105c95780634fbee193146105f4576102d4565b80631694505e116102865780631694505e146103fb57806318160ddd146104265780631816467f146104515780631d7778561461047a5780631fa07da5146104a557806323b872dd146104ce576102d4565b806302dbd8f8146102d9578063047fc9aa1461030257806306fdde031461032d578063095ea7b31461035857806310d5de5314610395578063150de0bb146103d2576102d4565b366102d457005b600080fd5b3480156102e557600080fd5b5061030060048036038101906102fb919061372b565b610bb7565b005b34801561030e57600080fd5b50610317610c76565b604051610324919061377a565b60405180910390f35b34801561033957600080fd5b50610342610c7c565b60405161034f9190613825565b60405180910390f35b34801561036457600080fd5b5061037f600480360381019061037a91906138a5565b610d0e565b60405161038c9190613900565b60405180910390f35b3480156103a157600080fd5b506103bc60048036038101906103b7919061391b565b610d2c565b6040516103c99190613900565b60405180910390f35b3480156103de57600080fd5b506103f960048036038101906103f49190613948565b610d4c565b005b34801561040757600080fd5b50610410610e03565b60405161041d91906139d4565b60405180910390f35b34801561043257600080fd5b5061043b610e27565b604051610448919061377a565b60405180910390f35b34801561045d57600080fd5b506104786004803603810190610473919061391b565b610e31565b005b34801561048657600080fd5b5061048f610f0c565b60405161049c919061377a565b60405180910390f35b3480156104b157600080fd5b506104cc60048036038101906104c79190613948565b610f12565b005b3480156104da57600080fd5b506104f560048036038101906104f091906139ef565b610fc9565b6040516105029190613900565b60405180910390f35b34801561051757600080fd5b506105206110a2565b60405161052d9190613a51565b60405180910390f35b34801561054257600080fd5b5061054b6110a8565b6040516105589190613a88565b60405180910390f35b34801561056d57600080fd5b50610588600480360381019061058391906138a5565b6110b1565b6040516105959190613900565b60405180910390f35b3480156105aa57600080fd5b506105b3611164565b6040516105c09190613a51565b60405180910390f35b3480156105d557600080fd5b506105de611188565b6040516105eb9190613900565b60405180910390f35b34801561060057600080fd5b5061061b6004803603810190610616919061391b565b61119b565b6040516106289190613900565b60405180910390f35b34801561063d57600080fd5b506106586004803603810190610653919061372b565b6111f1565b005b34801561066657600080fd5b5061066f6112b0565b60405161067c919061377a565b60405180910390f35b34801561069157600080fd5b5061069a6112b6565b6040516106a79190613900565b60405180910390f35b3480156106bc57600080fd5b506106d760048036038101906106d2919061391b565b6112c9565b6040516106e4919061377a565b60405180910390f35b3480156106f957600080fd5b50610702611311565b005b34801561071057600080fd5b5061072b60048036038101906107269190613acf565b611469565b005b34801561073957600080fd5b5061074261155b565b60405161074f919061377a565b60405180910390f35b34801561076457600080fd5b5061076d611561565b005b34801561077b57600080fd5b5061078461164e565b6040516107919190613a51565b60405180910390f35b3480156107a657600080fd5b506107af611678565b6040516107bc9190613a51565b60405180910390f35b3480156107d157600080fd5b506107da61169e565b6040516107e79190613825565b60405180910390f35b3480156107fc57600080fd5b50610805611730565b604051610812919061377a565b60405180910390f35b34801561082757600080fd5b50610842600480360381019061083d9190613acf565b611736565b005b34801561085057600080fd5b50610859611869565b604051610866919061377a565b60405180910390f35b34801561087b57600080fd5b5061088461186f565b604051610891919061377a565b60405180910390f35b3480156108a657600080fd5b506108c160048036038101906108bc9190613948565b611875565b005b3480156108cf57600080fd5b506108d8611916565b6040516108e5919061377a565b60405180910390f35b3480156108fa57600080fd5b50610915600480360381019061091091906138a5565b61191c565b6040516109229190613900565b60405180910390f35b34801561093757600080fd5b50610952600480360381019061094d91906138a5565b6119e9565b60405161095f9190613900565b60405180910390f35b34801561097457600080fd5b5061097d611a07565b60405161098a919061377a565b60405180910390f35b34801561099f57600080fd5b506109ba60048036038101906109b5919061391b565b611a0d565b6040516109c79190613900565b60405180910390f35b3480156109dc57600080fd5b506109e5611a2d565b6040516109f29190613900565b60405180910390f35b348015610a0757600080fd5b50610a226004803603810190610a1d9190613acf565b611a40565b005b348015610a3057600080fd5b50610a39611b80565b604051610a469190613900565b60405180910390f35b348015610a5b57600080fd5b50610a64611b93565b604051610a71919061377a565b60405180910390f35b348015610a8657600080fd5b50610a8f611b99565b604051610a9c919061377a565b60405180910390f35b348015610ab157600080fd5b50610acc6004803603810190610ac79190613b0f565b611b9f565b604051610ad9919061377a565b60405180910390f35b348015610aee57600080fd5b50610af7611c26565b604051610b04919061377a565b60405180910390f35b348015610b1957600080fd5b50610b22611c2c565b604051610b2f919061377a565b60405180910390f35b348015610b4457600080fd5b50610b4d611c32565b604051610b5a919061377a565b60405180910390f35b348015610b6f57600080fd5b50610b8a6004803603810190610b85919061391b565b611c38565b005b348015610b9857600080fd5b50610ba1611dfe565b604051610bae919061377a565b60405180910390f35b610bbf611e62565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4590613b9b565b60405180910390fd5b8160108190555080601181905550601154601054610c6c9190613bea565b6012819055505050565b60095481565b606060038054610c8b90613c4d565b80601f0160208091040260200160405190810160405280929190818152602001828054610cb790613c4d565b8015610d045780601f10610cd957610100808354040283529160200191610d04565b820191906000526020600020905b815481529060010190602001808311610ce757829003601f168201915b5050505050905090565b6000610d22610d1b611e62565b8484611e6a565b6001905092915050565b60196020528060005260406000206000915054906101000a900460ff1681565b610d54611e62565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610de3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dda90613b9b565b60405180910390fd5b6001811015610df157600080fd5b80601581905550610e00612033565b50565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610e39611e62565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ec8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebf90613b9b565b60405180910390fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60135481565b610f1a611e62565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fa9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa090613b9b565b60405180910390fd5b6001811015610fb757600080fd5b80601681905550610fc6612033565b50565b6000610fd684848461209b565b61109784610fe2611e62565b6110928560405180606001604052806028815260200161479e60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611048611e62565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d0f9092919063ffffffff16565b611e6a565b600190509392505050565b61dead81565b60006006905090565b600061115a6110be611e62565b8461115585600160006110cf611e62565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611e0490919063ffffffff16565b611e6a565b6001905092915050565b7f000000000000000000000000a98c0868f066f3923959742f0036f3c5835d872b81565b600a60149054906101000a900460ff1681565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6111f9611e62565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611288576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127f90613b9b565b60405180910390fd5b81600d8190555080600e81905550600e54600d546112a69190613bea565b600f819055505050565b60125481565b600a60169054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611319611e62565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139f90613b9b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611471611e62565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611500576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f790613b9b565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60155481565b611569611e62565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ef90613b9b565b60405180910390fd5b6001600d819055506000600e81905550600e54600d546116189190613bea565b600f819055506001601081905550600060118190555060115460105461163e9190613bea565b6012819055506000601781905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600480546116ad90613c4d565b80601f01602080910402602001604051908101604052809291908181526020018280546116d990613c4d565b80156117265780601f106116fb57610100808354040283529160200191611726565b820191906000526020600020905b81548152906001019060200180831161170957829003601f168201915b5050505050905090565b60165481565b61173e611e62565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c490613b9b565b60405180910390fd5b7f000000000000000000000000a98c0868f066f3923959742f0036f3c5835d872b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361185b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185290613cf0565b60405180910390fd5b6118658282612d73565b5050565b600e5481565b60145481565b61187d611e62565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461190c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190390613b9b565b60405180910390fd5b8060178190555050565b60115481565b60006119df611929611e62565b846119da856040518060600160405280602581526020016147c66025913960016000611953611e62565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d0f9092919063ffffffff16565b611e6a565b6001905092915050565b60006119fd6119f6611e62565b848461209b565b6001905092915050565b60105481565b601a6020528060005260406000206000915054906101000a900460ff1681565b600a60159054906101000a900460ff1681565b611a48611e62565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ad7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ace90613b9b565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611b749190613900565b60405180910390a25050565b600c60009054906101000a900460ff1681565b60065481565b600f5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60075481565b600d5481565b60175481565b611c40611e62565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ccf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc690613b9b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611d3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3590613d82565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60085481565b6000808284611e139190613bea565b905083811015611e58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4f90613dee565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611ed9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed090613e80565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3f90613f12565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612026919061377a565b60405180910390a3505050565b60646016546009546120459190613f32565b61204f9190613fbb565b60068190555061271060056009546120679190613f32565b6120719190613fbb565b60078190555060646015546009546120899190613f32565b6120939190613fbb565b600881905550565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361210a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121019061405e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612179576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612170906140f0565b60405180910390fd5b600081036121925761218d83836000612e14565b612d0a565b600a60149054906101000a900460ff1615612862576121af61164e565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561221d57506121ed61164e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156122565750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612290575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156122a95750600560149054906101000a900460ff16155b1561286157600a60159054906101000a900460ff166123a357601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806123635750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6123a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123999061415c565b60405180910390fd5b5b600c60009054906101000a900460ff1615612578576123c061164e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561244757507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561249f57507f000000000000000000000000a98c0868f066f3923959742f0036f3c5835d872b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156125775743600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612525576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251c90614214565b60405180910390fd5b601754436125339190613bea565b600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561261b5750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156126c257600654811115612665576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265c906142a6565b60405180910390fd5b600854612671836112c9565b8261267c9190613bea565b11156126bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b490614312565b60405180910390fd5b612860565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156127655750601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156127b4576006548111156127af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a6906143a4565b60405180910390fd5b61285f565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661285e57600854612811836112c9565b8261281c9190613bea565b111561285d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285490614312565b60405180910390fd5b5b5b5b5b5b600061286d306112c9565b9050600060075482101590508080156128935750600560149054906101000a900460ff16155b80156128ab5750600a60169054906101000a900460ff165b80156129015750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156129575750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156129ad5750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156129f1576001600560146101000a81548160ff0219169083151502179055506129d56130a7565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612aa75750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612ab157600090505b60008115612cfa57601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612b1457506000601254115b15612bae57612b416064612b336012548861319090919063ffffffff16565b61320a90919063ffffffff16565b905060125460105482612b549190613f32565b612b5e9190613fbb565b60136000828254612b6f9190613bea565b9250508190555060125460115482612b879190613f32565b612b919190613fbb565b60146000828254612ba29190613bea565b92505081905550612ca0565b601a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612c0957506000600f54115b15612c9f57612c366064612c28600f548861319090919063ffffffff16565b61320a90919063ffffffff16565b9050600f54600d5482612c499190613f32565b612c539190613fbb565b60136000828254612c649190613bea565b92505081905550600f54600e5482612c7c9190613f32565b612c869190613fbb565b60146000828254612c979190613bea565b925050819055505b5b6000811115612ceb57612cb4873083612e14565b60006013541115612cea57612ccb30601354613254565b612cd3610e27565b600981905550612ce1612033565b60006013819055505b5b8085612cf791906143c4565b94505b612d05878787612e14565b505050505b505050565b6000838311158290612d57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d4e9190613825565b60405180910390fd5b5060008385612d6691906143c4565b9050809150509392505050565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612e83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e7a9061405e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612ef2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ee9906140f0565b60405180910390fd5b612efd838383613401565b612f6881604051806060016040528060268152602001614778602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d0f9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612ffb816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611e0490919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161309a919061377a565b60405180910390a3505050565b60006130b2306112c9565b905060008082036130c457505061318e565b60146007546130d39190613f32565b8211156130ec5760146007546130e99190613f32565b91505b6130f582613406565b6000601481905550600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161314390614429565b60006040518083038185875af1925050503d8060008114613180576040519150601f19603f3d011682016040523d82523d6000602084013e613185565b606091505b50508091505050505b565b60008083036131a25760009050613204565b600082846131b09190613f32565b90508284826131bf9190613fbb565b146131ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131f6906144b0565b60405180910390fd5b809150505b92915050565b600061324c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613643565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036132c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132ba90614542565b60405180910390fd5b6132cf82600083613401565b61333a81604051806060016040528060228152602001614756602291396000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d0f9092919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613391816002546136a690919063ffffffff16565b600281905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516133f5919061377a565b60405180910390a35050565b505050565b6000600267ffffffffffffffff81111561342357613422614562565b5b6040519080825280602002602001820160405280156134515781602001602082028036833780820191505090505b509050308160008151811061346957613468614591565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561350e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061353291906145d5565b8160018151811061354657613545614591565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506135ab307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611e6a565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161360d9594939291906146fb565b600060405180830381600087803b15801561362757600080fd5b505af115801561363b573d6000803e3d6000fd5b505050505050565b6000808311829061368a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136819190613825565b60405180910390fd5b50600083856136999190613fbb565b9050809150509392505050565b60006136e883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612d0f565b905092915050565b600080fd5b6000819050919050565b613708816136f5565b811461371357600080fd5b50565b600081359050613725816136ff565b92915050565b60008060408385031215613742576137416136f0565b5b600061375085828601613716565b925050602061376185828601613716565b9150509250929050565b613774816136f5565b82525050565b600060208201905061378f600083018461376b565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156137cf5780820151818401526020810190506137b4565b60008484015250505050565b6000601f19601f8301169050919050565b60006137f782613795565b61380181856137a0565b93506138118185602086016137b1565b61381a816137db565b840191505092915050565b6000602082019050818103600083015261383f81846137ec565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061387282613847565b9050919050565b61388281613867565b811461388d57600080fd5b50565b60008135905061389f81613879565b92915050565b600080604083850312156138bc576138bb6136f0565b5b60006138ca85828601613890565b92505060206138db85828601613716565b9150509250929050565b60008115159050919050565b6138fa816138e5565b82525050565b600060208201905061391560008301846138f1565b92915050565b600060208284031215613931576139306136f0565b5b600061393f84828501613890565b91505092915050565b60006020828403121561395e5761395d6136f0565b5b600061396c84828501613716565b91505092915050565b6000819050919050565b600061399a61399561399084613847565b613975565b613847565b9050919050565b60006139ac8261397f565b9050919050565b60006139be826139a1565b9050919050565b6139ce816139b3565b82525050565b60006020820190506139e960008301846139c5565b92915050565b600080600060608486031215613a0857613a076136f0565b5b6000613a1686828701613890565b9350506020613a2786828701613890565b9250506040613a3886828701613716565b9150509250925092565b613a4b81613867565b82525050565b6000602082019050613a666000830184613a42565b92915050565b600060ff82169050919050565b613a8281613a6c565b82525050565b6000602082019050613a9d6000830184613a79565b92915050565b613aac816138e5565b8114613ab757600080fd5b50565b600081359050613ac981613aa3565b92915050565b60008060408385031215613ae657613ae56136f0565b5b6000613af485828601613890565b9250506020613b0585828601613aba565b9150509250929050565b60008060408385031215613b2657613b256136f0565b5b6000613b3485828601613890565b9250506020613b4585828601613890565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613b856020836137a0565b9150613b9082613b4f565b602082019050919050565b60006020820190508181036000830152613bb481613b78565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613bf5826136f5565b9150613c00836136f5565b9250828201905080821115613c1857613c17613bbb565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613c6557607f821691505b602082108103613c7857613c77613c1e565b5b50919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000613cda6039836137a0565b9150613ce582613c7e565b604082019050919050565b60006020820190508181036000830152613d0981613ccd565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613d6c6026836137a0565b9150613d7782613d10565b604082019050919050565b60006020820190508181036000830152613d9b81613d5f565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000613dd8601b836137a0565b9150613de382613da2565b602082019050919050565b60006020820190508181036000830152613e0781613dcb565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613e6a6024836137a0565b9150613e7582613e0e565b604082019050919050565b60006020820190508181036000830152613e9981613e5d565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613efc6022836137a0565b9150613f0782613ea0565b604082019050919050565b60006020820190508181036000830152613f2b81613eef565b9050919050565b6000613f3d826136f5565b9150613f48836136f5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613f8157613f80613bbb565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613fc6826136f5565b9150613fd1836136f5565b925082613fe157613fe0613f8c565b5b828204905092915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006140486025836137a0565b915061405382613fec565b604082019050919050565b600060208201905081810360008301526140778161403b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006140da6023836137a0565b91506140e58261407e565b604082019050919050565b60006020820190508181036000830152614109816140cd565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006141466016836137a0565b915061415182614110565b602082019050919050565b6000602082019050818103600083015261417581614139565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006141fe6049836137a0565b91506142098261417c565b606082019050919050565b6000602082019050818103600083015261422d816141f1565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006142906035836137a0565b915061429b82614234565b604082019050919050565b600060208201905081810360008301526142bf81614283565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006142fc6013836137a0565b9150614307826142c6565b602082019050919050565b6000602082019050818103600083015261432b816142ef565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061438e6036836137a0565b915061439982614332565b604082019050919050565b600060208201905081810360008301526143bd81614381565b9050919050565b60006143cf826136f5565b91506143da836136f5565b92508282039050818111156143f2576143f1613bbb565b5b92915050565b600081905092915050565b50565b60006144136000836143f8565b915061441e82614403565b600082019050919050565b600061443482614406565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061449a6021836137a0565b91506144a58261443e565b604082019050919050565b600060208201905081810360008301526144c98161448d565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600061452c6021836137a0565b9150614537826144d0565b604082019050919050565b6000602082019050818103600083015261455b8161451f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506145cf81613879565b92915050565b6000602082840312156145eb576145ea6136f0565b5b60006145f9848285016145c0565b91505092915050565b6000819050919050565b600061462761462261461d84614602565b613975565b6136f5565b9050919050565b6146378161460c565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61467281613867565b82525050565b60006146848383614669565b60208301905092915050565b6000602082019050919050565b60006146a88261463d565b6146b28185614648565b93506146bd83614659565b8060005b838110156146ee5781516146d58882614678565b97506146e083614690565b9250506001810190506146c1565b5085935050505092915050565b600060a082019050614710600083018861376b565b61471d602083018761462e565b818103604083015261472f818661469d565b905061473e6060830185613a42565b61474b608083018461376b565b969550505050505056fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212205f01d398abf38010340f5cc23000d9402ecf759d502ce6a18dcdff82257d8af664736f6c63430008100033

Deployed Bytecode Sourcemap

29684:11201:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34431:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30087:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7814:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9980:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30917:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33793:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29765:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8933:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34640:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30602:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33630:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10631:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29868:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8776:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11395:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29823:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30154:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35617:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34224:195;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30558:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30233:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9104:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22278:148;;;;;;;;;;;;;:::i;:::-;;34068:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30673:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33338:280;;;;;;;;;;;;;:::i;:::-;;21636:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30117:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8033:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30706:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35169:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30426:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30637:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33958:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30526:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12116:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9444:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30493:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31139:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30194:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34751:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30345:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29968:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30457:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9682:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30010:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30394:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30738;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22581:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30050:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34431:201;21858:12;:10;:12::i;:::-;21848:22;;:6;;;;;;;;;;;:22;;;21840:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34534:8:::1;34520:11;:22;;;;34566:7;34553:10;:20;;;;34614:10;;34600:11;;:24;;;;:::i;:::-;34584:13;:40;;;;34431:201:::0;;:::o;30087:21::-;;;;:::o;7814:100::-;7868:13;7901:5;7894:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7814:100;:::o;9980:169::-;10063:4;10080:39;10089:12;:10;:12::i;:::-;10103:7;10112:6;10080:8;:39::i;:::-;10137:4;10130:11;;9980:169;;;;:::o;30917:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;33793:157::-;21858:12;:10;:12::i;:::-;21848:22;;:6;;;;;;;;;;;:22;;;21840:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33884:1:::1;33874:6;:11;;33866:20;;;::::0;::::1;;33911:6;33897:11;:20;;;;33928:14;:12;:14::i;:::-;33793:157:::0;:::o;29765:51::-;;;:::o;8933:108::-;8994:7;9021:12;;9014:19;;8933:108;:::o;34640:103::-;21858:12;:10;:12::i;:::-;21848:22;;:6;;;;;;;;;;;:22;;;21840:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34726:9:::1;34714;;:21;;;;;;;;;;;;;;;;;;34640:103:::0;:::o;30602:28::-;;;;:::o;33630:155::-;21858:12;:10;:12::i;:::-;21848:22;;:6;;;;;;;;;;;:22;;;21840:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33720:1:::1;33710:6;:11;;33702:20;;;::::0;::::1;;33746:6;33733:10;:19;;;;33763:14;:12;:14::i;:::-;33630:155:::0;:::o;10631:355::-;10771:4;10788:36;10798:6;10806:9;10817:6;10788:9;:36::i;:::-;10835:121;10844:6;10852:12;:10;:12::i;:::-;10866:89;10904:6;10866:89;;;;;;;;;;;;;;;;;:11;:19;10878:6;10866:19;;;;;;;;;;;;;;;:33;10886:12;:10;:12::i;:::-;10866:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;10835:8;:121::i;:::-;10974:4;10967:11;;10631:355;;;;;:::o;29868:53::-;29914:6;29868:53;:::o;8776:92::-;8834:5;8859:1;8852:8;;8776:92;:::o;11395:218::-;11483:4;11500:83;11509:12;:10;:12::i;:::-;11523:7;11532:50;11571:10;11532:11;:25;11544:12;:10;:12::i;:::-;11532:25;;;;;;;;;;;;;;;:34;11558:7;11532:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;11500:8;:83::i;:::-;11601:4;11594:11;;11395:218;;;;:::o;29823:38::-;;;:::o;30154:33::-;;;;;;;;;;;;;:::o;35617:125::-;35682:4;35706:19;:28;35726:7;35706:28;;;;;;;;;;;;;;;;;;;;;;;;;35699:35;;35617:125;;;:::o;34224:195::-;21858:12;:10;:12::i;:::-;21848:22;;:6;;;;;;;;;;;:22;;;21840:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34325:8:::1;34312:10;:21;;;;34356:7;34344:9;:19;;;;34402:9;;34389:10;;:22;;;;:::i;:::-;34374:12;:37;;;;34224:195:::0;;:::o;30558:28::-;;;;:::o;30233:30::-;;;;;;;;;;;;;:::o;9104:127::-;9178:7;9205:9;:18;9215:7;9205:18;;;;;;;;;;;;;;;;9198:25;;9104:127;;;:::o;22278:148::-;21858:12;:10;:12::i;:::-;21848:22;;:6;;;;;;;;;;;:22;;;21840:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22385:1:::1;22348:40;;22369:6;;;;;;;;;;;22348:40;;;;;;;;;;;;22416:1;22399:6;;:19;;;;;;;;;;;;;;;;;;22278:148::o:0;34068:144::-;21858:12;:10;:12::i;:::-;21848:22;;:6;;;;;;;;;;;:22;;;21840:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34200:4:::1;34158:31;:39;34190:6;34158:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;34068:144:::0;;:::o;30673:26::-;;;;:::o;33338:280::-;21858:12;:10;:12::i;:::-;21848:22;;:6;;;;;;;;;;;:22;;;21840:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33406:1:::1;33393:10;:14;;;;33430:1;33418:9;:13;;;;33470:9;;33457:10;;:22;;;;:::i;:::-;33442:12;:37;;;;33506:1;33492:11;:15;;;;33531:1;33518:10;:14;;;;33573:10;;33559:11;;:24;;;;:::i;:::-;33543:13;:40;;;;33609:1;33596:10;:14;;;;33338:280::o:0;21636:79::-;21674:7;21701:6;;;;;;;;;;;21694:13;;21636:79;:::o;30117:24::-;;;;;;;;;;;;;:::o;8033:104::-;8089:13;8122:7;8115:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8033:104;:::o;30706:25::-;;;;:::o;35169:244::-;21858:12;:10;:12::i;:::-;21848:22;;:6;;;;;;;;;;;:22;;;21840:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35276:13:::1;35268:21;;:4;:21;;::::0;35260:91:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;35364:41;35393:4;35399:5;35364:28;:41::i;:::-;35169:244:::0;;:::o;30426:24::-;;;;:::o;30637:27::-;;;;:::o;33958:98::-;21858:12;:10;:12::i;:::-;21848:22;;:6;;;;;;;;;;;:22;;;21840:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34042:6:::1;34029:10;:19;;;;33958:98:::0;:::o;30526:25::-;;;;:::o;12116:269::-;12209:4;12226:129;12235:12;:10;:12::i;:::-;12249:7;12258:96;12297:15;12258:96;;;;;;;;;;;;;;;;;:11;:25;12270:12;:10;:12::i;:::-;12258:25;;;;;;;;;;;;;;;:34;12284:7;12258:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;12226:8;:129::i;:::-;12373:4;12366:11;;12116:269;;;;:::o;9444:175::-;9530:4;9547:42;9557:12;:10;:12::i;:::-;9571:9;9582:6;9547:9;:42::i;:::-;9607:4;9600:11;;9444:175;;;;:::o;30493:26::-;;;;:::o;31139:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;30194:32::-;;;;;;;;;;;;;:::o;34751:182::-;21858:12;:10;:12::i;:::-;21848:22;;:6;;;;;;;;;;;:22;;;21840:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34867:8:::1;34836:19;:28;34856:7;34836:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;34907:7;34891:34;;;34916:8;34891:34;;;;;;:::i;:::-;;;;;;;;34751:182:::0;;:::o;30345:40::-;;;;;;;;;;;;;:::o;29968:35::-;;;;:::o;30457:27::-;;;;:::o;9682:151::-;9771:7;9798:11;:18;9810:5;9798:18;;;;;;;;;;;;;;;:27;9817:7;9798:27;;;;;;;;;;;;;;;;9791:34;;9682:151;;;;:::o;30010:33::-;;;;:::o;30394:25::-;;;;:::o;30738:::-;;;;:::o;22581:244::-;21858:12;:10;:12::i;:::-;21848:22;;:6;;;;;;;;;;;:22;;;21840:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22690:1:::1;22670:22;;:8;:22;;::::0;22662:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22780:8;22751:38;;22772:6;;;;;;;;;;;22751:38;;;;;;;;;;;;22809:8;22800:6;;:17;;;;;;;;;;;;;;;;;;22581:244:::0;:::o;30050:24::-;;;;:::o;16680:181::-;16738:7;16758:9;16774:1;16770;:5;;;;:::i;:::-;16758:17;;16799:1;16794;:6;;16786:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;16852:1;16845:8;;;16680:181;;;;:::o;450:98::-;503:7;530:10;523:17;;450:98;:::o;15302:380::-;15455:1;15438:19;;:5;:19;;;15430:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15536:1;15517:21;;:7;:21;;;15509:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15620:6;15590:11;:18;15602:5;15590:18;;;;;;;;;;;;;;;:27;15609:7;15590:27;;;;;;;;;;;;;;;:36;;;;15658:7;15642:32;;15651:5;15642:32;;;15667:6;15642:32;;;;;;:::i;:::-;;;;;;;;15302:380;;;:::o;34941:220::-;35029:3;35016:10;;35007:6;;:19;;;;:::i;:::-;:25;;;;:::i;:::-;34984:20;:48;;;;35077:5;35073:1;35064:6;;:10;;;;:::i;:::-;:18;;;;:::i;:::-;35043;:39;;;;35150:3;35136:11;;35127:6;;:20;;;;:::i;:::-;:26;;;;:::i;:::-;35115:9;:38;;;;34941:220::o;35754:4041::-;35902:1;35886:18;;:4;:18;;;35878:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35979:1;35965:16;;:2;:16;;;35957:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;36056:1;36046:6;:11;36043:92;;36074:28;36090:4;36096:2;36100:1;36074:15;:28::i;:::-;36117:7;;36043:92;36158:14;;;;;;;;;;;36155:1854;;;36218:7;:5;:7::i;:::-;36210:15;;:4;:15;;;;:49;;;;;36252:7;:5;:7::i;:::-;36246:13;;:2;:13;;;;36210:49;:86;;;;;36294:1;36280:16;;:2;:16;;;;36210:86;:128;;;;;36331:6;36317:21;;:2;:21;;;;36210:128;:158;;;;;36360:8;;;;;;;;;;;36359:9;36210:158;36188:1810;;;36406:13;;;;;;;;;;;36402:148;;36451:19;:25;36471:4;36451:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;36480:19;:23;36500:2;36480:23;;;;;;;;;;;;;;;;;;;;;;;;;36451:52;36443:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;36402:148;36708:20;;;;;;;;;;;36704:436;;;36762:7;:5;:7::i;:::-;36756:13;;:2;:13;;;;:47;;;;;36787:15;36773:30;;:2;:30;;;;36756:47;:79;;;;;36821:13;36807:28;;:2;:28;;;;36756:79;36752:369;;;36913:12;36871:28;:39;36900:9;36871:39;;;;;;;;;;;;;;;;:54;36863:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;37087:10;;37072:12;:25;;;;:::i;:::-;37030:28;:39;37059:9;37030:39;;;;;;;;;;;;;;;:67;;;;36752:369;36704:436;37209:25;:31;37235:4;37209:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;37245:31;:35;37277:2;37245:35;;;;;;;;;;;;;;;;;;;;;;;;;37244:36;37209:71;37205:778;;;37327:20;;37317:6;:30;;37309:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;37466:9;;37449:13;37459:2;37449:9;:13::i;:::-;37440:6;:22;;;;:::i;:::-;:35;;37432:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37205:778;;;37593:25;:29;37619:2;37593:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;37627:31;:37;37659:4;37627:37;;;;;;;;;;;;;;;;;;;;;;;;;37626:38;37593:71;37589:394;;;37711:20;;37701:6;:30;;37693:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;37589:394;;;37837:31;:35;37869:2;37837:35;;;;;;;;;;;;;;;;;;;;;;;;;37833:150;;37930:9;;37913:13;37923:2;37913:9;:13::i;:::-;37904:6;:22;;;;:::i;:::-;:35;;37896:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37833:150;37589:394;37205:778;36188:1810;36155:1854;38019:28;38050:24;38068:4;38050:9;:24::i;:::-;38019:55;;38095:12;38134:18;;38110:20;:42;;38095:57;;38183:7;:33;;;;;38208:8;;;;;;;;;;;38207:9;38183:33;:61;;;;;38233:11;;;;;;;;;;;38183:61;:110;;;;;38262:25;:31;38288:4;38262:31;;;;;;;;;;;;;;;;;;;;;;;;;38261:32;38183:110;:153;;;;;38311:19;:25;38331:4;38311:25;;;;;;;;;;;;;;;;;;;;;;;;;38310:26;38183:153;:194;;;;;38354:19;:23;38374:2;38354:23;;;;;;;;;;;;;;;;;;;;;;;;;38353:24;38183:194;38165:338;;;38415:4;38404:8;;:15;;;;;;;;;;;;;;;;;;38448:10;:8;:10::i;:::-;38486:5;38475:8;;:16;;;;;;;;;;;;;;;;;;38165:338;38523:12;38539:8;;;;;;;;;;;38538:9;38523:24;;38563:19;:25;38583:4;38563:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;38592:19;:23;38612:2;38592:23;;;;;;;;;;;;;;;;;;;;;;;;;38563:52;38560:99;;;38642:5;38632:15;;38560:99;38679:12;38711:7;38708:1034;;;38762:25;:29;38788:2;38762:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;38811:1;38795:13;;:17;38762:50;38758:574;;;38839:34;38869:3;38839:25;38850:13;;38839:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;38832:41;;38930:13;;38916:11;;38909:4;:18;;;;:::i;:::-;:34;;;;:::i;:::-;38892:13;;:51;;;;;;;:::i;:::-;;;;;;;;38998:13;;38985:10;;38978:4;:17;;;;:::i;:::-;:33;;;;:::i;:::-;38962:12;;:49;;;;;;;:::i;:::-;;;;;;;;38758:574;;;39074:25;:31;39100:4;39074:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;39124:1;39109:12;;:16;39074:51;39071:261;;;39152:33;39181:3;39152:24;39163:12;;39152:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;39145:40;;39238:12;;39225:10;;39218:4;:17;;;;:::i;:::-;:32;;;;:::i;:::-;39201:13;;:49;;;;;;;:::i;:::-;;;;;;;;39304:12;;39292:9;;39285:4;:16;;;;:::i;:::-;:31;;;;:::i;:::-;39269:12;;:47;;;;;;;:::i;:::-;;;;;;;;39071:261;38758:574;39370:1;39363:4;:8;39360:334;;;39395:42;39411:4;39425;39432;39395:15;:42::i;:::-;39476:1;39460:13;;:17;39456:223;;;39502:35;39516:4;39523:13;;39502:5;:35::i;:::-;39569:13;:11;:13::i;:::-;39560:6;:22;;;;39605:14;:12;:14::i;:::-;39658:1;39642:13;:17;;;;39456:223;39360:334;39726:4;39716:14;;;;;:::i;:::-;;;38708:1034;39754:33;39770:4;39776:2;39780:6;39754:15;:33::i;:::-;35867:3928;;;;35754:4041;;;;:::o;17583:192::-;17669:7;17702:1;17697;:6;;17705:12;17689:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;17729:9;17745:1;17741;:5;;;;:::i;:::-;17729:17;;17766:1;17759:8;;;17583:192;;;;;:::o;35421:188::-;35538:5;35504:25;:31;35530:4;35504:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;35595:5;35561:40;;35589:4;35561:40;;;;;;;;;;;;35421:188;;:::o;12875:573::-;13033:1;13015:20;;:6;:20;;;13007:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;13117:1;13096:23;;:9;:23;;;13088:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;13172:47;13193:6;13201:9;13212:6;13172:20;:47::i;:::-;13252:71;13274:6;13252:71;;;;;;;;;;;;;;;;;:9;:17;13262:6;13252:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;13232:9;:17;13242:6;13232:17;;;;;;;;;;;;;;;:91;;;;13357:32;13382:6;13357:9;:20;13367:9;13357:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;13334:9;:20;13344:9;13334:20;;;;;;;;;;;;;;;:55;;;;13422:9;13405:35;;13414:6;13405:35;;;13433:6;13405:35;;;;;;:::i;:::-;;;;;;;;12875:573;;;:::o;40416:464::-;40455:23;40481:24;40499:4;40481:9;:24::i;:::-;40455:50;;40516:12;40571:1;40552:15;:20;40549:34;;40575:7;;;;40549:34;40637:2;40616:18;;:23;;;;:::i;:::-;40598:15;:41;40595:111;;;40692:2;40671:18;;:23;;;;:::i;:::-;40653:41;;40595:111;40718:33;40735:15;40718:16;:33::i;:::-;40788:1;40773:12;:16;;;;40823:9;;;;;;;;;;;40815:23;;40846:21;40815:57;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40802:70;;;;;40444:436;;40416:464;:::o;18034:471::-;18092:7;18342:1;18337;:6;18333:47;;18367:1;18360:8;;;;18333:47;18392:9;18408:1;18404;:5;;;;:::i;:::-;18392:17;;18437:1;18432;18428;:5;;;;:::i;:::-;:10;18420:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;18496:1;18489:8;;;18034:471;;;;;:::o;18981:132::-;19039:7;19066:39;19070:1;19073;19066:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;19059:46;;18981:132;;;;:::o;14446:418::-;14549:1;14530:21;;:7;:21;;;14522:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;14602:49;14623:7;14640:1;14644:6;14602:20;:49::i;:::-;14685:68;14708:6;14685:68;;;;;;;;;;;;;;;;;:9;:18;14695:7;14685:18;;;;;;;;;;;;;;;;:22;;:68;;;;;:::i;:::-;14664:9;:18;14674:7;14664:18;;;;;;;;;;;;;;;:89;;;;14779:24;14796:6;14779:12;;:16;;:24;;;;:::i;:::-;14764:12;:39;;;;14845:1;14819:37;;14828:7;14819:37;;;14849:6;14819:37;;;;;;:::i;:::-;;;;;;;;14446:418;;:::o;16285:125::-;;;;:::o;39803:601::-;39931:21;39969:1;39955:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39931:40;;40000:4;39982;39987:1;39982:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;40026:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40016:4;40021:1;40016:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;40061:62;40078:4;40093:15;40111:11;40061:8;:62::i;:::-;40162:15;:66;;;40243:11;40269:1;40313:4;40340;40360:15;40162:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39858:546;39803:601;:::o;19609:278::-;19695:7;19727:1;19723;:5;19730:12;19715:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;19754:9;19770:1;19766;:5;;;;:::i;:::-;19754:17;;19878:1;19871:8;;;19609:278;;;;;:::o;17144:136::-;17202:7;17229:43;17233:1;17236;17229:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;17222:50;;17144:136;;;;:::o;88:117:1:-;197:1;194;187:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:474::-;758:6;766;815:2;803:9;794:7;790:23;786:32;783:119;;;821:79;;:::i;:::-;783:119;941:1;966:53;1011:7;1002:6;991:9;987:22;966:53;:::i;:::-;956:63;;912:117;1068:2;1094:53;1139:7;1130:6;1119:9;1115:22;1094:53;:::i;:::-;1084:63;;1039:118;690:474;;;;;:::o;1170:118::-;1257:24;1275:5;1257:24;:::i;:::-;1252:3;1245:37;1170:118;;:::o;1294:222::-;1387:4;1425:2;1414:9;1410:18;1402:26;;1438:71;1506:1;1495:9;1491:17;1482:6;1438:71;:::i;:::-;1294:222;;;;:::o;1522:99::-;1574:6;1608:5;1602:12;1592:22;;1522:99;;;:::o;1627:169::-;1711:11;1745:6;1740:3;1733:19;1785:4;1780:3;1776:14;1761:29;;1627:169;;;;:::o;1802:246::-;1883:1;1893:113;1907:6;1904:1;1901:13;1893:113;;;1992:1;1987:3;1983:11;1977:18;1973:1;1968:3;1964:11;1957:39;1929:2;1926:1;1922:10;1917:15;;1893:113;;;2040:1;2031:6;2026:3;2022:16;2015:27;1864:184;1802:246;;;:::o;2054:102::-;2095:6;2146:2;2142:7;2137:2;2130:5;2126:14;2122:28;2112:38;;2054:102;;;:::o;2162:377::-;2250:3;2278:39;2311:5;2278:39;:::i;:::-;2333:71;2397:6;2392:3;2333:71;:::i;:::-;2326:78;;2413:65;2471:6;2466:3;2459:4;2452:5;2448:16;2413:65;:::i;:::-;2503:29;2525:6;2503:29;:::i;:::-;2498:3;2494:39;2487:46;;2254:285;2162:377;;;;:::o;2545:313::-;2658:4;2696:2;2685:9;2681:18;2673:26;;2745:9;2739:4;2735:20;2731:1;2720:9;2716:17;2709:47;2773:78;2846:4;2837:6;2773:78;:::i;:::-;2765:86;;2545:313;;;;:::o;2864:126::-;2901:7;2941:42;2934:5;2930:54;2919:65;;2864:126;;;:::o;2996:96::-;3033:7;3062:24;3080:5;3062:24;:::i;:::-;3051:35;;2996:96;;;:::o;3098:122::-;3171:24;3189:5;3171:24;:::i;:::-;3164:5;3161:35;3151:63;;3210:1;3207;3200:12;3151:63;3098:122;:::o;3226:139::-;3272:5;3310:6;3297:20;3288:29;;3326:33;3353:5;3326:33;:::i;:::-;3226:139;;;;:::o;3371:474::-;3439:6;3447;3496:2;3484:9;3475:7;3471:23;3467:32;3464:119;;;3502:79;;:::i;:::-;3464:119;3622:1;3647:53;3692:7;3683:6;3672:9;3668:22;3647:53;:::i;:::-;3637:63;;3593:117;3749:2;3775:53;3820:7;3811:6;3800:9;3796:22;3775:53;:::i;:::-;3765:63;;3720:118;3371:474;;;;;:::o;3851:90::-;3885:7;3928:5;3921:13;3914:21;3903:32;;3851:90;;;:::o;3947:109::-;4028:21;4043:5;4028:21;:::i;:::-;4023:3;4016:34;3947:109;;:::o;4062:210::-;4149:4;4187:2;4176:9;4172:18;4164:26;;4200:65;4262:1;4251:9;4247:17;4238:6;4200:65;:::i;:::-;4062:210;;;;:::o;4278:329::-;4337:6;4386:2;4374:9;4365:7;4361:23;4357:32;4354:119;;;4392:79;;:::i;:::-;4354:119;4512:1;4537:53;4582:7;4573:6;4562:9;4558:22;4537:53;:::i;:::-;4527:63;;4483:117;4278:329;;;;:::o;4613:::-;4672:6;4721:2;4709:9;4700:7;4696:23;4692:32;4689:119;;;4727:79;;:::i;:::-;4689:119;4847:1;4872:53;4917:7;4908:6;4897:9;4893:22;4872:53;:::i;:::-;4862:63;;4818:117;4613:329;;;;:::o;4948:60::-;4976:3;4997:5;4990:12;;4948:60;;;:::o;5014:142::-;5064:9;5097:53;5115:34;5124:24;5142:5;5124:24;:::i;:::-;5115:34;:::i;:::-;5097:53;:::i;:::-;5084:66;;5014:142;;;:::o;5162:126::-;5212:9;5245:37;5276:5;5245:37;:::i;:::-;5232:50;;5162:126;;;:::o;5294:153::-;5371:9;5404:37;5435:5;5404:37;:::i;:::-;5391:50;;5294:153;;;:::o;5453:185::-;5567:64;5625:5;5567:64;:::i;:::-;5562:3;5555:77;5453:185;;:::o;5644:276::-;5764:4;5802:2;5791:9;5787:18;5779:26;;5815:98;5910:1;5899:9;5895:17;5886:6;5815:98;:::i;:::-;5644:276;;;;:::o;5926:619::-;6003:6;6011;6019;6068:2;6056:9;6047:7;6043:23;6039:32;6036:119;;;6074:79;;:::i;:::-;6036:119;6194:1;6219:53;6264:7;6255:6;6244:9;6240:22;6219:53;:::i;:::-;6209:63;;6165:117;6321:2;6347:53;6392:7;6383:6;6372:9;6368:22;6347:53;:::i;:::-;6337:63;;6292:118;6449:2;6475:53;6520:7;6511:6;6500:9;6496:22;6475:53;:::i;:::-;6465:63;;6420:118;5926:619;;;;;:::o;6551:118::-;6638:24;6656:5;6638:24;:::i;:::-;6633:3;6626:37;6551:118;;:::o;6675:222::-;6768:4;6806:2;6795:9;6791:18;6783:26;;6819:71;6887:1;6876:9;6872:17;6863:6;6819:71;:::i;:::-;6675:222;;;;:::o;6903:86::-;6938:7;6978:4;6971:5;6967:16;6956:27;;6903:86;;;:::o;6995:112::-;7078:22;7094:5;7078:22;:::i;:::-;7073:3;7066:35;6995:112;;:::o;7113:214::-;7202:4;7240:2;7229:9;7225:18;7217:26;;7253:67;7317:1;7306:9;7302:17;7293:6;7253:67;:::i;:::-;7113:214;;;;:::o;7333:116::-;7403:21;7418:5;7403:21;:::i;:::-;7396:5;7393:32;7383:60;;7439:1;7436;7429:12;7383:60;7333:116;:::o;7455:133::-;7498:5;7536:6;7523:20;7514:29;;7552:30;7576:5;7552:30;:::i;:::-;7455:133;;;;:::o;7594:468::-;7659:6;7667;7716:2;7704:9;7695:7;7691:23;7687:32;7684:119;;;7722:79;;:::i;:::-;7684:119;7842:1;7867:53;7912:7;7903:6;7892:9;7888:22;7867:53;:::i;:::-;7857:63;;7813:117;7969:2;7995:50;8037:7;8028:6;8017:9;8013:22;7995:50;:::i;:::-;7985:60;;7940:115;7594:468;;;;;:::o;8068:474::-;8136:6;8144;8193:2;8181:9;8172:7;8168:23;8164:32;8161:119;;;8199:79;;:::i;:::-;8161:119;8319:1;8344:53;8389:7;8380:6;8369:9;8365:22;8344:53;:::i;:::-;8334:63;;8290:117;8446:2;8472:53;8517:7;8508:6;8497:9;8493:22;8472:53;:::i;:::-;8462:63;;8417:118;8068:474;;;;;:::o;8548:182::-;8688:34;8684:1;8676:6;8672:14;8665:58;8548:182;:::o;8736:366::-;8878:3;8899:67;8963:2;8958:3;8899:67;:::i;:::-;8892:74;;8975:93;9064:3;8975:93;:::i;:::-;9093:2;9088:3;9084:12;9077:19;;8736:366;;;:::o;9108:419::-;9274:4;9312:2;9301:9;9297:18;9289:26;;9361:9;9355:4;9351:20;9347:1;9336:9;9332:17;9325:47;9389:131;9515:4;9389:131;:::i;:::-;9381:139;;9108:419;;;:::o;9533:180::-;9581:77;9578:1;9571:88;9678:4;9675:1;9668:15;9702:4;9699:1;9692:15;9719:191;9759:3;9778:20;9796:1;9778:20;:::i;:::-;9773:25;;9812:20;9830:1;9812:20;:::i;:::-;9807:25;;9855:1;9852;9848:9;9841:16;;9876:3;9873:1;9870:10;9867:36;;;9883:18;;:::i;:::-;9867:36;9719:191;;;;:::o;9916:180::-;9964:77;9961:1;9954:88;10061:4;10058:1;10051:15;10085:4;10082:1;10075:15;10102:320;10146:6;10183:1;10177:4;10173:12;10163:22;;10230:1;10224:4;10220:12;10251:18;10241:81;;10307:4;10299:6;10295:17;10285:27;;10241:81;10369:2;10361:6;10358:14;10338:18;10335:38;10332:84;;10388:18;;:::i;:::-;10332:84;10153:269;10102:320;;;:::o;10428:244::-;10568:34;10564:1;10556:6;10552:14;10545:58;10637:27;10632:2;10624:6;10620:15;10613:52;10428:244;:::o;10678:366::-;10820:3;10841:67;10905:2;10900:3;10841:67;:::i;:::-;10834:74;;10917:93;11006:3;10917:93;:::i;:::-;11035:2;11030:3;11026:12;11019:19;;10678:366;;;:::o;11050:419::-;11216:4;11254:2;11243:9;11239:18;11231:26;;11303:9;11297:4;11293:20;11289:1;11278:9;11274:17;11267:47;11331:131;11457:4;11331:131;:::i;:::-;11323:139;;11050:419;;;:::o;11475:225::-;11615:34;11611:1;11603:6;11599:14;11592:58;11684:8;11679:2;11671:6;11667:15;11660:33;11475:225;:::o;11706:366::-;11848:3;11869:67;11933:2;11928:3;11869:67;:::i;:::-;11862:74;;11945:93;12034:3;11945:93;:::i;:::-;12063:2;12058:3;12054:12;12047:19;;11706:366;;;:::o;12078:419::-;12244:4;12282:2;12271:9;12267:18;12259:26;;12331:9;12325:4;12321:20;12317:1;12306:9;12302:17;12295:47;12359:131;12485:4;12359:131;:::i;:::-;12351:139;;12078:419;;;:::o;12503:177::-;12643:29;12639:1;12631:6;12627:14;12620:53;12503:177;:::o;12686:366::-;12828:3;12849:67;12913:2;12908:3;12849:67;:::i;:::-;12842:74;;12925:93;13014:3;12925:93;:::i;:::-;13043:2;13038:3;13034:12;13027:19;;12686:366;;;:::o;13058:419::-;13224:4;13262:2;13251:9;13247:18;13239:26;;13311:9;13305:4;13301:20;13297:1;13286:9;13282:17;13275:47;13339:131;13465:4;13339:131;:::i;:::-;13331:139;;13058:419;;;:::o;13483:223::-;13623:34;13619:1;13611:6;13607:14;13600:58;13692:6;13687:2;13679:6;13675:15;13668:31;13483:223;:::o;13712:366::-;13854:3;13875:67;13939:2;13934:3;13875:67;:::i;:::-;13868:74;;13951:93;14040:3;13951:93;:::i;:::-;14069:2;14064:3;14060:12;14053:19;;13712:366;;;:::o;14084:419::-;14250:4;14288:2;14277:9;14273:18;14265:26;;14337:9;14331:4;14327:20;14323:1;14312:9;14308:17;14301:47;14365:131;14491:4;14365:131;:::i;:::-;14357:139;;14084:419;;;:::o;14509:221::-;14649:34;14645:1;14637:6;14633:14;14626:58;14718:4;14713:2;14705:6;14701:15;14694:29;14509:221;:::o;14736:366::-;14878:3;14899:67;14963:2;14958:3;14899:67;:::i;:::-;14892:74;;14975:93;15064:3;14975:93;:::i;:::-;15093:2;15088:3;15084:12;15077:19;;14736:366;;;:::o;15108:419::-;15274:4;15312:2;15301:9;15297:18;15289:26;;15361:9;15355:4;15351:20;15347:1;15336:9;15332:17;15325:47;15389:131;15515:4;15389:131;:::i;:::-;15381:139;;15108:419;;;:::o;15533:348::-;15573:7;15596:20;15614:1;15596:20;:::i;:::-;15591:25;;15630:20;15648:1;15630:20;:::i;:::-;15625:25;;15818:1;15750:66;15746:74;15743:1;15740:81;15735:1;15728:9;15721:17;15717:105;15714:131;;;15825:18;;:::i;:::-;15714:131;15873:1;15870;15866:9;15855:20;;15533:348;;;;:::o;15887:180::-;15935:77;15932:1;15925:88;16032:4;16029:1;16022:15;16056:4;16053:1;16046:15;16073:185;16113:1;16130:20;16148:1;16130:20;:::i;:::-;16125:25;;16164:20;16182:1;16164:20;:::i;:::-;16159:25;;16203:1;16193:35;;16208:18;;:::i;:::-;16193:35;16250:1;16247;16243:9;16238:14;;16073:185;;;;:::o;16264:224::-;16404:34;16400:1;16392:6;16388:14;16381:58;16473:7;16468:2;16460:6;16456:15;16449:32;16264:224;:::o;16494:366::-;16636:3;16657:67;16721:2;16716:3;16657:67;:::i;:::-;16650:74;;16733:93;16822:3;16733:93;:::i;:::-;16851:2;16846:3;16842:12;16835:19;;16494:366;;;:::o;16866:419::-;17032:4;17070:2;17059:9;17055:18;17047:26;;17119:9;17113:4;17109:20;17105:1;17094:9;17090:17;17083:47;17147:131;17273:4;17147:131;:::i;:::-;17139:139;;16866:419;;;:::o;17291:222::-;17431:34;17427:1;17419:6;17415:14;17408:58;17500:5;17495:2;17487:6;17483:15;17476:30;17291:222;:::o;17519:366::-;17661:3;17682:67;17746:2;17741:3;17682:67;:::i;:::-;17675:74;;17758:93;17847:3;17758:93;:::i;:::-;17876:2;17871:3;17867:12;17860:19;;17519:366;;;:::o;17891:419::-;18057:4;18095:2;18084:9;18080:18;18072:26;;18144:9;18138:4;18134:20;18130:1;18119:9;18115:17;18108:47;18172:131;18298:4;18172:131;:::i;:::-;18164:139;;17891:419;;;:::o;18316:172::-;18456:24;18452:1;18444:6;18440:14;18433:48;18316:172;:::o;18494:366::-;18636:3;18657:67;18721:2;18716:3;18657:67;:::i;:::-;18650:74;;18733:93;18822:3;18733:93;:::i;:::-;18851:2;18846:3;18842:12;18835:19;;18494:366;;;:::o;18866:419::-;19032:4;19070:2;19059:9;19055:18;19047:26;;19119:9;19113:4;19109:20;19105:1;19094:9;19090:17;19083:47;19147:131;19273:4;19147:131;:::i;:::-;19139:139;;18866:419;;;:::o;19291:297::-;19431:34;19427:1;19419:6;19415:14;19408:58;19500:34;19495:2;19487:6;19483:15;19476:59;19569:11;19564:2;19556:6;19552:15;19545:36;19291:297;:::o;19594:366::-;19736:3;19757:67;19821:2;19816:3;19757:67;:::i;:::-;19750:74;;19833:93;19922:3;19833:93;:::i;:::-;19951:2;19946:3;19942:12;19935:19;;19594:366;;;:::o;19966:419::-;20132:4;20170:2;20159:9;20155:18;20147:26;;20219:9;20213:4;20209:20;20205:1;20194:9;20190:17;20183:47;20247:131;20373:4;20247:131;:::i;:::-;20239:139;;19966:419;;;:::o;20391:240::-;20531:34;20527:1;20519:6;20515:14;20508:58;20600:23;20595:2;20587:6;20583:15;20576:48;20391:240;:::o;20637:366::-;20779:3;20800:67;20864:2;20859:3;20800:67;:::i;:::-;20793:74;;20876:93;20965:3;20876:93;:::i;:::-;20994:2;20989:3;20985:12;20978:19;;20637:366;;;:::o;21009:419::-;21175:4;21213:2;21202:9;21198:18;21190:26;;21262:9;21256:4;21252:20;21248:1;21237:9;21233:17;21226:47;21290:131;21416:4;21290:131;:::i;:::-;21282:139;;21009:419;;;:::o;21434:169::-;21574:21;21570:1;21562:6;21558:14;21551:45;21434:169;:::o;21609:366::-;21751:3;21772:67;21836:2;21831:3;21772:67;:::i;:::-;21765:74;;21848:93;21937:3;21848:93;:::i;:::-;21966:2;21961:3;21957:12;21950:19;;21609:366;;;:::o;21981:419::-;22147:4;22185:2;22174:9;22170:18;22162:26;;22234:9;22228:4;22224:20;22220:1;22209:9;22205:17;22198:47;22262:131;22388:4;22262:131;:::i;:::-;22254:139;;21981:419;;;:::o;22406:241::-;22546:34;22542:1;22534:6;22530:14;22523:58;22615:24;22610:2;22602:6;22598:15;22591:49;22406:241;:::o;22653:366::-;22795:3;22816:67;22880:2;22875:3;22816:67;:::i;:::-;22809:74;;22892:93;22981:3;22892:93;:::i;:::-;23010:2;23005:3;23001:12;22994:19;;22653:366;;;:::o;23025:419::-;23191:4;23229:2;23218:9;23214:18;23206:26;;23278:9;23272:4;23268:20;23264:1;23253:9;23249:17;23242:47;23306:131;23432:4;23306:131;:::i;:::-;23298:139;;23025:419;;;:::o;23450:194::-;23490:4;23510:20;23528:1;23510:20;:::i;:::-;23505:25;;23544:20;23562:1;23544:20;:::i;:::-;23539:25;;23588:1;23585;23581:9;23573:17;;23612:1;23606:4;23603:11;23600:37;;;23617:18;;:::i;:::-;23600:37;23450:194;;;;:::o;23650:147::-;23751:11;23788:3;23773:18;;23650:147;;;;:::o;23803:114::-;;:::o;23923:398::-;24082:3;24103:83;24184:1;24179:3;24103:83;:::i;:::-;24096:90;;24195:93;24284:3;24195:93;:::i;:::-;24313:1;24308:3;24304:11;24297:18;;23923:398;;;:::o;24327:379::-;24511:3;24533:147;24676:3;24533:147;:::i;:::-;24526:154;;24697:3;24690:10;;24327:379;;;:::o;24712:220::-;24852:34;24848:1;24840:6;24836:14;24829:58;24921:3;24916:2;24908:6;24904:15;24897:28;24712:220;:::o;24938:366::-;25080:3;25101:67;25165:2;25160:3;25101:67;:::i;:::-;25094:74;;25177:93;25266:3;25177:93;:::i;:::-;25295:2;25290:3;25286:12;25279:19;;24938:366;;;:::o;25310:419::-;25476:4;25514:2;25503:9;25499:18;25491:26;;25563:9;25557:4;25553:20;25549:1;25538:9;25534:17;25527:47;25591:131;25717:4;25591:131;:::i;:::-;25583:139;;25310:419;;;:::o;25735:220::-;25875:34;25871:1;25863:6;25859:14;25852:58;25944:3;25939:2;25931:6;25927:15;25920:28;25735:220;:::o;25961:366::-;26103:3;26124:67;26188:2;26183:3;26124:67;:::i;:::-;26117:74;;26200:93;26289:3;26200:93;:::i;:::-;26318:2;26313:3;26309:12;26302:19;;25961:366;;;:::o;26333:419::-;26499:4;26537:2;26526:9;26522:18;26514:26;;26586:9;26580:4;26576:20;26572:1;26561:9;26557:17;26550:47;26614:131;26740:4;26614:131;:::i;:::-;26606:139;;26333:419;;;:::o;26758:180::-;26806:77;26803:1;26796:88;26903:4;26900:1;26893:15;26927:4;26924:1;26917:15;26944:180;26992:77;26989:1;26982:88;27089:4;27086:1;27079:15;27113:4;27110:1;27103:15;27130:143;27187:5;27218:6;27212:13;27203:22;;27234:33;27261:5;27234:33;:::i;:::-;27130:143;;;;:::o;27279:351::-;27349:6;27398:2;27386:9;27377:7;27373:23;27369:32;27366:119;;;27404:79;;:::i;:::-;27366:119;27524:1;27549:64;27605:7;27596:6;27585:9;27581:22;27549:64;:::i;:::-;27539:74;;27495:128;27279:351;;;;:::o;27636:85::-;27681:7;27710:5;27699:16;;27636:85;;;:::o;27727:158::-;27785:9;27818:61;27836:42;27845:32;27871:5;27845:32;:::i;:::-;27836:42;:::i;:::-;27818:61;:::i;:::-;27805:74;;27727:158;;;:::o;27891:147::-;27986:45;28025:5;27986:45;:::i;:::-;27981:3;27974:58;27891:147;;:::o;28044:114::-;28111:6;28145:5;28139:12;28129:22;;28044:114;;;:::o;28164:184::-;28263:11;28297:6;28292:3;28285:19;28337:4;28332:3;28328:14;28313:29;;28164:184;;;;:::o;28354:132::-;28421:4;28444:3;28436:11;;28474:4;28469:3;28465:14;28457:22;;28354:132;;;:::o;28492:108::-;28569:24;28587:5;28569:24;:::i;:::-;28564:3;28557:37;28492:108;;:::o;28606:179::-;28675:10;28696:46;28738:3;28730:6;28696:46;:::i;:::-;28774:4;28769:3;28765:14;28751:28;;28606:179;;;;:::o;28791:113::-;28861:4;28893;28888:3;28884:14;28876:22;;28791:113;;;:::o;28940:732::-;29059:3;29088:54;29136:5;29088:54;:::i;:::-;29158:86;29237:6;29232:3;29158:86;:::i;:::-;29151:93;;29268:56;29318:5;29268:56;:::i;:::-;29347:7;29378:1;29363:284;29388:6;29385:1;29382:13;29363:284;;;29464:6;29458:13;29491:63;29550:3;29535:13;29491:63;:::i;:::-;29484:70;;29577:60;29630:6;29577:60;:::i;:::-;29567:70;;29423:224;29410:1;29407;29403:9;29398:14;;29363:284;;;29367:14;29663:3;29656:10;;29064:608;;;28940:732;;;;:::o;29678:831::-;29941:4;29979:3;29968:9;29964:19;29956:27;;29993:71;30061:1;30050:9;30046:17;30037:6;29993:71;:::i;:::-;30074:80;30150:2;30139:9;30135:18;30126:6;30074:80;:::i;:::-;30201:9;30195:4;30191:20;30186:2;30175:9;30171:18;30164:48;30229:108;30332:4;30323:6;30229:108;:::i;:::-;30221:116;;30347:72;30415:2;30404:9;30400:18;30391:6;30347:72;:::i;:::-;30429:73;30497:3;30486:9;30482:19;30473:6;30429:73;:::i;:::-;29678:831;;;;;;;;:::o

Swarm Source

ipfs://5f01d398abf38010340f5cc23000d9402ecf759d502ce6a18dcdff82257d8af6
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.