ETH Price: $2,516.11 (-0.96%)

Token

Ryoshis Bird (Birdoshi)
 

Overview

Max Total Supply

1,000,000,000 Birdoshi

Holders

10

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
0 Birdoshi

Value
$0.00
0x6394224ff17caaa5c66cd16e7e2a1e3e54a6a39c
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:
Birdoshi

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-04-02
*/

pragma solidity ^0.6.12;

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

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

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

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

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

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

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

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

/**
 * @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) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

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 () public {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

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

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

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

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

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

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

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

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

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

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

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

    function initialize(address, address) external;
}

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

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

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

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

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

interface 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.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin guidelines: functions revert instead
 * of returning `false` on failure. This behavior is nonetheless conventional
 * and does not conflict with the expectations of ERC20 applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    using SafeMath for uint256;

    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) public {
        _name = name_;
        _symbol = symbol_;
    }

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

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

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

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

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

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

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

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

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

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

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

        _beforeTokenTransfer(sender, recipient, amount);

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

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

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

        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }

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

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

        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }

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

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

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

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

    address public constant DEAD_ADDRESS = address(0xdead);
    IUniswapV2Router02 public constant uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

    uint256 public buyLiquidityFee = 1;
    uint256 public sellLiquidityFee = 1;
    uint256 public buyTxFee = 7;
    uint256 public sellTxFee = 7;
    uint256 public tokensForLiquidity;
    uint256 public tokensForTax;

    uint256 public _tTotal = 10**9 * 10**9;                         
    uint256 public swapAtAmount = _tTotal.mul(10).div(10000);       
    uint256 public maxTxLimit = _tTotal.mul(200).div(10000);         
    uint256 public maxWalletLimit = _tTotal.mul(200).div(10000);    

    address public dev;
    address public uniswapV2Pair;

    uint256 private launchBlock;
    bool private swapping;
    bool public isLaunched;

    // exclude from fees
    mapping (address => bool) public isExcludedFromFees;

    // exclude from max transaction amount
    mapping (address => bool) public isExcludedFromTxLimit;

    // exclude from max wallet limit
    mapping (address => bool) public isExcludedFromWalletLimit;

    // if the account is blacklisted from transacting
    mapping (address => bool) public isBlacklisted;


    constructor(address _dev) public ERC20("Ryoshis Bird", "Birdoshi") {

        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), uniswapV2Router.WETH());
        _approve(address(this), address(uniswapV2Router), type(uint256).max);


        // exclude from fees, wallet limit and transaction limit
        excludeFromAllLimits(owner(), true);
        excludeFromAllLimits(address(this), true);
        excludeFromWalletLimit(uniswapV2Pair, true);

        dev = _dev;

        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(owner(), _tTotal);
    }

    function excludeFromFees(address account, bool value) public onlyOwner() {
        require(isExcludedFromFees[account] != value, "Fees: Already set to this value");
        isExcludedFromFees[account] = value;
    }

    function excludeFromTxLimit(address account, bool value) public onlyOwner() {
        require(isExcludedFromTxLimit[account] != value, "TxLimit: Already set to this value");
        isExcludedFromTxLimit[account] = value;
    }

    function excludeFromWalletLimit(address account, bool value) public onlyOwner() {
        require(isExcludedFromWalletLimit[account] != value, "WalletLimit: Already set to this value");
        isExcludedFromWalletLimit[account] = value;
    }

    function excludeFromAllLimits(address account, bool value) public onlyOwner() {
        excludeFromFees(account, value);
        excludeFromTxLimit(account, value);
        excludeFromWalletLimit(account, value);
    }

    function setBuyFee(uint256 liquidityFee, uint256 txFee) external onlyOwner() {
        buyLiquidityFee = liquidityFee;
        buyTxFee = txFee;
    }

    function setSellFee(uint256 liquidityFee, uint256 txFee) external onlyOwner() {
        sellLiquidityFee = liquidityFee;
        sellTxFee = txFee;
    }

    function MakeRelax(uint256 newLimit) external onlyOwner() {
        maxTxLimit = newLimit * (10**9);
    }

    function MaxGreed(uint256 newLimit) external onlyOwner() {
        maxWalletLimit = newLimit * (10**9);
    }

    function FundResearchWen(uint256 amountToSwap) external onlyOwner() {
        swapAtAmount = amountToSwap * (10**9);
    }

    function SetResearchFund(address newWallet) external onlyOwner() {
        dev = newWallet;
    }

    function WreckBot(address account) external onlyOwner() {
        require(!isBlacklisted[account], "Blacklist: Already blacklisted");
        require(account != uniswapV2Pair, "Cannot blacklist pair");
        _setBlacklist(account, true);
    }

    function SorryNotABot(address account) external onlyOwner() {
        require(isBlacklisted[account], "Blacklist: Not blacklisted");
        _setBlacklist(account, false);
    }

    function TakeFlight() external onlyOwner() {
        require(!isLaunched, "Contract is already launched");
        isLaunched = true;
        launchBlock = block.number;
    }

    function _transfer(address from, address to, uint256 amount) internal override {
        require(from != address(0), "transfer from the zero address");
        require(to != address(0), "transfer to the zero address");
        require(amount <= maxTxLimit || isExcludedFromTxLimit[from] || isExcludedFromTxLimit[to], "Tx Amount too large");
        require(balanceOf(to).add(amount) <= maxWalletLimit || isExcludedFromWalletLimit[to], "Transfer will exceed wallet limit");
        require(isLaunched || isExcludedFromFees[from] || isExcludedFromFees[to], "Waiting to go live");
        require(!isBlacklisted[from], "Sender is blacklisted");

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

        uint256 totalTokensForFee = tokensForLiquidity + tokensForTax;
        bool canSwap = totalTokensForFee >= swapAtAmount;

        if(
            from != uniswapV2Pair &&
            canSwap &&
            !swapping
        ) {
            swapping = true;
            swapBack(totalTokensForFee);
            swapping = false;
        } else if(
            from == uniswapV2Pair &&
            to != uniswapV2Pair &&
            block.number < launchBlock + 2 &&
            !isExcludedFromFees[to]
        ) {
            _setBlacklist(to, true);
        }

        bool takeFee = !swapping;

        if(isExcludedFromFees[from] || isExcludedFromFees[to]) {
            takeFee = false;
        }

        if(takeFee) {
            uint256 fees;
            // on sell
            if (to == uniswapV2Pair) {
                uint256 sellTotalFees = sellLiquidityFee.add(sellTxFee);
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity = tokensForLiquidity.add(fees.mul(sellLiquidityFee).div(sellTotalFees));
                tokensForTax = tokensForTax.add(fees.mul(sellTxFee).div(sellTotalFees));
            }
            // on buy & wallet transfers
            else {
                uint256 buyTotalFees = buyLiquidityFee.add(buyTxFee);
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity = tokensForLiquidity.add(fees.mul(buyLiquidityFee).div(buyTotalFees));
                tokensForTax = tokensForTax.add(fees.mul(buyTxFee).div(buyTotalFees));
            }

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

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

    function swapBack(uint256 totalTokensForFee) private {
        uint256 toSwap = swapAtAmount;

        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = toSwap.mul(tokensForLiquidity).div(totalTokensForFee).div(2);
        uint256 taxTokens = toSwap.sub(liquidityTokens).sub(liquidityTokens);
        uint256 amountToSwapForETH = toSwap.sub(liquidityTokens);

        _swapTokensForETH(amountToSwapForETH);

        uint256 ethBalance = address(this).balance;
        uint256 ethForTax = ethBalance.mul(taxTokens).div(amountToSwapForETH);
        uint256 ethForLiquidity = ethBalance.sub(ethForTax);

        tokensForLiquidity = tokensForLiquidity.sub(liquidityTokens.mul(2));
        tokensForTax = tokensForTax.sub(toSwap.sub(liquidityTokens.mul(2)));

        payable(address(dev)).transfer(ethForTax);
        _addLiquidity(liquidityTokens, ethForLiquidity);
    }

    function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {

        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            DEAD_ADDRESS,
            block.timestamp
        );
    }

    function _swapTokensForETH(uint256 tokenAmount) private {

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

    function _setBlacklist(address account, bool value) internal {
        isBlacklisted[account] = value;
    }

    receive() external payable {}
}
/** Be patient. The research starts soon. Follow the trail. 
@Birdoshi **/

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_dev","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DEAD_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountToSwap","type":"uint256"}],"name":"FundResearchWen","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"MakeRelax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"MaxGreed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"SetResearchFund","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"SorryNotABot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"TakeFlight","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"WreckBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_tTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTxFee","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":"dev","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"excludeFromAllLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"excludeFromTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"excludeFromWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromTxLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromWalletLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isLaunched","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletLimit","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":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"internalType":"uint256","name":"txFee","type":"uint256"}],"name":"setBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"internalType":"uint256","name":"txFee","type":"uint256"}],"name":"setSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAtAmount","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":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForTax","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":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526001600655600160075560076008556007600955670de0b6b3a7640000600c556200005c61271062000048600a600c54620005b960201b62002b061790919060201c565b6200064460201b62002b8c1790919060201c565b600d55620000976127106200008360c8600c54620005b960201b62002b061790919060201c565b6200064460201b62002b8c1790919060201c565b600e55620000d2612710620000be60c8600c54620005b960201b62002b061790919060201c565b6200064460201b62002b8c1790919060201c565b600f55348015620000e257600080fd5b506040516200589e3803806200589e833981810160405260208110156200010857600080fd5b81019080805190602001909291905050506040518060400160405280600c81526020017f52796f73686973204269726400000000000000000000000000000000000000008152506040518060400160405280600881526020017f426972646f73686900000000000000000000000000000000000000000000000081525081600390805190602001906200019d929190620012ae565b508060049080519060200190620001b6929190620012ae565b5050506000620001cb6200069660201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620002c557600080fd5b505afa158015620002da573d6000803e3d6000fd5b505050506040513d6020811015620002f157600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1663c9c6539630737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200037957600080fd5b505afa1580156200038e573d6000803e3d6000fd5b505050506040513d6020811015620003a557600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b1580156200042057600080fd5b505af115801562000435573d6000803e3d6000fd5b505050506040513d60208110156200044c57600080fd5b8101908080519060200190929190505050601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620004e430737a250d5630b4cf539739df2c5dacb4c659f2488d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6200069e60201b60201c565b62000506620004f86200089960201b60201c565b6001620008c360201b60201c565b62000519306001620008c360201b60201c565b6200054e601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620009d060201b60201c565b80601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005b2620005a36200089960201b60201c565b600c5462000ba960201b60201c565b5062001354565b600080831415620005ce57600090506200063e565b6000828402905082848281620005e057fe5b041462000639576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180620058336021913960400191505060405180910390fd5b809150505b92915050565b60006200068e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525062000d8760201b60201c565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141562000726576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180620058546024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620007ae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180620057ef6022913960400191505060405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620008d36200069660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000996576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b620009a8828262000e5260201b60201c565b620009ba82826200104760201b60201c565b620009cc8282620009d060201b60201c565b5050565b620009e06200069660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000aa3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b801515601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141562000b4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180620058786026913960400191505060405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000c4d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b62000c61600083836200122060201b60201c565b62000c7d816002546200122560201b62002bd61790919060201c565b60028190555062000cdb816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546200122560201b62002bd61790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b6000808311829062000e37576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101562000dfb57808201518184015260208101905062000dde565b50505050905090810190601f16801562000e295780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858162000e4457fe5b049050809150509392505050565b62000e626200069660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000f25576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b801515601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141562000fec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f466565733a20416c72656164792073657420746f20746869732076616c75650081525060200191505060405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b620010576200069660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200111a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b801515601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415620011c5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180620058116022913960400191505060405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b505050565b600080828401905083811015620012a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620012f157805160ff191683800117855562001322565b8280016001018555821562001322579182015b828111156200132157825182559160200191906001019062001304565b5b50905062001331919062001335565b5090565b5b808211156200135057600081600090555060010162001336565b5090565b61448b80620013646000396000f3fe6080604052600436106102815760003560e01c80638036d5901161014f578063c0246668116100c1578063e9b786cb1161007a578063e9b786cb14610ea4578063f11a24d314610ecf578063f2fde38b14610efa578063f637434214610f4b578063fb0ecfa414610f76578063fe575a8714610fbb57610288565b8063c024666814610ca0578063c19fd44c14610cfd578063cd49513f14610d14578063dd62ed3e14610d71578063e16830a814610df6578063e234520b14610e5357610288565b806395d89b411161011357806395d89b4114610a35578063a457c2d714610ac5578063a9059cbb14610b36578063af465a2714610ba7578063b40f946914610bd2578063bf95793d14610c3957610288565b80638036d59014610932578063869175241461095d5780638da5cb5b14610988578063904236d1146109c957806391cca3db146109f457610288565b806348dcab1e116101f357806366a88d96116101ac57806366a88d96146107e05780636ac9a8701461080b5780636d7adcad1461085057806370a082311461087b578063715018a6146108e0578063730f0476146108f757610288565b806348dcab1e1461063057806349bd5a5e1461066b5780634d2adec2146106ac5780634d587581146106e75780634e6fd6c4146107385780634fbee1931461077957610288565b80631a8145bb116102455780631a8145bb1461044b57806323b872dd1461047657806330280a7114610507578063307aebc914610564578063313ce5671461059157806339509351146105bf57610288565b8063056989831461028d57806306fdde03146102de578063095ea7b31461036e5780631694505e146103df57806318160ddd1461042057610288565b3661028857005b600080fd5b34801561029957600080fd5b506102dc600480360360208110156102b057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611022565b005b3480156102ea57600080fd5b506102f36111b9565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610333578082015181840152602081019050610318565b50505050905090810190601f1680156103605780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561037a57600080fd5b506103c76004803603604081101561039157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061125b565b60405180821515815260200191505060405180910390f35b3480156103eb57600080fd5b506103f4611279565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561042c57600080fd5b50610435611291565b6040518082815260200191505060405180910390f35b34801561045757600080fd5b5061046061129b565b6040518082815260200191505060405180910390f35b34801561048257600080fd5b506104ef6004803603606081101561049957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506112a1565b60405180821515815260200191505060405180910390f35b34801561051357600080fd5b506105626004803603604081101561052a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080351515906020019092919050505061137a565b005b34801561057057600080fd5b50610579611548565b60405180821515815260200191505060405180910390f35b34801561059d57600080fd5b506105a661155b565b604051808260ff16815260200191505060405180910390f35b3480156105cb57600080fd5b50610618600480360360408110156105e257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611564565b60405180821515815260200191505060405180910390f35b34801561063c57600080fd5b506106696004803603602081101561065357600080fd5b8101908080359060200190929190505050611617565b005b34801561067757600080fd5b506106806116f1565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156106b857600080fd5b506106e5600480360360208110156106cf57600080fd5b8101908080359060200190929190505050611717565b005b3480156106f357600080fd5b506107366004803603602081101561070a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506117f1565b005b34801561074457600080fd5b5061074d6118ff565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561078557600080fd5b506107c86004803603602081101561079c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611905565b60405180821515815260200191505060405180910390f35b3480156107ec57600080fd5b506107f5611925565b6040518082815260200191505060405180910390f35b34801561081757600080fd5b5061084e6004803603604081101561082e57600080fd5b81019080803590602001909291908035906020019092919050505061192b565b005b34801561085c57600080fd5b50610865611a07565b6040518082815260200191505060405180910390f35b34801561088757600080fd5b506108ca6004803603602081101561089e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a0d565b6040518082815260200191505060405180910390f35b3480156108ec57600080fd5b506108f5611a55565b005b34801561090357600080fd5b506109306004803603602081101561091a57600080fd5b8101908080359060200190929190505050611be0565b005b34801561093e57600080fd5b50610947611cba565b6040518082815260200191505060405180910390f35b34801561096957600080fd5b50610972611cc0565b6040518082815260200191505060405180910390f35b34801561099457600080fd5b5061099d611cc6565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156109d557600080fd5b506109de611cf0565b6040518082815260200191505060405180910390f35b348015610a0057600080fd5b50610a09611cf6565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610a4157600080fd5b50610a4a611d1c565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610a8a578082015181840152602081019050610a6f565b50505050905090810190601f168015610ab75780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610ad157600080fd5b50610b1e60048036036040811015610ae857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611dbe565b60405180821515815260200191505060405180910390f35b348015610b4257600080fd5b50610b8f60048036036040811015610b5957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611e8b565b60405180821515815260200191505060405180910390f35b348015610bb357600080fd5b50610bbc611ea9565b6040518082815260200191505060405180910390f35b348015610bde57600080fd5b50610c2160048036036020811015610bf557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611eaf565b60405180821515815260200191505060405180910390f35b348015610c4557600080fd5b50610c8860048036036020811015610c5c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ecf565b60405180821515815260200191505060405180910390f35b348015610cac57600080fd5b50610cfb60048036036040811015610cc357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611eef565b005b348015610d0957600080fd5b50610d126120da565b005b348015610d2057600080fd5b50610d6f60048036036040811015610d3757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080351515906020019092919050505061224b565b005b348015610d7d57600080fd5b50610de060048036036040811015610d9457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612337565b6040518082815260200191505060405180910390f35b348015610e0257600080fd5b50610e5160048036036040811015610e1957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035151590602001909291905050506123be565b005b348015610e5f57600080fd5b50610ea260048036036020811015610e7657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061258c565b005b348015610eb057600080fd5b50610eb96127e8565b6040518082815260200191505060405180910390f35b348015610edb57600080fd5b50610ee46127ee565b6040518082815260200191505060405180910390f35b348015610f0657600080fd5b50610f4960048036036020811015610f1d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506127f4565b005b348015610f5757600080fd5b50610f60612a04565b6040518082815260200191505060405180910390f35b348015610f8257600080fd5b50610fb960048036036040811015610f9957600080fd5b810190808035906020019092919080359060200190929190505050612a0a565b005b348015610fc757600080fd5b5061100a60048036036020811015610fde57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612ae6565b60405180821515815260200191505060405180910390f35b61102a612c5e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b601760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166111ab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f426c61636b6c6973743a204e6f7420626c61636b6c697374656400000000000081525060200191505060405180910390fd5b6111b6816000612c66565b50565b606060038054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156112515780601f1061122657610100808354040283529160200191611251565b820191906000526020600020905b81548152906001019060200180831161123457829003601f168201915b5050505050905090565b600061126f611268612c5e565b8484612cc1565b6001905092915050565b737a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b600a5481565b60006112ae848484612eb8565b61136f846112ba612c5e565b61136a8560405180606001604052806028815260200161437960289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611320612c5e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138d09092919063ffffffff16565b612cc1565b600190509392505050565b611382612c5e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611444576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b801515601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514156114ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806143366022913960400191505060405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601360019054906101000a900460ff1681565b60006009905090565b600061160d611571612c5e565b846116088560016000611582612c5e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bd690919063ffffffff16565b612cc1565b6001905092915050565b61161f612c5e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b633b9aca008102600f8190555050565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61171f612c5e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b633b9aca008102600e8190555050565b6117f9612c5e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61dead81565b60146020528060005260406000206000915054906101000a900460ff1681565b600f5481565b611933612c5e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b81600781905550806009819055505050565b600b5481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611a5d612c5e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b1f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611be8612c5e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611caa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b633b9aca008102600d8190555050565b600e5481565b600d5481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60095481565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060048054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611db45780601f10611d8957610100808354040283529160200191611db4565b820191906000526020600020905b815481529060010190602001808311611d9757829003601f168201915b5050505050905090565b6000611e81611dcb612c5e565b84611e7c856040518060600160405280602581526020016144316025913960016000611df5612c5e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138d09092919063ffffffff16565b612cc1565b6001905092915050565b6000611e9f611e98612c5e565b8484612eb8565b6001905092915050565b600c5481565b60166020528060005260406000206000915054906101000a900460ff1681565b60156020528060005260406000206000915054906101000a900460ff1681565b611ef7612c5e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fb9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b801515601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141561207f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f466565733a20416c72656164792073657420746f20746869732076616c75650081525060200191505060405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6120e2612c5e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121a4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b601360019054906101000a900460ff1615612227576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f436f6e747261637420697320616c7265616479206c61756e636865640000000081525060200191505060405180910390fd5b6001601360016101000a81548160ff02191690831515021790555043601281905550565b612253612c5e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612315576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b61231f8282611eef565b612329828261137a565b61233382826123be565b5050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6123c6612c5e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612488576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b801515601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415612531576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061440b6026913960400191505060405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b612594612c5e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612656576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b601760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612716576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f426c61636b6c6973743a20416c726561647920626c61636b6c6973746564000081525060200191505060405180910390fd5b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156127da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f43616e6e6f7420626c61636b6c6973742070616972000000000000000000000081525060200191505060405180910390fd5b6127e5816001612c66565b50565b60085481565b60065481565b6127fc612c5e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146128be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612944576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806142c86026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60075481565b612a12612c5e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612ad4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b81600681905550806008819055505050565b60176020528060005260406000206000915054906101000a900460ff1681565b600080831415612b195760009050612b86565b6000828402905082848281612b2a57fe5b0414612b81576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806143586021913960400191505060405180910390fd5b809150505b92915050565b6000612bce83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613990565b905092915050565b600080828401905083811015612c54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600033905090565b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612d47576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806143e76024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612dcd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806142ee6022913960400191505060405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612f5b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f7472616e736665722066726f6d20746865207a65726f2061646472657373000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612ffe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f7472616e7366657220746f20746865207a65726f20616464726573730000000081525060200191505060405180910390fd5b600e54811115806130585750601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806130ac5750601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61311e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f547820416d6f756e7420746f6f206c617267650000000000000000000000000081525060200191505060405180910390fd5b600f5461313c8261312e85611a0d565b612bd690919063ffffffff16565b1115806131925750601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6131e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806143a16021913960400191505060405180910390fd5b601360019054906101000a900460ff168061324b5750601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8061329f5750601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b613311576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f57616974696e6720746f20676f206c697665000000000000000000000000000081525060200191505060405180910390fd5b601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156133d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f53656e64657220697320626c61636b6c6973746564000000000000000000000081525060200191505060405180910390fd5b60008114156133eb576133e683836000613a56565b6138cb565b6000600b54600a540190506000600d548210159050601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415801561345b5750805b80156134745750601360009054906101000a900460ff16155b156134bd576001601360006101000a81548160ff02191690831515021790555061349d82613d17565b6000601360006101000a81548160ff0219169083151502179055506135e0565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480156135685750601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b8015613578575060026012540143105b80156135ce5750601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156135df576135de846001612c66565b5b5b6000601360009054906101000a900460ff16159050601460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806136965750601460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156136a057600090505b80156138bc576000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614156137c9576000613717600954600754612bd690919063ffffffff16565b905061373f60646137318389612b0690919063ffffffff16565b612b8c90919063ffffffff16565b915061377c61376b8261375d60075486612b0690919063ffffffff16565b612b8c90919063ffffffff16565b600a54612bd690919063ffffffff16565b600a819055506137bd6137ac8261379e60095486612b0690919063ffffffff16565b612b8c90919063ffffffff16565b600b54612bd690919063ffffffff16565b600b8190555050613890565b60006137e2600854600654612bd690919063ffffffff16565b905061380a60646137fc8389612b0690919063ffffffff16565b612b8c90919063ffffffff16565b91506138476138368261382860065486612b0690919063ffffffff16565b612b8c90919063ffffffff16565b600a54612bd690919063ffffffff16565b600a819055506138886138778261386960085486612b0690919063ffffffff16565b612b8c90919063ffffffff16565b600b54612bd690919063ffffffff16565b600b81905550505b60008111156138ba576138a4873083613a56565b6138b78186613ed590919063ffffffff16565b94505b505b6138c7868686613a56565b5050505b505050565b600083831115829061397d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613942578082015181840152602081019050613927565b50505050905090810190601f16801561396f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b60008083118290613a3c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613a015780820151818401526020810190506139e6565b50505050905090810190601f168015613a2e5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581613a4857fe5b049050809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613adc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806143c26025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613b62576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806142a56023913960400191505060405180910390fd5b613b6d838383613f1f565b613bd881604051806060016040528060268152602001614310602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138d09092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c6b816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bd690919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b6000600d5490506000613d5a6002613d4c85613d3e600a5487612b0690919063ffffffff16565b612b8c90919063ffffffff16565b612b8c90919063ffffffff16565b90506000613d8382613d758486613ed590919063ffffffff16565b613ed590919063ffffffff16565b90506000613d9a8385613ed590919063ffffffff16565b9050613da581613f24565b60004790506000613dd183613dc38685612b0690919063ffffffff16565b612b8c90919063ffffffff16565b90506000613de88284613ed590919063ffffffff16565b9050613e12613e01600288612b0690919063ffffffff16565b600a54613ed590919063ffffffff16565b600a81905550613e52613e41613e32600289612b0690919063ffffffff16565b89613ed590919063ffffffff16565b600b54613ed590919063ffffffff16565b600b81905550601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015613ec0573d6000803e3d6000fd5b50613ecb868261418f565b5050505050505050565b6000613f1783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506138d0565b905092915050565b505050565b6060600267ffffffffffffffff81118015613f3e57600080fd5b50604051908082528060200260200182016040528015613f6d5781602001602082028036833780820191505090505b5090503081600081518110613f7e57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561401257600080fd5b505afa158015614026573d6000803e3d6000fd5b505050506040513d602081101561403c57600080fd5b81019080805190602001909291905050508160018151811061405a57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b8381101561414a57808201518184015260208101905061412f565b505050509050019650505050505050600060405180830381600087803b15801561417357600080fd5b505af1158015614187573d6000803e3d6000fd5b505050505050565b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200196505050505050506060604051808303818588803b15801561424d57600080fd5b505af1158015614261573d6000803e3d6000fd5b50505050506040513d606081101561427857600080fd5b81019080805190602001909291908051906020019092919080519060200190929190505050505050505056fe45524332303a207472616e7366657220746f20746865207a65726f20616464726573734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636554784c696d69743a20416c72656164792073657420746f20746869732076616c7565536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e736665722077696c6c206578636565642077616c6c6574206c696d697445524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737357616c6c65744c696d69743a20416c72656164792073657420746f20746869732076616c756545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122057066adec8910b7f25d503c095dda78d1a503c25630ae04018d586585fb5f71864736f6c634300060c003345524332303a20617070726f766520746f20746865207a65726f206164647265737354784c696d69743a20416c72656164792073657420746f20746869732076616c7565536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a20617070726f76652066726f6d20746865207a65726f206164647265737357616c6c65744c696d69743a20416c72656164792073657420746f20746869732076616c7565000000000000000000000000510a5103e295a04ac129aa5255b611687cab1526

Deployed Bytecode

0x6080604052600436106102815760003560e01c80638036d5901161014f578063c0246668116100c1578063e9b786cb1161007a578063e9b786cb14610ea4578063f11a24d314610ecf578063f2fde38b14610efa578063f637434214610f4b578063fb0ecfa414610f76578063fe575a8714610fbb57610288565b8063c024666814610ca0578063c19fd44c14610cfd578063cd49513f14610d14578063dd62ed3e14610d71578063e16830a814610df6578063e234520b14610e5357610288565b806395d89b411161011357806395d89b4114610a35578063a457c2d714610ac5578063a9059cbb14610b36578063af465a2714610ba7578063b40f946914610bd2578063bf95793d14610c3957610288565b80638036d59014610932578063869175241461095d5780638da5cb5b14610988578063904236d1146109c957806391cca3db146109f457610288565b806348dcab1e116101f357806366a88d96116101ac57806366a88d96146107e05780636ac9a8701461080b5780636d7adcad1461085057806370a082311461087b578063715018a6146108e0578063730f0476146108f757610288565b806348dcab1e1461063057806349bd5a5e1461066b5780634d2adec2146106ac5780634d587581146106e75780634e6fd6c4146107385780634fbee1931461077957610288565b80631a8145bb116102455780631a8145bb1461044b57806323b872dd1461047657806330280a7114610507578063307aebc914610564578063313ce5671461059157806339509351146105bf57610288565b8063056989831461028d57806306fdde03146102de578063095ea7b31461036e5780631694505e146103df57806318160ddd1461042057610288565b3661028857005b600080fd5b34801561029957600080fd5b506102dc600480360360208110156102b057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611022565b005b3480156102ea57600080fd5b506102f36111b9565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610333578082015181840152602081019050610318565b50505050905090810190601f1680156103605780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561037a57600080fd5b506103c76004803603604081101561039157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061125b565b60405180821515815260200191505060405180910390f35b3480156103eb57600080fd5b506103f4611279565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561042c57600080fd5b50610435611291565b6040518082815260200191505060405180910390f35b34801561045757600080fd5b5061046061129b565b6040518082815260200191505060405180910390f35b34801561048257600080fd5b506104ef6004803603606081101561049957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506112a1565b60405180821515815260200191505060405180910390f35b34801561051357600080fd5b506105626004803603604081101561052a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080351515906020019092919050505061137a565b005b34801561057057600080fd5b50610579611548565b60405180821515815260200191505060405180910390f35b34801561059d57600080fd5b506105a661155b565b604051808260ff16815260200191505060405180910390f35b3480156105cb57600080fd5b50610618600480360360408110156105e257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611564565b60405180821515815260200191505060405180910390f35b34801561063c57600080fd5b506106696004803603602081101561065357600080fd5b8101908080359060200190929190505050611617565b005b34801561067757600080fd5b506106806116f1565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156106b857600080fd5b506106e5600480360360208110156106cf57600080fd5b8101908080359060200190929190505050611717565b005b3480156106f357600080fd5b506107366004803603602081101561070a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506117f1565b005b34801561074457600080fd5b5061074d6118ff565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561078557600080fd5b506107c86004803603602081101561079c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611905565b60405180821515815260200191505060405180910390f35b3480156107ec57600080fd5b506107f5611925565b6040518082815260200191505060405180910390f35b34801561081757600080fd5b5061084e6004803603604081101561082e57600080fd5b81019080803590602001909291908035906020019092919050505061192b565b005b34801561085c57600080fd5b50610865611a07565b6040518082815260200191505060405180910390f35b34801561088757600080fd5b506108ca6004803603602081101561089e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a0d565b6040518082815260200191505060405180910390f35b3480156108ec57600080fd5b506108f5611a55565b005b34801561090357600080fd5b506109306004803603602081101561091a57600080fd5b8101908080359060200190929190505050611be0565b005b34801561093e57600080fd5b50610947611cba565b6040518082815260200191505060405180910390f35b34801561096957600080fd5b50610972611cc0565b6040518082815260200191505060405180910390f35b34801561099457600080fd5b5061099d611cc6565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156109d557600080fd5b506109de611cf0565b6040518082815260200191505060405180910390f35b348015610a0057600080fd5b50610a09611cf6565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610a4157600080fd5b50610a4a611d1c565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610a8a578082015181840152602081019050610a6f565b50505050905090810190601f168015610ab75780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610ad157600080fd5b50610b1e60048036036040811015610ae857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611dbe565b60405180821515815260200191505060405180910390f35b348015610b4257600080fd5b50610b8f60048036036040811015610b5957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611e8b565b60405180821515815260200191505060405180910390f35b348015610bb357600080fd5b50610bbc611ea9565b6040518082815260200191505060405180910390f35b348015610bde57600080fd5b50610c2160048036036020811015610bf557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611eaf565b60405180821515815260200191505060405180910390f35b348015610c4557600080fd5b50610c8860048036036020811015610c5c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ecf565b60405180821515815260200191505060405180910390f35b348015610cac57600080fd5b50610cfb60048036036040811015610cc357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611eef565b005b348015610d0957600080fd5b50610d126120da565b005b348015610d2057600080fd5b50610d6f60048036036040811015610d3757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080351515906020019092919050505061224b565b005b348015610d7d57600080fd5b50610de060048036036040811015610d9457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612337565b6040518082815260200191505060405180910390f35b348015610e0257600080fd5b50610e5160048036036040811015610e1957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035151590602001909291905050506123be565b005b348015610e5f57600080fd5b50610ea260048036036020811015610e7657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061258c565b005b348015610eb057600080fd5b50610eb96127e8565b6040518082815260200191505060405180910390f35b348015610edb57600080fd5b50610ee46127ee565b6040518082815260200191505060405180910390f35b348015610f0657600080fd5b50610f4960048036036020811015610f1d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506127f4565b005b348015610f5757600080fd5b50610f60612a04565b6040518082815260200191505060405180910390f35b348015610f8257600080fd5b50610fb960048036036040811015610f9957600080fd5b810190808035906020019092919080359060200190929190505050612a0a565b005b348015610fc757600080fd5b5061100a60048036036020811015610fde57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612ae6565b60405180821515815260200191505060405180910390f35b61102a612c5e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b601760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166111ab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f426c61636b6c6973743a204e6f7420626c61636b6c697374656400000000000081525060200191505060405180910390fd5b6111b6816000612c66565b50565b606060038054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156112515780601f1061122657610100808354040283529160200191611251565b820191906000526020600020905b81548152906001019060200180831161123457829003601f168201915b5050505050905090565b600061126f611268612c5e565b8484612cc1565b6001905092915050565b737a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b600a5481565b60006112ae848484612eb8565b61136f846112ba612c5e565b61136a8560405180606001604052806028815260200161437960289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611320612c5e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138d09092919063ffffffff16565b612cc1565b600190509392505050565b611382612c5e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611444576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b801515601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514156114ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806143366022913960400191505060405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601360019054906101000a900460ff1681565b60006009905090565b600061160d611571612c5e565b846116088560016000611582612c5e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bd690919063ffffffff16565b612cc1565b6001905092915050565b61161f612c5e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b633b9aca008102600f8190555050565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61171f612c5e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b633b9aca008102600e8190555050565b6117f9612c5e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61dead81565b60146020528060005260406000206000915054906101000a900460ff1681565b600f5481565b611933612c5e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b81600781905550806009819055505050565b600b5481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611a5d612c5e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b1f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611be8612c5e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611caa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b633b9aca008102600d8190555050565b600e5481565b600d5481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60095481565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060048054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611db45780601f10611d8957610100808354040283529160200191611db4565b820191906000526020600020905b815481529060010190602001808311611d9757829003601f168201915b5050505050905090565b6000611e81611dcb612c5e565b84611e7c856040518060600160405280602581526020016144316025913960016000611df5612c5e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138d09092919063ffffffff16565b612cc1565b6001905092915050565b6000611e9f611e98612c5e565b8484612eb8565b6001905092915050565b600c5481565b60166020528060005260406000206000915054906101000a900460ff1681565b60156020528060005260406000206000915054906101000a900460ff1681565b611ef7612c5e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fb9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b801515601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141561207f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f466565733a20416c72656164792073657420746f20746869732076616c75650081525060200191505060405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6120e2612c5e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121a4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b601360019054906101000a900460ff1615612227576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f436f6e747261637420697320616c7265616479206c61756e636865640000000081525060200191505060405180910390fd5b6001601360016101000a81548160ff02191690831515021790555043601281905550565b612253612c5e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612315576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b61231f8282611eef565b612329828261137a565b61233382826123be565b5050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6123c6612c5e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612488576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b801515601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415612531576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061440b6026913960400191505060405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b612594612c5e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612656576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b601760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612716576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f426c61636b6c6973743a20416c726561647920626c61636b6c6973746564000081525060200191505060405180910390fd5b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156127da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f43616e6e6f7420626c61636b6c6973742070616972000000000000000000000081525060200191505060405180910390fd5b6127e5816001612c66565b50565b60085481565b60065481565b6127fc612c5e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146128be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612944576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806142c86026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60075481565b612a12612c5e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612ad4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b81600681905550806008819055505050565b60176020528060005260406000206000915054906101000a900460ff1681565b600080831415612b195760009050612b86565b6000828402905082848281612b2a57fe5b0414612b81576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806143586021913960400191505060405180910390fd5b809150505b92915050565b6000612bce83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613990565b905092915050565b600080828401905083811015612c54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600033905090565b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612d47576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806143e76024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612dcd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806142ee6022913960400191505060405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612f5b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f7472616e736665722066726f6d20746865207a65726f2061646472657373000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612ffe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f7472616e7366657220746f20746865207a65726f20616464726573730000000081525060200191505060405180910390fd5b600e54811115806130585750601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806130ac5750601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61311e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f547820416d6f756e7420746f6f206c617267650000000000000000000000000081525060200191505060405180910390fd5b600f5461313c8261312e85611a0d565b612bd690919063ffffffff16565b1115806131925750601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6131e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806143a16021913960400191505060405180910390fd5b601360019054906101000a900460ff168061324b5750601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8061329f5750601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b613311576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f57616974696e6720746f20676f206c697665000000000000000000000000000081525060200191505060405180910390fd5b601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156133d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f53656e64657220697320626c61636b6c6973746564000000000000000000000081525060200191505060405180910390fd5b60008114156133eb576133e683836000613a56565b6138cb565b6000600b54600a540190506000600d548210159050601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415801561345b5750805b80156134745750601360009054906101000a900460ff16155b156134bd576001601360006101000a81548160ff02191690831515021790555061349d82613d17565b6000601360006101000a81548160ff0219169083151502179055506135e0565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480156135685750601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b8015613578575060026012540143105b80156135ce5750601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156135df576135de846001612c66565b5b5b6000601360009054906101000a900460ff16159050601460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806136965750601460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156136a057600090505b80156138bc576000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614156137c9576000613717600954600754612bd690919063ffffffff16565b905061373f60646137318389612b0690919063ffffffff16565b612b8c90919063ffffffff16565b915061377c61376b8261375d60075486612b0690919063ffffffff16565b612b8c90919063ffffffff16565b600a54612bd690919063ffffffff16565b600a819055506137bd6137ac8261379e60095486612b0690919063ffffffff16565b612b8c90919063ffffffff16565b600b54612bd690919063ffffffff16565b600b8190555050613890565b60006137e2600854600654612bd690919063ffffffff16565b905061380a60646137fc8389612b0690919063ffffffff16565b612b8c90919063ffffffff16565b91506138476138368261382860065486612b0690919063ffffffff16565b612b8c90919063ffffffff16565b600a54612bd690919063ffffffff16565b600a819055506138886138778261386960085486612b0690919063ffffffff16565b612b8c90919063ffffffff16565b600b54612bd690919063ffffffff16565b600b81905550505b60008111156138ba576138a4873083613a56565b6138b78186613ed590919063ffffffff16565b94505b505b6138c7868686613a56565b5050505b505050565b600083831115829061397d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613942578082015181840152602081019050613927565b50505050905090810190601f16801561396f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b60008083118290613a3c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613a015780820151818401526020810190506139e6565b50505050905090810190601f168015613a2e5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581613a4857fe5b049050809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613adc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806143c26025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613b62576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806142a56023913960400191505060405180910390fd5b613b6d838383613f1f565b613bd881604051806060016040528060268152602001614310602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138d09092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c6b816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bd690919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b6000600d5490506000613d5a6002613d4c85613d3e600a5487612b0690919063ffffffff16565b612b8c90919063ffffffff16565b612b8c90919063ffffffff16565b90506000613d8382613d758486613ed590919063ffffffff16565b613ed590919063ffffffff16565b90506000613d9a8385613ed590919063ffffffff16565b9050613da581613f24565b60004790506000613dd183613dc38685612b0690919063ffffffff16565b612b8c90919063ffffffff16565b90506000613de88284613ed590919063ffffffff16565b9050613e12613e01600288612b0690919063ffffffff16565b600a54613ed590919063ffffffff16565b600a81905550613e52613e41613e32600289612b0690919063ffffffff16565b89613ed590919063ffffffff16565b600b54613ed590919063ffffffff16565b600b81905550601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015613ec0573d6000803e3d6000fd5b50613ecb868261418f565b5050505050505050565b6000613f1783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506138d0565b905092915050565b505050565b6060600267ffffffffffffffff81118015613f3e57600080fd5b50604051908082528060200260200182016040528015613f6d5781602001602082028036833780820191505090505b5090503081600081518110613f7e57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561401257600080fd5b505afa158015614026573d6000803e3d6000fd5b505050506040513d602081101561403c57600080fd5b81019080805190602001909291905050508160018151811061405a57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b8381101561414a57808201518184015260208101905061412f565b505050509050019650505050505050600060405180830381600087803b15801561417357600080fd5b505af1158015614187573d6000803e3d6000fd5b505050505050565b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200196505050505050506060604051808303818588803b15801561424d57600080fd5b505af1158015614261573d6000803e3d6000fd5b50505050506040513d606081101561427857600080fd5b81019080805190602001909291908051906020019092919080519060200190929190505050505050505056fe45524332303a207472616e7366657220746f20746865207a65726f20616464726573734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636554784c696d69743a20416c72656164792073657420746f20746869732076616c7565536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e736665722077696c6c206578636565642077616c6c6574206c696d697445524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737357616c6c65744c696d69743a20416c72656164792073657420746f20746869732076616c756545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122057066adec8910b7f25d503c095dda78d1a503c25630ae04018d586585fb5f71864736f6c634300060c0033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000510a5103e295a04ac129aA5255b611687caB1526

-----Decoded View---------------
Arg [0] : _dev (address): 0x510a5103e295a04ac129aA5255b611687caB1526

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000510a5103e295a04ac129aA5255b611687caB1526


Deployed Bytecode Sourcemap

29201:8792:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33261:180;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;20598:100;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22764:169;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;29340:115;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;21717:108;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29616:33;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23415:355;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;31483:230;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30099:22;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;21560:92;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;24179:218;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;32646:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30000:28;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;32530:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;32897:99;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29279:54;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;30156:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;29903:59;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32366:156;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29656:27;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21888:127;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5349:148;;;;;;;;;;;;;:::i;:::-;;32765:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29832:55;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29762:56;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;4707:79;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;29581:28;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29975:18;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;20817:104;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24900:269;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;22228:175;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;29692:38;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;30361:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;30260:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;31257:218;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33449:179;;;;;;;;;;;;;:::i;:::-;;31975:222;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22466:151;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31721:246;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33004:249;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29547:27;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29464:34;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5652:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29505:35;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32205:153;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30483:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;33261:180;4929:12;:10;:12::i;:::-;4919:22;;:6;;;;;;;;;;;:22;;;4911:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33340:13:::1;:22;33354:7;33340:22;;;;;;;;;;;;;;;;;;;;;;;;;33332:61;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;33404:29;33418:7;33427:5;33404:13;:29::i;:::-;33261:180:::0;:::o;20598:100::-;20652:13;20685:5;20678:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20598:100;:::o;22764:169::-;22847:4;22864:39;22873:12;:10;:12::i;:::-;22887:7;22896:6;22864:8;:39::i;:::-;22921:4;22914:11;;22764:169;;;;:::o;29340:115::-;29412:42;29340:115;:::o;21717:108::-;21778:7;21805:12;;21798:19;;21717:108;:::o;29616:33::-;;;;:::o;23415:355::-;23555:4;23572:36;23582:6;23590:9;23601:6;23572:9;:36::i;:::-;23619:121;23628:6;23636:12;:10;:12::i;:::-;23650:89;23688:6;23650:89;;;;;;;;;;;;;;;;;:11;:19;23662:6;23650:19;;;;;;;;;;;;;;;:33;23670:12;:10;:12::i;:::-;23650:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;23619:8;:121::i;:::-;23758:4;23751:11;;23415:355;;;;;:::o;31483:230::-;4929:12;:10;:12::i;:::-;4919:22;;:6;;;;;;;;;;;:22;;;4911:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31612:5:::1;31578:39;;:21;:30;31600:7;31578:30;;;;;;;;;;;;;;;;;;;;;;;;;:39;;;;31570:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31700:5;31667:21;:30;31689:7;31667:30;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;31483:230:::0;;:::o;30099:22::-;;;;;;;;;;;;;:::o;21560:92::-;21618:5;21643:1;21636:8;;21560:92;:::o;24179:218::-;24267:4;24284:83;24293:12;:10;:12::i;:::-;24307:7;24316:50;24355:10;24316:11;:25;24328:12;:10;:12::i;:::-;24316:25;;;;;;;;;;;;;;;:34;24342:7;24316:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;24284:8;:83::i;:::-;24385:4;24378:11;;24179:218;;;;:::o;32646:111::-;4929:12;:10;:12::i;:::-;4919:22;;:6;;;;;;;;;;;:22;;;4911:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32743:5:::1;32731:8;:18;32714:14;:35;;;;32646:111:::0;:::o;30000:28::-;;;;;;;;;;;;;:::o;32530:108::-;4929:12;:10;:12::i;:::-;4919:22;;:6;;;;;;;;;;;:22;;;4911:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32624:5:::1;32612:8;:18;32599:10;:31;;;;32530:108:::0;:::o;32897:99::-;4929:12;:10;:12::i;:::-;4919:22;;:6;;;;;;;;;;;:22;;;4911:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32979:9:::1;32973:3;;:15;;;;;;;;;;;;;;;;;;32897:99:::0;:::o;29279:54::-;29326:6;29279:54;:::o;30156:51::-;;;;;;;;;;;;;;;;;;;;;;:::o;29903:59::-;;;;:::o;32366:156::-;4929:12;:10;:12::i;:::-;4919:22;;:6;;;;;;;;;;;:22;;;4911:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32474:12:::1;32455:16;:31;;;;32509:5;32497:9;:17;;;;32366:156:::0;;:::o;29656:27::-;;;;:::o;21888:127::-;21962:7;21989:9;:18;21999:7;21989:18;;;;;;;;;;;;;;;;21982:25;;21888:127;;;:::o;5349:148::-;4929:12;:10;:12::i;:::-;4919:22;;:6;;;;;;;;;;;:22;;;4911:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5456:1:::1;5419:40;;5440:6;;;;;;;;;;;5419:40;;;;;;;;;;;;5487:1;5470:6;;:19;;;;;;;;;;;;;;;;;;5349:148::o:0;32765:124::-;4929:12;:10;:12::i;:::-;4919:22;;:6;;;;;;;;;;;:22;;;4911:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32875:5:::1;32859:12;:22;32844:12;:37;;;;32765:124:::0;:::o;29832:55::-;;;;:::o;29762:56::-;;;;:::o;4707:79::-;4745:7;4772:6;;;;;;;;;;;4765:13;;4707:79;:::o;29581:28::-;;;;:::o;29975:18::-;;;;;;;;;;;;;:::o;20817:104::-;20873:13;20906:7;20899:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20817:104;:::o;24900:269::-;24993:4;25010:129;25019:12;:10;:12::i;:::-;25033:7;25042:96;25081:15;25042:96;;;;;;;;;;;;;;;;;:11;:25;25054:12;:10;:12::i;:::-;25042:25;;;;;;;;;;;;;;;:34;25068:7;25042:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;25010:8;:129::i;:::-;25157:4;25150:11;;24900:269;;;;:::o;22228:175::-;22314:4;22331:42;22341:12;:10;:12::i;:::-;22355:9;22366:6;22331:9;:42::i;:::-;22391:4;22384:11;;22228:175;;;;:::o;29692:38::-;;;;:::o;30361:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;30260:54::-;;;;;;;;;;;;;;;;;;;;;;:::o;31257:218::-;4929:12;:10;:12::i;:::-;4919:22;;:6;;;;;;;;;;;:22;;;4911:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31380:5:::1;31349:36;;:18;:27;31368:7;31349:27;;;;;;;;;;;;;;;;;;;;;;;;;:36;;;;31341:80;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;31462:5;31432:18;:27;31451:7;31432:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;31257:218:::0;;:::o;33449:179::-;4929:12;:10;:12::i;:::-;4919:22;;:6;;;;;;;;;;;:22;;;4911:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33512:10:::1;;;;;;;;;;;33511:11;33503:52;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;33579:4;33566:10;;:17;;;;;;;;;;;;;;;;;;33608:12;33594:11;:26;;;;33449:179::o:0;31975:222::-;4929:12;:10;:12::i;:::-;4919:22;;:6;;;;;;;;;;;:22;;;4911:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32064:31:::1;32080:7;32089:5;32064:15;:31::i;:::-;32106:34;32125:7;32134:5;32106:18;:34::i;:::-;32151:38;32174:7;32183:5;32151:22;:38::i;:::-;31975:222:::0;;:::o;22466:151::-;22555:7;22582:11;:18;22594:5;22582:18;;;;;;;;;;;;;;;:27;22601:7;22582:27;;;;;;;;;;;;;;;;22575:34;;22466:151;;;;:::o;31721:246::-;4929:12;:10;:12::i;:::-;4919:22;;:6;;;;;;;;;;;:22;;;4911:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31858:5:::1;31820:43;;:25;:34;31846:7;31820:34;;;;;;;;;;;;;;;;;;;;;;;;;:43;;;;31812:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31954:5;31917:25;:34;31943:7;31917:34;;;;;;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;31721:246:::0;;:::o;33004:249::-;4929:12;:10;:12::i;:::-;4919:22;;:6;;;;;;;;;;;:22;;;4911:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33080:13:::1;:22;33094:7;33080:22;;;;;;;;;;;;;;;;;;;;;;;;;33079:23;33071:66;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;33167:13;;;;;;;;;;;33156:24;;:7;:24;;;;33148:58;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;33217:28;33231:7;33240:4;33217:13;:28::i;:::-;33004:249:::0;:::o;29547:27::-;;;;:::o;29464:34::-;;;;:::o;5652:244::-;4929:12;:10;:12::i;:::-;4919:22;;:6;;;;;;;;;;;:22;;;4911:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5761:1:::1;5741:22;;:8;:22;;;;5733:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5851:8;5822:38;;5843:6;;;;;;;;;;;5822:38;;;;;;;;;;;;5880:8;5871:6;;:17;;;;;;;;;;;;;;;;;;5652:244:::0;:::o;29505:35::-;;;;:::o;32205:153::-;4929:12;:10;:12::i;:::-;4919:22;;:6;;;;;;;;;;;:22;;;4911:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32311:12:::1;32293:15;:30;;;;32345:5;32334:8;:16;;;;32205:153:::0;;:::o;30483:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;7520:471::-;7578:7;7828:1;7823;:6;7819:47;;;7853:1;7846:8;;;;7819:47;7878:9;7894:1;7890;:5;7878:17;;7923:1;7918;7914;:5;;;;;;:10;7906:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7982:1;7975:8;;;7520:471;;;;;:::o;8467:132::-;8525:7;8552:39;8556:1;8559;8552:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;8545:46;;8467:132;;;;:::o;6166:181::-;6224:7;6244:9;6260:1;6256;:5;6244:17;;6285:1;6280;:6;;6272:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6338:1;6331:8;;;6166:181;;;;:::o;3860:98::-;3913:7;3940:10;3933:17;;3860:98;:::o;37843:110::-;37940:5;37915:13;:22;37929:7;37915:22;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;37843:110;;:::o;28086:380::-;28239:1;28222:19;;:5;:19;;;;28214:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28320:1;28301:21;;:7;:21;;;;28293:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28404:6;28374:11;:18;28386:5;28374:18;;;;;;;;;;;;;;;:27;28393:7;28374:27;;;;;;;;;;;;;;;:36;;;;28442:7;28426:32;;28435:5;28426:32;;;28451:6;28426:32;;;;;;;;;;;;;;;;;;28086:380;;;:::o;33636:2565::-;33750:1;33734:18;;:4;:18;;;;33726:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33820:1;33806:16;;:2;:16;;;;33798:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33884:10;;33874:6;:20;;:51;;;;33898:21;:27;33920:4;33898:27;;;;;;;;;;;;;;;;;;;;;;;;;33874:51;:80;;;;33929:21;:25;33951:2;33929:25;;;;;;;;;;;;;;;;;;;;;;;;;33874:80;33866:112;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34026:14;;33997:25;34015:6;33997:13;34007:2;33997:9;:13::i;:::-;:17;;:25;;;;:::i;:::-;:43;;:76;;;;34044:25;:29;34070:2;34044:29;;;;;;;;;;;;;;;;;;;;;;;;;33997:76;33989:122;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34130:10;;;;;;;;;;;:38;;;;34144:18;:24;34163:4;34144:24;;;;;;;;;;;;;;;;;;;;;;;;;34130:38;:64;;;;34172:18;:22;34191:2;34172:22;;;;;;;;;;;;;;;;;;;;;;;;;34130:64;34122:95;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34237:13;:19;34251:4;34237:19;;;;;;;;;;;;;;;;;;;;;;;;;34236:20;34228:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34308:1;34298:6;:11;34295:92;;;34326:28;34342:4;34348:2;34352:1;34326:15;:28::i;:::-;34369:7;;34295:92;34399:25;34448:12;;34427:18;;:33;34399:61;;34471:12;34507;;34486:17;:33;;34471:48;;34557:13;;;;;;;;;;;34549:21;;:4;:21;;;;:45;;;;;34587:7;34549:45;:71;;;;;34612:8;;;;;;;;;;;34611:9;34549:71;34532:444;;;34658:4;34647:8;;:15;;;;;;;;;;;;;;;;;;34677:27;34686:17;34677:8;:27::i;:::-;34730:5;34719:8;;:16;;;;;;;;;;;;;;;;;;34532:444;;;34778:13;;;;;;;;;;;34770:21;;:4;:21;;;:57;;;;;34814:13;;;;;;;;;;;34808:19;;:2;:19;;;;34770:57;:104;;;;;34873:1;34859:11;;:15;34844:12;:30;34770:104;:144;;;;;34892:18;:22;34911:2;34892:22;;;;;;;;;;;;;;;;;;;;;;;;;34891:23;34770:144;34753:223;;;34941:23;34955:2;34959:4;34941:13;:23::i;:::-;34753:223;34532:444;34988:12;35004:8;;;;;;;;;;;35003:9;34988:24;;35028:18;:24;35047:4;35028:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;35056:18;:22;35075:2;35056:22;;;;;;;;;;;;;;;;;;;;;;;;;35028:50;35025:97;;;35105:5;35095:15;;35025:97;35137:7;35134:1014;;;35161:12;35222:13;;;;;;;;;;;35216:19;;:2;:19;;;35212:776;;;35256:21;35280:31;35301:9;;35280:16;;:20;;:31;;;;:::i;:::-;35256:55;;35337:34;35367:3;35337:25;35348:13;35337:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;35330:41;;35411:69;35434:45;35465:13;35434:26;35443:16;;35434:4;:8;;:26;;;;:::i;:::-;:30;;:45;;;;:::i;:::-;35411:18;;:22;;:69;;;;:::i;:::-;35390:18;:90;;;;35514:56;35531:38;35555:13;35531:19;35540:9;;35531:4;:8;;:19;;;;:::i;:::-;:23;;:38;;;;:::i;:::-;35514:12;;:16;;:56;;;;:::i;:::-;35499:12;:71;;;;35212:776;;;;35666:20;35689:29;35709:8;;35689:15;;:19;;:29;;;;:::i;:::-;35666:52;;35744:33;35773:3;35744:24;35755:12;35744:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;35737:40;;35817:67;35840:43;35870:12;35840:25;35849:15;;35840:4;:8;;:25;;;;:::i;:::-;:29;;:43;;;;:::i;:::-;35817:18;;:22;;:67;;;;:::i;:::-;35796:18;:88;;;;35918:54;35935:36;35958:12;35935:18;35944:8;;35935:4;:8;;:18;;;;:::i;:::-;:22;;:36;;;;:::i;:::-;35918:12;;:16;;:54;;;;:::i;:::-;35903:12;:69;;;;35212:776;;36014:1;36007:4;:8;36004:133;;;36035:42;36051:4;36065;36072;36035:15;:42::i;:::-;36105:16;36116:4;36105:6;:10;;:16;;;;:::i;:::-;36096:25;;36004:133;35134:1014;;36160:33;36176:4;36182:2;36186:6;36160:15;:33::i;:::-;33636:2565;;;;;;;:::o;7069:192::-;7155:7;7188:1;7183;:6;;7191:12;7175:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7215:9;7231:1;7227;:5;7215:17;;7252:1;7245:8;;;7069:192;;;;;:::o;9095:278::-;9181:7;9213:1;9209;:5;9216:12;9201:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9240:9;9256:1;9252;:5;;;;;;9240:17;;9364:1;9357:8;;;9095:278;;;;;:::o;25659:573::-;25817:1;25799:20;;:6;:20;;;;25791:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25901:1;25880:23;;:9;:23;;;;25872:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25956:47;25977:6;25985:9;25996:6;25956:20;:47::i;:::-;26036:71;26058:6;26036:71;;;;;;;;;;;;;;;;;:9;:17;26046:6;26036:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;26016:9;:17;26026:6;26016:17;;;;;;;;;;;;;;;:91;;;;26141:32;26166:6;26141:9;:20;26151:9;26141:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;26118:9;:20;26128:9;26118:20;;;;;;;;;;;;;;;:55;;;;26206:9;26189:35;;26198:6;26189:35;;;26217:6;26189:35;;;;;;;;;;;;;;;;;;25659:573;;;:::o;36209:912::-;36273:14;36290:12;;36273:29;;36364:23;36390:60;36448:1;36390:53;36425:17;36390:30;36401:18;;36390:6;:10;;:30;;;;:::i;:::-;:34;;:53;;;;:::i;:::-;:57;;:60;;;;:::i;:::-;36364:86;;36461:17;36481:48;36513:15;36481:27;36492:15;36481:6;:10;;:27;;;;:::i;:::-;:31;;:48;;;;:::i;:::-;36461:68;;36540:26;36569:27;36580:15;36569:6;:10;;:27;;;;:::i;:::-;36540:56;;36609:37;36627:18;36609:17;:37::i;:::-;36659:18;36680:21;36659:42;;36712:17;36732:49;36762:18;36732:25;36747:9;36732:10;:14;;:25;;;;:::i;:::-;:29;;:49;;;;:::i;:::-;36712:69;;36792:23;36818:25;36833:9;36818:10;:14;;:25;;;;:::i;:::-;36792:51;;36877:46;36900:22;36920:1;36900:15;:19;;:22;;;;:::i;:::-;36877:18;;:22;;:46;;;;:::i;:::-;36856:18;:67;;;;36949:52;36966:34;36977:22;36997:1;36977:15;:19;;:22;;;;:::i;:::-;36966:6;:10;;:34;;;;:::i;:::-;36949:12;;:16;;:52;;;;:::i;:::-;36934:12;:67;;;;37030:3;;;;;;;;;;;37014:30;;:41;37045:9;37014:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37066:47;37080:15;37097;37066:13;:47::i;:::-;36209:912;;;;;;;;:::o;6630:136::-;6688:7;6715:43;6719:1;6722;6715:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;6708:50;;6630:136;;;;:::o;29069:125::-;;;;:::o;37432:403::-;37501:21;37539:1;37525:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37501:40;;37570:4;37552;37557:1;37552:7;;;;;;;;;;;;;:23;;;;;;;;;;;29412:42;37596:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37586:4;37591:1;37586:7;;;;;;;;;;;;;:32;;;;;;;;;;;29412:42;37631:66;;;37712:11;37738:1;37754:4;37781;37801:15;37631:196;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37432:403;;:::o;37129:295::-;29412:42;37213:31;;;37252:9;37285:4;37305:11;37331:1;37347;29326:6;37390:15;37213:203;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37129:295;;:::o

Swarm Source

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