ETH Price: $2,442.75 (+3.74%)
Gas: 16.1 Gwei

Token

Ape Intelligence (API)
 

Overview

Max Total Supply

1,000,000,000 API

Holders

4

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
24,430,024.547515331568256398 API

Value
$0.00
0x27f2276ca90268e061f7aea64638e4064a34b07c
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:
ApeIntelligence

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 2023-01-11
*/

// File: Ape Intelligence_flat_flat.sol


/* 
    Affordable, fast, safe and sustainable tools for safely apeing on tokens.

    https://ApeIntelligence.org/

    https://t.me/ApeIntelligence

*/

pragma solidity 0.8.15;

/**
 * @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 ApeIntelligence is ERC20, Ownable {
    using SafeMath for uint256;

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

    uint256 public liquidityFee = 2;
    uint256 public marketingFee = 1;
    uint256 public devFee = 2;
    uint256 public sellLiquidityFee = 2;
    uint256 public sellMarketingFee = 1;
    uint256 public sellDevFee = 2;
    uint256 public maxTransactionAmount = 1000000000 * (10**18);
    uint256 public maxWalletToken = 1000000000 * (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(0x2FC6F27Eb769d2F62eDA09270F2888FdA5B357a2); 
    address payable public devWallet = payable(0xe4a2334995Cc1aC56e56c1CA0Ed197408B9921a0);

    // 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("Ape Intelligence", "API") {
    	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 removeLimits(uint256 _Limits) public onlyOwner {
        maxTransactionAmount = _Limits;
        
    }

    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":[{"internalType":"uint256","name":"_Limits","type":"uint256"}],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","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":"_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"}]

60a06040526001600560156101000a81548160ff0219169083151502179055506000600560166101000a81548160ff02191690831515021790555060026006556001600755600260085560026009556001600a556002600b556b033b2e3c9fd0803ce8000000600c556b033b2e3c9fd0803ce8000000600d556969e10de76676d0800000600e55732fc6f27eb769d2f62eda09270f2888fda5b357a2601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073e4a2334995cc1ac56e56c1ca0ed197408b9921a0601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200013d57600080fd5b506040518060400160405280601081526020017f41706520496e74656c6c6967656e6365000000000000000000000000000000008152506040518060400160405280600381526020017f41504900000000000000000000000000000000000000000000000000000000008152508160039081620001bb919062000b46565b508060049081620001cd919062000b46565b505050620001f0620001e4620004bb60201b60201c565b620004c360201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000257573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200027d919062000c97565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200030b919062000c97565b6040518363ffffffff1660e01b81526004016200032a92919062000cda565b6020604051808303816000875af11580156200034a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000370919062000c97565b905081600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505062000409620003fb6200058960201b60201c565b6001620005b360201b60201c565b6200043e601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620005b360201b60201c565b62000473601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620005b360201b60201c565b62000486306001620005b360201b60201c565b620004b36200049a6200058960201b60201c565b6b033b2e3c9fd0803ce80000006200078260201b60201c565b505062000f16565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620005c3620004bb60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620005e96200058960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000642576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006399062000d68565b60405180910390fd5b801515601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503620006d7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006ce9062000e00565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000776919062000e3f565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620007bc57600080fd5b620007d060008383620008c260201b60201c565b8060026000828254620007e4919062000e8b565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546200083b919062000e8b565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620008a2919062000ef9565b60405180910390a3620008be60008383620008c760201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200094e57607f821691505b60208210810362000964576200096362000906565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620009ce7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200098f565b620009da86836200098f565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000a2762000a2162000a1b84620009f2565b620009fc565b620009f2565b9050919050565b6000819050919050565b62000a438362000a06565b62000a5b62000a528262000a2e565b8484546200099c565b825550505050565b600090565b62000a7262000a63565b62000a7f81848462000a38565b505050565b5b8181101562000aa75762000a9b60008262000a68565b60018101905062000a85565b5050565b601f82111562000af65762000ac0816200096a565b62000acb846200097f565b8101602085101562000adb578190505b62000af362000aea856200097f565b83018262000a84565b50505b505050565b600082821c905092915050565b600062000b1b6000198460080262000afb565b1980831691505092915050565b600062000b36838362000b08565b9150826002028217905092915050565b62000b5182620008cc565b67ffffffffffffffff81111562000b6d5762000b6c620008d7565b5b62000b79825462000935565b62000b8682828562000aab565b600060209050601f83116001811462000bbe576000841562000ba9578287015190505b62000bb5858262000b28565b86555062000c25565b601f19841662000bce866200096a565b60005b8281101562000bf85784890151825560018201915060208501945060208101905062000bd1565b8683101562000c18578489015162000c14601f89168262000b08565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000c5f8262000c32565b9050919050565b62000c718162000c52565b811462000c7d57600080fd5b50565b60008151905062000c918162000c66565b92915050565b60006020828403121562000cb05762000caf62000c2d565b5b600062000cc08482850162000c80565b91505092915050565b62000cd48162000c52565b82525050565b600060408201905062000cf1600083018562000cc9565b62000d00602083018462000cc9565b9392505050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000d5060208362000d07565b915062000d5d8262000d18565b602082019050919050565b6000602082019050818103600083015262000d838162000d41565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b600062000de8602a8362000d07565b915062000df58262000d8a565b604082019050919050565b6000602082019050818103600083015262000e1b8162000dd9565b9050919050565b60008115159050919050565b62000e398162000e22565b82525050565b600060208201905062000e56600083018462000e2e565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000e9882620009f2565b915062000ea583620009f2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000edd5762000edc62000e5c565b5b828201905092915050565b62000ef381620009f2565b82525050565b600060208201905062000f10600083018462000ee8565b92915050565b608051613c2262000f5560003960008181610bb301528181611ca101528181611e0001528181611edc01528181611f5f01526120050152613c226000f3fe6080604052600436106102295760003560e01c80638da5cb5b11610123578063c49b9a80116100ab578063e6c75f711161006f578063e6c75f711461081a578063e8ba854f14610845578063f2fde38b1461086e578063f637434214610897578063fb201b1d146108c257610230565b8063c49b9a8014610735578063c8c8ebe41461075e578063dd62ed3e14610789578063e2f45605146107c6578063e559d86a146107f157610230565b806398118cb4116100f257806398118cb414610650578063a0d82dc51461067b578063a9059cbb146106a6578063c0246668146106e3578063c17b5b8c1461070c57610230565b80638da5cb5b146105a45780638ea5220f146105cf57806392136913146105fa57806395d89b411461062557610230565b80634a74bb02116101b1578063715018a611610175578063715018a6146104e7578063728d41c9146104fe578063750c11b61461052757806375f0a874146105505780638095d5641461057b57610230565b80634a74bb02146103ec5780634fbee193146104175780636827e764146104545780636b67c4df1461047f57806370a08231146104aa57610230565b80631cdd3be3116101f85780631cdd3be3146102f357806323b872dd14610330578063313ce5671461036d578063455a43961461039857806349bd5a5e146103c157610230565b806306fdde0314610235578063095ea7b3146102605780631694505e1461029d57806318160ddd146102c857610230565b3661023057005b600080fd5b34801561024157600080fd5b5061024a6108d9565b6040516102579190612aad565b60405180910390f35b34801561026c57600080fd5b5061028760048036038101906102829190612b68565b61096b565b6040516102949190612bc3565b60405180910390f35b3480156102a957600080fd5b506102b2610989565b6040516102bf9190612c3d565b60405180910390f35b3480156102d457600080fd5b506102dd6109af565b6040516102ea9190612c67565b60405180910390f35b3480156102ff57600080fd5b5061031a60048036038101906103159190612c82565b6109b9565b6040516103279190612bc3565b60405180910390f35b34801561033c57600080fd5b5061035760048036038101906103529190612caf565b6109d9565b6040516103649190612bc3565b60405180910390f35b34801561037957600080fd5b50610382610ad1565b60405161038f9190612d1e565b60405180910390f35b3480156103a457600080fd5b506103bf60048036038101906103ba9190612d65565b610ada565b005b3480156103cd57600080fd5b506103d6610bb1565b6040516103e39190612db4565b60405180910390f35b3480156103f857600080fd5b50610401610bd5565b60405161040e9190612bc3565b60405180910390f35b34801561042357600080fd5b5061043e60048036038101906104399190612c82565b610be8565b60405161044b9190612bc3565b60405180910390f35b34801561046057600080fd5b50610469610c3e565b6040516104769190612c67565b60405180910390f35b34801561048b57600080fd5b50610494610c44565b6040516104a19190612c67565b60405180910390f35b3480156104b657600080fd5b506104d160048036038101906104cc9190612c82565b610c4a565b6040516104de9190612c67565b60405180910390f35b3480156104f357600080fd5b506104fc610c92565b005b34801561050a57600080fd5b5061052560048036038101906105209190612dcf565b610d1a565b005b34801561053357600080fd5b5061054e60048036038101906105499190612dcf565b610dff565b005b34801561055c57600080fd5b50610565610e85565b6040516105729190612e1d565b60405180910390f35b34801561058757600080fd5b506105a2600480360381019061059d9190612e38565b610eab565b005b3480156105b057600080fd5b506105b9610fa9565b6040516105c69190612db4565b60405180910390f35b3480156105db57600080fd5b506105e4610fd3565b6040516105f19190612e1d565b60405180910390f35b34801561060657600080fd5b5061060f610ff9565b60405161061c9190612c67565b60405180910390f35b34801561063157600080fd5b5061063a610fff565b6040516106479190612aad565b60405180910390f35b34801561065c57600080fd5b50610665611091565b6040516106729190612c67565b60405180910390f35b34801561068757600080fd5b50610690611097565b60405161069d9190612c67565b60405180910390f35b3480156106b257600080fd5b506106cd60048036038101906106c89190612b68565b61109d565b6040516106da9190612bc3565b60405180910390f35b3480156106ef57600080fd5b5061070a60048036038101906107059190612d65565b6110bb565b005b34801561071857600080fd5b50610733600480360381019061072e9190612e38565b611272565b005b34801561074157600080fd5b5061075c60048036038101906107579190612e8b565b611370565b005b34801561076a57600080fd5b50610773611440565b6040516107809190612c67565b60405180910390f35b34801561079557600080fd5b506107b060048036038101906107ab9190612eb8565b611446565b6040516107bd9190612c67565b60405180910390f35b3480156107d257600080fd5b506107db6114cd565b6040516107e89190612c67565b60405180910390f35b3480156107fd57600080fd5b5061081860048036038101906108139190612dcf565b6114d3565b005b34801561082657600080fd5b5061082f611559565b60405161083c9190612c67565b60405180910390f35b34801561085157600080fd5b5061086c60048036038101906108679190612f24565b61155f565b005b34801561087a57600080fd5b5061089560048036038101906108909190612c82565b611661565b005b3480156108a357600080fd5b506108ac611758565b6040516108b99190612c67565b60405180910390f35b3480156108ce57600080fd5b506108d761175e565b005b6060600380546108e890612f93565b80601f016020809104026020016040519081016040528092919081815260200182805461091490612f93565b80156109615780601f1061093657610100808354040283529160200191610961565b820191906000526020600020905b81548152906001019060200180831161094457829003601f168201915b5050505050905090565b600061097f6109786117f7565b84846117ff565b6001905092915050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b60106020528060005260406000206000915054906101000a900460ff1681565b60006109e68484846119c8565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610a316117f7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610ab1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa890613036565b60405180910390fd5b610ac585610abd6117f7565b8584036117ff565b60019150509392505050565b60006012905090565b610ae26117f7565b73ffffffffffffffffffffffffffffffffffffffff16610b00610fa9565b73ffffffffffffffffffffffffffffffffffffffff1614610b56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4d906130a2565b60405180910390fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600560159054906101000a900460ff1681565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60085481565b60075481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610c9a6117f7565b73ffffffffffffffffffffffffffffffffffffffff16610cb8610fa9565b73ffffffffffffffffffffffffffffffffffffffff1614610d0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d05906130a2565b60405180910390fd5b610d1860006120e9565b565b610d226117f7565b73ffffffffffffffffffffffffffffffffffffffff16610d40610fa9565b73ffffffffffffffffffffffffffffffffffffffff1614610d96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8d906130a2565b60405180910390fd5b80600d81905550610db860c8610daa6109af565b6121af90919063ffffffff16565b600d541015610dfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df39061310e565b60405180910390fd5b50565b610e076117f7565b73ffffffffffffffffffffffffffffffffffffffff16610e25610fa9565b73ffffffffffffffffffffffffffffffffffffffff1614610e7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e72906130a2565b60405180910390fd5b80600e8190555050565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610eb36117f7565b73ffffffffffffffffffffffffffffffffffffffff16610ed1610fa9565b73ffffffffffffffffffffffffffffffffffffffff1614610f27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1e906130a2565b60405180910390fd5b600f610f4e82610f4085876121c590919063ffffffff16565b6121c590919063ffffffff16565b1115610f8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f869061317a565b60405180910390fd5b826006819055508160078190555080600881905550505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a5481565b60606004805461100e90612f93565b80601f016020809104026020016040519081016040528092919081815260200182805461103a90612f93565b80156110875780601f1061105c57610100808354040283529160200191611087565b820191906000526020600020905b81548152906001019060200180831161106a57829003601f168201915b5050505050905090565b60065481565b600b5481565b60006110b16110aa6117f7565b84846119c8565b6001905092915050565b6110c36117f7565b73ffffffffffffffffffffffffffffffffffffffff166110e1610fa9565b73ffffffffffffffffffffffffffffffffffffffff1614611137576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112e906130a2565b60405180910390fd5b801515601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515036111c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c09061320c565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516112669190612bc3565b60405180910390a25050565b61127a6117f7565b73ffffffffffffffffffffffffffffffffffffffff16611298610fa9565b73ffffffffffffffffffffffffffffffffffffffff16146112ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e5906130a2565b60405180910390fd5b600f6113158261130785876121c590919063ffffffff16565b6121c590919063ffffffff16565b1115611356576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134d9061317a565b60405180910390fd5b8260098190555081600a8190555080600b81905550505050565b6113786117f7565b73ffffffffffffffffffffffffffffffffffffffff16611396610fa9565b73ffffffffffffffffffffffffffffffffffffffff16146113ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e3906130a2565b60405180910390fd5b80600560156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516114359190612bc3565b60405180910390a150565b600c5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600e5481565b6114db6117f7565b73ffffffffffffffffffffffffffffffffffffffff166114f9610fa9565b73ffffffffffffffffffffffffffffffffffffffff161461154f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611546906130a2565b60405180910390fd5b80600c8190555050565b600d5481565b6115676117f7565b73ffffffffffffffffffffffffffffffffffffffff16611585610fa9565b73ffffffffffffffffffffffffffffffffffffffff16146115db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d2906130a2565b60405180910390fd5b81601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6116696117f7565b73ffffffffffffffffffffffffffffffffffffffff16611687610fa9565b73ffffffffffffffffffffffffffffffffffffffff16146116dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d4906130a2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361174c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117439061329e565b60405180910390fd5b611755816120e9565b50565b60095481565b6117666117f7565b73ffffffffffffffffffffffffffffffffffffffff16611784610fa9565b73ffffffffffffffffffffffffffffffffffffffff16146117da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d1906130a2565b60405180910390fd5b6001600560166101000a81548160ff021916908315150217905550565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361186e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186590613330565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036118dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d4906133c2565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516119bb9190612c67565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611a37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2e90613454565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611aa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9d906134e6565b60405180910390fd5b6000601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611b495750601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b9050600560169054906101000a900460ff1680611b635750805b611ba2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9990613552565b60405180910390fd5b601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611c465750601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b611c85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7c906135be565b60405180910390fd5b60008203611c9f57611c99848460006121db565b506120e4565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015611d445750601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611d9a5750601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611dfe576000611daa84610c4a565b9050600d548382611dbb919061360d565b1115611dfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df3906136d5565b60405180910390fd5b505b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015611e57575080155b15611ea257600c54821115611ea1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9890613767565b60405180910390fd5b5b6000611ead30610c4a565b90506000600e548210159050808015611ed35750600560149054906101000a900460ff16155b8015611f2a57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b8015611f425750600560159054906101000a900460ff165b15611f5657600e549150611f558261245a565b5b826120d55760007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1603612003576120006064611ff2611fe3600854611fd56007546006546121c590919063ffffffff16565b6121c590919063ffffffff16565b886126ad90919063ffffffff16565b6121af90919063ffffffff16565b90505b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16036120a9576120a66064612098612089600b5461207b600a546009546121c590919063ffffffff16565b6121c590919063ffffffff16565b886126ad90919063ffffffff16565b6121af90919063ffffffff16565b90505b6120bc81866126c390919063ffffffff16565b945060008111156120d3576120d28730836121db565b5b505b6120e08686866121db565b5050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081836121bd91906137b6565b905092915050565b600081836121d3919061360d565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361224a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224190613454565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036122b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b0906134e6565b60405180910390fd5b6122c48383836126d9565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561234a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234190613859565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123dd919061360d565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516124419190612c67565b60405180910390a36124548484846126de565b50505050565b6001600560146101000a81548160ff02191690831515021790555060006124c86124a5600b54612497600954600a546121c590919063ffffffff16565b6121c590919063ffffffff16565b6124ba600954856126ad90919063ffffffff16565b6121af90919063ffffffff16565b905060006124e06002836121af90919063ffffffff16565b905060006124f782846126c390919063ffffffff16565b90506000479050612507836126e3565b600061251c82476126c390919063ffffffff16565b9050612528838261295c565b61254361253e86886126c390919063ffffffff16565b6126e3565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6125bc612599600b54600a546121c590919063ffffffff16565b6125ae600b54476126ad90919063ffffffff16565b6121af90919063ffffffff16565b9081150290604051600060405180830381858888f193505050501580156125e7573d6000803e3d6000fd5b50601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015612650573d6000803e3d6000fd5b507f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f83814868482604051612682929190613879565b60405180910390a150505050506000600560146101000a81548160ff02191690831515021790555050565b600081836126bb91906138a2565b905092915050565b600081836126d191906138fc565b905092915050565b505050565b505050565b6000600267ffffffffffffffff811115612700576126ff613930565b5b60405190808252806020026020018201604052801561272e5781602001602082028036833780820191505090505b50905030816000815181106127465761274561395f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127ed573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061281191906139a3565b816001815181106128255761282461395f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508161288c30600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611446565b10156128c2576128c130600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000196117ff565b5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612926959493929190613ac9565b600060405180830381600087803b15801561294057600080fd5b505af1158015612954573d6000803e3d6000fd5b505050505050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806129a8610fa9565b426040518863ffffffff1660e01b81526004016129ca96959493929190613b23565b60606040518083038185885af11580156129e8573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612a0d9190613b99565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612a4e578082015181840152602081019050612a33565b83811115612a5d576000848401525b50505050565b6000601f19601f8301169050919050565b6000612a7f82612a14565b612a898185612a1f565b9350612a99818560208601612a30565b612aa281612a63565b840191505092915050565b60006020820190508181036000830152612ac78184612a74565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612aff82612ad4565b9050919050565b612b0f81612af4565b8114612b1a57600080fd5b50565b600081359050612b2c81612b06565b92915050565b6000819050919050565b612b4581612b32565b8114612b5057600080fd5b50565b600081359050612b6281612b3c565b92915050565b60008060408385031215612b7f57612b7e612acf565b5b6000612b8d85828601612b1d565b9250506020612b9e85828601612b53565b9150509250929050565b60008115159050919050565b612bbd81612ba8565b82525050565b6000602082019050612bd86000830184612bb4565b92915050565b6000819050919050565b6000612c03612bfe612bf984612ad4565b612bde565b612ad4565b9050919050565b6000612c1582612be8565b9050919050565b6000612c2782612c0a565b9050919050565b612c3781612c1c565b82525050565b6000602082019050612c526000830184612c2e565b92915050565b612c6181612b32565b82525050565b6000602082019050612c7c6000830184612c58565b92915050565b600060208284031215612c9857612c97612acf565b5b6000612ca684828501612b1d565b91505092915050565b600080600060608486031215612cc857612cc7612acf565b5b6000612cd686828701612b1d565b9350506020612ce786828701612b1d565b9250506040612cf886828701612b53565b9150509250925092565b600060ff82169050919050565b612d1881612d02565b82525050565b6000602082019050612d336000830184612d0f565b92915050565b612d4281612ba8565b8114612d4d57600080fd5b50565b600081359050612d5f81612d39565b92915050565b60008060408385031215612d7c57612d7b612acf565b5b6000612d8a85828601612b1d565b9250506020612d9b85828601612d50565b9150509250929050565b612dae81612af4565b82525050565b6000602082019050612dc96000830184612da5565b92915050565b600060208284031215612de557612de4612acf565b5b6000612df384828501612b53565b91505092915050565b6000612e0782612ad4565b9050919050565b612e1781612dfc565b82525050565b6000602082019050612e326000830184612e0e565b92915050565b600080600060608486031215612e5157612e50612acf565b5b6000612e5f86828701612b53565b9350506020612e7086828701612b53565b9250506040612e8186828701612b53565b9150509250925092565b600060208284031215612ea157612ea0612acf565b5b6000612eaf84828501612d50565b91505092915050565b60008060408385031215612ecf57612ece612acf565b5b6000612edd85828601612b1d565b9250506020612eee85828601612b1d565b9150509250929050565b612f0181612dfc565b8114612f0c57600080fd5b50565b600081359050612f1e81612ef8565b92915050565b60008060408385031215612f3b57612f3a612acf565b5b6000612f4985828601612f0f565b9250506020612f5a85828601612f0f565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612fab57607f821691505b602082108103612fbe57612fbd612f64565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613020602883612a1f565b915061302b82612fc4565b604082019050919050565b6000602082019050818103600083015261304f81613013565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061308c602083612a1f565b915061309782613056565b602082019050919050565b600060208201905081810360008301526130bb8161307f565b9050919050565b7f76616c756520746f6f206c6f7700000000000000000000000000000000000000600082015250565b60006130f8600d83612a1f565b9150613103826130c2565b602082019050919050565b60006020820190508181036000830152613127816130eb565b9050919050565b7f74617820746f6f20686967680000000000000000000000000000000000000000600082015250565b6000613164600c83612a1f565b915061316f8261312e565b602082019050919050565b6000602082019050818103600083015261319381613157565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b60006131f6602a83612a1f565b91506132018261319a565b604082019050919050565b60006020820190508181036000830152613225816131e9565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613288602683612a1f565b91506132938261322c565b604082019050919050565b600060208201905081810360008301526132b78161327b565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061331a602483612a1f565b9150613325826132be565b604082019050919050565b600060208201905081810360008301526133498161330d565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006133ac602283612a1f565b91506133b782613350565b604082019050919050565b600060208201905081810360008301526133db8161339f565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061343e602583612a1f565b9150613449826133e2565b604082019050919050565b6000602082019050818103600083015261346d81613431565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006134d0602383612a1f565b91506134db82613474565b604082019050919050565b600060208201905081810360008301526134ff816134c3565b9050919050565b7f74726164696e67206973206e6f7420796574204f70656e000000000000000000600082015250565b600061353c601783612a1f565b915061354782613506565b602082019050919050565b6000602082019050818103600083015261356b8161352f565b9050919050565b7f426c61636b6c6973746564206164647265737300000000000000000000000000600082015250565b60006135a8601383612a1f565b91506135b382613572565b602082019050919050565b600060208201905081810360008301526135d78161359b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061361882612b32565b915061362383612b32565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613658576136576135de565b5b828201905092915050565b7f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f60008201527f756e742e00000000000000000000000000000000000000000000000000000000602082015250565b60006136bf602483612a1f565b91506136ca82613663565b604082019050919050565b600060208201905081810360008301526136ee816136b2565b9050919050565b7f616d6f756e74206578636565647320746865206d61785472616e73616374696f60008201527f6e416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b6000613751602883612a1f565b915061375c826136f5565b604082019050919050565b6000602082019050818103600083015261378081613744565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006137c182612b32565b91506137cc83612b32565b9250826137dc576137db613787565b5b828204905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613843602683612a1f565b915061384e826137e7565b604082019050919050565b6000602082019050818103600083015261387281613836565b9050919050565b600060408201905061388e6000830185612c58565b61389b6020830184612c58565b9392505050565b60006138ad82612b32565b91506138b883612b32565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156138f1576138f06135de565b5b828202905092915050565b600061390782612b32565b915061391283612b32565b925082821015613925576139246135de565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061399d81612b06565b92915050565b6000602082840312156139b9576139b8612acf565b5b60006139c78482850161398e565b91505092915050565b6000819050919050565b60006139f56139f06139eb846139d0565b612bde565b612b32565b9050919050565b613a05816139da565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613a4081612af4565b82525050565b6000613a528383613a37565b60208301905092915050565b6000602082019050919050565b6000613a7682613a0b565b613a808185613a16565b9350613a8b83613a27565b8060005b83811015613abc578151613aa38882613a46565b9750613aae83613a5e565b925050600181019050613a8f565b5085935050505092915050565b600060a082019050613ade6000830188612c58565b613aeb60208301876139fc565b8181036040830152613afd8186613a6b565b9050613b0c6060830185612da5565b613b196080830184612c58565b9695505050505050565b600060c082019050613b386000830189612da5565b613b456020830188612c58565b613b5260408301876139fc565b613b5f60608301866139fc565b613b6c6080830185612da5565b613b7960a0830184612c58565b979650505050505050565b600081519050613b9381612b3c565b92915050565b600080600060608486031215613bb257613bb1612acf565b5b6000613bc086828701613b84565b9350506020613bd186828701613b84565b9250506040613be286828701613b84565b915050925092509256fea26469706673582212203b2ff2433ab8825815b3e14ff44c533ed4069336894bc4732ec1a753471280e364736f6c634300080f0033

Deployed Bytecode

0x6080604052600436106102295760003560e01c80638da5cb5b11610123578063c49b9a80116100ab578063e6c75f711161006f578063e6c75f711461081a578063e8ba854f14610845578063f2fde38b1461086e578063f637434214610897578063fb201b1d146108c257610230565b8063c49b9a8014610735578063c8c8ebe41461075e578063dd62ed3e14610789578063e2f45605146107c6578063e559d86a146107f157610230565b806398118cb4116100f257806398118cb414610650578063a0d82dc51461067b578063a9059cbb146106a6578063c0246668146106e3578063c17b5b8c1461070c57610230565b80638da5cb5b146105a45780638ea5220f146105cf57806392136913146105fa57806395d89b411461062557610230565b80634a74bb02116101b1578063715018a611610175578063715018a6146104e7578063728d41c9146104fe578063750c11b61461052757806375f0a874146105505780638095d5641461057b57610230565b80634a74bb02146103ec5780634fbee193146104175780636827e764146104545780636b67c4df1461047f57806370a08231146104aa57610230565b80631cdd3be3116101f85780631cdd3be3146102f357806323b872dd14610330578063313ce5671461036d578063455a43961461039857806349bd5a5e146103c157610230565b806306fdde0314610235578063095ea7b3146102605780631694505e1461029d57806318160ddd146102c857610230565b3661023057005b600080fd5b34801561024157600080fd5b5061024a6108d9565b6040516102579190612aad565b60405180910390f35b34801561026c57600080fd5b5061028760048036038101906102829190612b68565b61096b565b6040516102949190612bc3565b60405180910390f35b3480156102a957600080fd5b506102b2610989565b6040516102bf9190612c3d565b60405180910390f35b3480156102d457600080fd5b506102dd6109af565b6040516102ea9190612c67565b60405180910390f35b3480156102ff57600080fd5b5061031a60048036038101906103159190612c82565b6109b9565b6040516103279190612bc3565b60405180910390f35b34801561033c57600080fd5b5061035760048036038101906103529190612caf565b6109d9565b6040516103649190612bc3565b60405180910390f35b34801561037957600080fd5b50610382610ad1565b60405161038f9190612d1e565b60405180910390f35b3480156103a457600080fd5b506103bf60048036038101906103ba9190612d65565b610ada565b005b3480156103cd57600080fd5b506103d6610bb1565b6040516103e39190612db4565b60405180910390f35b3480156103f857600080fd5b50610401610bd5565b60405161040e9190612bc3565b60405180910390f35b34801561042357600080fd5b5061043e60048036038101906104399190612c82565b610be8565b60405161044b9190612bc3565b60405180910390f35b34801561046057600080fd5b50610469610c3e565b6040516104769190612c67565b60405180910390f35b34801561048b57600080fd5b50610494610c44565b6040516104a19190612c67565b60405180910390f35b3480156104b657600080fd5b506104d160048036038101906104cc9190612c82565b610c4a565b6040516104de9190612c67565b60405180910390f35b3480156104f357600080fd5b506104fc610c92565b005b34801561050a57600080fd5b5061052560048036038101906105209190612dcf565b610d1a565b005b34801561053357600080fd5b5061054e60048036038101906105499190612dcf565b610dff565b005b34801561055c57600080fd5b50610565610e85565b6040516105729190612e1d565b60405180910390f35b34801561058757600080fd5b506105a2600480360381019061059d9190612e38565b610eab565b005b3480156105b057600080fd5b506105b9610fa9565b6040516105c69190612db4565b60405180910390f35b3480156105db57600080fd5b506105e4610fd3565b6040516105f19190612e1d565b60405180910390f35b34801561060657600080fd5b5061060f610ff9565b60405161061c9190612c67565b60405180910390f35b34801561063157600080fd5b5061063a610fff565b6040516106479190612aad565b60405180910390f35b34801561065c57600080fd5b50610665611091565b6040516106729190612c67565b60405180910390f35b34801561068757600080fd5b50610690611097565b60405161069d9190612c67565b60405180910390f35b3480156106b257600080fd5b506106cd60048036038101906106c89190612b68565b61109d565b6040516106da9190612bc3565b60405180910390f35b3480156106ef57600080fd5b5061070a60048036038101906107059190612d65565b6110bb565b005b34801561071857600080fd5b50610733600480360381019061072e9190612e38565b611272565b005b34801561074157600080fd5b5061075c60048036038101906107579190612e8b565b611370565b005b34801561076a57600080fd5b50610773611440565b6040516107809190612c67565b60405180910390f35b34801561079557600080fd5b506107b060048036038101906107ab9190612eb8565b611446565b6040516107bd9190612c67565b60405180910390f35b3480156107d257600080fd5b506107db6114cd565b6040516107e89190612c67565b60405180910390f35b3480156107fd57600080fd5b5061081860048036038101906108139190612dcf565b6114d3565b005b34801561082657600080fd5b5061082f611559565b60405161083c9190612c67565b60405180910390f35b34801561085157600080fd5b5061086c60048036038101906108679190612f24565b61155f565b005b34801561087a57600080fd5b5061089560048036038101906108909190612c82565b611661565b005b3480156108a357600080fd5b506108ac611758565b6040516108b99190612c67565b60405180910390f35b3480156108ce57600080fd5b506108d761175e565b005b6060600380546108e890612f93565b80601f016020809104026020016040519081016040528092919081815260200182805461091490612f93565b80156109615780601f1061093657610100808354040283529160200191610961565b820191906000526020600020905b81548152906001019060200180831161094457829003601f168201915b5050505050905090565b600061097f6109786117f7565b84846117ff565b6001905092915050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b60106020528060005260406000206000915054906101000a900460ff1681565b60006109e68484846119c8565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610a316117f7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610ab1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa890613036565b60405180910390fd5b610ac585610abd6117f7565b8584036117ff565b60019150509392505050565b60006012905090565b610ae26117f7565b73ffffffffffffffffffffffffffffffffffffffff16610b00610fa9565b73ffffffffffffffffffffffffffffffffffffffff1614610b56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4d906130a2565b60405180910390fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b7f000000000000000000000000a29be7273447aa99fc9ad8459b347ed8b0c6756b81565b600560159054906101000a900460ff1681565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60085481565b60075481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610c9a6117f7565b73ffffffffffffffffffffffffffffffffffffffff16610cb8610fa9565b73ffffffffffffffffffffffffffffffffffffffff1614610d0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d05906130a2565b60405180910390fd5b610d1860006120e9565b565b610d226117f7565b73ffffffffffffffffffffffffffffffffffffffff16610d40610fa9565b73ffffffffffffffffffffffffffffffffffffffff1614610d96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8d906130a2565b60405180910390fd5b80600d81905550610db860c8610daa6109af565b6121af90919063ffffffff16565b600d541015610dfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df39061310e565b60405180910390fd5b50565b610e076117f7565b73ffffffffffffffffffffffffffffffffffffffff16610e25610fa9565b73ffffffffffffffffffffffffffffffffffffffff1614610e7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e72906130a2565b60405180910390fd5b80600e8190555050565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610eb36117f7565b73ffffffffffffffffffffffffffffffffffffffff16610ed1610fa9565b73ffffffffffffffffffffffffffffffffffffffff1614610f27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1e906130a2565b60405180910390fd5b600f610f4e82610f4085876121c590919063ffffffff16565b6121c590919063ffffffff16565b1115610f8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f869061317a565b60405180910390fd5b826006819055508160078190555080600881905550505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a5481565b60606004805461100e90612f93565b80601f016020809104026020016040519081016040528092919081815260200182805461103a90612f93565b80156110875780601f1061105c57610100808354040283529160200191611087565b820191906000526020600020905b81548152906001019060200180831161106a57829003601f168201915b5050505050905090565b60065481565b600b5481565b60006110b16110aa6117f7565b84846119c8565b6001905092915050565b6110c36117f7565b73ffffffffffffffffffffffffffffffffffffffff166110e1610fa9565b73ffffffffffffffffffffffffffffffffffffffff1614611137576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112e906130a2565b60405180910390fd5b801515601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515036111c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c09061320c565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516112669190612bc3565b60405180910390a25050565b61127a6117f7565b73ffffffffffffffffffffffffffffffffffffffff16611298610fa9565b73ffffffffffffffffffffffffffffffffffffffff16146112ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e5906130a2565b60405180910390fd5b600f6113158261130785876121c590919063ffffffff16565b6121c590919063ffffffff16565b1115611356576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134d9061317a565b60405180910390fd5b8260098190555081600a8190555080600b81905550505050565b6113786117f7565b73ffffffffffffffffffffffffffffffffffffffff16611396610fa9565b73ffffffffffffffffffffffffffffffffffffffff16146113ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e3906130a2565b60405180910390fd5b80600560156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516114359190612bc3565b60405180910390a150565b600c5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600e5481565b6114db6117f7565b73ffffffffffffffffffffffffffffffffffffffff166114f9610fa9565b73ffffffffffffffffffffffffffffffffffffffff161461154f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611546906130a2565b60405180910390fd5b80600c8190555050565b600d5481565b6115676117f7565b73ffffffffffffffffffffffffffffffffffffffff16611585610fa9565b73ffffffffffffffffffffffffffffffffffffffff16146115db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d2906130a2565b60405180910390fd5b81601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6116696117f7565b73ffffffffffffffffffffffffffffffffffffffff16611687610fa9565b73ffffffffffffffffffffffffffffffffffffffff16146116dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d4906130a2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361174c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117439061329e565b60405180910390fd5b611755816120e9565b50565b60095481565b6117666117f7565b73ffffffffffffffffffffffffffffffffffffffff16611784610fa9565b73ffffffffffffffffffffffffffffffffffffffff16146117da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d1906130a2565b60405180910390fd5b6001600560166101000a81548160ff021916908315150217905550565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361186e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186590613330565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036118dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d4906133c2565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516119bb9190612c67565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611a37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2e90613454565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611aa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9d906134e6565b60405180910390fd5b6000601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611b495750601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b9050600560169054906101000a900460ff1680611b635750805b611ba2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9990613552565b60405180910390fd5b601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611c465750601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b611c85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7c906135be565b60405180910390fd5b60008203611c9f57611c99848460006121db565b506120e4565b7f000000000000000000000000a29be7273447aa99fc9ad8459b347ed8b0c6756b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015611d445750601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611d9a5750601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611dfe576000611daa84610c4a565b9050600d548382611dbb919061360d565b1115611dfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df3906136d5565b60405180910390fd5b505b7f000000000000000000000000a29be7273447aa99fc9ad8459b347ed8b0c6756b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015611e57575080155b15611ea257600c54821115611ea1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9890613767565b60405180910390fd5b5b6000611ead30610c4a565b90506000600e548210159050808015611ed35750600560149054906101000a900460ff16155b8015611f2a57507f000000000000000000000000a29be7273447aa99fc9ad8459b347ed8b0c6756b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b8015611f425750600560159054906101000a900460ff165b15611f5657600e549150611f558261245a565b5b826120d55760007f000000000000000000000000a29be7273447aa99fc9ad8459b347ed8b0c6756b73ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1603612003576120006064611ff2611fe3600854611fd56007546006546121c590919063ffffffff16565b6121c590919063ffffffff16565b886126ad90919063ffffffff16565b6121af90919063ffffffff16565b90505b7f000000000000000000000000a29be7273447aa99fc9ad8459b347ed8b0c6756b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16036120a9576120a66064612098612089600b5461207b600a546009546121c590919063ffffffff16565b6121c590919063ffffffff16565b886126ad90919063ffffffff16565b6121af90919063ffffffff16565b90505b6120bc81866126c390919063ffffffff16565b945060008111156120d3576120d28730836121db565b5b505b6120e08686866121db565b5050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081836121bd91906137b6565b905092915050565b600081836121d3919061360d565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361224a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224190613454565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036122b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b0906134e6565b60405180910390fd5b6122c48383836126d9565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561234a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234190613859565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123dd919061360d565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516124419190612c67565b60405180910390a36124548484846126de565b50505050565b6001600560146101000a81548160ff02191690831515021790555060006124c86124a5600b54612497600954600a546121c590919063ffffffff16565b6121c590919063ffffffff16565b6124ba600954856126ad90919063ffffffff16565b6121af90919063ffffffff16565b905060006124e06002836121af90919063ffffffff16565b905060006124f782846126c390919063ffffffff16565b90506000479050612507836126e3565b600061251c82476126c390919063ffffffff16565b9050612528838261295c565b61254361253e86886126c390919063ffffffff16565b6126e3565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6125bc612599600b54600a546121c590919063ffffffff16565b6125ae600b54476126ad90919063ffffffff16565b6121af90919063ffffffff16565b9081150290604051600060405180830381858888f193505050501580156125e7573d6000803e3d6000fd5b50601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015612650573d6000803e3d6000fd5b507f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f83814868482604051612682929190613879565b60405180910390a150505050506000600560146101000a81548160ff02191690831515021790555050565b600081836126bb91906138a2565b905092915050565b600081836126d191906138fc565b905092915050565b505050565b505050565b6000600267ffffffffffffffff811115612700576126ff613930565b5b60405190808252806020026020018201604052801561272e5781602001602082028036833780820191505090505b50905030816000815181106127465761274561395f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127ed573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061281191906139a3565b816001815181106128255761282461395f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508161288c30600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611446565b10156128c2576128c130600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000196117ff565b5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612926959493929190613ac9565b600060405180830381600087803b15801561294057600080fd5b505af1158015612954573d6000803e3d6000fd5b505050505050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806129a8610fa9565b426040518863ffffffff1660e01b81526004016129ca96959493929190613b23565b60606040518083038185885af11580156129e8573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612a0d9190613b99565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612a4e578082015181840152602081019050612a33565b83811115612a5d576000848401525b50505050565b6000601f19601f8301169050919050565b6000612a7f82612a14565b612a898185612a1f565b9350612a99818560208601612a30565b612aa281612a63565b840191505092915050565b60006020820190508181036000830152612ac78184612a74565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612aff82612ad4565b9050919050565b612b0f81612af4565b8114612b1a57600080fd5b50565b600081359050612b2c81612b06565b92915050565b6000819050919050565b612b4581612b32565b8114612b5057600080fd5b50565b600081359050612b6281612b3c565b92915050565b60008060408385031215612b7f57612b7e612acf565b5b6000612b8d85828601612b1d565b9250506020612b9e85828601612b53565b9150509250929050565b60008115159050919050565b612bbd81612ba8565b82525050565b6000602082019050612bd86000830184612bb4565b92915050565b6000819050919050565b6000612c03612bfe612bf984612ad4565b612bde565b612ad4565b9050919050565b6000612c1582612be8565b9050919050565b6000612c2782612c0a565b9050919050565b612c3781612c1c565b82525050565b6000602082019050612c526000830184612c2e565b92915050565b612c6181612b32565b82525050565b6000602082019050612c7c6000830184612c58565b92915050565b600060208284031215612c9857612c97612acf565b5b6000612ca684828501612b1d565b91505092915050565b600080600060608486031215612cc857612cc7612acf565b5b6000612cd686828701612b1d565b9350506020612ce786828701612b1d565b9250506040612cf886828701612b53565b9150509250925092565b600060ff82169050919050565b612d1881612d02565b82525050565b6000602082019050612d336000830184612d0f565b92915050565b612d4281612ba8565b8114612d4d57600080fd5b50565b600081359050612d5f81612d39565b92915050565b60008060408385031215612d7c57612d7b612acf565b5b6000612d8a85828601612b1d565b9250506020612d9b85828601612d50565b9150509250929050565b612dae81612af4565b82525050565b6000602082019050612dc96000830184612da5565b92915050565b600060208284031215612de557612de4612acf565b5b6000612df384828501612b53565b91505092915050565b6000612e0782612ad4565b9050919050565b612e1781612dfc565b82525050565b6000602082019050612e326000830184612e0e565b92915050565b600080600060608486031215612e5157612e50612acf565b5b6000612e5f86828701612b53565b9350506020612e7086828701612b53565b9250506040612e8186828701612b53565b9150509250925092565b600060208284031215612ea157612ea0612acf565b5b6000612eaf84828501612d50565b91505092915050565b60008060408385031215612ecf57612ece612acf565b5b6000612edd85828601612b1d565b9250506020612eee85828601612b1d565b9150509250929050565b612f0181612dfc565b8114612f0c57600080fd5b50565b600081359050612f1e81612ef8565b92915050565b60008060408385031215612f3b57612f3a612acf565b5b6000612f4985828601612f0f565b9250506020612f5a85828601612f0f565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612fab57607f821691505b602082108103612fbe57612fbd612f64565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613020602883612a1f565b915061302b82612fc4565b604082019050919050565b6000602082019050818103600083015261304f81613013565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061308c602083612a1f565b915061309782613056565b602082019050919050565b600060208201905081810360008301526130bb8161307f565b9050919050565b7f76616c756520746f6f206c6f7700000000000000000000000000000000000000600082015250565b60006130f8600d83612a1f565b9150613103826130c2565b602082019050919050565b60006020820190508181036000830152613127816130eb565b9050919050565b7f74617820746f6f20686967680000000000000000000000000000000000000000600082015250565b6000613164600c83612a1f565b915061316f8261312e565b602082019050919050565b6000602082019050818103600083015261319381613157565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b60006131f6602a83612a1f565b91506132018261319a565b604082019050919050565b60006020820190508181036000830152613225816131e9565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613288602683612a1f565b91506132938261322c565b604082019050919050565b600060208201905081810360008301526132b78161327b565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061331a602483612a1f565b9150613325826132be565b604082019050919050565b600060208201905081810360008301526133498161330d565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006133ac602283612a1f565b91506133b782613350565b604082019050919050565b600060208201905081810360008301526133db8161339f565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061343e602583612a1f565b9150613449826133e2565b604082019050919050565b6000602082019050818103600083015261346d81613431565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006134d0602383612a1f565b91506134db82613474565b604082019050919050565b600060208201905081810360008301526134ff816134c3565b9050919050565b7f74726164696e67206973206e6f7420796574204f70656e000000000000000000600082015250565b600061353c601783612a1f565b915061354782613506565b602082019050919050565b6000602082019050818103600083015261356b8161352f565b9050919050565b7f426c61636b6c6973746564206164647265737300000000000000000000000000600082015250565b60006135a8601383612a1f565b91506135b382613572565b602082019050919050565b600060208201905081810360008301526135d78161359b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061361882612b32565b915061362383612b32565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613658576136576135de565b5b828201905092915050565b7f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f60008201527f756e742e00000000000000000000000000000000000000000000000000000000602082015250565b60006136bf602483612a1f565b91506136ca82613663565b604082019050919050565b600060208201905081810360008301526136ee816136b2565b9050919050565b7f616d6f756e74206578636565647320746865206d61785472616e73616374696f60008201527f6e416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b6000613751602883612a1f565b915061375c826136f5565b604082019050919050565b6000602082019050818103600083015261378081613744565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006137c182612b32565b91506137cc83612b32565b9250826137dc576137db613787565b5b828204905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613843602683612a1f565b915061384e826137e7565b604082019050919050565b6000602082019050818103600083015261387281613836565b9050919050565b600060408201905061388e6000830185612c58565b61389b6020830184612c58565b9392505050565b60006138ad82612b32565b91506138b883612b32565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156138f1576138f06135de565b5b828202905092915050565b600061390782612b32565b915061391283612b32565b925082821015613925576139246135de565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061399d81612b06565b92915050565b6000602082840312156139b9576139b8612acf565b5b60006139c78482850161398e565b91505092915050565b6000819050919050565b60006139f56139f06139eb846139d0565b612bde565b612b32565b9050919050565b613a05816139da565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613a4081612af4565b82525050565b6000613a528383613a37565b60208301905092915050565b6000602082019050919050565b6000613a7682613a0b565b613a808185613a16565b9350613a8b83613a27565b8060005b83811015613abc578151613aa38882613a46565b9750613aae83613a5e565b925050600181019050613a8f565b5085935050505092915050565b600060a082019050613ade6000830188612c58565b613aeb60208301876139fc565b8181036040830152613afd8186613a6b565b9050613b0c6060830185612da5565b613b196080830184612c58565b9695505050505050565b600060c082019050613b386000830189612da5565b613b456020830188612c58565b613b5260408301876139fc565b613b5f60608301866139fc565b613b6c6080830185612da5565b613b7960a0830184612c58565b979650505050505050565b600081519050613b9381612b3c565b92915050565b600080600060608486031215613bb257613bb1612acf565b5b6000613bc086828701613b84565b9350506020613bd186828701613b84565b9250506040613be286828701613b84565b915050925092509256fea26469706673582212203b2ff2433ab8825815b3e14ff44c533ed4069336894bc4732ec1a753471280e364736f6c634300080f0033

Deployed Bytecode Sourcemap

29707:9072:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3564:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5199:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30327:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4152:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30422:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5593:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3994:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38604:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30375:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29828:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36937:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29987:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29949:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4323:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2481:94;;;;;;;;;;;;;:::i;:::-;;37150:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38298:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30477:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37466:303;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2258:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30577:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30061:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3783:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29911:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30103:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4663:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36637:288;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37778:316;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38425:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30139:59;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4901:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30265:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37343:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30205:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38102:188;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2583:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30019:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37070:72;;;;;;;;;;;;;:::i;:::-;;3564:100;3618:13;3651:5;3644:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3564:100;:::o;5199:169::-;5282:4;5299:39;5308:12;:10;:12::i;:::-;5322:7;5331:6;5299:8;:39::i;:::-;5356:4;5349:11;;5199:169;;;;:::o;30327:41::-;;;;;;;;;;;;;:::o;4152:108::-;4213:7;4240:12;;4233:19;;4152:108;:::o;30422:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;5593:492::-;5733:4;5750:36;5760:6;5768:9;5779:6;5750:9;:36::i;:::-;5799:24;5826:11;:19;5838:6;5826:19;;;;;;;;;;;;;;;:33;5846:12;:10;:12::i;:::-;5826:33;;;;;;;;;;;;;;;;5799:60;;5898:6;5878:16;:26;;5870:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;5985:57;5994:6;6002:12;:10;:12::i;:::-;6035:6;6016:16;:25;5985:8;:57::i;:::-;6073:4;6066:11;;;5593:492;;;;;:::o;3994:93::-;4052:5;4077:2;4070:9;;3994:93;:::o;38604:123::-;2404:12;:10;:12::i;:::-;2393:23;;:7;:5;:7::i;:::-;:23;;;2385:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38714:5:::1;38688:14;:23;38703:7;38688:23;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;38604:123:::0;;:::o;30375:38::-;;;:::o;29828:40::-;;;;;;;;;;;;;:::o;36937:125::-;37002:4;37026:19;:28;37046:7;37026:28;;;;;;;;;;;;;;;;;;;;;;;;;37019:35;;36937:125;;;:::o;29987:25::-;;;;:::o;29949:31::-;;;;:::o;4323:127::-;4397:7;4424:9;:18;4434:7;4424:18;;;;;;;;;;;;;;;;4417:25;;4323:127;;;:::o;2481:94::-;2404:12;:10;:12::i;:::-;2393:23;;:7;:5;:7::i;:::-;:23;;;2385:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2546:21:::1;2564:1;2546:9;:21::i;:::-;2481:94::o:0;37150:185::-;2404:12;:10;:12::i;:::-;2393:23;;:7;:5;:7::i;:::-;:23;;;2385:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37241:9:::1;37224:14;:26;;;;37287:22;37305:3;37287:13;:11;:13::i;:::-;:17;;:22;;;;:::i;:::-;37269:14;;:40;;37261:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;37150:185:::0;:::o;38298:119::-;2404:12;:10;:12::i;:::-;2393:23;;:7;:5;:7::i;:::-;:23;;;2385:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38399:10:::1;38378:18;:31;;;;38298:119:::0;:::o;30477:92::-;;;;;;;;;;;;;:::o;37466:303::-;2404:12;:10;:12::i;:::-;2393:23;;:7;:5;:7::i;:::-;:23;;;2385:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37637:2:::1;37588:45;37625:7;37588:32;37606:13;37588;:17;;:32;;;;:::i;:::-;:36;;:45;;;;:::i;:::-;:51;;37580:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;37682:13;37667:12;:28;;;;37721:13;37706:12;:28;;;;37754:7;37745:6;:16;;;;37466:303:::0;;;:::o;2258:87::-;2304:7;2331:6;;;;;;;;;;;2324:13;;2258:87;:::o;30577:86::-;;;;;;;;;;;;;:::o;30061:35::-;;;;:::o;3783:104::-;3839:13;3872:7;3865:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3783:104;:::o;29911:31::-;;;;:::o;30103:29::-;;;;:::o;4663:175::-;4749:4;4766:42;4776:12;:10;:12::i;:::-;4790:9;4801:6;4766:9;:42::i;:::-;4826:4;4819:11;;4663:175;;;;:::o;36637:288::-;2404:12;:10;:12::i;:::-;2393:23;;:7;:5;:7::i;:::-;:23;;;2385:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36762:8:::1;36730:40;;:19;:28;36750:7;36730:28;;;;;;;;;;;;;;;;;;;;;;;;;:40;;::::0;36722:95:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;36859:8;36828:19;:28;36848:7;36828:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;36899:7;36883:34;;;36908:8;36883:34;;;;;;:::i;:::-;;;;;;;;36637:288:::0;;:::o;37778:316::-;2404:12;:10;:12::i;:::-;2393:23;;:7;:5;:7::i;:::-;:23;;;2385:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37950:2:::1;37901:45;37938:7;37901:32;37919:13;37901;:17;;:32;;;;:::i;:::-;:36;;:45;;;;:::i;:::-;:51;;37893:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;37999:13;37980:16;:32;;;;38042:13;38023:16;:32;;;;38079:7;38066:10;:20;;;;37778:316:::0;;;:::o;38425:171::-;2404:12;:10;:12::i;:::-;2393:23;;:7;:5;:7::i;:::-;:23;;;2385:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38526:8:::1;38502:21;;:32;;;;;;;;;;;;;;;;;;38550:38;38579:8;38550:38;;;;;;:::i;:::-;;;;;;;;38425:171:::0;:::o;30139:59::-;;;;:::o;4901:151::-;4990:7;5017:11;:18;5029:5;5017:18;;;;;;;;;;;;;;;:27;5036:7;5017:27;;;;;;;;;;;;;;;;5010:34;;4901:151;;;;:::o;30265:53::-;;;;:::o;37343:115::-;2404:12;:10;:12::i;:::-;2393:23;;:7;:5;:7::i;:::-;:23;;;2385:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37433:7:::1;37410:20;:30;;;;37343:115:::0;:::o;30205:53::-;;;;:::o;38102:188::-;2404:12;:10;:12::i;:::-;2393:23;;:7;:5;:7::i;:::-;:23;;;2385:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38233:16:::1;38215:15;;:34;;;;;;;;;;;;;;;;;;38272:10;38260:9;;:22;;;;;;;;;;;;;;;;;;38102:188:::0;;:::o;2583:192::-;2404:12;:10;:12::i;:::-;2393:23;;:7;:5;:7::i;:::-;:23;;;2385:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2692:1:::1;2672:22;;:8;:22;;::::0;2664:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;2748:19;2758:8;2748:9;:19::i;:::-;2583:192:::0;:::o;30019:35::-;;;;:::o;37070:72::-;2404:12;:10;:12::i;:::-;2393:23;;:7;:5;:7::i;:::-;:23;;;2385:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37130:4:::1;37121:6;;:13;;;;;;;;;;;;;;;;;;37070:72::o:0;1622:98::-;1675:7;1702:10;1695:17;;1622:98;:::o;7533:380::-;7686:1;7669:19;;:5;:19;;;7661:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7767:1;7748:21;;:7;:21;;;7740:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7851:6;7821:11;:18;7833:5;7821:18;;;;;;;;;;;;;;;:27;7840:7;7821:27;;;;;;;;;;;;;;;:36;;;;7889:7;7873:32;;7882:5;7873:32;;;7898:6;7873:32;;;;;;:::i;:::-;;;;;;;;7533:380;;;:::o;32080:2120::-;32228:1;32212:18;;:4;:18;;;32204:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32305:1;32291:16;;:2;:16;;;32283:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;32358:20;32381:19;:25;32401:4;32381:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;32410:19;:23;32430:2;32410:23;;;;;;;;;;;;;;;;;;;;;;;;;32381:52;32358:75;;32452:6;;;;;;;;;;;:25;;;;32462:15;32452:25;32444:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;32525:14;:20;32540:4;32525:20;;;;;;;;;;;;;;;;;;;;;;;;;32524:21;:44;;;;;32550:14;:18;32565:2;32550:18;;;;;;;;;;;;;;;;;;;;;;;;;32549:19;32524:44;32516:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;32618:1;32608:6;:11;32605:92;;32636:28;32652:4;32658:2;32662:1;32636:15;:28::i;:::-;32679:7;;;32605:92;32719:13;32713:19;;:4;:19;;;:49;;;;;32737:19;:25;32757:4;32737:25;;;;;;;;;;;;;;;;;;;;;;;;;32736:26;32713:49;:77;;;;;32767:19;:23;32787:2;32767:23;;;;;;;;;;;;;;;;;;;;;;;;;32766:24;32713:77;32710:271;;;32806:32;32841:13;32851:2;32841:9;:13::i;:::-;32806:48;;32914:14;;32904:6;32877:24;:33;;;;:::i;:::-;:51;;32869:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;32791:190;32710:271;33008:13;33004:17;;:2;:17;;;:37;;;;;33026:15;33025:16;33004:37;33001:152;;;33076:20;;33066:6;:30;;33058:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;33001:152;33170:28;33201:24;33219:4;33201:9;:24::i;:::-;33170:55;;33246:24;33297:18;;33273:20;:42;;33246:69;;33338:19;:40;;;;;33362:16;;;;;;;;;;;33361:17;33338:40;:61;;;;;33386:13;33382:17;;:2;:17;;;33338:61;:86;;;;;33403:21;;;;;;;;;;;33338:86;33335:212;;;33464:18;;33441:41;;33497:36;33512:20;33497:14;:36::i;:::-;33335:212;33649:15;33645:500;;33681:12;33717:13;33711:19;;:4;:19;;;33708:128;;33757:63;33816:3;33757:54;33768:42;33803:6;;33768:30;33785:12;;33768;;:16;;:30;;;;:::i;:::-;:34;;:42;;;;:::i;:::-;33757:6;:10;;:54;;;;:::i;:::-;:58;;:63;;;;:::i;:::-;33749:71;;33708:128;33859:13;33855:17;;:2;:17;;;33852:138;;33899:75;33970:3;33899:66;33910:54;33953:10;;33910:38;33931:16;;33910;;:20;;:38;;;;:::i;:::-;:42;;:54;;;;:::i;:::-;33899:6;:10;;:66;;;;:::i;:::-;:70;;:75;;;;:::i;:::-;33891:83;;33852:138;34012:16;34023:4;34012:6;:10;;:16;;;;:::i;:::-;34003:25;;34053:1;34046:4;:8;34043:91;;;34075:42;34091:4;34105;34112;34075:15;:42::i;:::-;34043:91;33666:479;33645:500;34157:33;34173:4;34179:2;34183:6;34157:15;:33::i;:::-;32193:2007;;;32080:2120;;;;:::o;2783:173::-;2839:16;2858:6;;;;;;;;;;;2839:25;;2884:8;2875:6;;:17;;;;;;;;;;;;;;;;;;2939:8;2908:40;;2929:8;2908:40;;;;;;;;;;;;2828:128;2783:173;:::o;19358:98::-;19416:7;19447:1;19443;:5;;;;:::i;:::-;19436:12;;19358:98;;;;:::o;18221:::-;18279:7;18310:1;18306;:5;;;;:::i;:::-;18299:12;;18221:98;;;;:::o;6183:733::-;6341:1;6323:20;;:6;:20;;;6315:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;6425:1;6404:23;;:9;:23;;;6396:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;6480:47;6501:6;6509:9;6520:6;6480:20;:47::i;:::-;6540:21;6564:9;:17;6574:6;6564:17;;;;;;;;;;;;;;;;6540:41;;6617:6;6600:13;:23;;6592:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;6738:6;6722:13;:22;6702:9;:17;6712:6;6702:17;;;;;;;;;;;;;;;:42;;;;6790:6;6766:9;:20;6776:9;6766:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;6831:9;6814:35;;6823:6;6814:35;;;6842:6;6814:35;;;;;;:::i;:::-;;;;;;;;6862:46;6882:6;6890:9;6901:6;6862:19;:46::i;:::-;6304:612;6183:733;;;:::o;34209:1330::-;30838:4;30819:16;;:23;;;;;;;;;;;;;;;;;;34294:26:::1;34323:102;34370:54;34413:10;;34370:38;34391:16;;34370;;:20;;:38;;;;:::i;:::-;:42;;:54;;;;:::i;:::-;34323:42;34348:16;;34323:20;:24;;:42;;;;:::i;:::-;:46;;:102;;;;:::i;:::-;34294:131;;34494:12;34509:25;34532:1;34509:18;:22;;:25;;;;:::i;:::-;34494:40;;34545:17;34565:28;34588:4;34565:18;:22;;:28;;;;:::i;:::-;34545:48;;34871:22;34896:21;34871:46;;34962:22;34979:4;34962:16;:22::i;:::-;35046:18;35067:41;35093:14;35067:21;:25;;:41;;;;:::i;:::-;35046:62;;35158:35;35171:9;35182:10;35158:12;:35::i;:::-;35247:62;35264:44;35289:18;35264:20;:24;;:44;;;;:::i;:::-;35247:16;:62::i;:::-;35320:9;;;;;;;;;;;:18;;:95;35339:75;35381:32;35402:10;;35381:16;;:20;;:32;;;;:::i;:::-;35339:37;35365:10;;35339:21;:25;;:37;;;;:::i;:::-;:41;;:75;;;;:::i;:::-;35320:95;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;35426:15;;;;;;;;;;;:24;;:47;35451:21;35426:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;35498:32;35513:4;35519:10;35498:32;;;;;;;:::i;:::-;;;;;;;;34283:1256;;;;;30884:5:::0;30865:16;;:24;;;;;;;;;;;;;;;;;;34209:1330;:::o;18959:98::-;19017:7;19048:1;19044;:5;;;;:::i;:::-;19037:12;;18959:98;;;;:::o;18602:::-;18660:7;18691:1;18687;:5;;;;:::i;:::-;18680:12;;18602:98;;;;:::o;8002:125::-;;;;:::o;8216:124::-;;;;:::o;35547:692::-;35673:21;35711:1;35697:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35673:40;;35742:4;35724;35729:1;35724:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;35768:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35758:4;35763:1;35758:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;35859:11;35806:50;35824:4;35839:15;;;;;;;;;;;35806:9;:50::i;:::-;:64;35803:156;;;35885:62;35902:4;35917:15;;;;;;;;;;;35944:1;35935:11;35885:8;:62::i;:::-;35803:156;35997:15;;;;;;;;;;;:66;;;36078:11;36104:1;36148:4;36175;36195:15;35997:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35602:637;35547:692;:::o;36247:381::-;36358:15;;;;;;;;;;;:31;;;36397:9;36430:4;36450:11;36476:1;36519;36562:7;:5;:7::i;:::-;36584:15;36358:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;36247: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://3b2ff2433ab8825815b3e14ff44c533ed4069336894bc4732ec1a753471280e3
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.