ETH Price: $3,415.31 (-1.61%)
Gas: 12 Gwei

Token

Stoned DAO (STONED)
 

Overview

Max Total Supply

1,000,000,000 STONED

Holders

16

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
3,311,713.93939928173741783 STONED

Value
$0.00
0x3cafaf6feceb110360ef6feabfb3d30fea8df345
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:
StonedDAO

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

// File: StonedDao_flat.sol


// File: StonedDao.sol


pragma solidity 0.8.15;

/*

    The first complete ecosystem related to the world of therapeutic cannabis and CBD culture.
    Empowering cannabis with blockchain technology. $STONED


    https://t.me/StonedDAO

    https://StonedDao.org




/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}



/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. 
 *
 * This contract is only required for intermediate, library-like contracts.
 */

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

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

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 */

abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        _setOwner(_msgSender());
    }

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

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

    function renounceOwnership() public virtual onlyOwner {
        _setOwner(address(0));
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

/**
 * @dev Implementation of the {IERC20} interface.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     */
    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.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

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

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

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `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}.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

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

        return true;
    }


    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.

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

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     */
    function _createInitialTotalSupply(address account, uint256 amount) internal virtual {
        require(account != address(0));

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

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

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

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     */
    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
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens.
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}


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

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

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SignedSafeMath` is no longer needed starting with Solidity 0.8. The compiler
 * now has built in overflow checking.
 */
library SignedSafeMath {
    /**
     * @dev Returns the multiplication of two signed integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(int256 a, int256 b) internal pure returns (int256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two signed integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(int256 a, int256 b) internal pure returns (int256) {
        return a / b;
    }

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

    /**
     * @dev Returns the addition of two signed integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(int256 a, int256 b) internal pure returns (int256) {
        return a + b;
    }
}

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // 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 (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @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) {
        return a + b;
    }

    /**
     * @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 a - b;
    }

    /**
     * @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) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting 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 a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting 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) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * 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) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

/**
 * @dev Wrappers over Solidity's uintXX/intXX casting operators with added overflow
 * checks.
 */
library SafeCast {
    /**
     * @dev Returns the downcasted uint224 from uint256, reverting on
     * overflow (when the input is greater than largest uint224).
     *
     * Counterpart to Solidity's `uint224` operator.
     *
     * Requirements:
     *
     * - input must fit into 224 bits
     */
    function toUint224(uint256 value) internal pure returns (uint224) {
        require(value <= type(uint224).max, "SafeCast: value doesn't fit in 224 bits");
        return uint224(value);
    }

    /**
     * @dev Returns the downcasted uint128 from uint256, reverting on
     * overflow (when the input is greater than largest uint128).
     *
     * Counterpart to Solidity's `uint128` operator.
     *
     * Requirements:
     *
     * - input must fit into 128 bits
     */
    function toUint128(uint256 value) internal pure returns (uint128) {
        require(value <= type(uint128).max, "SafeCast: value doesn't fit in 128 bits");
        return uint128(value);
    }

    /**
     * @dev Returns the downcasted uint96 from uint256, reverting on
     * overflow (when the input is greater than largest uint96).
     *
     * Counterpart to Solidity's `uint96` operator.
     *
     * Requirements:
     *
     * - input must fit into 96 bits
     */
    function toUint96(uint256 value) internal pure returns (uint96) {
        require(value <= type(uint96).max, "SafeCast: value doesn't fit in 96 bits");
        return uint96(value);
    }

    /**
     * @dev Returns the downcasted uint64 from uint256, reverting on
     * overflow (when the input is greater than largest uint64).
     *
     * Counterpart to Solidity's `uint64` operator.
     *
     * Requirements:
     *
     * - input must fit into 64 bits
     */
    function toUint64(uint256 value) internal pure returns (uint64) {
        require(value <= type(uint64).max, "SafeCast: value doesn't fit in 64 bits");
        return uint64(value);
    }

    /**
     * @dev Returns the downcasted uint32 from uint256, reverting on
     * overflow (when the input is greater than largest uint32).
     *
     * Counterpart to Solidity's `uint32` operator.
     *
     * Requirements:
     *
     * - input must fit into 32 bits
     */
    function toUint32(uint256 value) internal pure returns (uint32) {
        require(value <= type(uint32).max, "SafeCast: value doesn't fit in 32 bits");
        return uint32(value);
    }

    /**
     * @dev Returns the downcasted uint16 from uint256, reverting on
     * overflow (when the input is greater than largest uint16).
     *
     * Counterpart to Solidity's `uint16` operator.
     *
     * Requirements:
     *
     * - input must fit into 16 bits
     */
    function toUint16(uint256 value) internal pure returns (uint16) {
        require(value <= type(uint16).max, "SafeCast: value doesn't fit in 16 bits");
        return uint16(value);
    }

    /**
     * @dev Returns the downcasted uint8 from uint256, reverting on
     * overflow (when the input is greater than largest uint8).
     *
     * Counterpart to Solidity's `uint8` operator.
     *
     * Requirements:
     *
     * - input must fit into 8 bits.
     */
    function toUint8(uint256 value) internal pure returns (uint8) {
        require(value <= type(uint8).max, "SafeCast: value doesn't fit in 8 bits");
        return uint8(value);
    }

    /**
     * @dev Converts a signed int256 into an unsigned uint256.
     *
     * Requirements:
     *
     * - input must be greater than or equal to 0.
     */
    function toUint256(int256 value) internal pure returns (uint256) {
        require(value >= 0, "SafeCast: value must be positive");
        return uint256(value);
    }

    /**
     * @dev Returns the downcasted int128 from int256, reverting on
     * overflow (when the input is less than smallest int128 or
     * greater than largest int128).
     *
     * Counterpart to Solidity's `int128` operator.
     *
     * Requirements:
     *
     * - input must fit into 128 bits
     *
     * _Available since v3.1._
     */
    function toInt128(int256 value) internal pure returns (int128) {
        require(value >= type(int128).min && value <= type(int128).max, "SafeCast: value doesn't fit in 128 bits");
        return int128(value);
    }

    /**
     * @dev Returns the downcasted int64 from int256, reverting on
     * overflow (when the input is less than smallest int64 or
     * greater than largest int64).
     *
     * Counterpart to Solidity's `int64` operator.
     *
     * Requirements:
     *
     * - input must fit into 64 bits
     *
     * _Available since v3.1._
     */
    function toInt64(int256 value) internal pure returns (int64) {
        require(value >= type(int64).min && value <= type(int64).max, "SafeCast: value doesn't fit in 64 bits");
        return int64(value);
    }

    /**
     * @dev Returns the downcasted int32 from int256, reverting on
     * overflow (when the input is less than smallest int32 or
     * greater than largest int32).
     *
     * Counterpart to Solidity's `int32` operator.
     *
     * Requirements:
     *
     * - input must fit into 32 bits
     *
     * _Available since v3.1._
     */
    function toInt32(int256 value) internal pure returns (int32) {
        require(value >= type(int32).min && value <= type(int32).max, "SafeCast: value doesn't fit in 32 bits");
        return int32(value);
    }

    /**
     * @dev Returns the downcasted int16 from int256, reverting on
     * overflow (when the input is less than smallest int16 or
     * greater than largest int16).
     *
     * Counterpart to Solidity's `int16` operator.
     *
     * Requirements:
     *
     * - input must fit into 16 bits
     *
     * _Available since v3.1._
     */
    function toInt16(int256 value) internal pure returns (int16) {
        require(value >= type(int16).min && value <= type(int16).max, "SafeCast: value doesn't fit in 16 bits");
        return int16(value);
    }

    /**
     * @dev Returns the downcasted int8 from int256, reverting on
     * overflow (when the input is less than smallest int8 or
     * greater than largest int8).
     *
     * Counterpart to Solidity's `int8` operator.
     *
     * Requirements:
     *
     * - input must fit into 8 bits.
     *
     * _Available since v3.1._
     */
    function toInt8(int256 value) internal pure returns (int8) {
        require(value >= type(int8).min && value <= type(int8).max, "SafeCast: value doesn't fit in 8 bits");
        return int8(value);
    }

    /**
     * @dev Converts an unsigned uint256 into a signed int256.
     *
     * Requirements:
     *
     * - input must be less than or equal to maxInt256.
     */
    function toInt256(uint256 value) internal pure returns (int256) {
        // Note: Unsafe cast below is okay because `type(int256).max` is guaranteed to be positive
        require(value <= uint256(type(int256).max), "SafeCast: value doesn't fit in an int256");
        return int256(value);
    }
}

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

    bool private inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    bool private isOpen = false;

    uint256 public liquidityFee = 1;
    uint256 public marketingFee = 1;
    uint256 public devFee = 1;
    uint256 public sellLiquidityFee = 2;
    uint256 public sellMarketingFee = 2;
    uint256 public sellDevFee = 1;
    uint256 public maxTransactionAmount = 20000000 * (10**18);
    uint256 public maxWalletToken = 40000000 * (10**18);
    uint256 public swapTokensAtAmount = 500000 * (10**18);

    IUniswapV2Router02 public uniswapV2Router;
    address public immutable uniswapV2Pair;

    mapping(address => bool) public _isBlacklisted;

    address payable public marketingWallet = payable(0x05cd9b419ef015460a5A52a1428181436ebB9f5b); 
    address payable public devWallet = payable(0x97A9FF0E51DBd08f08d5e33872940E225cf5A7AF);

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

    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    event SwapAndLiquify(uint256 tokensIntoLiqudity, uint256 ethReceived);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapETHForTokens(uint256 amountIn, address[] path);
    event ExcludeFromFees(address indexed account, bool isExcluded);


    constructor() ERC20("Stoned DAO", "STONED") {
    	IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
         // Create a uniswap pair for this new token
        address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = _uniswapV2Pair;

        // exclude from paying fees and max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(marketingWallet, true);
        excludeFromFees(devWallet, true);
        excludeFromFees(address(this), true);
        
        /*
          an internal function that is only called here, and CANNOT be called ever again
        */
        
        _createInitialTotalSupply(owner(), 1000000000 * (10**18));
    }

    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");
        bool excludedAccount = _isExcludedFromFees[from] || _isExcludedFromFees[to];
        require(isOpen || excludedAccount, "trading is not yet Open");
        require(!_isBlacklisted[from] && !_isBlacklisted[to], 'Blacklisted address');

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

         if(from==uniswapV2Pair && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]){
            uint256 contractBalanceRecepient = balanceOf(to);
            require(contractBalanceRecepient + amount <= maxWalletToken, "Exceeds maximum wallet token amount.");
        }
        
        if(to==uniswapV2Pair && !excludedAccount) {
            require(amount <= maxTransactionAmount, "amount exceeds the maxTransactionAmount.");
        }
        
    	uint256 contractTokenBalance = balanceOf(address(this));
        
        bool overMinTokenBalance = contractTokenBalance >= swapTokensAtAmount;
       
        if(overMinTokenBalance && !inSwapAndLiquify && to==uniswapV2Pair && swapAndLiquifyEnabled) {
            contractTokenBalance = swapTokensAtAmount;
            swapAndLiquify(contractTokenBalance);

        }

         // if any account belongs to _isExcludedFromFee account then remove the fee
        if(!excludedAccount) {
            uint256 fees;
            if(from==uniswapV2Pair) {
              fees  = amount.mul(liquidityFee.add(marketingFee).add(devFee)).div(100);
            }

            if(to==uniswapV2Pair) {
              fees  = amount.mul(sellLiquidityFee.add(sellMarketingFee).add(sellDevFee)).div(100);
            }

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

        super._transfer(from, to, amount);

    }

     function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        uint256 tokensForLiquidity = contractTokenBalance.mul(sellLiquidityFee).div(sellMarketingFee.add(sellLiquidityFee).add(sellDevFee));
        // split the Liquidity token balance into halves
        uint256 half = tokensForLiquidity.div(2);
        uint256 otherHalf = tokensForLiquidity.sub(half);

        // capture the contract's current ETH balance.
        // this is so that we can capture exactly the amount of ETH that the
        // swap creates, and not make the liquidity event include any ETH that
        // has been manually sent to the contract
        uint256 initialBalance = address(this).balance;

        // swap tokens for ETH
        swapTokensForEth(half); 

        // how much ETH did we just swap into?
        uint256 newBalance = address(this).balance.sub(initialBalance);

        // add liquidity to uniswap
        addLiquidity(otherHalf, newBalance);

        // swap and Send eth to wallets
        swapTokensForEth(contractTokenBalance.sub(tokensForLiquidity));
        devWallet.transfer(address(this).balance.mul(sellDevFee).div(sellMarketingFee.add(sellDevFee)));
        marketingWallet.transfer(address(this).balance);
       
        emit SwapAndLiquify(half, newBalance); 
    }

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

        if(allowance(address(this), address(uniswapV2Router)) < tokenAmount) {
          _approve(address(this), address(uniswapV2Router), ~uint256(0));
        }

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

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

     function excludeFromFees(address account, bool excluded) public onlyOwner {
        require(_isExcludedFromFees[account] != excluded, "Account is already the value of 'excluded'");
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }
    
    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }

    function openTrade() external onlyOwner {
        isOpen = true;
    }

    function setMaxWalletLimit(uint256 _newLimit) public onlyOwner {
        maxWalletToken = _newLimit;
        require(maxWalletToken >= totalSupply().div(200), "value too low");
    }

    function setMaxTxAmount(uint256 _maxTx) public onlyOwner {
        maxTransactionAmount = _maxTx;
        require(maxTransactionAmount >= totalSupply().div(1000000000), "value too low");
    }

    function updateBuyFees(uint256 _liquidityFee, uint256 _marketingFee, uint256 _devFee) public onlyOwner {
        require(_liquidityFee.add(_marketingFee).add(_devFee) <= 15, "tax too high");
        liquidityFee = _liquidityFee;
        marketingFee = _marketingFee;
        devFee = _devFee;
    }

     function updateSellFees(uint256 _liquidityFee, uint256 _marketingFee, uint256 _devFee) public onlyOwner {
        require(_liquidityFee.add(_marketingFee).add(_devFee) <= 15, "tax too high");
        sellLiquidityFee = _liquidityFee;
        sellMarketingFee = _marketingFee;
        sellDevFee = _devFee;
    }

    function updateWallets(address payable _marketingWallet, address payable _devWallet) public onlyOwner {
        marketingWallet = _marketingWallet;
        devWallet = _devWallet;
    }

    function setSwapTokensAtAmouunt(uint256 _newAmount) public onlyOwner {
        swapTokensAtAmount = _newAmount;
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

    function blacklistAddress(address account, bool value) external onlyOwner{
        _isBlacklisted[account] = value;
    }

    receive() external payable {

    }
  
}

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":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"blacklistAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletToken","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":"openTrade","outputs":[],"stateMutability":"nonpayable","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":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTx","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newLimit","type":"uint256"}],"name":"setMaxWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newAmount","type":"uint256"}],"name":"setSwapTokensAtAmouunt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_marketingWallet","type":"address"},{"internalType":"address payable","name":"_devWallet","type":"address"}],"name":"updateWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526001600560156101000a81548160ff0219169083151502179055506000600560166101000a81548160ff02191690831515021790555060016006556001600755600160085560026009556002600a556001600b556a108b2a2c28029094000000600c556a2116545850052128000000600d556969e10de76676d0800000600e557305cd9b419ef015460a5a52a1428181436ebb9f5b601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507397a9ff0e51dbd08f08d5e33872940e225cf5a7af601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200013b57600080fd5b506040518060400160405280600a81526020017f53746f6e65642044414f000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f53544f4e454400000000000000000000000000000000000000000000000000008152508160039081620001b9919062000b44565b508060049081620001cb919062000b44565b505050620001ee620001e2620004b960201b60201c565b620004c160201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000255573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200027b919062000c95565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002e3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000309919062000c95565b6040518363ffffffff1660e01b81526004016200032892919062000cd8565b6020604051808303816000875af115801562000348573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200036e919062000c95565b905081600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505062000407620003f96200058760201b60201c565b6001620005b160201b60201c565b6200043c601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620005b160201b60201c565b62000471601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620005b160201b60201c565b62000484306001620005b160201b60201c565b620004b1620004986200058760201b60201c565b6b033b2e3c9fd0803ce80000006200078060201b60201c565b505062000f14565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620005c1620004b960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620005e76200058760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000640576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006379062000d66565b60405180910390fd5b801515601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503620006d5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006cc9062000dfe565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000774919062000e3d565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620007ba57600080fd5b620007ce60008383620008c060201b60201c565b8060026000828254620007e2919062000e89565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000839919062000e89565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620008a0919062000ef7565b60405180910390a3620008bc60008383620008c560201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200094c57607f821691505b60208210810362000962576200096162000904565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620009cc7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200098d565b620009d886836200098d565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000a2562000a1f62000a1984620009f0565b620009fa565b620009f0565b9050919050565b6000819050919050565b62000a418362000a04565b62000a5962000a508262000a2c565b8484546200099a565b825550505050565b600090565b62000a7062000a61565b62000a7d81848462000a36565b505050565b5b8181101562000aa55762000a9960008262000a66565b60018101905062000a83565b5050565b601f82111562000af45762000abe8162000968565b62000ac9846200097d565b8101602085101562000ad9578190505b62000af162000ae8856200097d565b83018262000a82565b50505b505050565b600082821c905092915050565b600062000b196000198460080262000af9565b1980831691505092915050565b600062000b34838362000b06565b9150826002028217905092915050565b62000b4f82620008ca565b67ffffffffffffffff81111562000b6b5762000b6a620008d5565b5b62000b77825462000933565b62000b8482828562000aa9565b600060209050601f83116001811462000bbc576000841562000ba7578287015190505b62000bb3858262000b26565b86555062000c23565b601f19841662000bcc8662000968565b60005b8281101562000bf65784890151825560018201915060208501945060208101905062000bcf565b8683101562000c16578489015162000c12601f89168262000b06565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000c5d8262000c30565b9050919050565b62000c6f8162000c50565b811462000c7b57600080fd5b50565b60008151905062000c8f8162000c64565b92915050565b60006020828403121562000cae5762000cad62000c2b565b5b600062000cbe8482850162000c7e565b91505092915050565b62000cd28162000c50565b82525050565b600060408201905062000cef600083018562000cc7565b62000cfe602083018462000cc7565b9392505050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000d4e60208362000d05565b915062000d5b8262000d16565b602082019050919050565b6000602082019050818103600083015262000d818162000d3f565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b600062000de6602a8362000d05565b915062000df38262000d88565b604082019050919050565b6000602082019050818103600083015262000e198162000dd7565b9050919050565b60008115159050919050565b62000e378162000e20565b82525050565b600060208201905062000e54600083018462000e2c565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000e9682620009f0565b915062000ea383620009f0565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000edb5762000eda62000e5a565b5b828201905092915050565b62000ef181620009f0565b82525050565b600060208201905062000f0e600083018462000ee6565b92915050565b608051613c8462000f5360003960008181610bb301528181611d0301528181611e6201528181611f3e01528181611fc101526120670152613c846000f3fe6080604052600436106102295760003560e01c80638da5cb5b11610123578063c49b9a80116100ab578063e8ba854f1161006f578063e8ba854f1461081c578063ec28438a14610845578063f2fde38b1461086e578063f637434214610897578063fb201b1d146108c257610230565b8063c49b9a8014610735578063c8c8ebe41461075e578063dd62ed3e14610789578063e2f45605146107c6578063e6c75f71146107f157610230565b806398118cb4116100f257806398118cb414610650578063a0d82dc51461067b578063a9059cbb146106a6578063c0246668146106e3578063c17b5b8c1461070c57610230565b80638da5cb5b146105a45780638ea5220f146105cf57806392136913146105fa57806395d89b411461062557610230565b80634a74bb02116101b1578063715018a611610175578063715018a6146104e7578063728d41c9146104fe578063750c11b61461052757806375f0a874146105505780638095d5641461057b57610230565b80634a74bb02146103ec5780634fbee193146104175780636827e764146104545780636b67c4df1461047f57806370a08231146104aa57610230565b80631cdd3be3116101f85780631cdd3be3146102f357806323b872dd14610330578063313ce5671461036d578063455a43961461039857806349bd5a5e146103c157610230565b806306fdde0314610235578063095ea7b3146102605780631694505e1461029d57806318160ddd146102c857610230565b3661023057005b600080fd5b34801561024157600080fd5b5061024a6108d9565b6040516102579190612b0f565b60405180910390f35b34801561026c57600080fd5b5061028760048036038101906102829190612bca565b61096b565b6040516102949190612c25565b60405180910390f35b3480156102a957600080fd5b506102b2610989565b6040516102bf9190612c9f565b60405180910390f35b3480156102d457600080fd5b506102dd6109af565b6040516102ea9190612cc9565b60405180910390f35b3480156102ff57600080fd5b5061031a60048036038101906103159190612ce4565b6109b9565b6040516103279190612c25565b60405180910390f35b34801561033c57600080fd5b5061035760048036038101906103529190612d11565b6109d9565b6040516103649190612c25565b60405180910390f35b34801561037957600080fd5b50610382610ad1565b60405161038f9190612d80565b60405180910390f35b3480156103a457600080fd5b506103bf60048036038101906103ba9190612dc7565b610ada565b005b3480156103cd57600080fd5b506103d6610bb1565b6040516103e39190612e16565b60405180910390f35b3480156103f857600080fd5b50610401610bd5565b60405161040e9190612c25565b60405180910390f35b34801561042357600080fd5b5061043e60048036038101906104399190612ce4565b610be8565b60405161044b9190612c25565b60405180910390f35b34801561046057600080fd5b50610469610c3e565b6040516104769190612cc9565b60405180910390f35b34801561048b57600080fd5b50610494610c44565b6040516104a19190612cc9565b60405180910390f35b3480156104b657600080fd5b506104d160048036038101906104cc9190612ce4565b610c4a565b6040516104de9190612cc9565b60405180910390f35b3480156104f357600080fd5b506104fc610c92565b005b34801561050a57600080fd5b5061052560048036038101906105209190612e31565b610d1a565b005b34801561053357600080fd5b5061054e60048036038101906105499190612e31565b610dff565b005b34801561055c57600080fd5b50610565610e85565b6040516105729190612e7f565b60405180910390f35b34801561058757600080fd5b506105a2600480360381019061059d9190612e9a565b610eab565b005b3480156105b057600080fd5b506105b9610fa9565b6040516105c69190612e16565b60405180910390f35b3480156105db57600080fd5b506105e4610fd3565b6040516105f19190612e7f565b60405180910390f35b34801561060657600080fd5b5061060f610ff9565b60405161061c9190612cc9565b60405180910390f35b34801561063157600080fd5b5061063a610fff565b6040516106479190612b0f565b60405180910390f35b34801561065c57600080fd5b50610665611091565b6040516106729190612cc9565b60405180910390f35b34801561068757600080fd5b50610690611097565b60405161069d9190612cc9565b60405180910390f35b3480156106b257600080fd5b506106cd60048036038101906106c89190612bca565b61109d565b6040516106da9190612c25565b60405180910390f35b3480156106ef57600080fd5b5061070a60048036038101906107059190612dc7565b6110bb565b005b34801561071857600080fd5b50610733600480360381019061072e9190612e9a565b611272565b005b34801561074157600080fd5b5061075c60048036038101906107579190612eed565b611370565b005b34801561076a57600080fd5b50610773611440565b6040516107809190612cc9565b60405180910390f35b34801561079557600080fd5b506107b060048036038101906107ab9190612f1a565b611446565b6040516107bd9190612cc9565b60405180910390f35b3480156107d257600080fd5b506107db6114cd565b6040516107e89190612cc9565b60405180910390f35b3480156107fd57600080fd5b506108066114d3565b6040516108139190612cc9565b60405180910390f35b34801561082857600080fd5b50610843600480360381019061083e9190612f86565b6114d9565b005b34801561085157600080fd5b5061086c60048036038101906108679190612e31565b6115db565b005b34801561087a57600080fd5b5061089560048036038101906108909190612ce4565b6116c3565b005b3480156108a357600080fd5b506108ac6117ba565b6040516108b99190612cc9565b60405180910390f35b3480156108ce57600080fd5b506108d76117c0565b005b6060600380546108e890612ff5565b80601f016020809104026020016040519081016040528092919081815260200182805461091490612ff5565b80156109615780601f1061093657610100808354040283529160200191610961565b820191906000526020600020905b81548152906001019060200180831161094457829003601f168201915b5050505050905090565b600061097f610978611859565b8484611861565b6001905092915050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b60106020528060005260406000206000915054906101000a900460ff1681565b60006109e6848484611a2a565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610a31611859565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610ab1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa890613098565b60405180910390fd5b610ac585610abd611859565b858403611861565b60019150509392505050565b60006012905090565b610ae2611859565b73ffffffffffffffffffffffffffffffffffffffff16610b00610fa9565b73ffffffffffffffffffffffffffffffffffffffff1614610b56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4d90613104565b60405180910390fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600560159054906101000a900460ff1681565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60085481565b60075481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610c9a611859565b73ffffffffffffffffffffffffffffffffffffffff16610cb8610fa9565b73ffffffffffffffffffffffffffffffffffffffff1614610d0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0590613104565b60405180910390fd5b610d18600061214b565b565b610d22611859565b73ffffffffffffffffffffffffffffffffffffffff16610d40610fa9565b73ffffffffffffffffffffffffffffffffffffffff1614610d96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8d90613104565b60405180910390fd5b80600d81905550610db860c8610daa6109af565b61221190919063ffffffff16565b600d541015610dfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df390613170565b60405180910390fd5b50565b610e07611859565b73ffffffffffffffffffffffffffffffffffffffff16610e25610fa9565b73ffffffffffffffffffffffffffffffffffffffff1614610e7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7290613104565b60405180910390fd5b80600e8190555050565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610eb3611859565b73ffffffffffffffffffffffffffffffffffffffff16610ed1610fa9565b73ffffffffffffffffffffffffffffffffffffffff1614610f27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1e90613104565b60405180910390fd5b600f610f4e82610f40858761222790919063ffffffff16565b61222790919063ffffffff16565b1115610f8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f86906131dc565b60405180910390fd5b826006819055508160078190555080600881905550505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a5481565b60606004805461100e90612ff5565b80601f016020809104026020016040519081016040528092919081815260200182805461103a90612ff5565b80156110875780601f1061105c57610100808354040283529160200191611087565b820191906000526020600020905b81548152906001019060200180831161106a57829003601f168201915b5050505050905090565b60065481565b600b5481565b60006110b16110aa611859565b8484611a2a565b6001905092915050565b6110c3611859565b73ffffffffffffffffffffffffffffffffffffffff166110e1610fa9565b73ffffffffffffffffffffffffffffffffffffffff1614611137576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112e90613104565b60405180910390fd5b801515601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515036111c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c09061326e565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516112669190612c25565b60405180910390a25050565b61127a611859565b73ffffffffffffffffffffffffffffffffffffffff16611298610fa9565b73ffffffffffffffffffffffffffffffffffffffff16146112ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e590613104565b60405180910390fd5b600f61131582611307858761222790919063ffffffff16565b61222790919063ffffffff16565b1115611356576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134d906131dc565b60405180910390fd5b8260098190555081600a8190555080600b81905550505050565b611378611859565b73ffffffffffffffffffffffffffffffffffffffff16611396610fa9565b73ffffffffffffffffffffffffffffffffffffffff16146113ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e390613104565b60405180910390fd5b80600560156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516114359190612c25565b60405180910390a150565b600c5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600e5481565b600d5481565b6114e1611859565b73ffffffffffffffffffffffffffffffffffffffff166114ff610fa9565b73ffffffffffffffffffffffffffffffffffffffff1614611555576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154c90613104565b60405180910390fd5b81601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6115e3611859565b73ffffffffffffffffffffffffffffffffffffffff16611601610fa9565b73ffffffffffffffffffffffffffffffffffffffff1614611657576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164e90613104565b60405180910390fd5b80600c8190555061167c633b9aca0061166e6109af565b61221190919063ffffffff16565b600c5410156116c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b790613170565b60405180910390fd5b50565b6116cb611859565b73ffffffffffffffffffffffffffffffffffffffff166116e9610fa9565b73ffffffffffffffffffffffffffffffffffffffff161461173f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173690613104565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036117ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a590613300565b60405180910390fd5b6117b78161214b565b50565b60095481565b6117c8611859565b73ffffffffffffffffffffffffffffffffffffffff166117e6610fa9565b73ffffffffffffffffffffffffffffffffffffffff161461183c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183390613104565b60405180910390fd5b6001600560166101000a81548160ff021916908315150217905550565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036118d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c790613392565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361193f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193690613424565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611a1d9190612cc9565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611a99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a90906134b6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aff90613548565b60405180910390fd5b6000601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611bab5750601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b9050600560169054906101000a900460ff1680611bc55750805b611c04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bfb906135b4565b60405180910390fd5b601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611ca85750601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b611ce7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cde90613620565b60405180910390fd5b60008203611d0157611cfb8484600061223d565b50612146565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015611da65750601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611dfc5750601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611e60576000611e0c84610c4a565b9050600d548382611e1d919061366f565b1115611e5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5590613737565b60405180910390fd5b505b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015611eb9575080155b15611f0457600c54821115611f03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611efa906137c9565b60405180910390fd5b5b6000611f0f30610c4a565b90506000600e548210159050808015611f355750600560149054906101000a900460ff16155b8015611f8c57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b8015611fa45750600560159054906101000a900460ff165b15611fb857600e549150611fb7826124bc565b5b826121375760007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff160361206557612062606461205461204560085461203760075460065461222790919063ffffffff16565b61222790919063ffffffff16565b8861270f90919063ffffffff16565b61221190919063ffffffff16565b90505b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff160361210b5761210860646120fa6120eb600b546120dd600a5460095461222790919063ffffffff16565b61222790919063ffffffff16565b8861270f90919063ffffffff16565b61221190919063ffffffff16565b90505b61211e818661272590919063ffffffff16565b945060008111156121355761213487308361223d565b5b505b61214286868661223d565b5050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000818361221f9190613818565b905092915050565b60008183612235919061366f565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036122ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a3906134b6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361231b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231290613548565b60405180910390fd5b61232683838361273b565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156123ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a3906138bb565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461243f919061366f565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516124a39190612cc9565b60405180910390a36124b6848484612740565b50505050565b6001600560146101000a81548160ff021916908315150217905550600061252a612507600b546124f9600954600a5461222790919063ffffffff16565b61222790919063ffffffff16565b61251c6009548561270f90919063ffffffff16565b61221190919063ffffffff16565b9050600061254260028361221190919063ffffffff16565b90506000612559828461272590919063ffffffff16565b9050600047905061256983612745565b600061257e824761272590919063ffffffff16565b905061258a83826129be565b6125a56125a0868861272590919063ffffffff16565b612745565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc61261e6125fb600b54600a5461222790919063ffffffff16565b612610600b544761270f90919063ffffffff16565b61221190919063ffffffff16565b9081150290604051600060405180830381858888f19350505050158015612649573d6000803e3d6000fd5b50601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156126b2573d6000803e3d6000fd5b507f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f838148684826040516126e49291906138db565b60405180910390a150505050506000600560146101000a81548160ff02191690831515021790555050565b6000818361271d9190613904565b905092915050565b60008183612733919061395e565b905092915050565b505050565b505050565b6000600267ffffffffffffffff81111561276257612761613992565b5b6040519080825280602002602001820160405280156127905781602001602082028036833780820191505090505b50905030816000815181106127a8576127a76139c1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561284f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128739190613a05565b81600181518110612887576128866139c1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050816128ee30600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611446565b10156129245761292330600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600019611861565b5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612988959493929190613b2b565b600060405180830381600087803b1580156129a257600080fd5b505af11580156129b6573d6000803e3d6000fd5b505050505050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080612a0a610fa9565b426040518863ffffffff1660e01b8152600401612a2c96959493929190613b85565b60606040518083038185885af1158015612a4a573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612a6f9190613bfb565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612ab0578082015181840152602081019050612a95565b83811115612abf576000848401525b50505050565b6000601f19601f8301169050919050565b6000612ae182612a76565b612aeb8185612a81565b9350612afb818560208601612a92565b612b0481612ac5565b840191505092915050565b60006020820190508181036000830152612b298184612ad6565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612b6182612b36565b9050919050565b612b7181612b56565b8114612b7c57600080fd5b50565b600081359050612b8e81612b68565b92915050565b6000819050919050565b612ba781612b94565b8114612bb257600080fd5b50565b600081359050612bc481612b9e565b92915050565b60008060408385031215612be157612be0612b31565b5b6000612bef85828601612b7f565b9250506020612c0085828601612bb5565b9150509250929050565b60008115159050919050565b612c1f81612c0a565b82525050565b6000602082019050612c3a6000830184612c16565b92915050565b6000819050919050565b6000612c65612c60612c5b84612b36565b612c40565b612b36565b9050919050565b6000612c7782612c4a565b9050919050565b6000612c8982612c6c565b9050919050565b612c9981612c7e565b82525050565b6000602082019050612cb46000830184612c90565b92915050565b612cc381612b94565b82525050565b6000602082019050612cde6000830184612cba565b92915050565b600060208284031215612cfa57612cf9612b31565b5b6000612d0884828501612b7f565b91505092915050565b600080600060608486031215612d2a57612d29612b31565b5b6000612d3886828701612b7f565b9350506020612d4986828701612b7f565b9250506040612d5a86828701612bb5565b9150509250925092565b600060ff82169050919050565b612d7a81612d64565b82525050565b6000602082019050612d956000830184612d71565b92915050565b612da481612c0a565b8114612daf57600080fd5b50565b600081359050612dc181612d9b565b92915050565b60008060408385031215612dde57612ddd612b31565b5b6000612dec85828601612b7f565b9250506020612dfd85828601612db2565b9150509250929050565b612e1081612b56565b82525050565b6000602082019050612e2b6000830184612e07565b92915050565b600060208284031215612e4757612e46612b31565b5b6000612e5584828501612bb5565b91505092915050565b6000612e6982612b36565b9050919050565b612e7981612e5e565b82525050565b6000602082019050612e946000830184612e70565b92915050565b600080600060608486031215612eb357612eb2612b31565b5b6000612ec186828701612bb5565b9350506020612ed286828701612bb5565b9250506040612ee386828701612bb5565b9150509250925092565b600060208284031215612f0357612f02612b31565b5b6000612f1184828501612db2565b91505092915050565b60008060408385031215612f3157612f30612b31565b5b6000612f3f85828601612b7f565b9250506020612f5085828601612b7f565b9150509250929050565b612f6381612e5e565b8114612f6e57600080fd5b50565b600081359050612f8081612f5a565b92915050565b60008060408385031215612f9d57612f9c612b31565b5b6000612fab85828601612f71565b9250506020612fbc85828601612f71565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061300d57607f821691505b6020821081036130205761301f612fc6565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613082602883612a81565b915061308d82613026565b604082019050919050565b600060208201905081810360008301526130b181613075565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006130ee602083612a81565b91506130f9826130b8565b602082019050919050565b6000602082019050818103600083015261311d816130e1565b9050919050565b7f76616c756520746f6f206c6f7700000000000000000000000000000000000000600082015250565b600061315a600d83612a81565b915061316582613124565b602082019050919050565b600060208201905081810360008301526131898161314d565b9050919050565b7f74617820746f6f20686967680000000000000000000000000000000000000000600082015250565b60006131c6600c83612a81565b91506131d182613190565b602082019050919050565b600060208201905081810360008301526131f5816131b9565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b6000613258602a83612a81565b9150613263826131fc565b604082019050919050565b600060208201905081810360008301526132878161324b565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006132ea602683612a81565b91506132f58261328e565b604082019050919050565b60006020820190508181036000830152613319816132dd565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061337c602483612a81565b915061338782613320565b604082019050919050565b600060208201905081810360008301526133ab8161336f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061340e602283612a81565b9150613419826133b2565b604082019050919050565b6000602082019050818103600083015261343d81613401565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006134a0602583612a81565b91506134ab82613444565b604082019050919050565b600060208201905081810360008301526134cf81613493565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613532602383612a81565b915061353d826134d6565b604082019050919050565b6000602082019050818103600083015261356181613525565b9050919050565b7f74726164696e67206973206e6f7420796574204f70656e000000000000000000600082015250565b600061359e601783612a81565b91506135a982613568565b602082019050919050565b600060208201905081810360008301526135cd81613591565b9050919050565b7f426c61636b6c6973746564206164647265737300000000000000000000000000600082015250565b600061360a601383612a81565b9150613615826135d4565b602082019050919050565b60006020820190508181036000830152613639816135fd565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061367a82612b94565b915061368583612b94565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156136ba576136b9613640565b5b828201905092915050565b7f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f60008201527f756e742e00000000000000000000000000000000000000000000000000000000602082015250565b6000613721602483612a81565b915061372c826136c5565b604082019050919050565b6000602082019050818103600083015261375081613714565b9050919050565b7f616d6f756e74206578636565647320746865206d61785472616e73616374696f60008201527f6e416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b60006137b3602883612a81565b91506137be82613757565b604082019050919050565b600060208201905081810360008301526137e2816137a6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061382382612b94565b915061382e83612b94565b92508261383e5761383d6137e9565b5b828204905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006138a5602683612a81565b91506138b082613849565b604082019050919050565b600060208201905081810360008301526138d481613898565b9050919050565b60006040820190506138f06000830185612cba565b6138fd6020830184612cba565b9392505050565b600061390f82612b94565b915061391a83612b94565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561395357613952613640565b5b828202905092915050565b600061396982612b94565b915061397483612b94565b92508282101561398757613986613640565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506139ff81612b68565b92915050565b600060208284031215613a1b57613a1a612b31565b5b6000613a29848285016139f0565b91505092915050565b6000819050919050565b6000613a57613a52613a4d84613a32565b612c40565b612b94565b9050919050565b613a6781613a3c565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613aa281612b56565b82525050565b6000613ab48383613a99565b60208301905092915050565b6000602082019050919050565b6000613ad882613a6d565b613ae28185613a78565b9350613aed83613a89565b8060005b83811015613b1e578151613b058882613aa8565b9750613b1083613ac0565b925050600181019050613af1565b5085935050505092915050565b600060a082019050613b406000830188612cba565b613b4d6020830187613a5e565b8181036040830152613b5f8186613acd565b9050613b6e6060830185612e07565b613b7b6080830184612cba565b9695505050505050565b600060c082019050613b9a6000830189612e07565b613ba76020830188612cba565b613bb46040830187613a5e565b613bc16060830186613a5e565b613bce6080830185612e07565b613bdb60a0830184612cba565b979650505050505050565b600081519050613bf581612b9e565b92915050565b600080600060608486031215613c1457613c13612b31565b5b6000613c2286828701613be6565b9350506020613c3386828701613be6565b9250506040613c4486828701613be6565b915050925092509256fea2646970667358221220295226ff006d1830a0722f79863d801510086083a8e1f8014ad74ebf426cbed864736f6c634300080f0033

Deployed Bytecode

0x6080604052600436106102295760003560e01c80638da5cb5b11610123578063c49b9a80116100ab578063e8ba854f1161006f578063e8ba854f1461081c578063ec28438a14610845578063f2fde38b1461086e578063f637434214610897578063fb201b1d146108c257610230565b8063c49b9a8014610735578063c8c8ebe41461075e578063dd62ed3e14610789578063e2f45605146107c6578063e6c75f71146107f157610230565b806398118cb4116100f257806398118cb414610650578063a0d82dc51461067b578063a9059cbb146106a6578063c0246668146106e3578063c17b5b8c1461070c57610230565b80638da5cb5b146105a45780638ea5220f146105cf57806392136913146105fa57806395d89b411461062557610230565b80634a74bb02116101b1578063715018a611610175578063715018a6146104e7578063728d41c9146104fe578063750c11b61461052757806375f0a874146105505780638095d5641461057b57610230565b80634a74bb02146103ec5780634fbee193146104175780636827e764146104545780636b67c4df1461047f57806370a08231146104aa57610230565b80631cdd3be3116101f85780631cdd3be3146102f357806323b872dd14610330578063313ce5671461036d578063455a43961461039857806349bd5a5e146103c157610230565b806306fdde0314610235578063095ea7b3146102605780631694505e1461029d57806318160ddd146102c857610230565b3661023057005b600080fd5b34801561024157600080fd5b5061024a6108d9565b6040516102579190612b0f565b60405180910390f35b34801561026c57600080fd5b5061028760048036038101906102829190612bca565b61096b565b6040516102949190612c25565b60405180910390f35b3480156102a957600080fd5b506102b2610989565b6040516102bf9190612c9f565b60405180910390f35b3480156102d457600080fd5b506102dd6109af565b6040516102ea9190612cc9565b60405180910390f35b3480156102ff57600080fd5b5061031a60048036038101906103159190612ce4565b6109b9565b6040516103279190612c25565b60405180910390f35b34801561033c57600080fd5b5061035760048036038101906103529190612d11565b6109d9565b6040516103649190612c25565b60405180910390f35b34801561037957600080fd5b50610382610ad1565b60405161038f9190612d80565b60405180910390f35b3480156103a457600080fd5b506103bf60048036038101906103ba9190612dc7565b610ada565b005b3480156103cd57600080fd5b506103d6610bb1565b6040516103e39190612e16565b60405180910390f35b3480156103f857600080fd5b50610401610bd5565b60405161040e9190612c25565b60405180910390f35b34801561042357600080fd5b5061043e60048036038101906104399190612ce4565b610be8565b60405161044b9190612c25565b60405180910390f35b34801561046057600080fd5b50610469610c3e565b6040516104769190612cc9565b60405180910390f35b34801561048b57600080fd5b50610494610c44565b6040516104a19190612cc9565b60405180910390f35b3480156104b657600080fd5b506104d160048036038101906104cc9190612ce4565b610c4a565b6040516104de9190612cc9565b60405180910390f35b3480156104f357600080fd5b506104fc610c92565b005b34801561050a57600080fd5b5061052560048036038101906105209190612e31565b610d1a565b005b34801561053357600080fd5b5061054e60048036038101906105499190612e31565b610dff565b005b34801561055c57600080fd5b50610565610e85565b6040516105729190612e7f565b60405180910390f35b34801561058757600080fd5b506105a2600480360381019061059d9190612e9a565b610eab565b005b3480156105b057600080fd5b506105b9610fa9565b6040516105c69190612e16565b60405180910390f35b3480156105db57600080fd5b506105e4610fd3565b6040516105f19190612e7f565b60405180910390f35b34801561060657600080fd5b5061060f610ff9565b60405161061c9190612cc9565b60405180910390f35b34801561063157600080fd5b5061063a610fff565b6040516106479190612b0f565b60405180910390f35b34801561065c57600080fd5b50610665611091565b6040516106729190612cc9565b60405180910390f35b34801561068757600080fd5b50610690611097565b60405161069d9190612cc9565b60405180910390f35b3480156106b257600080fd5b506106cd60048036038101906106c89190612bca565b61109d565b6040516106da9190612c25565b60405180910390f35b3480156106ef57600080fd5b5061070a60048036038101906107059190612dc7565b6110bb565b005b34801561071857600080fd5b50610733600480360381019061072e9190612e9a565b611272565b005b34801561074157600080fd5b5061075c60048036038101906107579190612eed565b611370565b005b34801561076a57600080fd5b50610773611440565b6040516107809190612cc9565b60405180910390f35b34801561079557600080fd5b506107b060048036038101906107ab9190612f1a565b611446565b6040516107bd9190612cc9565b60405180910390f35b3480156107d257600080fd5b506107db6114cd565b6040516107e89190612cc9565b60405180910390f35b3480156107fd57600080fd5b506108066114d3565b6040516108139190612cc9565b60405180910390f35b34801561082857600080fd5b50610843600480360381019061083e9190612f86565b6114d9565b005b34801561085157600080fd5b5061086c60048036038101906108679190612e31565b6115db565b005b34801561087a57600080fd5b5061089560048036038101906108909190612ce4565b6116c3565b005b3480156108a357600080fd5b506108ac6117ba565b6040516108b99190612cc9565b60405180910390f35b3480156108ce57600080fd5b506108d76117c0565b005b6060600380546108e890612ff5565b80601f016020809104026020016040519081016040528092919081815260200182805461091490612ff5565b80156109615780601f1061093657610100808354040283529160200191610961565b820191906000526020600020905b81548152906001019060200180831161094457829003601f168201915b5050505050905090565b600061097f610978611859565b8484611861565b6001905092915050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b60106020528060005260406000206000915054906101000a900460ff1681565b60006109e6848484611a2a565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610a31611859565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610ab1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa890613098565b60405180910390fd5b610ac585610abd611859565b858403611861565b60019150509392505050565b60006012905090565b610ae2611859565b73ffffffffffffffffffffffffffffffffffffffff16610b00610fa9565b73ffffffffffffffffffffffffffffffffffffffff1614610b56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4d90613104565b60405180910390fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b7f0000000000000000000000004abf67b7ce8734a4bc786cef9e2a4a49b399ddc481565b600560159054906101000a900460ff1681565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60085481565b60075481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610c9a611859565b73ffffffffffffffffffffffffffffffffffffffff16610cb8610fa9565b73ffffffffffffffffffffffffffffffffffffffff1614610d0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0590613104565b60405180910390fd5b610d18600061214b565b565b610d22611859565b73ffffffffffffffffffffffffffffffffffffffff16610d40610fa9565b73ffffffffffffffffffffffffffffffffffffffff1614610d96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8d90613104565b60405180910390fd5b80600d81905550610db860c8610daa6109af565b61221190919063ffffffff16565b600d541015610dfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df390613170565b60405180910390fd5b50565b610e07611859565b73ffffffffffffffffffffffffffffffffffffffff16610e25610fa9565b73ffffffffffffffffffffffffffffffffffffffff1614610e7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7290613104565b60405180910390fd5b80600e8190555050565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610eb3611859565b73ffffffffffffffffffffffffffffffffffffffff16610ed1610fa9565b73ffffffffffffffffffffffffffffffffffffffff1614610f27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1e90613104565b60405180910390fd5b600f610f4e82610f40858761222790919063ffffffff16565b61222790919063ffffffff16565b1115610f8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f86906131dc565b60405180910390fd5b826006819055508160078190555080600881905550505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a5481565b60606004805461100e90612ff5565b80601f016020809104026020016040519081016040528092919081815260200182805461103a90612ff5565b80156110875780601f1061105c57610100808354040283529160200191611087565b820191906000526020600020905b81548152906001019060200180831161106a57829003601f168201915b5050505050905090565b60065481565b600b5481565b60006110b16110aa611859565b8484611a2a565b6001905092915050565b6110c3611859565b73ffffffffffffffffffffffffffffffffffffffff166110e1610fa9565b73ffffffffffffffffffffffffffffffffffffffff1614611137576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112e90613104565b60405180910390fd5b801515601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515036111c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c09061326e565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516112669190612c25565b60405180910390a25050565b61127a611859565b73ffffffffffffffffffffffffffffffffffffffff16611298610fa9565b73ffffffffffffffffffffffffffffffffffffffff16146112ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e590613104565b60405180910390fd5b600f61131582611307858761222790919063ffffffff16565b61222790919063ffffffff16565b1115611356576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134d906131dc565b60405180910390fd5b8260098190555081600a8190555080600b81905550505050565b611378611859565b73ffffffffffffffffffffffffffffffffffffffff16611396610fa9565b73ffffffffffffffffffffffffffffffffffffffff16146113ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e390613104565b60405180910390fd5b80600560156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516114359190612c25565b60405180910390a150565b600c5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600e5481565b600d5481565b6114e1611859565b73ffffffffffffffffffffffffffffffffffffffff166114ff610fa9565b73ffffffffffffffffffffffffffffffffffffffff1614611555576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154c90613104565b60405180910390fd5b81601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6115e3611859565b73ffffffffffffffffffffffffffffffffffffffff16611601610fa9565b73ffffffffffffffffffffffffffffffffffffffff1614611657576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164e90613104565b60405180910390fd5b80600c8190555061167c633b9aca0061166e6109af565b61221190919063ffffffff16565b600c5410156116c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b790613170565b60405180910390fd5b50565b6116cb611859565b73ffffffffffffffffffffffffffffffffffffffff166116e9610fa9565b73ffffffffffffffffffffffffffffffffffffffff161461173f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173690613104565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036117ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a590613300565b60405180910390fd5b6117b78161214b565b50565b60095481565b6117c8611859565b73ffffffffffffffffffffffffffffffffffffffff166117e6610fa9565b73ffffffffffffffffffffffffffffffffffffffff161461183c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183390613104565b60405180910390fd5b6001600560166101000a81548160ff021916908315150217905550565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036118d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c790613392565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361193f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193690613424565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611a1d9190612cc9565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611a99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a90906134b6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aff90613548565b60405180910390fd5b6000601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611bab5750601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b9050600560169054906101000a900460ff1680611bc55750805b611c04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bfb906135b4565b60405180910390fd5b601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611ca85750601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b611ce7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cde90613620565b60405180910390fd5b60008203611d0157611cfb8484600061223d565b50612146565b7f0000000000000000000000004abf67b7ce8734a4bc786cef9e2a4a49b399ddc473ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015611da65750601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611dfc5750601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611e60576000611e0c84610c4a565b9050600d548382611e1d919061366f565b1115611e5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5590613737565b60405180910390fd5b505b7f0000000000000000000000004abf67b7ce8734a4bc786cef9e2a4a49b399ddc473ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015611eb9575080155b15611f0457600c54821115611f03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611efa906137c9565b60405180910390fd5b5b6000611f0f30610c4a565b90506000600e548210159050808015611f355750600560149054906101000a900460ff16155b8015611f8c57507f0000000000000000000000004abf67b7ce8734a4bc786cef9e2a4a49b399ddc473ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b8015611fa45750600560159054906101000a900460ff165b15611fb857600e549150611fb7826124bc565b5b826121375760007f0000000000000000000000004abf67b7ce8734a4bc786cef9e2a4a49b399ddc473ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff160361206557612062606461205461204560085461203760075460065461222790919063ffffffff16565b61222790919063ffffffff16565b8861270f90919063ffffffff16565b61221190919063ffffffff16565b90505b7f0000000000000000000000004abf67b7ce8734a4bc786cef9e2a4a49b399ddc473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff160361210b5761210860646120fa6120eb600b546120dd600a5460095461222790919063ffffffff16565b61222790919063ffffffff16565b8861270f90919063ffffffff16565b61221190919063ffffffff16565b90505b61211e818661272590919063ffffffff16565b945060008111156121355761213487308361223d565b5b505b61214286868661223d565b5050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000818361221f9190613818565b905092915050565b60008183612235919061366f565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036122ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a3906134b6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361231b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231290613548565b60405180910390fd5b61232683838361273b565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156123ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a3906138bb565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461243f919061366f565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516124a39190612cc9565b60405180910390a36124b6848484612740565b50505050565b6001600560146101000a81548160ff021916908315150217905550600061252a612507600b546124f9600954600a5461222790919063ffffffff16565b61222790919063ffffffff16565b61251c6009548561270f90919063ffffffff16565b61221190919063ffffffff16565b9050600061254260028361221190919063ffffffff16565b90506000612559828461272590919063ffffffff16565b9050600047905061256983612745565b600061257e824761272590919063ffffffff16565b905061258a83826129be565b6125a56125a0868861272590919063ffffffff16565b612745565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc61261e6125fb600b54600a5461222790919063ffffffff16565b612610600b544761270f90919063ffffffff16565b61221190919063ffffffff16565b9081150290604051600060405180830381858888f19350505050158015612649573d6000803e3d6000fd5b50601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156126b2573d6000803e3d6000fd5b507f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f838148684826040516126e49291906138db565b60405180910390a150505050506000600560146101000a81548160ff02191690831515021790555050565b6000818361271d9190613904565b905092915050565b60008183612733919061395e565b905092915050565b505050565b505050565b6000600267ffffffffffffffff81111561276257612761613992565b5b6040519080825280602002602001820160405280156127905781602001602082028036833780820191505090505b50905030816000815181106127a8576127a76139c1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561284f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128739190613a05565b81600181518110612887576128866139c1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050816128ee30600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611446565b10156129245761292330600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600019611861565b5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612988959493929190613b2b565b600060405180830381600087803b1580156129a257600080fd5b505af11580156129b6573d6000803e3d6000fd5b505050505050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080612a0a610fa9565b426040518863ffffffff1660e01b8152600401612a2c96959493929190613b85565b60606040518083038185885af1158015612a4a573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612a6f9190613bfb565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612ab0578082015181840152602081019050612a95565b83811115612abf576000848401525b50505050565b6000601f19601f8301169050919050565b6000612ae182612a76565b612aeb8185612a81565b9350612afb818560208601612a92565b612b0481612ac5565b840191505092915050565b60006020820190508181036000830152612b298184612ad6565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612b6182612b36565b9050919050565b612b7181612b56565b8114612b7c57600080fd5b50565b600081359050612b8e81612b68565b92915050565b6000819050919050565b612ba781612b94565b8114612bb257600080fd5b50565b600081359050612bc481612b9e565b92915050565b60008060408385031215612be157612be0612b31565b5b6000612bef85828601612b7f565b9250506020612c0085828601612bb5565b9150509250929050565b60008115159050919050565b612c1f81612c0a565b82525050565b6000602082019050612c3a6000830184612c16565b92915050565b6000819050919050565b6000612c65612c60612c5b84612b36565b612c40565b612b36565b9050919050565b6000612c7782612c4a565b9050919050565b6000612c8982612c6c565b9050919050565b612c9981612c7e565b82525050565b6000602082019050612cb46000830184612c90565b92915050565b612cc381612b94565b82525050565b6000602082019050612cde6000830184612cba565b92915050565b600060208284031215612cfa57612cf9612b31565b5b6000612d0884828501612b7f565b91505092915050565b600080600060608486031215612d2a57612d29612b31565b5b6000612d3886828701612b7f565b9350506020612d4986828701612b7f565b9250506040612d5a86828701612bb5565b9150509250925092565b600060ff82169050919050565b612d7a81612d64565b82525050565b6000602082019050612d956000830184612d71565b92915050565b612da481612c0a565b8114612daf57600080fd5b50565b600081359050612dc181612d9b565b92915050565b60008060408385031215612dde57612ddd612b31565b5b6000612dec85828601612b7f565b9250506020612dfd85828601612db2565b9150509250929050565b612e1081612b56565b82525050565b6000602082019050612e2b6000830184612e07565b92915050565b600060208284031215612e4757612e46612b31565b5b6000612e5584828501612bb5565b91505092915050565b6000612e6982612b36565b9050919050565b612e7981612e5e565b82525050565b6000602082019050612e946000830184612e70565b92915050565b600080600060608486031215612eb357612eb2612b31565b5b6000612ec186828701612bb5565b9350506020612ed286828701612bb5565b9250506040612ee386828701612bb5565b9150509250925092565b600060208284031215612f0357612f02612b31565b5b6000612f1184828501612db2565b91505092915050565b60008060408385031215612f3157612f30612b31565b5b6000612f3f85828601612b7f565b9250506020612f5085828601612b7f565b9150509250929050565b612f6381612e5e565b8114612f6e57600080fd5b50565b600081359050612f8081612f5a565b92915050565b60008060408385031215612f9d57612f9c612b31565b5b6000612fab85828601612f71565b9250506020612fbc85828601612f71565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061300d57607f821691505b6020821081036130205761301f612fc6565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613082602883612a81565b915061308d82613026565b604082019050919050565b600060208201905081810360008301526130b181613075565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006130ee602083612a81565b91506130f9826130b8565b602082019050919050565b6000602082019050818103600083015261311d816130e1565b9050919050565b7f76616c756520746f6f206c6f7700000000000000000000000000000000000000600082015250565b600061315a600d83612a81565b915061316582613124565b602082019050919050565b600060208201905081810360008301526131898161314d565b9050919050565b7f74617820746f6f20686967680000000000000000000000000000000000000000600082015250565b60006131c6600c83612a81565b91506131d182613190565b602082019050919050565b600060208201905081810360008301526131f5816131b9565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b6000613258602a83612a81565b9150613263826131fc565b604082019050919050565b600060208201905081810360008301526132878161324b565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006132ea602683612a81565b91506132f58261328e565b604082019050919050565b60006020820190508181036000830152613319816132dd565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061337c602483612a81565b915061338782613320565b604082019050919050565b600060208201905081810360008301526133ab8161336f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061340e602283612a81565b9150613419826133b2565b604082019050919050565b6000602082019050818103600083015261343d81613401565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006134a0602583612a81565b91506134ab82613444565b604082019050919050565b600060208201905081810360008301526134cf81613493565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613532602383612a81565b915061353d826134d6565b604082019050919050565b6000602082019050818103600083015261356181613525565b9050919050565b7f74726164696e67206973206e6f7420796574204f70656e000000000000000000600082015250565b600061359e601783612a81565b91506135a982613568565b602082019050919050565b600060208201905081810360008301526135cd81613591565b9050919050565b7f426c61636b6c6973746564206164647265737300000000000000000000000000600082015250565b600061360a601383612a81565b9150613615826135d4565b602082019050919050565b60006020820190508181036000830152613639816135fd565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061367a82612b94565b915061368583612b94565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156136ba576136b9613640565b5b828201905092915050565b7f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f60008201527f756e742e00000000000000000000000000000000000000000000000000000000602082015250565b6000613721602483612a81565b915061372c826136c5565b604082019050919050565b6000602082019050818103600083015261375081613714565b9050919050565b7f616d6f756e74206578636565647320746865206d61785472616e73616374696f60008201527f6e416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b60006137b3602883612a81565b91506137be82613757565b604082019050919050565b600060208201905081810360008301526137e2816137a6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061382382612b94565b915061382e83612b94565b92508261383e5761383d6137e9565b5b828204905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006138a5602683612a81565b91506138b082613849565b604082019050919050565b600060208201905081810360008301526138d481613898565b9050919050565b60006040820190506138f06000830185612cba565b6138fd6020830184612cba565b9392505050565b600061390f82612b94565b915061391a83612b94565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561395357613952613640565b5b828202905092915050565b600061396982612b94565b915061397483612b94565b92508282101561398757613986613640565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506139ff81612b68565b92915050565b600060208284031215613a1b57613a1a612b31565b5b6000613a29848285016139f0565b91505092915050565b6000819050919050565b6000613a57613a52613a4d84613a32565b612c40565b612b94565b9050919050565b613a6781613a3c565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613aa281612b56565b82525050565b6000613ab48383613a99565b60208301905092915050565b6000602082019050919050565b6000613ad882613a6d565b613ae28185613a78565b9350613aed83613a89565b8060005b83811015613b1e578151613b058882613aa8565b9750613b1083613ac0565b925050600181019050613af1565b5085935050505092915050565b600060a082019050613b406000830188612cba565b613b4d6020830187613a5e565b8181036040830152613b5f8186613acd565b9050613b6e6060830185612e07565b613b7b6080830184612cba565b9695505050505050565b600060c082019050613b9a6000830189612e07565b613ba76020830188612cba565b613bb46040830187613a5e565b613bc16060830186613a5e565b613bce6080830185612e07565b613bdb60a0830184612cba565b979650505050505050565b600081519050613bf581612b9e565b92915050565b600080600060608486031215613c1457613c13612b31565b5b6000613c2286828701613be6565b9350506020613c3386828701613be6565b9250506040613c4486828701613be6565b915050925092509256fea2646970667358221220295226ff006d1830a0722f79863d801510086083a8e1f8014ad74ebf426cbed864736f6c634300080f0033

Deployed Bytecode Sourcemap

29791:9139:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3648:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5283:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30401:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4236:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30496:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5677:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4078:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38755:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30449:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29906:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37008:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30065:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30027:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4407:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2565:94;;;;;;;;;;;;;:::i;:::-;;37221:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38449:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30551:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37617:303;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2342:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30651:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30139:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3867:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29989:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30181:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4747:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36708:288;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37929:316;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38576:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30217:57;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4985:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30339:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30281:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38253:188;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37414:195;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2667:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30097:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37141:72;;;;;;;;;;;;;:::i;:::-;;3648:100;3702:13;3735:5;3728:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3648:100;:::o;5283:169::-;5366:4;5383:39;5392:12;:10;:12::i;:::-;5406:7;5415:6;5383:8;:39::i;:::-;5440:4;5433:11;;5283:169;;;;:::o;30401:41::-;;;;;;;;;;;;;:::o;4236:108::-;4297:7;4324:12;;4317:19;;4236:108;:::o;30496:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;5677:492::-;5817:4;5834:36;5844:6;5852:9;5863:6;5834:9;:36::i;:::-;5883:24;5910:11;:19;5922:6;5910:19;;;;;;;;;;;;;;;:33;5930:12;:10;:12::i;:::-;5910:33;;;;;;;;;;;;;;;;5883:60;;5982:6;5962:16;:26;;5954:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;6069:57;6078:6;6086:12;:10;:12::i;:::-;6119:6;6100:16;:25;6069:8;:57::i;:::-;6157:4;6150:11;;;5677:492;;;;;:::o;4078:93::-;4136:5;4161:2;4154:9;;4078:93;:::o;38755:123::-;2488:12;:10;:12::i;:::-;2477:23;;:7;:5;:7::i;:::-;:23;;;2469:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38865:5:::1;38839:14;:23;38854:7;38839:23;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;38755:123:::0;;:::o;30449:38::-;;;:::o;29906:40::-;;;;;;;;;;;;;:::o;37008:125::-;37073:4;37097:19;:28;37117:7;37097:28;;;;;;;;;;;;;;;;;;;;;;;;;37090:35;;37008:125;;;:::o;30065:25::-;;;;:::o;30027:31::-;;;;:::o;4407:127::-;4481:7;4508:9;:18;4518:7;4508:18;;;;;;;;;;;;;;;;4501:25;;4407:127;;;:::o;2565:94::-;2488:12;:10;:12::i;:::-;2477:23;;:7;:5;:7::i;:::-;:23;;;2469:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2630:21:::1;2648:1;2630:9;:21::i;:::-;2565:94::o:0;37221:185::-;2488:12;:10;:12::i;:::-;2477:23;;:7;:5;:7::i;:::-;:23;;;2469:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37312:9:::1;37295:14;:26;;;;37358:22;37376:3;37358:13;:11;:13::i;:::-;:17;;:22;;;;:::i;:::-;37340:14;;:40;;37332:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;37221:185:::0;:::o;38449:119::-;2488:12;:10;:12::i;:::-;2477:23;;:7;:5;:7::i;:::-;:23;;;2469:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38550:10:::1;38529:18;:31;;;;38449:119:::0;:::o;30551:92::-;;;;;;;;;;;;;:::o;37617:303::-;2488:12;:10;:12::i;:::-;2477:23;;:7;:5;:7::i;:::-;:23;;;2469:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37788:2:::1;37739:45;37776:7;37739:32;37757:13;37739;:17;;:32;;;;:::i;:::-;:36;;:45;;;;:::i;:::-;:51;;37731:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;37833:13;37818:12;:28;;;;37872:13;37857:12;:28;;;;37905:7;37896:6;:16;;;;37617:303:::0;;;:::o;2342:87::-;2388:7;2415:6;;;;;;;;;;;2408:13;;2342:87;:::o;30651:86::-;;;;;;;;;;;;;:::o;30139:35::-;;;;:::o;3867:104::-;3923:13;3956:7;3949:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3867:104;:::o;29989:31::-;;;;:::o;30181:29::-;;;;:::o;4747:175::-;4833:4;4850:42;4860:12;:10;:12::i;:::-;4874:9;4885:6;4850:9;:42::i;:::-;4910:4;4903:11;;4747:175;;;;:::o;36708:288::-;2488:12;:10;:12::i;:::-;2477:23;;:7;:5;:7::i;:::-;:23;;;2469:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36833:8:::1;36801:40;;:19;:28;36821:7;36801:28;;;;;;;;;;;;;;;;;;;;;;;;;:40;;::::0;36793:95:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;36930:8;36899:19;:28;36919:7;36899:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;36970:7;36954:34;;;36979:8;36954:34;;;;;;:::i;:::-;;;;;;;;36708:288:::0;;:::o;37929:316::-;2488:12;:10;:12::i;:::-;2477:23;;:7;:5;:7::i;:::-;:23;;;2469:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38101:2:::1;38052:45;38089:7;38052:32;38070:13;38052;:17;;:32;;;;:::i;:::-;:36;;:45;;;;:::i;:::-;:51;;38044:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;38150:13;38131:16;:32;;;;38193:13;38174:16;:32;;;;38230:7;38217:10;:20;;;;37929:316:::0;;;:::o;38576:171::-;2488:12;:10;:12::i;:::-;2477:23;;:7;:5;:7::i;:::-;:23;;;2469:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38677:8:::1;38653:21;;:32;;;;;;;;;;;;;;;;;;38701:38;38730:8;38701:38;;;;;;:::i;:::-;;;;;;;;38576:171:::0;:::o;30217:57::-;;;;:::o;4985:151::-;5074:7;5101:11;:18;5113:5;5101:18;;;;;;;;;;;;;;;:27;5120:7;5101:27;;;;;;;;;;;;;;;;5094:34;;4985:151;;;;:::o;30339:53::-;;;;:::o;30281:51::-;;;;:::o;38253:188::-;2488:12;:10;:12::i;:::-;2477:23;;:7;:5;:7::i;:::-;:23;;;2469:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38384:16:::1;38366:15;;:34;;;;;;;;;;;;;;;;;;38423:10;38411:9;;:22;;;;;;;;;;;;;;;;;;38253:188:::0;;:::o;37414:195::-;2488:12;:10;:12::i;:::-;2477:23;;:7;:5;:7::i;:::-;:23;;;2469:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37505:6:::1;37482:20;:29;;;;37554;37572:10;37554:13;:11;:13::i;:::-;:17;;:29;;;;:::i;:::-;37530:20;;:53;;37522:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;37414:195:::0;:::o;2667:192::-;2488:12;:10;:12::i;:::-;2477:23;;:7;:5;:7::i;:::-;:23;;;2469:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2776:1:::1;2756:22;;:8;:22;;::::0;2748:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;2832:19;2842:8;2832:9;:19::i;:::-;2667:192:::0;:::o;30097:35::-;;;;:::o;37141:72::-;2488:12;:10;:12::i;:::-;2477:23;;:7;:5;:7::i;:::-;:23;;;2469:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37201:4:::1;37192:6;;:13;;;;;;;;;;;;;;;;;;37141:72::o:0;1706:98::-;1759:7;1786:10;1779:17;;1706:98;:::o;7617:380::-;7770:1;7753:19;;:5;:19;;;7745:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7851:1;7832:21;;:7;:21;;;7824:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7935:6;7905:11;:18;7917:5;7905:18;;;;;;;;;;;;;;;:27;7924:7;7905:27;;;;;;;;;;;;;;;:36;;;;7973:7;7957:32;;7966:5;7957:32;;;7982:6;7957:32;;;;;;:::i;:::-;;;;;;;;7617:380;;;:::o;32151:2120::-;32299:1;32283:18;;:4;:18;;;32275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32376:1;32362:16;;:2;:16;;;32354:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;32429:20;32452:19;:25;32472:4;32452:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;32481:19;:23;32501:2;32481:23;;;;;;;;;;;;;;;;;;;;;;;;;32452:52;32429:75;;32523:6;;;;;;;;;;;:25;;;;32533:15;32523:25;32515:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;32596:14;:20;32611:4;32596:20;;;;;;;;;;;;;;;;;;;;;;;;;32595:21;:44;;;;;32621:14;:18;32636:2;32621:18;;;;;;;;;;;;;;;;;;;;;;;;;32620:19;32595:44;32587:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;32689:1;32679:6;:11;32676:92;;32707:28;32723:4;32729:2;32733:1;32707:15;:28::i;:::-;32750:7;;;32676:92;32790:13;32784:19;;:4;:19;;;:49;;;;;32808:19;:25;32828:4;32808:25;;;;;;;;;;;;;;;;;;;;;;;;;32807:26;32784:49;:77;;;;;32838:19;:23;32858:2;32838:23;;;;;;;;;;;;;;;;;;;;;;;;;32837:24;32784:77;32781:271;;;32877:32;32912:13;32922:2;32912:9;:13::i;:::-;32877:48;;32985:14;;32975:6;32948:24;:33;;;;:::i;:::-;:51;;32940:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;32862:190;32781:271;33079:13;33075:17;;:2;:17;;;:37;;;;;33097:15;33096:16;33075:37;33072:152;;;33147:20;;33137:6;:30;;33129:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;33072:152;33241:28;33272:24;33290:4;33272:9;:24::i;:::-;33241:55;;33317:24;33368:18;;33344:20;:42;;33317:69;;33409:19;:40;;;;;33433:16;;;;;;;;;;;33432:17;33409:40;:61;;;;;33457:13;33453:17;;:2;:17;;;33409:61;:86;;;;;33474:21;;;;;;;;;;;33409:86;33406:212;;;33535:18;;33512:41;;33568:36;33583:20;33568:14;:36::i;:::-;33406:212;33720:15;33716:500;;33752:12;33788:13;33782:19;;:4;:19;;;33779:128;;33828:63;33887:3;33828:54;33839:42;33874:6;;33839:30;33856:12;;33839;;:16;;:30;;;;:::i;:::-;:34;;:42;;;;:::i;:::-;33828:6;:10;;:54;;;;:::i;:::-;:58;;:63;;;;:::i;:::-;33820:71;;33779:128;33930:13;33926:17;;:2;:17;;;33923:138;;33970:75;34041:3;33970:66;33981:54;34024:10;;33981:38;34002:16;;33981;;:20;;:38;;;;:::i;:::-;:42;;:54;;;;:::i;:::-;33970:6;:10;;:66;;;;:::i;:::-;:70;;:75;;;;:::i;:::-;33962:83;;33923:138;34083:16;34094:4;34083:6;:10;;:16;;;;:::i;:::-;34074:25;;34124:1;34117:4;:8;34114:91;;;34146:42;34162:4;34176;34183;34146:15;:42::i;:::-;34114:91;33737:479;33716:500;34228:33;34244:4;34250:2;34254:6;34228:15;:33::i;:::-;32264:2007;;;32151:2120;;;;:::o;2867:173::-;2923:16;2942:6;;;;;;;;;;;2923:25;;2968:8;2959:6;;:17;;;;;;;;;;;;;;;;;;3023:8;2992:40;;3013:8;2992:40;;;;;;;;;;;;2912:128;2867:173;:::o;19442:98::-;19500:7;19531:1;19527;:5;;;;:::i;:::-;19520:12;;19442:98;;;;:::o;18305:::-;18363:7;18394:1;18390;:5;;;;:::i;:::-;18383:12;;18305:98;;;;:::o;6267:733::-;6425:1;6407:20;;:6;:20;;;6399:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;6509:1;6488:23;;:9;:23;;;6480:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;6564:47;6585:6;6593:9;6604:6;6564:20;:47::i;:::-;6624:21;6648:9;:17;6658:6;6648:17;;;;;;;;;;;;;;;;6624:41;;6701:6;6684:13;:23;;6676:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;6822:6;6806:13;:22;6786:9;:17;6796:6;6786:17;;;;;;;;;;;;;;;:42;;;;6874:6;6850:9;:20;6860:9;6850:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;6915:9;6898:35;;6907:6;6898:35;;;6926:6;6898:35;;;;;;:::i;:::-;;;;;;;;6946:46;6966:6;6974:9;6985:6;6946:19;:46::i;:::-;6388:612;6267:733;;;:::o;34280:1330::-;30912:4;30893:16;;:23;;;;;;;;;;;;;;;;;;34365:26:::1;34394:102;34441:54;34484:10;;34441:38;34462:16;;34441;;:20;;:38;;;;:::i;:::-;:42;;:54;;;;:::i;:::-;34394:42;34419:16;;34394:20;:24;;:42;;;;:::i;:::-;:46;;:102;;;;:::i;:::-;34365:131;;34565:12;34580:25;34603:1;34580:18;:22;;:25;;;;:::i;:::-;34565:40;;34616:17;34636:28;34659:4;34636:18;:22;;:28;;;;:::i;:::-;34616:48;;34942:22;34967:21;34942:46;;35033:22;35050:4;35033:16;:22::i;:::-;35117:18;35138:41;35164:14;35138:21;:25;;:41;;;;:::i;:::-;35117:62;;35229:35;35242:9;35253:10;35229:12;:35::i;:::-;35318:62;35335:44;35360:18;35335:20;:24;;:44;;;;:::i;:::-;35318:16;:62::i;:::-;35391:9;;;;;;;;;;;:18;;:95;35410:75;35452:32;35473:10;;35452:16;;:20;;:32;;;;:::i;:::-;35410:37;35436:10;;35410:21;:25;;:37;;;;:::i;:::-;:41;;:75;;;;:::i;:::-;35391:95;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;35497:15;;;;;;;;;;;:24;;:47;35522:21;35497:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;35569:32;35584:4;35590:10;35569:32;;;;;;;:::i;:::-;;;;;;;;34354:1256;;;;;30958:5:::0;30939:16;;:24;;;;;;;;;;;;;;;;;;34280:1330;:::o;19043:98::-;19101:7;19132:1;19128;:5;;;;:::i;:::-;19121:12;;19043:98;;;;:::o;18686:::-;18744:7;18775:1;18771;:5;;;;:::i;:::-;18764:12;;18686:98;;;;:::o;8086:125::-;;;;:::o;8300:124::-;;;;:::o;35618:692::-;35744:21;35782:1;35768:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35744:40;;35813:4;35795;35800:1;35795:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;35839:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35829:4;35834:1;35829:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;35930:11;35877:50;35895:4;35910:15;;;;;;;;;;;35877:9;:50::i;:::-;:64;35874:156;;;35956:62;35973:4;35988:15;;;;;;;;;;;36015:1;36006:11;35956:8;:62::i;:::-;35874:156;36068:15;;;;;;;;;;;:66;;;36149:11;36175:1;36219:4;36246;36266:15;36068:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35673:637;35618:692;:::o;36318:381::-;36429:15;;;;;;;;;;;:31;;;36468:9;36501:4;36521:11;36547:1;36590;36633:7;:5;:7::i;:::-;36655:15;36429:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;36318:381;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:60::-;3522:3;3543:5;3536:12;;3494:60;;;:::o;3560:142::-;3610:9;3643:53;3661:34;3670:24;3688:5;3670:24;:::i;:::-;3661:34;:::i;:::-;3643:53;:::i;:::-;3630:66;;3560:142;;;:::o;3708:126::-;3758:9;3791:37;3822:5;3791:37;:::i;:::-;3778:50;;3708:126;;;:::o;3840:152::-;3916:9;3949:37;3980:5;3949:37;:::i;:::-;3936:50;;3840:152;;;:::o;3998:183::-;4111:63;4168:5;4111:63;:::i;:::-;4106:3;4099:76;3998:183;;:::o;4187:274::-;4306:4;4344:2;4333:9;4329:18;4321:26;;4357:97;4451:1;4440:9;4436:17;4427:6;4357:97;:::i;:::-;4187:274;;;;:::o;4467:118::-;4554:24;4572:5;4554:24;:::i;:::-;4549:3;4542:37;4467:118;;:::o;4591:222::-;4684:4;4722:2;4711:9;4707:18;4699:26;;4735:71;4803:1;4792:9;4788:17;4779:6;4735:71;:::i;:::-;4591:222;;;;:::o;4819:329::-;4878:6;4927:2;4915:9;4906:7;4902:23;4898:32;4895:119;;;4933:79;;:::i;:::-;4895:119;5053:1;5078:53;5123:7;5114:6;5103:9;5099:22;5078:53;:::i;:::-;5068:63;;5024:117;4819:329;;;;:::o;5154:619::-;5231:6;5239;5247;5296:2;5284:9;5275:7;5271:23;5267:32;5264:119;;;5302:79;;:::i;:::-;5264:119;5422:1;5447:53;5492:7;5483:6;5472:9;5468:22;5447:53;:::i;:::-;5437:63;;5393:117;5549:2;5575:53;5620:7;5611:6;5600:9;5596:22;5575:53;:::i;:::-;5565:63;;5520:118;5677:2;5703:53;5748:7;5739:6;5728:9;5724:22;5703:53;:::i;:::-;5693:63;;5648:118;5154:619;;;;;:::o;5779:86::-;5814:7;5854:4;5847:5;5843:16;5832:27;;5779:86;;;:::o;5871:112::-;5954:22;5970:5;5954:22;:::i;:::-;5949:3;5942:35;5871:112;;:::o;5989:214::-;6078:4;6116:2;6105:9;6101:18;6093:26;;6129:67;6193:1;6182:9;6178:17;6169:6;6129:67;:::i;:::-;5989:214;;;;:::o;6209:116::-;6279:21;6294:5;6279:21;:::i;:::-;6272:5;6269:32;6259:60;;6315:1;6312;6305:12;6259:60;6209:116;:::o;6331:133::-;6374:5;6412:6;6399:20;6390:29;;6428:30;6452:5;6428:30;:::i;:::-;6331:133;;;;:::o;6470:468::-;6535:6;6543;6592:2;6580:9;6571:7;6567:23;6563:32;6560:119;;;6598:79;;:::i;:::-;6560:119;6718:1;6743:53;6788:7;6779:6;6768:9;6764:22;6743:53;:::i;:::-;6733:63;;6689:117;6845:2;6871:50;6913:7;6904:6;6893:9;6889:22;6871:50;:::i;:::-;6861:60;;6816:115;6470:468;;;;;:::o;6944:118::-;7031:24;7049:5;7031:24;:::i;:::-;7026:3;7019:37;6944:118;;:::o;7068:222::-;7161:4;7199:2;7188:9;7184:18;7176:26;;7212:71;7280:1;7269:9;7265:17;7256:6;7212:71;:::i;:::-;7068:222;;;;:::o;7296:329::-;7355:6;7404:2;7392:9;7383:7;7379:23;7375:32;7372:119;;;7410:79;;:::i;:::-;7372:119;7530:1;7555:53;7600:7;7591:6;7580:9;7576:22;7555:53;:::i;:::-;7545:63;;7501:117;7296:329;;;;:::o;7631:104::-;7676:7;7705:24;7723:5;7705:24;:::i;:::-;7694:35;;7631:104;;;:::o;7741:142::-;7844:32;7870:5;7844:32;:::i;:::-;7839:3;7832:45;7741:142;;:::o;7889:254::-;7998:4;8036:2;8025:9;8021:18;8013:26;;8049:87;8133:1;8122:9;8118:17;8109:6;8049:87;:::i;:::-;7889:254;;;;:::o;8149:619::-;8226:6;8234;8242;8291:2;8279:9;8270:7;8266:23;8262:32;8259:119;;;8297:79;;:::i;:::-;8259:119;8417:1;8442:53;8487:7;8478:6;8467:9;8463:22;8442:53;:::i;:::-;8432:63;;8388:117;8544:2;8570:53;8615:7;8606:6;8595:9;8591:22;8570:53;:::i;:::-;8560:63;;8515:118;8672:2;8698:53;8743:7;8734:6;8723:9;8719:22;8698:53;:::i;:::-;8688:63;;8643:118;8149:619;;;;;:::o;8774:323::-;8830:6;8879:2;8867:9;8858:7;8854:23;8850:32;8847:119;;;8885:79;;:::i;:::-;8847:119;9005:1;9030:50;9072:7;9063:6;9052:9;9048:22;9030:50;:::i;:::-;9020:60;;8976:114;8774:323;;;;:::o;9103:474::-;9171:6;9179;9228:2;9216:9;9207:7;9203:23;9199:32;9196:119;;;9234:79;;:::i;:::-;9196:119;9354:1;9379:53;9424:7;9415:6;9404:9;9400:22;9379:53;:::i;:::-;9369:63;;9325:117;9481:2;9507:53;9552:7;9543:6;9532:9;9528:22;9507:53;:::i;:::-;9497:63;;9452:118;9103:474;;;;;:::o;9583:138::-;9664:32;9690:5;9664:32;:::i;:::-;9657:5;9654:43;9644:71;;9711:1;9708;9701:12;9644:71;9583:138;:::o;9727:155::-;9781:5;9819:6;9806:20;9797:29;;9835:41;9870:5;9835:41;:::i;:::-;9727:155;;;;:::o;9888:506::-;9972:6;9980;10029:2;10017:9;10008:7;10004:23;10000:32;9997:119;;;10035:79;;:::i;:::-;9997:119;10155:1;10180:61;10233:7;10224:6;10213:9;10209:22;10180:61;:::i;:::-;10170:71;;10126:125;10290:2;10316:61;10369:7;10360:6;10349:9;10345:22;10316:61;:::i;:::-;10306:71;;10261:126;9888:506;;;;;:::o;10400:180::-;10448:77;10445:1;10438:88;10545:4;10542:1;10535:15;10569:4;10566:1;10559:15;10586:320;10630:6;10667:1;10661:4;10657:12;10647:22;;10714:1;10708:4;10704:12;10735:18;10725:81;;10791:4;10783:6;10779:17;10769:27;;10725:81;10853:2;10845:6;10842:14;10822:18;10819:38;10816:84;;10872:18;;:::i;:::-;10816:84;10637:269;10586:320;;;:::o;10912:227::-;11052:34;11048:1;11040:6;11036:14;11029:58;11121:10;11116:2;11108:6;11104:15;11097:35;10912:227;:::o;11145:366::-;11287:3;11308:67;11372:2;11367:3;11308:67;:::i;:::-;11301:74;;11384:93;11473:3;11384:93;:::i;:::-;11502:2;11497:3;11493:12;11486:19;;11145:366;;;:::o;11517:419::-;11683:4;11721:2;11710:9;11706:18;11698:26;;11770:9;11764:4;11760:20;11756:1;11745:9;11741:17;11734:47;11798:131;11924:4;11798:131;:::i;:::-;11790:139;;11517:419;;;:::o;11942:182::-;12082:34;12078:1;12070:6;12066:14;12059:58;11942:182;:::o;12130:366::-;12272:3;12293:67;12357:2;12352:3;12293:67;:::i;:::-;12286:74;;12369:93;12458:3;12369:93;:::i;:::-;12487:2;12482:3;12478:12;12471:19;;12130:366;;;:::o;12502:419::-;12668:4;12706:2;12695:9;12691:18;12683:26;;12755:9;12749:4;12745:20;12741:1;12730:9;12726:17;12719:47;12783:131;12909:4;12783:131;:::i;:::-;12775:139;;12502:419;;;:::o;12927:163::-;13067:15;13063:1;13055:6;13051:14;13044:39;12927:163;:::o;13096:366::-;13238:3;13259:67;13323:2;13318:3;13259:67;:::i;:::-;13252:74;;13335:93;13424:3;13335:93;:::i;:::-;13453:2;13448:3;13444:12;13437:19;;13096:366;;;:::o;13468:419::-;13634:4;13672:2;13661:9;13657:18;13649:26;;13721:9;13715:4;13711:20;13707:1;13696:9;13692:17;13685:47;13749:131;13875:4;13749:131;:::i;:::-;13741:139;;13468:419;;;:::o;13893:162::-;14033:14;14029:1;14021:6;14017:14;14010:38;13893:162;:::o;14061:366::-;14203:3;14224:67;14288:2;14283:3;14224:67;:::i;:::-;14217:74;;14300:93;14389:3;14300:93;:::i;:::-;14418:2;14413:3;14409:12;14402:19;;14061:366;;;:::o;14433:419::-;14599:4;14637:2;14626:9;14622:18;14614:26;;14686:9;14680:4;14676:20;14672:1;14661:9;14657:17;14650:47;14714:131;14840:4;14714:131;:::i;:::-;14706:139;;14433:419;;;:::o;14858:229::-;14998:34;14994:1;14986:6;14982:14;14975:58;15067:12;15062:2;15054:6;15050:15;15043:37;14858:229;:::o;15093:366::-;15235:3;15256:67;15320:2;15315:3;15256:67;:::i;:::-;15249:74;;15332:93;15421:3;15332:93;:::i;:::-;15450:2;15445:3;15441:12;15434:19;;15093:366;;;:::o;15465:419::-;15631:4;15669:2;15658:9;15654:18;15646:26;;15718:9;15712:4;15708:20;15704:1;15693:9;15689:17;15682:47;15746:131;15872:4;15746:131;:::i;:::-;15738:139;;15465:419;;;:::o;15890:225::-;16030:34;16026:1;16018:6;16014:14;16007:58;16099:8;16094:2;16086:6;16082:15;16075:33;15890:225;:::o;16121:366::-;16263:3;16284:67;16348:2;16343:3;16284:67;:::i;:::-;16277:74;;16360:93;16449:3;16360:93;:::i;:::-;16478:2;16473:3;16469:12;16462:19;;16121:366;;;:::o;16493:419::-;16659:4;16697:2;16686:9;16682:18;16674:26;;16746:9;16740:4;16736:20;16732:1;16721:9;16717:17;16710:47;16774:131;16900:4;16774:131;:::i;:::-;16766:139;;16493:419;;;:::o;16918:223::-;17058:34;17054:1;17046:6;17042:14;17035:58;17127:6;17122:2;17114:6;17110:15;17103:31;16918:223;:::o;17147:366::-;17289:3;17310:67;17374:2;17369:3;17310:67;:::i;:::-;17303:74;;17386:93;17475:3;17386:93;:::i;:::-;17504:2;17499:3;17495:12;17488:19;;17147:366;;;:::o;17519:419::-;17685:4;17723:2;17712:9;17708:18;17700:26;;17772:9;17766:4;17762:20;17758:1;17747:9;17743:17;17736:47;17800:131;17926:4;17800:131;:::i;:::-;17792:139;;17519:419;;;:::o;17944:221::-;18084:34;18080:1;18072:6;18068:14;18061:58;18153:4;18148:2;18140:6;18136:15;18129:29;17944:221;:::o;18171:366::-;18313:3;18334:67;18398:2;18393:3;18334:67;:::i;:::-;18327:74;;18410:93;18499:3;18410:93;:::i;:::-;18528:2;18523:3;18519:12;18512:19;;18171:366;;;:::o;18543:419::-;18709:4;18747:2;18736:9;18732:18;18724:26;;18796:9;18790:4;18786:20;18782:1;18771:9;18767:17;18760:47;18824:131;18950:4;18824:131;:::i;:::-;18816:139;;18543:419;;;:::o;18968:224::-;19108:34;19104:1;19096:6;19092:14;19085:58;19177:7;19172:2;19164:6;19160:15;19153:32;18968:224;:::o;19198:366::-;19340:3;19361:67;19425:2;19420:3;19361:67;:::i;:::-;19354:74;;19437:93;19526:3;19437:93;:::i;:::-;19555:2;19550:3;19546:12;19539:19;;19198:366;;;:::o;19570:419::-;19736:4;19774:2;19763:9;19759:18;19751:26;;19823:9;19817:4;19813:20;19809:1;19798:9;19794:17;19787:47;19851:131;19977:4;19851:131;:::i;:::-;19843:139;;19570:419;;;:::o;19995:222::-;20135:34;20131:1;20123:6;20119:14;20112:58;20204:5;20199:2;20191:6;20187:15;20180:30;19995:222;:::o;20223:366::-;20365:3;20386:67;20450:2;20445:3;20386:67;:::i;:::-;20379:74;;20462:93;20551:3;20462:93;:::i;:::-;20580:2;20575:3;20571:12;20564:19;;20223:366;;;:::o;20595:419::-;20761:4;20799:2;20788:9;20784:18;20776:26;;20848:9;20842:4;20838:20;20834:1;20823:9;20819:17;20812:47;20876:131;21002:4;20876:131;:::i;:::-;20868:139;;20595:419;;;:::o;21020:173::-;21160:25;21156:1;21148:6;21144:14;21137:49;21020:173;:::o;21199:366::-;21341:3;21362:67;21426:2;21421:3;21362:67;:::i;:::-;21355:74;;21438:93;21527:3;21438:93;:::i;:::-;21556:2;21551:3;21547:12;21540:19;;21199:366;;;:::o;21571:419::-;21737:4;21775:2;21764:9;21760:18;21752:26;;21824:9;21818:4;21814:20;21810:1;21799:9;21795:17;21788:47;21852:131;21978:4;21852:131;:::i;:::-;21844:139;;21571:419;;;:::o;21996:169::-;22136:21;22132:1;22124:6;22120:14;22113:45;21996:169;:::o;22171:366::-;22313:3;22334:67;22398:2;22393:3;22334:67;:::i;:::-;22327:74;;22410:93;22499:3;22410:93;:::i;:::-;22528:2;22523:3;22519:12;22512:19;;22171:366;;;:::o;22543:419::-;22709:4;22747:2;22736:9;22732:18;22724:26;;22796:9;22790:4;22786:20;22782:1;22771:9;22767:17;22760:47;22824:131;22950:4;22824:131;:::i;:::-;22816:139;;22543:419;;;:::o;22968:180::-;23016:77;23013:1;23006:88;23113:4;23110:1;23103:15;23137:4;23134:1;23127:15;23154:305;23194:3;23213:20;23231:1;23213:20;:::i;:::-;23208:25;;23247:20;23265:1;23247:20;:::i;:::-;23242:25;;23401:1;23333:66;23329:74;23326:1;23323:81;23320:107;;;23407:18;;:::i;:::-;23320:107;23451:1;23448;23444:9;23437:16;;23154:305;;;;:::o;23465:223::-;23605:34;23601:1;23593:6;23589:14;23582:58;23674:6;23669:2;23661:6;23657:15;23650:31;23465:223;:::o;23694:366::-;23836:3;23857:67;23921:2;23916:3;23857:67;:::i;:::-;23850:74;;23933:93;24022:3;23933:93;:::i;:::-;24051:2;24046:3;24042:12;24035:19;;23694:366;;;:::o;24066:419::-;24232:4;24270:2;24259:9;24255:18;24247:26;;24319:9;24313:4;24309:20;24305:1;24294:9;24290:17;24283:47;24347:131;24473:4;24347:131;:::i;:::-;24339:139;;24066:419;;;:::o;24491:227::-;24631:34;24627:1;24619:6;24615:14;24608:58;24700:10;24695:2;24687:6;24683:15;24676:35;24491:227;:::o;24724:366::-;24866:3;24887:67;24951:2;24946:3;24887:67;:::i;:::-;24880:74;;24963:93;25052:3;24963:93;:::i;:::-;25081:2;25076:3;25072:12;25065:19;;24724:366;;;:::o;25096:419::-;25262:4;25300:2;25289:9;25285:18;25277:26;;25349:9;25343:4;25339:20;25335:1;25324:9;25320:17;25313:47;25377:131;25503:4;25377:131;:::i;:::-;25369:139;;25096:419;;;:::o;25521:180::-;25569:77;25566:1;25559:88;25666:4;25663:1;25656:15;25690:4;25687:1;25680:15;25707:185;25747:1;25764:20;25782:1;25764:20;:::i;:::-;25759:25;;25798:20;25816:1;25798:20;:::i;:::-;25793:25;;25837:1;25827:35;;25842:18;;:::i;:::-;25827:35;25884:1;25881;25877:9;25872:14;;25707:185;;;;:::o;25898:225::-;26038:34;26034:1;26026:6;26022:14;26015:58;26107:8;26102:2;26094:6;26090:15;26083:33;25898:225;:::o;26129:366::-;26271:3;26292:67;26356:2;26351:3;26292:67;:::i;:::-;26285:74;;26368:93;26457:3;26368:93;:::i;:::-;26486:2;26481:3;26477:12;26470:19;;26129:366;;;:::o;26501:419::-;26667:4;26705:2;26694:9;26690:18;26682:26;;26754:9;26748:4;26744:20;26740:1;26729:9;26725:17;26718:47;26782:131;26908:4;26782:131;:::i;:::-;26774:139;;26501:419;;;:::o;26926:332::-;27047:4;27085:2;27074:9;27070:18;27062:26;;27098:71;27166:1;27155:9;27151:17;27142:6;27098:71;:::i;:::-;27179:72;27247:2;27236:9;27232:18;27223:6;27179:72;:::i;:::-;26926:332;;;;;:::o;27264:348::-;27304:7;27327:20;27345:1;27327:20;:::i;:::-;27322:25;;27361:20;27379:1;27361:20;:::i;:::-;27356:25;;27549:1;27481:66;27477:74;27474:1;27471:81;27466:1;27459:9;27452:17;27448:105;27445:131;;;27556:18;;:::i;:::-;27445:131;27604:1;27601;27597:9;27586:20;;27264:348;;;;:::o;27618:191::-;27658:4;27678:20;27696:1;27678:20;:::i;:::-;27673:25;;27712:20;27730:1;27712:20;:::i;:::-;27707:25;;27751:1;27748;27745:8;27742:34;;;27756:18;;:::i;:::-;27742:34;27801:1;27798;27794:9;27786:17;;27618:191;;;;:::o;27815:180::-;27863:77;27860:1;27853:88;27960:4;27957:1;27950:15;27984:4;27981:1;27974:15;28001:180;28049:77;28046:1;28039:88;28146:4;28143:1;28136:15;28170:4;28167:1;28160:15;28187:143;28244:5;28275:6;28269:13;28260:22;;28291:33;28318:5;28291:33;:::i;:::-;28187:143;;;;:::o;28336:351::-;28406:6;28455:2;28443:9;28434:7;28430:23;28426:32;28423:119;;;28461:79;;:::i;:::-;28423:119;28581:1;28606:64;28662:7;28653:6;28642:9;28638:22;28606:64;:::i;:::-;28596:74;;28552:128;28336:351;;;;:::o;28693:85::-;28738:7;28767:5;28756:16;;28693:85;;;:::o;28784:158::-;28842:9;28875:61;28893:42;28902:32;28928:5;28902:32;:::i;:::-;28893:42;:::i;:::-;28875:61;:::i;:::-;28862:74;;28784:158;;;:::o;28948:147::-;29043:45;29082:5;29043:45;:::i;:::-;29038:3;29031:58;28948:147;;:::o;29101:114::-;29168:6;29202:5;29196:12;29186:22;;29101:114;;;:::o;29221:184::-;29320:11;29354:6;29349:3;29342:19;29394:4;29389:3;29385:14;29370:29;;29221:184;;;;:::o;29411:132::-;29478:4;29501:3;29493:11;;29531:4;29526:3;29522:14;29514:22;;29411:132;;;:::o;29549:108::-;29626:24;29644:5;29626:24;:::i;:::-;29621:3;29614:37;29549:108;;:::o;29663:179::-;29732:10;29753:46;29795:3;29787:6;29753:46;:::i;:::-;29831:4;29826:3;29822:14;29808:28;;29663:179;;;;:::o;29848:113::-;29918:4;29950;29945:3;29941:14;29933:22;;29848:113;;;:::o;29997:732::-;30116:3;30145:54;30193:5;30145:54;:::i;:::-;30215:86;30294:6;30289:3;30215:86;:::i;:::-;30208:93;;30325:56;30375:5;30325:56;:::i;:::-;30404:7;30435:1;30420:284;30445:6;30442:1;30439:13;30420:284;;;30521:6;30515:13;30548:63;30607:3;30592:13;30548:63;:::i;:::-;30541:70;;30634:60;30687:6;30634:60;:::i;:::-;30624:70;;30480:224;30467:1;30464;30460:9;30455:14;;30420:284;;;30424:14;30720:3;30713:10;;30121:608;;;29997:732;;;;:::o;30735:831::-;30998:4;31036:3;31025:9;31021:19;31013:27;;31050:71;31118:1;31107:9;31103:17;31094:6;31050:71;:::i;:::-;31131:80;31207:2;31196:9;31192:18;31183:6;31131:80;:::i;:::-;31258:9;31252:4;31248:20;31243:2;31232:9;31228:18;31221:48;31286:108;31389:4;31380:6;31286:108;:::i;:::-;31278:116;;31404:72;31472:2;31461:9;31457:18;31448:6;31404:72;:::i;:::-;31486:73;31554:3;31543:9;31539:19;31530:6;31486:73;:::i;:::-;30735:831;;;;;;;;:::o;31572:807::-;31821:4;31859:3;31848:9;31844:19;31836:27;;31873:71;31941:1;31930:9;31926:17;31917:6;31873:71;:::i;:::-;31954:72;32022:2;32011:9;32007:18;31998:6;31954:72;:::i;:::-;32036:80;32112:2;32101:9;32097:18;32088:6;32036:80;:::i;:::-;32126;32202:2;32191:9;32187:18;32178:6;32126:80;:::i;:::-;32216:73;32284:3;32273:9;32269:19;32260:6;32216:73;:::i;:::-;32299;32367:3;32356:9;32352:19;32343:6;32299:73;:::i;:::-;31572:807;;;;;;;;;:::o;32385:143::-;32442:5;32473:6;32467:13;32458:22;;32489:33;32516:5;32489:33;:::i;:::-;32385:143;;;;:::o;32534:663::-;32622:6;32630;32638;32687:2;32675:9;32666:7;32662:23;32658:32;32655:119;;;32693:79;;:::i;:::-;32655:119;32813:1;32838:64;32894:7;32885:6;32874:9;32870:22;32838:64;:::i;:::-;32828:74;;32784:128;32951:2;32977:64;33033:7;33024:6;33013:9;33009:22;32977:64;:::i;:::-;32967:74;;32922:129;33090:2;33116:64;33172:7;33163:6;33152:9;33148:22;33116:64;:::i;:::-;33106:74;;33061:129;32534:663;;;;;:::o

Swarm Source

ipfs://295226ff006d1830a0722f79863d801510086083a8e1f8014ad74ebf426cbed8
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.