ETH Price: $3,384.99 (-2.76%)
Gas: 1 Gwei

Token

Alpha Bot Calls (ABC)
 

Overview

Max Total Supply

1,000,000 ABC

Holders

448

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.000006994574851121 ABC

Value
$0.00
0x76bb7a550c05ae1dcda72dc0d21762db794d301f
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:
AlphaBotCalls

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-07-25
*/

// https://twitter.com/AlphaBotCalls

// https://t.me/AlphaBotCalls

// https://alphabotcalls.com/


// SPDX-License-Identifier: MIT

pragma solidity ^ 0.8.7;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

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

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

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

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

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

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

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

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since 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 Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract AlphaBotCalls is Context, Ownable, IERC20, IERC20Metadata {
    using SafeMath for uint256;
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    uint256 private _totalSupply;
    string private _name = "Alpha Bot Calls";
    string private _symbol = "ABC";
    address public devWallet = 0x664e2531f5c1AeCA86b7C65935431AbB06F29f71;
    address public marketingWallet = 0x2aA830a48Cd78d5360139E790F808e46B9aAdC2b;
    uint256 public devFee = 2;
    uint256 public marketingFee = 1;
    uint256 public liquidityFee = 1;
    uint256 public totalFee;
    mapping(address => bool) public exemptFromFee;
    mapping(address => bool) public exemptFromMax;
    address public uniswapPair;
    IUniswapV2Router02 public uniswapRouter;
    uint256 public swapThreshold;
    uint256 public maxWalletAmount;
    bool public enableAntiwhale = true;

    bool inSwap;
    modifier swapping() {
        inSwap = true;
        _;
        inSwap = false;
    }

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor() {
        uniswapRouter = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapPair = IUniswapV2Factory(uniswapRouter.factory()).createPair(
            uniswapRouter.WETH(),
            address(this)
        );
        exemptFromFee[_msgSender()] = true;
        exemptFromFee[devWallet] = true;
        exemptFromFee[marketingWallet] = true;
        exemptFromFee[address(this)] = true;

        exemptFromMax[_msgSender()] = true;
        exemptFromMax[devWallet] = true;
        exemptFromMax[marketingWallet] = true;
        exemptFromMax[uniswapPair] = true;
        exemptFromMax[address(this)] = true;

        _mint(_msgSender(), 1 * 10 ** 6 * 10 ** decimals());
        swapThreshold = _totalSupply.mul(5).div(10000);
        maxWalletAmount = _totalSupply.mul(1).div(100);
        totalFee = devFee.add(marketingFee).add(liquidityFee);
    }

    receive() external payable {}

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

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

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

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

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

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

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

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

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

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

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

        return true;
    }

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

        if(
            from != uniswapPair &&
            _balances[address(this)] >= swapThreshold &&
            !inSwap
        ) {
            processSwap(_balances[address(this)]);
        }



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

        if(
            !exemptFromMax[to] &&
            enableAntiwhale
        ) {
            require(_balances[to] <= maxWalletAmount, "Anthiwhale: can not hold more than max wallet amount");
        }

        emit Transfer(from, to, amountAfterFee);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");
        _totalSupply += amount;
        unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _balances[account] += amount;
        }
        emit Transfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");
        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _totalSupply -= amount;
        }

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

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address _owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(_owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[_owner][spender] = amount;
        emit Approval(_owner, spender, amount);
    }

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

    event UpdateExemptFromFee(address indexed wallet, bool _exempt);
    function updateExemptFromFee(
        address wallet, 
        bool _exempt
    ) external onlyOwner {
        exemptFromFee[wallet] = _exempt;
        emit UpdateExemptFromFee(wallet, _exempt);
    }

    event FeeUpdated(uint256 _devFee, uint256 _marketingFee, uint256 _liquidityFee);
    function updateFees(
        uint256 _devFee,
        uint256 _marketingFee,
        uint256 _liquidityFee
    ) external onlyOwner {
        devFee = _devFee;
        marketingFee = _marketingFee;
        liquidityFee = _liquidityFee;
        totalFee = _devFee.add(_marketingFee).add(_liquidityFee);
        require(totalFee <= 4, "Total fee can not exceeds 4");
        emit FeeUpdated(_devFee, _marketingFee, _liquidityFee);
    }

    event ThresholdUpdated(uint256 _newThreshold);
    function updateSwapThreshold(
        uint256 _newThreshold
    ) external onlyOwner {
        swapThreshold = _newThreshold;
        emit ThresholdUpdated(_newThreshold);
    }

    function takeFee(
        address from,
        address to,
        uint256 amount
    ) internal returns(uint256) {
        if(!exemptFromFee[from] && !exemptFromFee[to]){
            //taxable only during buy and sell and not during w2w tranfer
            if(from == uniswapPair || to == uniswapPair) {
                uint256 _totalFee = amount.mul(totalFee).div(10**2);
                amount = amount.sub(_totalFee);

                if(_totalFee != 0) {
                    _balances[address(this)] = _balances[address(this)].add(_totalFee);
                    emit Transfer(from, address(this), _totalFee);
                }
            }

        }

        return amount;
    }


    event AutoLiquify(uint256 newBalance, uint256 otherHalf);
    function processSwap(uint256 tokenToSell) private swapping {
        uint256 _teamTokens = tokenToSell.mul(devFee.add(marketingFee)).div(totalFee);
        uint256 _tLiquidity = tokenToSell.mul(liquidityFee).div(totalFee);
        uint256 _tokenForLiquidity = _tLiquidity.div(2);
        uint256 _tTokenToSell = _teamTokens.add(_tokenForLiquidity);

        swapTokensForEth(_tTokenToSell);

        uint256 totalEth = address(this).balance;

        uint256 ethForDev = totalEth.mul(devFee).div(totalFee);
        uint256 ethForMarketing = totalEth.mul(marketingFee).div(totalFee);
        uint256 ethForLiquidity = totalEth.mul(liquidityFee).div(totalFee);


        if(ethForDev != 0) {
            (bool success, ) = payable(devWallet).call{value: ethForDev}("");
            require(success, "can not send fee to the dev wallet");
        } 

        if(ethForMarketing != 0) {
            (bool success, ) = payable(marketingWallet).call{value: ethForMarketing}("");
            require(success, "can not send fee to the marketing wallet");
        }

        addLiquidity(_tokenForLiquidity, ethForLiquidity);

        emit AutoLiquify(_tokenForLiquidity, ethForLiquidity);

    }


    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] = uniswapRouter.WETH();
        _approve(address(this), address(uniswapRouter), tokenAmount);
        // make the swap
        uniswapRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        if(ethAmount != 0) {
            _approve(address(this), address(uniswapRouter), tokenAmount);

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

    event WalletsUpdated(address indexed _devWallet, address indexed _marketingWallet);
    function updateWallets(
        address _devWallet,
        address _marketingWallet
    ) external onlyOwner {
        require(_devWallet != address(0), "dev wallet can not be zero address");
        require(_marketingWallet != address(0), "marketing wallet can not be zero address");
        devWallet = _devWallet;
        marketingWallet = _marketingWallet;
        emit WalletsUpdated(_devWallet, _marketingWallet);
    }

    event MaxWalletAmount(uint256 _maxWalletAmount);
    function updateMaxWalletAmount(
        uint256 _maxWalletAmount
    ) external onlyOwner {
        maxWalletAmount = _maxWalletAmount;
        emit MaxWalletAmount(_maxWalletAmount);
    }

    event ExemptFromMax(address indexed _wallet, bool _exempt);
    function exemptFromMaxWallet(
        address _wallet,
        bool _exempt
    ) external onlyOwner {
        exemptFromMax[_wallet] = _exempt;
        emit ExemptFromMax(_wallet, _exempt);
    }

    event EnableAntiwhale(bool _enable);
    function enableAntiwhaleSystem(
        bool _enable 
    ) external onlyOwner {
        enableAntiwhale = _enable;
        emit EnableAntiwhale(_enable);
    }

}

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":false,"internalType":"uint256","name":"newBalance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"otherHalf","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"_enable","type":"bool"}],"name":"EnableAntiwhale","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_wallet","type":"address"},{"indexed":false,"internalType":"bool","name":"_exempt","type":"bool"}],"name":"ExemptFromMax","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_devFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"FeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_maxWalletAmount","type":"uint256"}],"name":"MaxWalletAmount","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":"_newThreshold","type":"uint256"}],"name":"ThresholdUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"wallet","type":"address"},{"indexed":false,"internalType":"bool","name":"_exempt","type":"bool"}],"name":"UpdateExemptFromFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_devWallet","type":"address"},{"indexed":true,"internalType":"address","name":"_marketingWallet","type":"address"}],"name":"WalletsUpdated","type":"event"},{"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":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableAntiwhale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_enable","type":"bool"}],"name":"enableAntiwhaleSystem","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"exemptFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"exemptFromMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"},{"internalType":"bool","name":"_exempt","type":"bool"}],"name":"exemptFromMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"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","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"bool","name":"_exempt","type":"bool"}],"name":"updateExemptFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxWalletAmount","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newThreshold","type":"uint256"}],"name":"updateSwapThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_devWallet","type":"address"},{"internalType":"address","name":"_marketingWallet","type":"address"}],"name":"updateWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526040518060400160405280600f81526020017f416c70686120426f742043616c6c730000000000000000000000000000000000815250600490805190602001906200005192919062000b62565b506040518060400160405280600381526020017f4142430000000000000000000000000000000000000000000000000000000000815250600590805190602001906200009f92919062000b62565b5073664e2531f5c1aeca86b7c65935431abb06f29f71600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550732aa830a48cd78d5360139e790f808e46b9aadc2b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600260085560016009556001600a556001601260006101000a81548160ff0219169083151502179055503480156200018157600080fd5b50620001a262000196620008fe60201b60201c565b6200090660201b60201c565b737a250d5630b4cf539739df2c5dacb4c659f2488d600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200026057600080fd5b505afa15801562000275573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200029b919062000c29565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200031f57600080fd5b505afa15801562000334573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200035a919062000c29565b306040518363ffffffff1660e01b81526004016200037a92919062000ca4565b602060405180830381600087803b1580156200039557600080fd5b505af1158015620003aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003d0919062000c29565b600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600c600062000426620008fe60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d6000620005d9620008fe60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506200083e62000804620008fe60201b60201c565b62000814620009ca60201b60201c565b600a62000822919062000e11565b620f424062000832919062000f4e565b620009d360201b60201c565b6200087661271062000862600560035462000b1a60201b620016311790919060201c565b62000b3260201b620016471790919060201c565b601081905550620008b360646200089f600160035462000b1a60201b620016311790919060201c565b62000b3260201b620016471790919060201c565b601181905550620008f2600a54620008de60095460085462000b4a60201b6200165d1790919060201c565b62000b4a60201b6200165d1790919060201c565b600b8190555062001112565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006012905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000a46576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a3d9062000cd1565b60405180910390fd5b806003600082825462000a5a919062000d21565b9250508190555080600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b0e919062000cf3565b60405180910390a35050565b6000818362000b2a919062000f4e565b905092915050565b6000818362000b42919062000d7e565b905092915050565b6000818362000b5a919062000d21565b905092915050565b82805462000b709062000ffa565b90600052602060002090601f01602090048101928262000b94576000855562000be0565b82601f1062000baf57805160ff191683800117855562000be0565b8280016001018555821562000be0579182015b8281111562000bdf57825182559160200191906001019062000bc2565b5b50905062000bef919062000bf3565b5090565b5b8082111562000c0e57600081600090555060010162000bf4565b5090565b60008151905062000c2381620010f8565b92915050565b60006020828403121562000c425762000c41620010bd565b5b600062000c528482850162000c12565b91505092915050565b62000c668162000faf565b82525050565b600062000c7b601f8362000d10565b915062000c8882620010cf565b602082019050919050565b62000c9e8162000fe3565b82525050565b600060408201905062000cbb600083018562000c5b565b62000cca602083018462000c5b565b9392505050565b6000602082019050818103600083015262000cec8162000c6c565b9050919050565b600060208201905062000d0a600083018462000c93565b92915050565b600082825260208201905092915050565b600062000d2e8262000fe3565b915062000d3b8362000fe3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000d735762000d7262001030565b5b828201905092915050565b600062000d8b8262000fe3565b915062000d988362000fe3565b92508262000dab5762000daa6200105f565b5b828204905092915050565b6000808291508390505b600185111562000e085780860481111562000de05762000ddf62001030565b5b600185161562000df05780820291505b808102905062000e0085620010c2565b945062000dc0565b94509492505050565b600062000e1e8262000fe3565b915062000e2b8362000fed565b925062000e5a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000e62565b905092915050565b60008262000e74576001905062000f47565b8162000e84576000905062000f47565b816001811462000e9d576002811462000ea85762000ede565b600191505062000f47565b60ff84111562000ebd5762000ebc62001030565b5b8360020a91508482111562000ed75762000ed662001030565b5b5062000f47565b5060208310610133831016604e8410600b841016171562000f185782820a90508381111562000f125762000f1162001030565b5b62000f47565b62000f27848484600162000db6565b9250905081840481111562000f415762000f4062001030565b5b81810290505b9392505050565b600062000f5b8262000fe3565b915062000f688362000fe3565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000fa45762000fa362001030565b5b828202905092915050565b600062000fbc8262000fc3565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600060028204905060018216806200101357607f821691505b602082108114156200102a57620010296200108e565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b60008160011c9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b620011038162000faf565b81146200110f57600080fd5b50565b61398d80620011226000396000f3fe6080604052600436106101fd5760003560e01c806375f0a8741161010d578063aa4bde28116100a0578063dd62ed3e1161006f578063dd62ed3e14610748578063e8ba854f14610785578063f2fde38b146107ae578063fa09eaaf146107d7578063fb60e0bc1461080057610204565b8063aa4bde28146106a0578063c18bc195146106cb578063c816841b146106f4578063cc274b291461071f57610204565b806395d89b41116100dc57806395d89b41146105d057806398118cb4146105fb578063a457c2d714610626578063a9059cbb1461066357610204565b806375f0a874146105265780638da5cb5b146105515780638ea5220f1461057c57806393705764146105a757610204565b806323b872dd116101905780636827e7641161015f5780636827e764146104515780636b67c4df1461047c57806370a08231146104a7578063715018a6146104e4578063735de9f7146104fb57610204565b806323b872dd1461036f578063313ce567146103ac57806339509351146103d757806358e4b7311461041457610204565b80631df4ccfc116101cc5780631df4ccfc146102c75780631e5bbf62146102f257806321b27ec11461031b578063224290851461034657610204565b80630445b6671461020957806306fdde0314610234578063095ea7b31461025f57806318160ddd1461029c57610204565b3661020457005b600080fd5b34801561021557600080fd5b5061021e61083d565b60405161022b9190613078565b60405180910390f35b34801561024057600080fd5b50610249610843565b6040516102569190612e76565b60405180910390f35b34801561026b57600080fd5b5061028660048036038101906102819190612927565b6108d5565b6040516102939190612e40565b60405180910390f35b3480156102a857600080fd5b506102b16108f8565b6040516102be9190613078565b60405180910390f35b3480156102d357600080fd5b506102dc610902565b6040516102e99190613078565b60405180910390f35b3480156102fe57600080fd5b50610319600480360381019061031491906128e7565b610908565b005b34801561032757600080fd5b50610330610a2d565b60405161033d9190612e40565b60405180910390f35b34801561035257600080fd5b5061036d600480360381019061036891906129c1565b610a40565b005b34801561037b57600080fd5b5061039660048036038101906103919190612894565b610b82565b6040516103a39190612e40565b60405180910390f35b3480156103b857600080fd5b506103c1610bb1565b6040516103ce919061314d565b60405180910390f35b3480156103e357600080fd5b506103fe60048036038101906103f99190612927565b610bba565b60405161040b9190612e40565b60405180910390f35b34801561042057600080fd5b5061043b600480360381019061043691906127fa565b610bf1565b6040516104489190612e40565b60405180910390f35b34801561045d57600080fd5b50610466610c11565b6040516104739190613078565b60405180910390f35b34801561048857600080fd5b50610491610c17565b60405161049e9190613078565b60405180910390f35b3480156104b357600080fd5b506104ce60048036038101906104c991906127fa565b610c1d565b6040516104db9190613078565b60405180910390f35b3480156104f057600080fd5b506104f9610c66565b005b34801561050757600080fd5b50610510610cee565b60405161051d9190612e5b565b60405180910390f35b34801561053257600080fd5b5061053b610d14565b6040516105489190612dc4565b60405180910390f35b34801561055d57600080fd5b50610566610d3a565b6040516105739190612dc4565b60405180910390f35b34801561058857600080fd5b50610591610d63565b60405161059e9190612dc4565b60405180910390f35b3480156105b357600080fd5b506105ce60048036038101906105c99190612967565b610d89565b005b3480156105dc57600080fd5b506105e5610e59565b6040516105f29190612e76565b60405180910390f35b34801561060757600080fd5b50610610610eeb565b60405161061d9190613078565b60405180910390f35b34801561063257600080fd5b5061064d60048036038101906106489190612927565b610ef1565b60405161065a9190612e40565b60405180910390f35b34801561066f57600080fd5b5061068a60048036038101906106859190612927565b610f68565b6040516106979190612e40565b60405180910390f35b3480156106ac57600080fd5b506106b5610f8b565b6040516106c29190613078565b60405180910390f35b3480156106d757600080fd5b506106f260048036038101906106ed9190612994565b610f91565b005b34801561070057600080fd5b5061070961104e565b6040516107169190612dc4565b60405180910390f35b34801561072b57600080fd5b5061074660048036038101906107419190612994565b611074565b005b34801561075457600080fd5b5061076f600480360381019061076a9190612854565b611131565b60405161077c9190613078565b60405180910390f35b34801561079157600080fd5b506107ac60048036038101906107a79190612854565b6111b8565b005b3480156107ba57600080fd5b506107d560048036038101906107d091906127fa565b6113f4565b005b3480156107e357600080fd5b506107fe60048036038101906107f991906128e7565b6114ec565b005b34801561080c57600080fd5b50610827600480360381019061082291906127fa565b611611565b6040516108349190612e40565b60405180910390f35b60105481565b606060048054610852906133ad565b80601f016020809104026020016040519081016040528092919081815260200182805461087e906133ad565b80156108cb5780601f106108a0576101008083540402835291602001916108cb565b820191906000526020600020905b8154815290600101906020018083116108ae57829003601f168201915b5050505050905090565b6000806108e0611673565b90506108ed81858561167b565b600191505092915050565b6000600354905090565b600b5481565b610910611673565b73ffffffffffffffffffffffffffffffffffffffff1661092e610d3a565b73ffffffffffffffffffffffffffffffffffffffff1614610984576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097b90612fd8565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f704ff73c4e410152e02ca4e708d579e08ac7865f1ac8edce526234513f4ac5c582604051610a219190612e40565b60405180910390a25050565b601260009054906101000a900460ff1681565b610a48611673565b73ffffffffffffffffffffffffffffffffffffffff16610a66610d3a565b73ffffffffffffffffffffffffffffffffffffffff1614610abc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab390612fd8565b60405180910390fd5b826008819055508160098190555080600a81905550610af681610ae8848661165d90919063ffffffff16565b61165d90919063ffffffff16565b600b819055506004600b541115610b42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3990612eb8565b60405180910390fd5b7f509d432c4ab40e3eb039ee95fea93be8de6c751efa87aed5e51c7202b0dd8e09838383604051610b7593929190613116565b60405180910390a1505050565b600080610b8d611673565b9050610b9a858285611846565b610ba58585856118d2565b60019150509392505050565b60006012905090565b600080610bc5611673565b9050610be6818585610bd78589611131565b610be191906131c8565b61167b565b600191505092915050565b600c6020528060005260406000206000915054906101000a900460ff1681565b60085481565b60095481565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610c6e611673565b73ffffffffffffffffffffffffffffffffffffffff16610c8c610d3a565b73ffffffffffffffffffffffffffffffffffffffff1614610ce2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd990612fd8565b60405180910390fd5b610cec6000611d3d565b565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610d91611673565b73ffffffffffffffffffffffffffffffffffffffff16610daf610d3a565b73ffffffffffffffffffffffffffffffffffffffff1614610e05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfc90612fd8565b60405180910390fd5b80601260006101000a81548160ff0219169083151502179055507ffc9a38574cd72afde7f596ce987008cf51a79b0451b7997cdbc9135489199dcf81604051610e4e9190612e40565b60405180910390a150565b606060058054610e68906133ad565b80601f0160208091040260200160405190810160405280929190818152602001828054610e94906133ad565b8015610ee15780601f10610eb657610100808354040283529160200191610ee1565b820191906000526020600020905b815481529060010190602001808311610ec457829003601f168201915b5050505050905090565b600a5481565b600080610efc611673565b90506000610f0a8286611131565b905083811015610f4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4690613058565b60405180910390fd5b610f5c828686840361167b565b60019250505092915050565b600080610f73611673565b9050610f808185856118d2565b600191505092915050565b60115481565b610f99611673565b73ffffffffffffffffffffffffffffffffffffffff16610fb7610d3a565b73ffffffffffffffffffffffffffffffffffffffff161461100d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100490612fd8565b60405180910390fd5b806011819055507f22c83a5ec34271153086583a02141e6d8afa47085fffe4f3c546e7011357aa09816040516110439190613078565b60405180910390a150565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61107c611673565b73ffffffffffffffffffffffffffffffffffffffff1661109a610d3a565b73ffffffffffffffffffffffffffffffffffffffff16146110f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e790612fd8565b60405180910390fd5b806010819055507fadfa8ecb21b6962ebcd0adbd9ab985b7b4c5b5eb3b0dead683171565c7bfe171816040516111269190613078565b60405180910390a150565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6111c0611673565b73ffffffffffffffffffffffffffffffffffffffff166111de610d3a565b73ffffffffffffffffffffffffffffffffffffffff1614611234576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122b90612fd8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129b90612f98565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611314576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130b90612fb8565b60405180910390fd5b81600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f316af92955f23ddbd4c570a5f8cda8a10b192f24d8f58524deb2fcb03a8bc79460405160405180910390a35050565b6113fc611673565b73ffffffffffffffffffffffffffffffffffffffff1661141a610d3a565b73ffffffffffffffffffffffffffffffffffffffff1614611470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146790612fd8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156114e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d790612ed8565b60405180910390fd5b6114e981611d3d565b50565b6114f4611673565b73ffffffffffffffffffffffffffffffffffffffff16611512610d3a565b73ffffffffffffffffffffffffffffffffffffffff1614611568576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155f90612fd8565b60405180910390fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167fa35648c59c0d294efd491e4dd37c5c989af10767bb4cada9ddae9a689006232a826040516116059190612e40565b60405180910390a25050565b600d6020528060005260406000206000915054906101000a900460ff1681565b6000818361163f919061324f565b905092915050565b60008183611655919061321e565b905092915050565b6000818361166b91906131c8565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156116eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e290613038565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561175b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175290612ef8565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516118399190613078565b60405180910390a3505050565b60006118528484611131565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146118cc57818110156118be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b590612f38565b60405180910390fd5b6118cb848484840361167b565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611942576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193990613018565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a990612e98565b60405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611a515750601054600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b8015611a6a5750601260019054906101000a900460ff16155b15611ab857611ab7600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611e01565b5b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611b3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3690612f58565b60405180910390fd5b6000611b4c858585612167565b9050828203600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611c475750601260009054906101000a900460ff165b15611cd157601154600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611cd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc790612ff8565b60405180910390fd5b5b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611d2e9190613078565b60405180910390a35050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001601260016101000a81548160ff0219169083151502179055506000611e5b600b54611e4d611e3e60095460085461165d90919063ffffffff16565b8561163190919063ffffffff16565b61164790919063ffffffff16565b90506000611e88600b54611e7a600a548661163190919063ffffffff16565b61164790919063ffffffff16565b90506000611ea060028361164790919063ffffffff16565b90506000611eb7828561165d90919063ffffffff16565b9050611ec281612411565b60004790506000611ef2600b54611ee46008548561163190919063ffffffff16565b61164790919063ffffffff16565b90506000611f1f600b54611f116009548661163190919063ffffffff16565b61164790919063ffffffff16565b90506000611f4c600b54611f3e600a548761163190919063ffffffff16565b61164790919063ffffffff16565b905060008314612026576000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1684604051611f9e90612daf565b60006040518083038185875af1925050503d8060008114611fdb576040519150601f19603f3d011682016040523d82523d6000602084013e611fe0565b606091505b5050905080612024576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201b90612f18565b60405180910390fd5b505b600082146120fe576000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168360405161207690612daf565b60006040518083038185875af1925050503d80600081146120b3576040519150601f19603f3d011682016040523d82523d6000602084013e6120b8565b606091505b50509050806120fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f390612f78565b60405180910390fd5b505b6121088682612663565b7f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450686826040516121399291906130ed565b60405180910390a150505050505050506000601260016101000a81548160ff02191690831515021790555050565b6000600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561220d5750600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561240757600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806122bb5750600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b156124065760006122ea60646122dc600b548661163190919063ffffffff16565b61164790919063ffffffff16565b90506122ff818461277b90919063ffffffff16565b9250600081146124045761235b81600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461165d90919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516123fb9190613078565b60405180910390a35b505b5b8190509392505050565b6000600267ffffffffffffffff81111561242e5761242d61349b565b5b60405190808252806020026020018201604052801561245c5781602001602082028036833780820191505090505b50905030816000815181106124745761247361346c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561251657600080fd5b505afa15801561252a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061254e9190612827565b816001815181106125625761256161346c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506125c930600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461167b565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161262d959493929190613093565b600060405180830381600087803b15801561264757600080fd5b505af115801561265b573d6000803e3d6000fd5b505050505050565b600081146127775761269830600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461167b565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161272196959493929190612ddf565b6060604051808303818588803b15801561273a57600080fd5b505af115801561274e573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906127739190612a14565b5050505b5050565b6000818361278991906132a9565b905092915050565b6000813590506127a081613912565b92915050565b6000815190506127b581613912565b92915050565b6000813590506127ca81613929565b92915050565b6000813590506127df81613940565b92915050565b6000815190506127f481613940565b92915050565b6000602082840312156128105761280f6134ca565b5b600061281e84828501612791565b91505092915050565b60006020828403121561283d5761283c6134ca565b5b600061284b848285016127a6565b91505092915050565b6000806040838503121561286b5761286a6134ca565b5b600061287985828601612791565b925050602061288a85828601612791565b9150509250929050565b6000806000606084860312156128ad576128ac6134ca565b5b60006128bb86828701612791565b93505060206128cc86828701612791565b92505060406128dd868287016127d0565b9150509250925092565b600080604083850312156128fe576128fd6134ca565b5b600061290c85828601612791565b925050602061291d858286016127bb565b9150509250929050565b6000806040838503121561293e5761293d6134ca565b5b600061294c85828601612791565b925050602061295d858286016127d0565b9150509250929050565b60006020828403121561297d5761297c6134ca565b5b600061298b848285016127bb565b91505092915050565b6000602082840312156129aa576129a96134ca565b5b60006129b8848285016127d0565b91505092915050565b6000806000606084860312156129da576129d96134ca565b5b60006129e8868287016127d0565b93505060206129f9868287016127d0565b9250506040612a0a868287016127d0565b9150509250925092565b600080600060608486031215612a2d57612a2c6134ca565b5b6000612a3b868287016127e5565b9350506020612a4c868287016127e5565b9250506040612a5d868287016127e5565b9150509250925092565b6000612a738383612a7f565b60208301905092915050565b612a88816132dd565b82525050565b612a97816132dd565b82525050565b6000612aa882613178565b612ab2818561319b565b9350612abd83613168565b8060005b83811015612aee578151612ad58882612a67565b9750612ae08361318e565b925050600181019050612ac1565b5085935050505092915050565b612b04816132ef565b82525050565b612b1381613332565b82525050565b612b2281613344565b82525050565b6000612b3382613183565b612b3d81856131b7565b9350612b4d81856020860161337a565b612b56816134cf565b840191505092915050565b6000612b6e6023836131b7565b9150612b79826134e0565b604082019050919050565b6000612b91601b836131b7565b9150612b9c8261352f565b602082019050919050565b6000612bb46026836131b7565b9150612bbf82613558565b604082019050919050565b6000612bd76022836131b7565b9150612be2826135a7565b604082019050919050565b6000612bfa6022836131b7565b9150612c05826135f6565b604082019050919050565b6000612c1d601d836131b7565b9150612c2882613645565b602082019050919050565b6000612c406026836131b7565b9150612c4b8261366e565b604082019050919050565b6000612c636028836131b7565b9150612c6e826136bd565b604082019050919050565b6000612c866022836131b7565b9150612c918261370c565b604082019050919050565b6000612ca96028836131b7565b9150612cb48261375b565b604082019050919050565b6000612ccc6020836131b7565b9150612cd7826137aa565b602082019050919050565b6000612cef6034836131b7565b9150612cfa826137d3565b604082019050919050565b6000612d126025836131b7565b9150612d1d82613822565b604082019050919050565b6000612d356000836131ac565b9150612d4082613871565b600082019050919050565b6000612d586024836131b7565b9150612d6382613874565b604082019050919050565b6000612d7b6025836131b7565b9150612d86826138c3565b604082019050919050565b612d9a8161331b565b82525050565b612da981613325565b82525050565b6000612dba82612d28565b9150819050919050565b6000602082019050612dd96000830184612a8e565b92915050565b600060c082019050612df46000830189612a8e565b612e016020830188612d91565b612e0e6040830187612b19565b612e1b6060830186612b19565b612e286080830185612a8e565b612e3560a0830184612d91565b979650505050505050565b6000602082019050612e556000830184612afb565b92915050565b6000602082019050612e706000830184612b0a565b92915050565b60006020820190508181036000830152612e908184612b28565b905092915050565b60006020820190508181036000830152612eb181612b61565b9050919050565b60006020820190508181036000830152612ed181612b84565b9050919050565b60006020820190508181036000830152612ef181612ba7565b9050919050565b60006020820190508181036000830152612f1181612bca565b9050919050565b60006020820190508181036000830152612f3181612bed565b9050919050565b60006020820190508181036000830152612f5181612c10565b9050919050565b60006020820190508181036000830152612f7181612c33565b9050919050565b60006020820190508181036000830152612f9181612c56565b9050919050565b60006020820190508181036000830152612fb181612c79565b9050919050565b60006020820190508181036000830152612fd181612c9c565b9050919050565b60006020820190508181036000830152612ff181612cbf565b9050919050565b6000602082019050818103600083015261301181612ce2565b9050919050565b6000602082019050818103600083015261303181612d05565b9050919050565b6000602082019050818103600083015261305181612d4b565b9050919050565b6000602082019050818103600083015261307181612d6e565b9050919050565b600060208201905061308d6000830184612d91565b92915050565b600060a0820190506130a86000830188612d91565b6130b56020830187612b19565b81810360408301526130c78186612a9d565b90506130d66060830185612a8e565b6130e36080830184612d91565b9695505050505050565b60006040820190506131026000830185612d91565b61310f6020830184612d91565b9392505050565b600060608201905061312b6000830186612d91565b6131386020830185612d91565b6131456040830184612d91565b949350505050565b60006020820190506131626000830184612da0565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b60006131d38261331b565b91506131de8361331b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613213576132126133df565b5b828201905092915050565b60006132298261331b565b91506132348361331b565b9250826132445761324361340e565b5b828204905092915050565b600061325a8261331b565b91506132658361331b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561329e5761329d6133df565b5b828202905092915050565b60006132b48261331b565b91506132bf8361331b565b9250828210156132d2576132d16133df565b5b828203905092915050565b60006132e8826132fb565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600061333d82613356565b9050919050565b600061334f8261331b565b9050919050565b600061336182613368565b9050919050565b6000613373826132fb565b9050919050565b60005b8381101561339857808201518184015260208101905061337d565b838111156133a7576000848401525b50505050565b600060028204905060018216806133c557607f821691505b602082108114156133d9576133d861343d565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f546f74616c206665652063616e206e6f74206578636565647320340000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f63616e206e6f742073656e642066656520746f20746865206465762077616c6c60008201527f6574000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f63616e206e6f742073656e642066656520746f20746865206d61726b6574696e60008201527f672077616c6c6574000000000000000000000000000000000000000000000000602082015250565b7f6465762077616c6c65742063616e206e6f74206265207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f6d61726b6574696e672077616c6c65742063616e206e6f74206265207a65726f60008201527f2061646472657373000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f416e7468697768616c653a2063616e206e6f7420686f6c64206d6f726520746860008201527f616e206d61782077616c6c657420616d6f756e74000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b50565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b61391b816132dd565b811461392657600080fd5b50565b613932816132ef565b811461393d57600080fd5b50565b6139498161331b565b811461395457600080fd5b5056fea2646970667358221220d35332b4eae18929ccb676b11cc4be2a166535218abaf4ea6db984b02a2fe7c364736f6c63430008070033

Deployed Bytecode

0x6080604052600436106101fd5760003560e01c806375f0a8741161010d578063aa4bde28116100a0578063dd62ed3e1161006f578063dd62ed3e14610748578063e8ba854f14610785578063f2fde38b146107ae578063fa09eaaf146107d7578063fb60e0bc1461080057610204565b8063aa4bde28146106a0578063c18bc195146106cb578063c816841b146106f4578063cc274b291461071f57610204565b806395d89b41116100dc57806395d89b41146105d057806398118cb4146105fb578063a457c2d714610626578063a9059cbb1461066357610204565b806375f0a874146105265780638da5cb5b146105515780638ea5220f1461057c57806393705764146105a757610204565b806323b872dd116101905780636827e7641161015f5780636827e764146104515780636b67c4df1461047c57806370a08231146104a7578063715018a6146104e4578063735de9f7146104fb57610204565b806323b872dd1461036f578063313ce567146103ac57806339509351146103d757806358e4b7311461041457610204565b80631df4ccfc116101cc5780631df4ccfc146102c75780631e5bbf62146102f257806321b27ec11461031b578063224290851461034657610204565b80630445b6671461020957806306fdde0314610234578063095ea7b31461025f57806318160ddd1461029c57610204565b3661020457005b600080fd5b34801561021557600080fd5b5061021e61083d565b60405161022b9190613078565b60405180910390f35b34801561024057600080fd5b50610249610843565b6040516102569190612e76565b60405180910390f35b34801561026b57600080fd5b5061028660048036038101906102819190612927565b6108d5565b6040516102939190612e40565b60405180910390f35b3480156102a857600080fd5b506102b16108f8565b6040516102be9190613078565b60405180910390f35b3480156102d357600080fd5b506102dc610902565b6040516102e99190613078565b60405180910390f35b3480156102fe57600080fd5b50610319600480360381019061031491906128e7565b610908565b005b34801561032757600080fd5b50610330610a2d565b60405161033d9190612e40565b60405180910390f35b34801561035257600080fd5b5061036d600480360381019061036891906129c1565b610a40565b005b34801561037b57600080fd5b5061039660048036038101906103919190612894565b610b82565b6040516103a39190612e40565b60405180910390f35b3480156103b857600080fd5b506103c1610bb1565b6040516103ce919061314d565b60405180910390f35b3480156103e357600080fd5b506103fe60048036038101906103f99190612927565b610bba565b60405161040b9190612e40565b60405180910390f35b34801561042057600080fd5b5061043b600480360381019061043691906127fa565b610bf1565b6040516104489190612e40565b60405180910390f35b34801561045d57600080fd5b50610466610c11565b6040516104739190613078565b60405180910390f35b34801561048857600080fd5b50610491610c17565b60405161049e9190613078565b60405180910390f35b3480156104b357600080fd5b506104ce60048036038101906104c991906127fa565b610c1d565b6040516104db9190613078565b60405180910390f35b3480156104f057600080fd5b506104f9610c66565b005b34801561050757600080fd5b50610510610cee565b60405161051d9190612e5b565b60405180910390f35b34801561053257600080fd5b5061053b610d14565b6040516105489190612dc4565b60405180910390f35b34801561055d57600080fd5b50610566610d3a565b6040516105739190612dc4565b60405180910390f35b34801561058857600080fd5b50610591610d63565b60405161059e9190612dc4565b60405180910390f35b3480156105b357600080fd5b506105ce60048036038101906105c99190612967565b610d89565b005b3480156105dc57600080fd5b506105e5610e59565b6040516105f29190612e76565b60405180910390f35b34801561060757600080fd5b50610610610eeb565b60405161061d9190613078565b60405180910390f35b34801561063257600080fd5b5061064d60048036038101906106489190612927565b610ef1565b60405161065a9190612e40565b60405180910390f35b34801561066f57600080fd5b5061068a60048036038101906106859190612927565b610f68565b6040516106979190612e40565b60405180910390f35b3480156106ac57600080fd5b506106b5610f8b565b6040516106c29190613078565b60405180910390f35b3480156106d757600080fd5b506106f260048036038101906106ed9190612994565b610f91565b005b34801561070057600080fd5b5061070961104e565b6040516107169190612dc4565b60405180910390f35b34801561072b57600080fd5b5061074660048036038101906107419190612994565b611074565b005b34801561075457600080fd5b5061076f600480360381019061076a9190612854565b611131565b60405161077c9190613078565b60405180910390f35b34801561079157600080fd5b506107ac60048036038101906107a79190612854565b6111b8565b005b3480156107ba57600080fd5b506107d560048036038101906107d091906127fa565b6113f4565b005b3480156107e357600080fd5b506107fe60048036038101906107f991906128e7565b6114ec565b005b34801561080c57600080fd5b50610827600480360381019061082291906127fa565b611611565b6040516108349190612e40565b60405180910390f35b60105481565b606060048054610852906133ad565b80601f016020809104026020016040519081016040528092919081815260200182805461087e906133ad565b80156108cb5780601f106108a0576101008083540402835291602001916108cb565b820191906000526020600020905b8154815290600101906020018083116108ae57829003601f168201915b5050505050905090565b6000806108e0611673565b90506108ed81858561167b565b600191505092915050565b6000600354905090565b600b5481565b610910611673565b73ffffffffffffffffffffffffffffffffffffffff1661092e610d3a565b73ffffffffffffffffffffffffffffffffffffffff1614610984576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097b90612fd8565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f704ff73c4e410152e02ca4e708d579e08ac7865f1ac8edce526234513f4ac5c582604051610a219190612e40565b60405180910390a25050565b601260009054906101000a900460ff1681565b610a48611673565b73ffffffffffffffffffffffffffffffffffffffff16610a66610d3a565b73ffffffffffffffffffffffffffffffffffffffff1614610abc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab390612fd8565b60405180910390fd5b826008819055508160098190555080600a81905550610af681610ae8848661165d90919063ffffffff16565b61165d90919063ffffffff16565b600b819055506004600b541115610b42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3990612eb8565b60405180910390fd5b7f509d432c4ab40e3eb039ee95fea93be8de6c751efa87aed5e51c7202b0dd8e09838383604051610b7593929190613116565b60405180910390a1505050565b600080610b8d611673565b9050610b9a858285611846565b610ba58585856118d2565b60019150509392505050565b60006012905090565b600080610bc5611673565b9050610be6818585610bd78589611131565b610be191906131c8565b61167b565b600191505092915050565b600c6020528060005260406000206000915054906101000a900460ff1681565b60085481565b60095481565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610c6e611673565b73ffffffffffffffffffffffffffffffffffffffff16610c8c610d3a565b73ffffffffffffffffffffffffffffffffffffffff1614610ce2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd990612fd8565b60405180910390fd5b610cec6000611d3d565b565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610d91611673565b73ffffffffffffffffffffffffffffffffffffffff16610daf610d3a565b73ffffffffffffffffffffffffffffffffffffffff1614610e05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfc90612fd8565b60405180910390fd5b80601260006101000a81548160ff0219169083151502179055507ffc9a38574cd72afde7f596ce987008cf51a79b0451b7997cdbc9135489199dcf81604051610e4e9190612e40565b60405180910390a150565b606060058054610e68906133ad565b80601f0160208091040260200160405190810160405280929190818152602001828054610e94906133ad565b8015610ee15780601f10610eb657610100808354040283529160200191610ee1565b820191906000526020600020905b815481529060010190602001808311610ec457829003601f168201915b5050505050905090565b600a5481565b600080610efc611673565b90506000610f0a8286611131565b905083811015610f4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4690613058565b60405180910390fd5b610f5c828686840361167b565b60019250505092915050565b600080610f73611673565b9050610f808185856118d2565b600191505092915050565b60115481565b610f99611673565b73ffffffffffffffffffffffffffffffffffffffff16610fb7610d3a565b73ffffffffffffffffffffffffffffffffffffffff161461100d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100490612fd8565b60405180910390fd5b806011819055507f22c83a5ec34271153086583a02141e6d8afa47085fffe4f3c546e7011357aa09816040516110439190613078565b60405180910390a150565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61107c611673565b73ffffffffffffffffffffffffffffffffffffffff1661109a610d3a565b73ffffffffffffffffffffffffffffffffffffffff16146110f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e790612fd8565b60405180910390fd5b806010819055507fadfa8ecb21b6962ebcd0adbd9ab985b7b4c5b5eb3b0dead683171565c7bfe171816040516111269190613078565b60405180910390a150565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6111c0611673565b73ffffffffffffffffffffffffffffffffffffffff166111de610d3a565b73ffffffffffffffffffffffffffffffffffffffff1614611234576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122b90612fd8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129b90612f98565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611314576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130b90612fb8565b60405180910390fd5b81600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f316af92955f23ddbd4c570a5f8cda8a10b192f24d8f58524deb2fcb03a8bc79460405160405180910390a35050565b6113fc611673565b73ffffffffffffffffffffffffffffffffffffffff1661141a610d3a565b73ffffffffffffffffffffffffffffffffffffffff1614611470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146790612fd8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156114e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d790612ed8565b60405180910390fd5b6114e981611d3d565b50565b6114f4611673565b73ffffffffffffffffffffffffffffffffffffffff16611512610d3a565b73ffffffffffffffffffffffffffffffffffffffff1614611568576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155f90612fd8565b60405180910390fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167fa35648c59c0d294efd491e4dd37c5c989af10767bb4cada9ddae9a689006232a826040516116059190612e40565b60405180910390a25050565b600d6020528060005260406000206000915054906101000a900460ff1681565b6000818361163f919061324f565b905092915050565b60008183611655919061321e565b905092915050565b6000818361166b91906131c8565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156116eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e290613038565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561175b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175290612ef8565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516118399190613078565b60405180910390a3505050565b60006118528484611131565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146118cc57818110156118be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b590612f38565b60405180910390fd5b6118cb848484840361167b565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611942576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193990613018565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a990612e98565b60405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611a515750601054600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b8015611a6a5750601260019054906101000a900460ff16155b15611ab857611ab7600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611e01565b5b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611b3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3690612f58565b60405180910390fd5b6000611b4c858585612167565b9050828203600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611c475750601260009054906101000a900460ff165b15611cd157601154600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611cd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc790612ff8565b60405180910390fd5b5b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611d2e9190613078565b60405180910390a35050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001601260016101000a81548160ff0219169083151502179055506000611e5b600b54611e4d611e3e60095460085461165d90919063ffffffff16565b8561163190919063ffffffff16565b61164790919063ffffffff16565b90506000611e88600b54611e7a600a548661163190919063ffffffff16565b61164790919063ffffffff16565b90506000611ea060028361164790919063ffffffff16565b90506000611eb7828561165d90919063ffffffff16565b9050611ec281612411565b60004790506000611ef2600b54611ee46008548561163190919063ffffffff16565b61164790919063ffffffff16565b90506000611f1f600b54611f116009548661163190919063ffffffff16565b61164790919063ffffffff16565b90506000611f4c600b54611f3e600a548761163190919063ffffffff16565b61164790919063ffffffff16565b905060008314612026576000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1684604051611f9e90612daf565b60006040518083038185875af1925050503d8060008114611fdb576040519150601f19603f3d011682016040523d82523d6000602084013e611fe0565b606091505b5050905080612024576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201b90612f18565b60405180910390fd5b505b600082146120fe576000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168360405161207690612daf565b60006040518083038185875af1925050503d80600081146120b3576040519150601f19603f3d011682016040523d82523d6000602084013e6120b8565b606091505b50509050806120fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f390612f78565b60405180910390fd5b505b6121088682612663565b7f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450686826040516121399291906130ed565b60405180910390a150505050505050506000601260016101000a81548160ff02191690831515021790555050565b6000600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561220d5750600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561240757600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806122bb5750600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b156124065760006122ea60646122dc600b548661163190919063ffffffff16565b61164790919063ffffffff16565b90506122ff818461277b90919063ffffffff16565b9250600081146124045761235b81600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461165d90919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516123fb9190613078565b60405180910390a35b505b5b8190509392505050565b6000600267ffffffffffffffff81111561242e5761242d61349b565b5b60405190808252806020026020018201604052801561245c5781602001602082028036833780820191505090505b50905030816000815181106124745761247361346c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561251657600080fd5b505afa15801561252a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061254e9190612827565b816001815181106125625761256161346c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506125c930600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461167b565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161262d959493929190613093565b600060405180830381600087803b15801561264757600080fd5b505af115801561265b573d6000803e3d6000fd5b505050505050565b600081146127775761269830600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461167b565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161272196959493929190612ddf565b6060604051808303818588803b15801561273a57600080fd5b505af115801561274e573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906127739190612a14565b5050505b5050565b6000818361278991906132a9565b905092915050565b6000813590506127a081613912565b92915050565b6000815190506127b581613912565b92915050565b6000813590506127ca81613929565b92915050565b6000813590506127df81613940565b92915050565b6000815190506127f481613940565b92915050565b6000602082840312156128105761280f6134ca565b5b600061281e84828501612791565b91505092915050565b60006020828403121561283d5761283c6134ca565b5b600061284b848285016127a6565b91505092915050565b6000806040838503121561286b5761286a6134ca565b5b600061287985828601612791565b925050602061288a85828601612791565b9150509250929050565b6000806000606084860312156128ad576128ac6134ca565b5b60006128bb86828701612791565b93505060206128cc86828701612791565b92505060406128dd868287016127d0565b9150509250925092565b600080604083850312156128fe576128fd6134ca565b5b600061290c85828601612791565b925050602061291d858286016127bb565b9150509250929050565b6000806040838503121561293e5761293d6134ca565b5b600061294c85828601612791565b925050602061295d858286016127d0565b9150509250929050565b60006020828403121561297d5761297c6134ca565b5b600061298b848285016127bb565b91505092915050565b6000602082840312156129aa576129a96134ca565b5b60006129b8848285016127d0565b91505092915050565b6000806000606084860312156129da576129d96134ca565b5b60006129e8868287016127d0565b93505060206129f9868287016127d0565b9250506040612a0a868287016127d0565b9150509250925092565b600080600060608486031215612a2d57612a2c6134ca565b5b6000612a3b868287016127e5565b9350506020612a4c868287016127e5565b9250506040612a5d868287016127e5565b9150509250925092565b6000612a738383612a7f565b60208301905092915050565b612a88816132dd565b82525050565b612a97816132dd565b82525050565b6000612aa882613178565b612ab2818561319b565b9350612abd83613168565b8060005b83811015612aee578151612ad58882612a67565b9750612ae08361318e565b925050600181019050612ac1565b5085935050505092915050565b612b04816132ef565b82525050565b612b1381613332565b82525050565b612b2281613344565b82525050565b6000612b3382613183565b612b3d81856131b7565b9350612b4d81856020860161337a565b612b56816134cf565b840191505092915050565b6000612b6e6023836131b7565b9150612b79826134e0565b604082019050919050565b6000612b91601b836131b7565b9150612b9c8261352f565b602082019050919050565b6000612bb46026836131b7565b9150612bbf82613558565b604082019050919050565b6000612bd76022836131b7565b9150612be2826135a7565b604082019050919050565b6000612bfa6022836131b7565b9150612c05826135f6565b604082019050919050565b6000612c1d601d836131b7565b9150612c2882613645565b602082019050919050565b6000612c406026836131b7565b9150612c4b8261366e565b604082019050919050565b6000612c636028836131b7565b9150612c6e826136bd565b604082019050919050565b6000612c866022836131b7565b9150612c918261370c565b604082019050919050565b6000612ca96028836131b7565b9150612cb48261375b565b604082019050919050565b6000612ccc6020836131b7565b9150612cd7826137aa565b602082019050919050565b6000612cef6034836131b7565b9150612cfa826137d3565b604082019050919050565b6000612d126025836131b7565b9150612d1d82613822565b604082019050919050565b6000612d356000836131ac565b9150612d4082613871565b600082019050919050565b6000612d586024836131b7565b9150612d6382613874565b604082019050919050565b6000612d7b6025836131b7565b9150612d86826138c3565b604082019050919050565b612d9a8161331b565b82525050565b612da981613325565b82525050565b6000612dba82612d28565b9150819050919050565b6000602082019050612dd96000830184612a8e565b92915050565b600060c082019050612df46000830189612a8e565b612e016020830188612d91565b612e0e6040830187612b19565b612e1b6060830186612b19565b612e286080830185612a8e565b612e3560a0830184612d91565b979650505050505050565b6000602082019050612e556000830184612afb565b92915050565b6000602082019050612e706000830184612b0a565b92915050565b60006020820190508181036000830152612e908184612b28565b905092915050565b60006020820190508181036000830152612eb181612b61565b9050919050565b60006020820190508181036000830152612ed181612b84565b9050919050565b60006020820190508181036000830152612ef181612ba7565b9050919050565b60006020820190508181036000830152612f1181612bca565b9050919050565b60006020820190508181036000830152612f3181612bed565b9050919050565b60006020820190508181036000830152612f5181612c10565b9050919050565b60006020820190508181036000830152612f7181612c33565b9050919050565b60006020820190508181036000830152612f9181612c56565b9050919050565b60006020820190508181036000830152612fb181612c79565b9050919050565b60006020820190508181036000830152612fd181612c9c565b9050919050565b60006020820190508181036000830152612ff181612cbf565b9050919050565b6000602082019050818103600083015261301181612ce2565b9050919050565b6000602082019050818103600083015261303181612d05565b9050919050565b6000602082019050818103600083015261305181612d4b565b9050919050565b6000602082019050818103600083015261307181612d6e565b9050919050565b600060208201905061308d6000830184612d91565b92915050565b600060a0820190506130a86000830188612d91565b6130b56020830187612b19565b81810360408301526130c78186612a9d565b90506130d66060830185612a8e565b6130e36080830184612d91565b9695505050505050565b60006040820190506131026000830185612d91565b61310f6020830184612d91565b9392505050565b600060608201905061312b6000830186612d91565b6131386020830185612d91565b6131456040830184612d91565b949350505050565b60006020820190506131626000830184612da0565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b60006131d38261331b565b91506131de8361331b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613213576132126133df565b5b828201905092915050565b60006132298261331b565b91506132348361331b565b9250826132445761324361340e565b5b828204905092915050565b600061325a8261331b565b91506132658361331b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561329e5761329d6133df565b5b828202905092915050565b60006132b48261331b565b91506132bf8361331b565b9250828210156132d2576132d16133df565b5b828203905092915050565b60006132e8826132fb565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600061333d82613356565b9050919050565b600061334f8261331b565b9050919050565b600061336182613368565b9050919050565b6000613373826132fb565b9050919050565b60005b8381101561339857808201518184015260208101905061337d565b838111156133a7576000848401525b50505050565b600060028204905060018216806133c557607f821691505b602082108114156133d9576133d861343d565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f546f74616c206665652063616e206e6f74206578636565647320340000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f63616e206e6f742073656e642066656520746f20746865206465762077616c6c60008201527f6574000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f63616e206e6f742073656e642066656520746f20746865206d61726b6574696e60008201527f672077616c6c6574000000000000000000000000000000000000000000000000602082015250565b7f6465762077616c6c65742063616e206e6f74206265207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f6d61726b6574696e672077616c6c65742063616e206e6f74206265207a65726f60008201527f2061646472657373000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f416e7468697768616c653a2063616e206e6f7420686f6c64206d6f726520746860008201527f616e206d61782077616c6c657420616d6f756e74000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b50565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b61391b816132dd565b811461392657600080fd5b50565b613932816132ef565b811461393d57600080fd5b50565b6139498161331b565b811461395457600080fd5b5056fea2646970667358221220d35332b4eae18929ccb676b11cc4be2a166535218abaf4ea6db984b02a2fe7c364736f6c63430008070033

Deployed Bytecode Sourcemap

20003:17785:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20834:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22396:102;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24761:205;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23520:110;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20621:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37366:202;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20906:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32690:445;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25546:297;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23362:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26252:243;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20651:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20513:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20545:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23693:129;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12475:103;;;;;;;;;;;;;:::i;:::-;;20788:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20431:75;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11824:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20355:69;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37618:165;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22617:106;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20583:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26998:441;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24028:197;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20869:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37099:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20755:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33195:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24288:153;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36602:435;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12733:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32390:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20703:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20834:28;;;;:::o;22396:102::-;22452:13;22485:5;22478:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22396:102;:::o;24761:205::-;24846:4;24863:14;24880:12;:10;:12::i;:::-;24863:29;;24903:33;24912:6;24920:7;24929:6;24903:8;:33::i;:::-;24954:4;24947:11;;;24761:205;;;;:::o;23520:110::-;23583:7;23610:12;;23603:19;;23520:110;:::o;20621:23::-;;;;:::o;37366:202::-;12055:12;:10;:12::i;:::-;12044:23;;:7;:5;:7::i;:::-;:23;;;12036:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37506:7:::1;37481:13;:22;37495:7;37481:22;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;37543:7;37529:31;;;37552:7;37529:31;;;;;;:::i;:::-;;;;;;;;37366:202:::0;;:::o;20906:34::-;;;;;;;;;;;;;:::o;32690:445::-;12055:12;:10;:12::i;:::-;12044:23;;:7;:5;:7::i;:::-;:23;;;12036:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32846:7:::1;32837:6;:16;;;;32879:13;32864:12;:28;;;;32918:13;32903:12;:28;;;;32953:45;32984:13;32953:26;32965:13;32953:7;:11;;:26;;;;:::i;:::-;:30;;:45;;;;:::i;:::-;32942:8;:56;;;;33029:1;33017:8;;:13;;33009:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;33078:49;33089:7;33098:13;33113;33078:49;;;;;;;;:::i;:::-;;;;;;;;32690:445:::0;;;:::o;25546:297::-;25679:4;25696:15;25714:12;:10;:12::i;:::-;25696:30;;25737:38;25753:4;25759:7;25768:6;25737:15;:38::i;:::-;25786:27;25796:4;25802:2;25806:6;25786:9;:27::i;:::-;25831:4;25824:11;;;25546:297;;;;;:::o;23362:93::-;23420:5;23445:2;23438:9;;23362:93;:::o;26252:243::-;26342:4;26359:14;26376:12;:10;:12::i;:::-;26359:29;;26399:66;26408:6;26416:7;26454:10;26425:26;26435:6;26443:7;26425:9;:26::i;:::-;:39;;;;:::i;:::-;26399:8;:66::i;:::-;26483:4;26476:11;;;26252:243;;;;:::o;20651:45::-;;;;;;;;;;;;;;;;;;;;;;:::o;20513:25::-;;;;:::o;20545:31::-;;;;:::o;23693:129::-;23769:7;23796:9;:18;23806:7;23796:18;;;;;;;;;;;;;;;;23789:25;;23693:129;;;:::o;12475:103::-;12055:12;:10;:12::i;:::-;12044:23;;:7;:5;:7::i;:::-;:23;;;12036:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12540:30:::1;12567:1;12540:18;:30::i;:::-;12475:103::o:0;20788:39::-;;;;;;;;;;;;;:::o;20431:75::-;;;;;;;;;;;;;:::o;11824:87::-;11870:7;11897:6;;;;;;;;;;;11890:13;;11824:87;:::o;20355:69::-;;;;;;;;;;;;;:::o;37618:165::-;12055:12;:10;:12::i;:::-;12044:23;;:7;:5;:7::i;:::-;:23;;;12036:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37728:7:::1;37710:15;;:25;;;;;;;;;;;;;;;;;;37751:24;37767:7;37751:24;;;;;;:::i;:::-;;;;;;;;37618:165:::0;:::o;22617:106::-;22675:13;22708:7;22701:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22617:106;:::o;20583:31::-;;;;:::o;26998:441::-;27093:4;27110:14;27127:12;:10;:12::i;:::-;27110:29;;27150:24;27177:26;27187:6;27195:7;27177:9;:26::i;:::-;27150:53;;27242:15;27222:16;:35;;27214:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;27335:61;27344:6;27352:7;27380:15;27361:16;:34;27335:8;:61::i;:::-;27427:4;27420:11;;;;26998:441;;;;:::o;24028:197::-;24109:4;24126:14;24143:12;:10;:12::i;:::-;24126:29;;24166;24176:6;24184:2;24188:6;24166:9;:29::i;:::-;24213:4;24206:11;;;24028:197;;;;:::o;20869:30::-;;;;:::o;37099:194::-;12055:12;:10;:12::i;:::-;12044:23;;:7;:5;:7::i;:::-;:23;;;12036:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37220:16:::1;37202:15;:34;;;;37252:33;37268:16;37252:33;;;;;;:::i;:::-;;;;;;;;37099:194:::0;:::o;20755:26::-;;;;;;;;;;;;;:::o;33195:182::-;12055:12;:10;:12::i;:::-;12044:23;;:7;:5;:7::i;:::-;:23;;;12036:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33309:13:::1;33293;:29;;;;33338:31;33355:13;33338:31;;;;;;:::i;:::-;;;;;;;;33195:182:::0;:::o;24288:153::-;24378:7;24405:11;:19;24417:6;24405:19;;;;;;;;;;;;;;;:28;24425:7;24405:28;;;;;;;;;;;;;;;;24398:35;;24288:153;;;;:::o;36602:435::-;12055:12;:10;:12::i;:::-;12044:23;;:7;:5;:7::i;:::-;:23;;;12036:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36756:1:::1;36734:24;;:10;:24;;;;36726:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;36844:1;36816:30;;:16;:30;;;;36808:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;36914:10;36902:9;;:22;;;;;;;;;;;;;;;;;;36953:16;36935:15;;:34;;;;;;;;;;;;;;;;;;37012:16;36985:44;;37000:10;36985:44;;;;;;;;;;;;36602:435:::0;;:::o;12733:201::-;12055:12;:10;:12::i;:::-;12044:23;;:7;:5;:7::i;:::-;:23;;;12036:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12842:1:::1;12822:22;;:8;:22;;;;12814:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;12898:28;12917:8;12898:18;:28::i;:::-;12733:201:::0;:::o;32390:206::-;12055:12;:10;:12::i;:::-;12044:23;;:7;:5;:7::i;:::-;:23;;;12036:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32529:7:::1;32505:13;:21;32519:6;32505:21;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;32572:6;32552:36;;;32580:7;32552:36;;;;;;:::i;:::-;;;;;;;;32390:206:::0;;:::o;20703:45::-;;;;;;;;;;;;;;;;;;;;;;:::o;6178:98::-;6236:7;6267:1;6263;:5;;;;:::i;:::-;6256:12;;6178:98;;;;:::o;6577:::-;6635:7;6666:1;6662;:5;;;;:::i;:::-;6655:12;;6577:98;;;;:::o;5440:::-;5498:7;5529:1;5525;:5;;;;:::i;:::-;5518:12;;5440:98;;;;:::o;10691:::-;10744:7;10771:10;10764:17;;10691:98;:::o;31181:384::-;31336:1;31318:20;;:6;:20;;;;31310:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;31417:1;31398:21;;:7;:21;;;;31390:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31502:6;31471:11;:19;31483:6;31471:19;;;;;;;;;;;;;;;:28;31491:7;31471:28;;;;;;;;;;;;;;;:37;;;;31541:7;31524:33;;31533:6;31524:33;;;31550:6;31524:33;;;;;;:::i;:::-;;;;;;;;31181:384;;;:::o;31856:456::-;31992:24;32019:26;32029:6;32037:7;32019:9;:26::i;:::-;31992:53;;32080:17;32060:16;:37;32056:249;;32142:6;32122:16;:26;;32114:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32226:52;32235:6;32243:7;32271:6;32252:16;:25;32226:8;:52::i;:::-;32056:249;31981:331;31856:456;;;:::o;27909:1241::-;28056:1;28040:18;;:4;:18;;;;28032:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28133:1;28119:16;;:2;:16;;;;28111:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;28213:11;;;;;;;;;;;28205:19;;:4;:19;;;;:77;;;;;28269:13;;28241:9;:24;28259:4;28241:24;;;;;;;;;;;;;;;;:41;;28205:77;:101;;;;;28300:6;;;;;;;;;;;28299:7;28205:101;28188:194;;;28333:37;28345:9;:24;28363:4;28345:24;;;;;;;;;;;;;;;;28333:11;:37::i;:::-;28188:194;28398:19;28420:9;:15;28430:4;28420:15;;;;;;;;;;;;;;;;28398:37;;28469:6;28454:11;:21;;28446:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;28529:22;28554:25;28562:4;28568:2;28572:6;28554:7;:25::i;:::-;28529:50;;28647:6;28633:11;:20;28615:9;:15;28625:4;28615:15;;;;;;;;;;;;;;;:38;;;;28850:14;28833:9;:13;28843:2;28833:13;;;;;;;;;;;;;;;;:31;;;;;;;;;;;28906:13;:17;28920:2;28906:17;;;;;;;;;;;;;;;;;;;;;;;;;28905:18;:50;;;;;28940:15;;;;;;;;;;;28905:50;28888:203;;;29007:15;;28990:9;:13;29000:2;28990:13;;;;;;;;;;;;;;;;:32;;28982:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;28888:203;29123:2;29108:34;;29117:4;29108:34;;;29127:14;29108:34;;;;;;:::i;:::-;;;;;;;;28021:1129;;27909:1241;;;:::o;13094:191::-;13168:16;13187:6;;;;;;;;;;;13168:25;;13213:8;13204:6;;:17;;;;;;;;;;;;;;;;;;13268:8;13237:40;;13258:8;13237:40;;;;;;;;;;;;13157:128;13094:191;:::o;34166:1216::-;21007:4;20998:6;;:13;;;;;;;;;;;;;;;;;;34236:19:::1;34258:55;34304:8;;34258:41;34274:24;34285:12;;34274:6;;:10;;:24;;;;:::i;:::-;34258:11;:15;;:41;;;;:::i;:::-;:45;;:55;;;;:::i;:::-;34236:77;;34324:19;34346:43;34380:8;;34346:29;34362:12;;34346:11;:15;;:29;;;;:::i;:::-;:33;;:43;;;;:::i;:::-;34324:65;;34400:26;34429:18;34445:1;34429:11;:15;;:18;;;;:::i;:::-;34400:47;;34458:21;34482:35;34498:18;34482:11;:15;;:35;;;;:::i;:::-;34458:59;;34530:31;34547:13;34530:16;:31::i;:::-;34574:16;34593:21;34574:40;;34627:17;34647:34;34672:8;;34647:20;34660:6;;34647:8;:12;;:20;;;;:::i;:::-;:24;;:34;;;;:::i;:::-;34627:54;;34692:23;34718:40;34749:8;;34718:26;34731:12;;34718:8;:12;;:26;;;;:::i;:::-;:30;;:40;;;;:::i;:::-;34692:66;;34769:23;34795:40;34826:8;;34795:26;34808:12;;34795:8;:12;;:26;;;;:::i;:::-;:30;;:40;;;;:::i;:::-;34769:66;;34866:1;34853:9;:14;34850:179;;34885:12;34911:9;;;;;;;;;;;34903:23;;34934:9;34903:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34884:64;;;34971:7;34963:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;34869:160;34850:179;35064:1;35045:15;:20;35042:203;;35083:12;35109:15;;;;;;;;;;;35101:29;;35138:15;35101:57;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35082:76;;;35181:7;35173:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;35067:178;35042:203;35257:49;35270:18;35290:15;35257:12;:49::i;:::-;35324:48;35336:18;35356:15;35324:48;;;;;;;:::i;:::-;;;;;;;;34225:1157;;;;;;;;21043:5:::0;21034:6;;:14;;;;;;;;;;;;;;;;;;34166:1216;:::o;33385:708::-;33495:7;33519:13;:19;33533:4;33519:19;;;;;;;;;;;;;;;;;;;;;;;;;33518:20;:42;;;;;33543:13;:17;33557:2;33543:17;;;;;;;;;;;;;;;;;;;;;;;;;33542:18;33518:42;33515:545;;;33662:11;;;;;;;;;;;33654:19;;:4;:19;;;:40;;;;33683:11;;;;;;;;;;;33677:17;;:2;:17;;;33654:40;33651:396;;;33715:17;33735:31;33760:5;33735:20;33746:8;;33735:6;:10;;:20;;;;:::i;:::-;:24;;:31;;;;:::i;:::-;33715:51;;33794:21;33805:9;33794:6;:10;;:21;;;;:::i;:::-;33785:30;;33852:1;33839:9;:14;33836:196;;33905:39;33934:9;33905;:24;33923:4;33905:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;33878:9;:24;33896:4;33878:24;;;;;;;;;;;;;;;:66;;;;33995:4;33972:40;;33981:4;33972:40;;;34002:9;33972:40;;;;;;:::i;:::-;;;;;;;;33836:196;33696:351;33651:396;33515:545;34079:6;34072:13;;33385:708;;;;;:::o;35392:579::-;35518:21;35556:1;35542:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35518:40;;35587:4;35569;35574:1;35569:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;35613:13;;;;;;;;;;;:18;;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35603:4;35608:1;35603:7;;;;;;;;:::i;:::-;;;;;;;:30;;;;;;;;;;;35644:60;35661:4;35676:13;;;;;;;;;;;35692:11;35644:8;:60::i;:::-;35741:13;;;;;;;;;;;:64;;;35820:11;35846:1;35890:4;35917;35937:15;35741:222;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35447:524;35392:579;:::o;35979:526::-;36076:1;36063:9;:14;36060:437;;36094:60;36111:4;36126:13;;;;;;;;;;;36142:11;36094:8;:60::i;:::-;36205:13;;;;;;;;;;;:29;;;36242:9;36279:4;36303:11;36333:1;36380;36427:9;;;;;;;;;;;36455:15;36205:280;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;36060:437;35979:526;;:::o;5821:98::-;5879:7;5910:1;5906;:5;;;;:::i;:::-;5899:12;;5821:98;;;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;7:139;;;;:::o;152:143::-;209:5;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;152:143;;;;:::o;301:133::-;344:5;382:6;369:20;360:29;;398:30;422:5;398:30;:::i;:::-;301:133;;;;:::o;440:139::-;486:5;524:6;511:20;502:29;;540:33;567:5;540:33;:::i;:::-;440:139;;;;:::o;585:143::-;642:5;673:6;667:13;658:22;;689:33;716:5;689:33;:::i;:::-;585:143;;;;:::o;734:329::-;793:6;842:2;830:9;821:7;817:23;813:32;810:119;;;848:79;;:::i;:::-;810:119;968:1;993:53;1038:7;1029:6;1018:9;1014:22;993:53;:::i;:::-;983:63;;939:117;734:329;;;;:::o;1069:351::-;1139:6;1188:2;1176:9;1167:7;1163:23;1159:32;1156:119;;;1194:79;;:::i;:::-;1156:119;1314:1;1339:64;1395:7;1386:6;1375:9;1371:22;1339:64;:::i;:::-;1329:74;;1285:128;1069:351;;;;:::o;1426:474::-;1494:6;1502;1551:2;1539:9;1530:7;1526:23;1522:32;1519:119;;;1557:79;;:::i;:::-;1519:119;1677:1;1702:53;1747:7;1738:6;1727:9;1723:22;1702:53;:::i;:::-;1692:63;;1648:117;1804:2;1830:53;1875:7;1866:6;1855:9;1851:22;1830:53;:::i;:::-;1820:63;;1775:118;1426:474;;;;;:::o;1906:619::-;1983:6;1991;1999;2048:2;2036:9;2027:7;2023:23;2019:32;2016:119;;;2054:79;;:::i;:::-;2016:119;2174:1;2199:53;2244:7;2235:6;2224:9;2220:22;2199:53;:::i;:::-;2189:63;;2145:117;2301:2;2327:53;2372:7;2363:6;2352:9;2348:22;2327:53;:::i;:::-;2317:63;;2272:118;2429:2;2455:53;2500:7;2491:6;2480:9;2476:22;2455:53;:::i;:::-;2445:63;;2400:118;1906:619;;;;;:::o;2531:468::-;2596:6;2604;2653:2;2641:9;2632:7;2628:23;2624:32;2621:119;;;2659:79;;:::i;:::-;2621:119;2779:1;2804:53;2849:7;2840:6;2829:9;2825:22;2804:53;:::i;:::-;2794:63;;2750:117;2906:2;2932:50;2974:7;2965:6;2954:9;2950:22;2932:50;:::i;:::-;2922:60;;2877:115;2531:468;;;;;:::o;3005:474::-;3073:6;3081;3130:2;3118:9;3109:7;3105:23;3101:32;3098:119;;;3136:79;;:::i;:::-;3098:119;3256:1;3281:53;3326:7;3317:6;3306:9;3302:22;3281:53;:::i;:::-;3271:63;;3227:117;3383:2;3409:53;3454:7;3445:6;3434:9;3430:22;3409:53;:::i;:::-;3399:63;;3354:118;3005:474;;;;;:::o;3485:323::-;3541:6;3590:2;3578:9;3569:7;3565:23;3561:32;3558:119;;;3596:79;;:::i;:::-;3558:119;3716:1;3741:50;3783:7;3774:6;3763:9;3759:22;3741:50;:::i;:::-;3731:60;;3687:114;3485:323;;;;:::o;3814:329::-;3873:6;3922:2;3910:9;3901:7;3897:23;3893:32;3890:119;;;3928:79;;:::i;:::-;3890:119;4048:1;4073:53;4118:7;4109:6;4098:9;4094:22;4073:53;:::i;:::-;4063:63;;4019:117;3814:329;;;;:::o;4149:619::-;4226:6;4234;4242;4291:2;4279:9;4270:7;4266:23;4262:32;4259:119;;;4297:79;;:::i;:::-;4259:119;4417:1;4442:53;4487:7;4478:6;4467:9;4463:22;4442:53;:::i;:::-;4432:63;;4388:117;4544:2;4570:53;4615:7;4606:6;4595:9;4591:22;4570:53;:::i;:::-;4560:63;;4515:118;4672:2;4698:53;4743:7;4734:6;4723:9;4719:22;4698:53;:::i;:::-;4688:63;;4643:118;4149:619;;;;;:::o;4774:663::-;4862:6;4870;4878;4927:2;4915:9;4906:7;4902:23;4898:32;4895:119;;;4933:79;;:::i;:::-;4895:119;5053:1;5078:64;5134:7;5125:6;5114:9;5110:22;5078:64;:::i;:::-;5068:74;;5024:128;5191:2;5217:64;5273:7;5264:6;5253:9;5249:22;5217:64;:::i;:::-;5207:74;;5162:129;5330:2;5356:64;5412:7;5403:6;5392:9;5388:22;5356:64;:::i;:::-;5346:74;;5301:129;4774:663;;;;;:::o;5443:179::-;5512:10;5533:46;5575:3;5567:6;5533:46;:::i;:::-;5611:4;5606:3;5602:14;5588:28;;5443:179;;;;:::o;5628:108::-;5705:24;5723:5;5705:24;:::i;:::-;5700:3;5693:37;5628:108;;:::o;5742:118::-;5829:24;5847:5;5829:24;:::i;:::-;5824:3;5817:37;5742:118;;:::o;5896:732::-;6015:3;6044:54;6092:5;6044:54;:::i;:::-;6114:86;6193:6;6188:3;6114:86;:::i;:::-;6107:93;;6224:56;6274:5;6224:56;:::i;:::-;6303:7;6334:1;6319:284;6344:6;6341:1;6338:13;6319:284;;;6420:6;6414:13;6447:63;6506:3;6491:13;6447:63;:::i;:::-;6440:70;;6533:60;6586:6;6533:60;:::i;:::-;6523:70;;6379:224;6366:1;6363;6359:9;6354:14;;6319:284;;;6323:14;6619:3;6612:10;;6020:608;;;5896:732;;;;:::o;6634:109::-;6715:21;6730:5;6715:21;:::i;:::-;6710:3;6703:34;6634:109;;:::o;6749:183::-;6862:63;6919:5;6862:63;:::i;:::-;6857:3;6850:76;6749:183;;:::o;6938:147::-;7033:45;7072:5;7033:45;:::i;:::-;7028:3;7021:58;6938:147;;:::o;7091:364::-;7179:3;7207:39;7240:5;7207:39;:::i;:::-;7262:71;7326:6;7321:3;7262:71;:::i;:::-;7255:78;;7342:52;7387:6;7382:3;7375:4;7368:5;7364:16;7342:52;:::i;:::-;7419:29;7441:6;7419:29;:::i;:::-;7414:3;7410:39;7403:46;;7183:272;7091:364;;;;:::o;7461:366::-;7603:3;7624:67;7688:2;7683:3;7624:67;:::i;:::-;7617:74;;7700:93;7789:3;7700:93;:::i;:::-;7818:2;7813:3;7809:12;7802:19;;7461:366;;;:::o;7833:::-;7975:3;7996:67;8060:2;8055:3;7996:67;:::i;:::-;7989:74;;8072:93;8161:3;8072:93;:::i;:::-;8190:2;8185:3;8181:12;8174:19;;7833:366;;;:::o;8205:::-;8347:3;8368:67;8432:2;8427:3;8368:67;:::i;:::-;8361:74;;8444:93;8533:3;8444:93;:::i;:::-;8562:2;8557:3;8553:12;8546:19;;8205:366;;;:::o;8577:::-;8719:3;8740:67;8804:2;8799:3;8740:67;:::i;:::-;8733:74;;8816:93;8905:3;8816:93;:::i;:::-;8934:2;8929:3;8925:12;8918:19;;8577:366;;;:::o;8949:::-;9091:3;9112:67;9176:2;9171:3;9112:67;:::i;:::-;9105:74;;9188:93;9277:3;9188:93;:::i;:::-;9306:2;9301:3;9297:12;9290:19;;8949:366;;;:::o;9321:::-;9463:3;9484:67;9548:2;9543:3;9484:67;:::i;:::-;9477:74;;9560:93;9649:3;9560:93;:::i;:::-;9678:2;9673:3;9669:12;9662:19;;9321:366;;;:::o;9693:::-;9835:3;9856:67;9920:2;9915:3;9856:67;:::i;:::-;9849:74;;9932:93;10021:3;9932:93;:::i;:::-;10050:2;10045:3;10041:12;10034:19;;9693:366;;;:::o;10065:::-;10207:3;10228:67;10292:2;10287:3;10228:67;:::i;:::-;10221:74;;10304:93;10393:3;10304:93;:::i;:::-;10422:2;10417:3;10413:12;10406:19;;10065:366;;;:::o;10437:::-;10579:3;10600:67;10664:2;10659:3;10600:67;:::i;:::-;10593:74;;10676:93;10765:3;10676:93;:::i;:::-;10794:2;10789:3;10785:12;10778:19;;10437:366;;;:::o;10809:::-;10951:3;10972:67;11036:2;11031:3;10972:67;:::i;:::-;10965:74;;11048:93;11137:3;11048:93;:::i;:::-;11166:2;11161:3;11157:12;11150:19;;10809:366;;;:::o;11181:::-;11323:3;11344:67;11408:2;11403:3;11344:67;:::i;:::-;11337:74;;11420:93;11509:3;11420:93;:::i;:::-;11538:2;11533:3;11529:12;11522:19;;11181:366;;;:::o;11553:::-;11695:3;11716:67;11780:2;11775:3;11716:67;:::i;:::-;11709:74;;11792:93;11881:3;11792:93;:::i;:::-;11910:2;11905:3;11901:12;11894:19;;11553:366;;;:::o;11925:::-;12067:3;12088:67;12152:2;12147:3;12088:67;:::i;:::-;12081:74;;12164:93;12253:3;12164:93;:::i;:::-;12282:2;12277:3;12273:12;12266:19;;11925:366;;;:::o;12297:398::-;12456:3;12477:83;12558:1;12553:3;12477:83;:::i;:::-;12470:90;;12569:93;12658:3;12569:93;:::i;:::-;12687:1;12682:3;12678:11;12671:18;;12297:398;;;:::o;12701:366::-;12843:3;12864:67;12928:2;12923:3;12864:67;:::i;:::-;12857:74;;12940:93;13029:3;12940:93;:::i;:::-;13058:2;13053:3;13049:12;13042:19;;12701:366;;;:::o;13073:::-;13215:3;13236:67;13300:2;13295:3;13236:67;:::i;:::-;13229:74;;13312:93;13401:3;13312:93;:::i;:::-;13430:2;13425:3;13421:12;13414:19;;13073:366;;;:::o;13445:118::-;13532:24;13550:5;13532:24;:::i;:::-;13527:3;13520:37;13445:118;;:::o;13569:112::-;13652:22;13668:5;13652:22;:::i;:::-;13647:3;13640:35;13569:112;;:::o;13687:379::-;13871:3;13893:147;14036:3;13893:147;:::i;:::-;13886:154;;14057:3;14050:10;;13687:379;;;:::o;14072:222::-;14165:4;14203:2;14192:9;14188:18;14180:26;;14216:71;14284:1;14273:9;14269:17;14260:6;14216:71;:::i;:::-;14072:222;;;;:::o;14300:807::-;14549:4;14587:3;14576:9;14572:19;14564:27;;14601:71;14669:1;14658:9;14654:17;14645:6;14601:71;:::i;:::-;14682:72;14750:2;14739:9;14735:18;14726:6;14682:72;:::i;:::-;14764:80;14840:2;14829:9;14825:18;14816:6;14764:80;:::i;:::-;14854;14930:2;14919:9;14915:18;14906:6;14854:80;:::i;:::-;14944:73;15012:3;15001:9;14997:19;14988:6;14944:73;:::i;:::-;15027;15095:3;15084:9;15080:19;15071:6;15027:73;:::i;:::-;14300:807;;;;;;;;;:::o;15113:210::-;15200:4;15238:2;15227:9;15223:18;15215:26;;15251:65;15313:1;15302:9;15298:17;15289:6;15251:65;:::i;:::-;15113:210;;;;:::o;15329:274::-;15448:4;15486:2;15475:9;15471:18;15463:26;;15499:97;15593:1;15582:9;15578:17;15569:6;15499:97;:::i;:::-;15329:274;;;;:::o;15609:313::-;15722:4;15760:2;15749:9;15745:18;15737:26;;15809:9;15803:4;15799:20;15795:1;15784:9;15780:17;15773:47;15837:78;15910:4;15901:6;15837:78;:::i;:::-;15829:86;;15609:313;;;;:::o;15928:419::-;16094:4;16132:2;16121:9;16117:18;16109:26;;16181:9;16175:4;16171:20;16167:1;16156:9;16152:17;16145:47;16209:131;16335:4;16209:131;:::i;:::-;16201:139;;15928:419;;;:::o;16353:::-;16519:4;16557:2;16546:9;16542:18;16534:26;;16606:9;16600:4;16596:20;16592:1;16581:9;16577:17;16570:47;16634:131;16760:4;16634:131;:::i;:::-;16626:139;;16353:419;;;:::o;16778:::-;16944:4;16982:2;16971:9;16967:18;16959:26;;17031:9;17025:4;17021:20;17017:1;17006:9;17002:17;16995:47;17059:131;17185:4;17059:131;:::i;:::-;17051:139;;16778:419;;;:::o;17203:::-;17369:4;17407:2;17396:9;17392:18;17384:26;;17456:9;17450:4;17446:20;17442:1;17431:9;17427:17;17420:47;17484:131;17610:4;17484:131;:::i;:::-;17476:139;;17203:419;;;:::o;17628:::-;17794:4;17832:2;17821:9;17817:18;17809:26;;17881:9;17875:4;17871:20;17867:1;17856:9;17852:17;17845:47;17909:131;18035:4;17909:131;:::i;:::-;17901:139;;17628:419;;;:::o;18053:::-;18219:4;18257:2;18246:9;18242:18;18234:26;;18306:9;18300:4;18296:20;18292:1;18281:9;18277:17;18270:47;18334:131;18460:4;18334:131;:::i;:::-;18326:139;;18053:419;;;:::o;18478:::-;18644:4;18682:2;18671:9;18667:18;18659:26;;18731:9;18725:4;18721:20;18717:1;18706:9;18702:17;18695:47;18759:131;18885:4;18759:131;:::i;:::-;18751:139;;18478:419;;;:::o;18903:::-;19069:4;19107:2;19096:9;19092:18;19084:26;;19156:9;19150:4;19146:20;19142:1;19131:9;19127:17;19120:47;19184:131;19310:4;19184:131;:::i;:::-;19176:139;;18903:419;;;:::o;19328:::-;19494:4;19532:2;19521:9;19517:18;19509:26;;19581:9;19575:4;19571:20;19567:1;19556:9;19552:17;19545:47;19609:131;19735:4;19609:131;:::i;:::-;19601:139;;19328:419;;;:::o;19753:::-;19919:4;19957:2;19946:9;19942:18;19934:26;;20006:9;20000:4;19996:20;19992:1;19981:9;19977:17;19970:47;20034:131;20160:4;20034:131;:::i;:::-;20026:139;;19753:419;;;:::o;20178:::-;20344:4;20382:2;20371:9;20367:18;20359:26;;20431:9;20425:4;20421:20;20417:1;20406:9;20402:17;20395:47;20459:131;20585:4;20459:131;:::i;:::-;20451:139;;20178:419;;;:::o;20603:::-;20769:4;20807:2;20796:9;20792:18;20784:26;;20856:9;20850:4;20846:20;20842:1;20831:9;20827:17;20820:47;20884:131;21010:4;20884:131;:::i;:::-;20876:139;;20603:419;;;:::o;21028:::-;21194:4;21232:2;21221:9;21217:18;21209:26;;21281:9;21275:4;21271:20;21267:1;21256:9;21252:17;21245:47;21309:131;21435:4;21309:131;:::i;:::-;21301:139;;21028:419;;;:::o;21453:::-;21619:4;21657:2;21646:9;21642:18;21634:26;;21706:9;21700:4;21696:20;21692:1;21681:9;21677:17;21670:47;21734:131;21860:4;21734:131;:::i;:::-;21726:139;;21453:419;;;:::o;21878:::-;22044:4;22082:2;22071:9;22067:18;22059:26;;22131:9;22125:4;22121:20;22117:1;22106:9;22102:17;22095:47;22159:131;22285:4;22159:131;:::i;:::-;22151:139;;21878:419;;;:::o;22303:222::-;22396:4;22434:2;22423:9;22419:18;22411:26;;22447:71;22515:1;22504:9;22500:17;22491:6;22447:71;:::i;:::-;22303:222;;;;:::o;22531:831::-;22794:4;22832:3;22821:9;22817:19;22809:27;;22846:71;22914:1;22903:9;22899:17;22890:6;22846:71;:::i;:::-;22927:80;23003:2;22992:9;22988:18;22979:6;22927:80;:::i;:::-;23054:9;23048:4;23044:20;23039:2;23028:9;23024:18;23017:48;23082:108;23185:4;23176:6;23082:108;:::i;:::-;23074:116;;23200:72;23268:2;23257:9;23253:18;23244:6;23200:72;:::i;:::-;23282:73;23350:3;23339:9;23335:19;23326:6;23282:73;:::i;:::-;22531:831;;;;;;;;:::o;23368:332::-;23489:4;23527:2;23516:9;23512:18;23504:26;;23540:71;23608:1;23597:9;23593:17;23584:6;23540:71;:::i;:::-;23621:72;23689:2;23678:9;23674:18;23665:6;23621:72;:::i;:::-;23368:332;;;;;:::o;23706:442::-;23855:4;23893:2;23882:9;23878:18;23870:26;;23906:71;23974:1;23963:9;23959:17;23950:6;23906:71;:::i;:::-;23987:72;24055:2;24044:9;24040:18;24031:6;23987:72;:::i;:::-;24069;24137:2;24126:9;24122:18;24113:6;24069:72;:::i;:::-;23706:442;;;;;;:::o;24154:214::-;24243:4;24281:2;24270:9;24266:18;24258:26;;24294:67;24358:1;24347:9;24343:17;24334:6;24294:67;:::i;:::-;24154:214;;;;:::o;24455:132::-;24522:4;24545:3;24537:11;;24575:4;24570:3;24566:14;24558:22;;24455:132;;;:::o;24593:114::-;24660:6;24694:5;24688:12;24678:22;;24593:114;;;:::o;24713:99::-;24765:6;24799:5;24793:12;24783:22;;24713:99;;;:::o;24818:113::-;24888:4;24920;24915:3;24911:14;24903:22;;24818:113;;;:::o;24937:184::-;25036:11;25070:6;25065:3;25058:19;25110:4;25105:3;25101:14;25086:29;;24937:184;;;;:::o;25127:147::-;25228:11;25265:3;25250:18;;25127:147;;;;:::o;25280:169::-;25364:11;25398:6;25393:3;25386:19;25438:4;25433:3;25429:14;25414:29;;25280:169;;;;:::o;25455:305::-;25495:3;25514:20;25532:1;25514:20;:::i;:::-;25509:25;;25548:20;25566:1;25548:20;:::i;:::-;25543:25;;25702:1;25634:66;25630:74;25627:1;25624:81;25621:107;;;25708:18;;:::i;:::-;25621:107;25752:1;25749;25745:9;25738:16;;25455:305;;;;:::o;25766:185::-;25806:1;25823:20;25841:1;25823:20;:::i;:::-;25818:25;;25857:20;25875:1;25857:20;:::i;:::-;25852:25;;25896:1;25886:35;;25901:18;;:::i;:::-;25886:35;25943:1;25940;25936:9;25931:14;;25766:185;;;;:::o;25957:348::-;25997:7;26020:20;26038:1;26020:20;:::i;:::-;26015:25;;26054:20;26072:1;26054:20;:::i;:::-;26049:25;;26242:1;26174:66;26170:74;26167:1;26164:81;26159:1;26152:9;26145:17;26141:105;26138:131;;;26249:18;;:::i;:::-;26138:131;26297:1;26294;26290:9;26279:20;;25957:348;;;;:::o;26311:191::-;26351:4;26371:20;26389:1;26371:20;:::i;:::-;26366:25;;26405:20;26423:1;26405:20;:::i;:::-;26400:25;;26444:1;26441;26438:8;26435:34;;;26449:18;;:::i;:::-;26435:34;26494:1;26491;26487:9;26479:17;;26311:191;;;;:::o;26508:96::-;26545:7;26574:24;26592:5;26574:24;:::i;:::-;26563:35;;26508:96;;;:::o;26610:90::-;26644:7;26687:5;26680:13;26673:21;26662:32;;26610:90;;;:::o;26706:126::-;26743:7;26783:42;26776:5;26772:54;26761:65;;26706:126;;;:::o;26838:77::-;26875:7;26904:5;26893:16;;26838:77;;;:::o;26921:86::-;26956:7;26996:4;26989:5;26985:16;26974:27;;26921:86;;;:::o;27013:152::-;27089:9;27122:37;27153:5;27122:37;:::i;:::-;27109:50;;27013:152;;;:::o;27171:121::-;27229:9;27262:24;27280:5;27262:24;:::i;:::-;27249:37;;27171:121;;;:::o;27298:126::-;27348:9;27381:37;27412:5;27381:37;:::i;:::-;27368:50;;27298:126;;;:::o;27430:113::-;27480:9;27513:24;27531:5;27513:24;:::i;:::-;27500:37;;27430:113;;;:::o;27549:307::-;27617:1;27627:113;27641:6;27638:1;27635:13;27627:113;;;27726:1;27721:3;27717:11;27711:18;27707:1;27702:3;27698:11;27691:39;27663:2;27660:1;27656:10;27651:15;;27627:113;;;27758:6;27755:1;27752:13;27749:101;;;27838:1;27829:6;27824:3;27820:16;27813:27;27749:101;27598:258;27549:307;;;:::o;27862:320::-;27906:6;27943:1;27937:4;27933:12;27923:22;;27990:1;27984:4;27980:12;28011:18;28001:81;;28067:4;28059:6;28055:17;28045:27;;28001:81;28129:2;28121:6;28118:14;28098:18;28095:38;28092:84;;;28148:18;;:::i;:::-;28092:84;27913:269;27862:320;;;:::o;28188:180::-;28236:77;28233:1;28226:88;28333:4;28330:1;28323:15;28357:4;28354:1;28347:15;28374:180;28422:77;28419:1;28412:88;28519:4;28516:1;28509:15;28543:4;28540:1;28533:15;28560:180;28608:77;28605:1;28598:88;28705:4;28702:1;28695:15;28729:4;28726:1;28719:15;28746:180;28794:77;28791:1;28784:88;28891:4;28888:1;28881:15;28915:4;28912:1;28905:15;28932:180;28980:77;28977:1;28970:88;29077:4;29074:1;29067:15;29101:4;29098:1;29091:15;29241:117;29350:1;29347;29340:12;29364:102;29405:6;29456:2;29452:7;29447:2;29440:5;29436:14;29432:28;29422:38;;29364:102;;;:::o;29472:222::-;29612:34;29608:1;29600:6;29596:14;29589:58;29681:5;29676:2;29668:6;29664:15;29657:30;29472:222;:::o;29700:177::-;29840:29;29836:1;29828:6;29824:14;29817:53;29700:177;:::o;29883:225::-;30023:34;30019:1;30011:6;30007:14;30000:58;30092:8;30087:2;30079:6;30075:15;30068:33;29883:225;:::o;30114:221::-;30254:34;30250:1;30242:6;30238:14;30231:58;30323:4;30318:2;30310:6;30306:15;30299:29;30114:221;:::o;30341:::-;30481:34;30477:1;30469:6;30465:14;30458:58;30550:4;30545:2;30537:6;30533:15;30526:29;30341:221;:::o;30568:179::-;30708:31;30704:1;30696:6;30692:14;30685:55;30568:179;:::o;30753:225::-;30893:34;30889:1;30881:6;30877:14;30870:58;30962:8;30957:2;30949:6;30945:15;30938:33;30753:225;:::o;30984:227::-;31124:34;31120:1;31112:6;31108:14;31101:58;31193:10;31188:2;31180:6;31176:15;31169:35;30984:227;:::o;31217:221::-;31357:34;31353:1;31345:6;31341:14;31334:58;31426:4;31421:2;31413:6;31409:15;31402:29;31217:221;:::o;31444:227::-;31584:34;31580:1;31572:6;31568:14;31561:58;31653:10;31648:2;31640:6;31636:15;31629:35;31444:227;:::o;31677:182::-;31817:34;31813:1;31805:6;31801:14;31794:58;31677:182;:::o;31865:239::-;32005:34;32001:1;31993:6;31989:14;31982:58;32074:22;32069:2;32061:6;32057:15;32050:47;31865:239;:::o;32110:224::-;32250:34;32246:1;32238:6;32234:14;32227:58;32319:7;32314:2;32306:6;32302:15;32295:32;32110:224;:::o;32340:114::-;;:::o;32460:223::-;32600:34;32596:1;32588:6;32584:14;32577:58;32669:6;32664:2;32656:6;32652:15;32645:31;32460:223;:::o;32689:224::-;32829:34;32825:1;32817:6;32813:14;32806:58;32898:7;32893:2;32885:6;32881:15;32874:32;32689:224;:::o;32919:122::-;32992:24;33010:5;32992:24;:::i;:::-;32985:5;32982:35;32972:63;;33031:1;33028;33021:12;32972:63;32919:122;:::o;33047:116::-;33117:21;33132:5;33117:21;:::i;:::-;33110:5;33107:32;33097:60;;33153:1;33150;33143:12;33097:60;33047:116;:::o;33169:122::-;33242:24;33260:5;33242:24;:::i;:::-;33235:5;33232:35;33222:63;;33281:1;33278;33271:12;33222:63;33169:122;:::o

Swarm Source

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