ETH Price: $2,639.02 (+1.03%)

Token

Hansama Inu (HANSAMA)
 

Overview

Max Total Supply

1,000,000,000,000 HANSAMA

Holders

122

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
431,339.339520951636828713 HANSAMA

Value
$0.00
0x2ecbf1019ccf1222d2079c50e3ad710b9885848c
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:
HansamaInu

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-12-29
*/

/*
                                                          
    //    / / // | |     /|    / / //   ) )  // | |     /|    //| |     // | | 
   //___ / / //__| |    //|   / / ((        //__| |    //|   // | |    //__| | 
  / ___   / / ___  |   // |  / /    \\     / ___  |   // |  //  | |   / ___  | 
 //    / / //    | |  //  | / /       ) ) //    | |  //  | //   | |  //    | | 
//    / / //     | | //   |/ / ((___ / / //     | | //   |//    | | //     | | 
https://t.me/hansamainu

*/

// SPDX-License-Identifier: Unlicensed                                                                         
 
pragma solidity 0.8.9;
 
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
 
    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}
 
interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);
 
    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);
 
    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);
 
    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);
 
    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
 
    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);
 
    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);
 
    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;
 
    function initialize(address, address) external;
}
 
interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);
 
    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);
 
    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);
 
    function createPair(address tokenA, address tokenB) external returns (address pair);
 
    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}
 
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);
 
    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);
 
    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);
 
    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);
 
    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);
 
    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);
 
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);
 
    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}
 
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);
 
    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);
 
    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}
 
 
contract ERC20 is Context, IERC20, IERC20Metadata {
    using SafeMath for uint256;
 
    mapping(address => uint256) private _balances;
 
    mapping(address => mapping(address => uint256)) private _allowances;
 
    uint256 private _totalSupply;
 
    string private _name;
    string private _symbol;
 
    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }
 
    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }
 
    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }
 
    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5,05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }
 
    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }
 
    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }
 
    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }
 
    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }
 
    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }
 
    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }
 
    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }
 
    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }
 
    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
 
        _beforeTokenTransfer(sender, recipient, amount);
 
        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }
 
    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");
 
        _beforeTokenTransfer(address(0), account, amount);
 
        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }
 
    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");
 
        _beforeTokenTransfer(account, address(0), amount);
 
        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }
 
    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");
 
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
 
    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be to transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}
 
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
 
        return c;
    }
 
    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }
 
    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;
 
        return c;
    }
 
    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }
 
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
 
        return c;
    }
 
    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }
 
    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold
 
        return c;
    }
 
    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }
 
    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}
 
contract Ownable is Context {
    address private _owner;
 
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
 
    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }
 
    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }
 
    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
 
    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }
 
    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}
 
 
 
library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);
 
    /**
     * @dev Multiplies two int256 variables and fails on overflow.
     */
    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;
 
        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }
 
    /**
     * @dev Division of two int256 variables and fails on overflow.
     */
    function div(int256 a, int256 b) internal pure returns (int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);
 
        // Solidity already throws when dividing by 0.
        return a / b;
    }
 
    /**
     * @dev Subtracts two int256 variables and fails on overflow.
     */
    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }
 
    /**
     * @dev Adds two int256 variables and fails on overflow.
     */
    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }
 
    /**
     * @dev Converts to absolute value, and fails on overflow.
     */
    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }
 
 
    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}
 
library SafeMathUint {
  function toInt256Safe(uint256 a) internal pure returns (int256) {
    int256 b = int256(a);
    require(b >= 0);
    return b;
  }
}
 
 
interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
 
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
 
    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}
 
interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);
 
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}
 
contract HansamaInu is ERC20, Ownable {
    using SafeMath for uint256;
 
    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant deadAddress = address(0xA57E79BBc5Ce48Ce73e546D9AD85e5249827aF1D); 
 
    bool private swapping;
 
    address public marketingWallet;
    address public devWallet;
 
    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;
 
    uint256 public percentForLPBurn = 25; // 25 = .25%
    bool public lpBurnEnabled = true;
    uint256 public lpBurnFrequency = 3600 seconds;
    uint256 public lastLpBurnTime;
 
    uint256 public manualBurnFrequency = 30 minutes;
    uint256 public lastManualLpBurnTime;
 
    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;
    bool public enableEarlySellTax = true;
 
     // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
 
    // Seller Map
    mapping (address => uint256) private _holderFirstBuyTimestamp;
 
    // Blacklist Map
    mapping (address => bool) private _blacklist;
    bool public transferDelayEnabled = true;
 
    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;
 
    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;
 
    uint256 public earlySellLiquidityFee;
    uint256 public earlySellMarketingFee;
 
    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;
 
    // block number of opened trading
    uint256 launchedAt;
 
    /******************/
 
    // exclude from fees and max transaction amount
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public _isExcludedMaxTransactionAmount;
 
    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping (address => bool) public automatedMarketMakerPairs;
 
    event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);
 
    event ExcludeFromFees(address indexed account, bool isExcluded);
 
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
 
    event marketingWalletUpdated(address indexed newWallet, address indexed oldWallet);
 
    event devWalletUpdated(address indexed newWallet, address indexed oldWallet);
 
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );
 
    event AutoNukeLP();
 
    event ManualNukeLP();
 
    constructor() ERC20("Hansama Inu", "HANSAMA") {
 
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
 
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;
 
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
 
        uint256 _buyMarketingFee = 5;
        uint256 _buyLiquidityFee = 5;
        uint256 _buyDevFee = 2;
 
        uint256 _sellMarketingFee = 5;
        uint256 _sellLiquidityFee = 5;
        uint256 _sellDevFee = 2;
 
        uint256 _earlySellLiquidityFee = 14;
        uint256 _earlySellMarketingFee = 14;
 
        uint256 totalSupply = 1 * 1e12 * 1e18;
 
        maxTransactionAmount = totalSupply * 1 / 1000; // 0.1% maxTransactionAmountTxn
        maxWallet = totalSupply * 5 / 1000; // .5% maxWallet
        swapTokensAtAmount = totalSupply * 5 / 10000; // 0.05% swap wallet
 
        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
 
        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
 
        earlySellLiquidityFee = _earlySellLiquidityFee;
        earlySellMarketingFee = _earlySellMarketingFee;
 
        marketingWallet = address(owner()); // set as marketing wallet
        devWallet = address(owner()); // set as dev wallet
 
        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
 
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
 
        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }
 
    receive() external payable {
 
  	}
 
    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
        lastLpBurnTime = block.timestamp;
        launchedAt = block.number;
    }
 
    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool){
        limitsInEffect = false;
        return true;
    }
 
    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner returns (bool){
        transferDelayEnabled = false;
        return true;
    }
 
    function setEarlySellTax(bool onoff) external onlyOwner  {
        enableEarlySellTax = onoff;
    }
 
     // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){
  	    require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
  	    require(newAmount <= totalSupply() * 5 / 1000, "Swap amount cannot be higher than 0.5% total supply.");
  	    swapTokensAtAmount = newAmount;
  	    return true;
  	}
 
    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000)/1e18, "Cannot set maxTransactionAmount lower than 0.1%");
        maxTransactionAmount = newNum * (10**18);
    }
 
    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 5 / 1000)/1e18, "Cannot set maxWallet lower than 0.5%");
        maxWallet = newNum * (10**18);
    }
 
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }
 
    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner(){
        swapEnabled = enabled;
    }
 
    function updateBuyFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _devFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
        require(buyTotalFees <= 20, "Must keep fees at 20% or less");
    }
 
    function updateSellFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee, uint256 _earlySellLiquidityFee, uint256 _earlySellMarketingFee) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        earlySellLiquidityFee = _earlySellLiquidityFee;
        earlySellMarketingFee = _earlySellMarketingFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
        require(sellTotalFees <= 25, "Must keep fees at 25% or less");
    }
 
    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }
 
    function blacklistAccount (address[] calldata accounts, bool[] calldata isBlacklisted) public onlyOwner {
        for (uint256 i = 0; i < accounts.length; i++){
            address account = accounts[i];
            _blacklist[account] = isBlacklisted[i];
        }
    }
 
    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs");
 
        _setAutomatedMarketMakerPair(pair, value);
    }
 
    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;
 
        emit SetAutomatedMarketMakerPair(pair, value);
    }
 
    function updateMarketingWallet(address newMarketingWallet) external onlyOwner {
        emit marketingWalletUpdated(newMarketingWallet, marketingWallet);
        marketingWallet = newMarketingWallet;
    }
 
    function updateDevWallet(address newWallet) external onlyOwner {
        emit devWalletUpdated(newWallet, devWallet);
        devWallet = newWallet;
    }
 
 
    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }
 
    event BoughtEarly(address indexed sniper);
 
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(!_blacklist[to] && !_blacklist[from], "You have been blacklisted from transfering tokens");
         if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
 
        if(limitsInEffect){
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ){
                if(!tradingActive){
                    require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
                }
 
                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.  
                if (transferDelayEnabled){
                    if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)){
                        require(_holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed.");
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }
 
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                        require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
                        require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
 
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                        require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
                }
                else if(!_isExcludedMaxTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
            }
        }
 
        // anti bot logic
        if (block.number <= (launchedAt + 1) && 
                to != uniswapV2Pair && 
                to != address(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D)
            ) { 
            _blacklist[to] = true;
        }
 
        // early sell logic
        bool isBuy = from == uniswapV2Pair;
        if (!isBuy && enableEarlySellTax) {
            if (_holderFirstBuyTimestamp[from] != 0 &&
                (_holderFirstBuyTimestamp[from] + (24 hours) >= block.timestamp))  {
                sellLiquidityFee = earlySellLiquidityFee;
                sellMarketingFee = earlySellMarketingFee;
                sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
            } else {
                sellLiquidityFee = 5;
                sellMarketingFee = 5;
                sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
            }
        } else {
            if (_holderFirstBuyTimestamp[to] == 0) {
                _holderFirstBuyTimestamp[to] = block.timestamp;
            }
 
            if (!enableEarlySellTax) {
                sellLiquidityFee = 5;
                sellMarketingFee = 5;
                sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
            }
        }
 
		uint256 contractTokenBalance = balanceOf(address(this));
 
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;
 
        if( 
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;
 
            swapBack();
 
            swapping = false;
        }
 
        if(!swapping && automatedMarketMakerPairs[to] && lpBurnEnabled && block.timestamp >= lastLpBurnTime + lpBurnFrequency && !_isExcludedFromFees[from]){
            autoBurnLiquidityPairTokens();
        }
 
        bool takeFee = !swapping;
 
        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
 
        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee){
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForDev += fees * sellDevFee / sellTotalFees;
                tokensForMarketing += fees * sellMarketingFee / sellTotalFees;
            }
            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
        	    fees = amount.mul(buyTotalFees).div(100);
        	    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForDev += fees * buyDevFee / buyTotalFees;
                tokensForMarketing += fees * buyMarketingFee / buyTotalFees;
            }
 
            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
 
        	amount -= fees;
        }
 
        super._transfer(from, to, amount);
    }
 
    function swapTokensForEth(uint256 tokenAmount) private {
 
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
 
        _approve(address(this), address(uniswapV2Router), tokenAmount);
 
        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
 
    }
 
 
 
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);
 
        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            deadAddress,
            block.timestamp
        );
    }
 
    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing + tokensForDev;
        bool success;
 
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}
 
        if(contractBalance > swapTokensAtAmount * 20){
          contractBalance = swapTokensAtAmount * 20;
        }
 
        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);
 
        uint256 initialETHBalance = address(this).balance;
 
        swapTokensForEth(amountToSwapForETH); 
 
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
 
        uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(totalTokensToSwap);
        uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);
 
 
        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev;
 
 
        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;
 
        (success,) = address(devWallet).call{value: ethForDev}("");
 
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }
 
 
        (success,) = address(marketingWallet).call{value: address(this).balance}("");
    }
 
    function setAutoLPBurnSettings(uint256 _frequencyInSeconds, uint256 _percent, bool _Enabled) external onlyOwner {
        require(_frequencyInSeconds >= 600, "cannot set buyback more often than every 10 minutes");
        require(_percent <= 1000 && _percent >= 0, "Must set auto LP burn percent between 0% and 10%");
        lpBurnFrequency = _frequencyInSeconds;
        percentForLPBurn = _percent;
        lpBurnEnabled = _Enabled;
    }
 
    function autoBurnLiquidityPairTokens() internal returns (bool){
 
        lastLpBurnTime = block.timestamp;
 
        // get balance of liquidity pair
        uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair);
 
        // calculate amount to burn
        uint256 amountToBurn = liquidityPairBalance.mul(percentForLPBurn).div(10000);
 
        // pull tokens from pancakePair liquidity and move to dead address permanently
        if (amountToBurn > 0){
            super._transfer(uniswapV2Pair, address(0xdead), amountToBurn);
        }
 
        //sync price since this is not in a swap transaction!
        IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair);
        pair.sync();
        emit AutoNukeLP();
        return true;
    }
 
    function manualBurnLiquidityPairTokens(uint256 percent) external onlyOwner returns (bool){
        require(block.timestamp > lastManualLpBurnTime + manualBurnFrequency , "Must wait for cooldown to finish");
        require(percent <= 1000, "May not nuke more than 10% of tokens in LP");
        lastManualLpBurnTime = block.timestamp;
 
        // get balance of liquidity pair
        uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair);
 
        // calculate amount to burn
        uint256 amountToBurn = liquidityPairBalance.mul(percent).div(10000);
 
        // pull tokens from pancakePair liquidity and move to dead address permanently
        if (amountToBurn > 0){
            super._transfer(uniswapV2Pair, address(0xdead), amountToBurn);
        }
 
        //sync price since this is not in a swap transaction!
        IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair);
        pair.sync();
        emit ManualNukeLP();
        return true;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[],"name":"ManualNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool[]","name":"isBlacklisted","type":"bool[]"}],"name":"blacklistAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyDevFee","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":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlySellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"earlySellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableEarlySellTax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastManualLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"manualBurnLiquidityPairTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"percentForLPBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_frequencyInSeconds","type":"uint256"},{"internalType":"uint256","name":"_percent","type":"uint256"},{"internalType":"bool","name":"_Enabled","type":"bool"}],"name":"setAutoLPBurnSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"setEarlySellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_earlySellLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"_earlySellMarketingFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526019600b55600c8054600160ff199182168117909255610e10600d55610708600f556011805463ffffffff191663010000011790556015805490911690911790553480156200005257600080fd5b50604080518082018252600b81526a48616e73616d6120496e7560a81b60208083019182528351808501909452600784526648414e53414d4160c81b908401528151919291620000a5916003916200075b565b508051620000bb9060049060208401906200075b565b5050506000620000d06200047960201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350737a250d5630b4cf539739df2c5dacb4c659f2488d620001408160016200047d565b6001600160a01b03811660808190526040805163c45a015560e01b8152905163c45a015591600480820192602092909190829003018186803b1580156200018657600080fd5b505afa1580156200019b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c1919062000801565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200020a57600080fd5b505afa1580156200021f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000245919062000801565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200028e57600080fd5b505af1158015620002a3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002c9919062000801565b6001600160a01b031660a0819052620002e49060016200047d565b60a051620002f4906001620004f7565b6005806002818082600e806c0c9f2c9cd04674edea400000006103e86200031d82600162000842565b62000329919062000864565b6008556103e86200033c82600562000842565b62000348919062000864565b600a556127106200035b82600562000842565b62000367919062000864565b6009556017899055601888905560198790558662000386898b62000887565b62000392919062000887565b601655601b869055601c859055601d84905583620003b1868862000887565b620003bd919062000887565b601a55601e839055601f829055600554600680546001600160a01b03199081166001600160a01b039093169283179091556007805490911682179055620004069060016200054b565b620004133060016200054b565b6200042261dead60016200054b565b62000441620004396005546001600160a01b031690565b60016200047d565b6200044e3060016200047d565b6200045d61dead60016200047d565b620004693382620005f5565b50505050505050505050620008df565b3390565b6005546001600160a01b03163314620004cc5760405162461bcd60e51b815260206004820181905260248201526000805160206200422483398151915260448201526064015b60405180910390fd5b6001600160a01b03919091166000908152602560205260409020805460ff1916911515919091179055565b6001600160a01b038216600081815260266020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6005546001600160a01b03163314620005965760405162461bcd60e51b81526020600482018190526024820152600080516020620042248339815191526044820152606401620004c3565b6001600160a01b038216600081815260246020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b0382166200064d5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620004c3565b6200066981600254620006f160201b62001c151790919060201c565b6002556001600160a01b038216600090815260208181526040909120546200069c91839062001c15620006f1821b17901c565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b60008062000700838562000887565b905083811015620007545760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401620004c3565b9392505050565b8280546200076990620008a2565b90600052602060002090601f0160209004810192826200078d5760008555620007d8565b82601f10620007a857805160ff1916838001178555620007d8565b82800160010185558215620007d8579182015b82811115620007d8578251825591602001919060010190620007bb565b50620007e6929150620007ea565b5090565b5b80821115620007e65760008155600101620007eb565b6000602082840312156200081457600080fd5b81516001600160a01b03811681146200075457600080fd5b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156200085f576200085f6200082c565b500290565b6000826200088257634e487b7160e01b600052601260045260246000fd5b500490565b600082198211156200089d576200089d6200082c565b500190565b600181811c90821680620008b757607f821691505b60208210811415620008d957634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a0516138af62000975600039600081816106600152818161125e015281816119ea01528181611a9401528181611ac0015281816120190152818161237c0152818161240501528181612dc701528181612e780152612ea401526000818161049101528181611fdb01528181613012015281816130da015281816131160152818161319001526131ff01526138af6000f3fe6080604052600436106103e85760003560e01c80638da5cb5b11610208578063bbc0c74211610118578063dd62ed3e116100ab578063f2fde38b1161007a578063f2fde38b14610b80578063f637434214610ba0578063f8b45b0514610bb6578063fe72b27a14610bcc578063ff935af614610bec57600080fd5b8063dd62ed3e14610af9578063e2f4560514610b3f578063e884f26014610b55578063f11a24d314610b6a57600080fd5b8063c876d0b9116100e7578063c876d0b914610a93578063c8c8ebe414610aad578063d257b34f14610ac3578063d85ba06314610ae357600080fd5b8063bbc0c74214610a14578063c024666814610a33578063c18bc19514610a53578063c24f3e0e14610a7357600080fd5b80639fccce321161019b578063a4c82a001161016a578063a4c82a001461096d578063a4d15b6414610983578063a9059cbb146109a4578063aacebbe3146109c4578063b62496f5146109e457600080fd5b80639fccce3214610901578063a0d82dc514610917578063a26577781461092d578063a457c2d71461094d57600080fd5b806395d89b41116101d757806395d89b41146108a05780639a7a23d6146108b55780639c3b4fdc146108d55780639ec22c0e146108eb57600080fd5b80638da5cb5b1461082c5780638ea5220f1461084a578063921369131461086a578063924de9b71461088057600080fd5b8063313ce5671161030357806370a08231116102965780637571336a116102655780637571336a146107a157806375f0a874146107c15780637bce5a04146107e15780638095d564146107f75780638a8c523c1461081757600080fd5b806370a0823114610721578063715018a614610757578063730c18881461076c578063751039fc1461078c57600080fd5b80634fbee193116102d25780634fbee1931461069c578063541a43cf146106d55780636a486a8e146106eb5780636ddd17131461070157600080fd5b8063313ce56714610612578063395093511461062e57806349bd5a5e1461064e5780634a62bb651461068257600080fd5b80631a8145bb1161037b57806327c8f8351161034a57806327c8f835146105a45780632bf3d42d146105cc5780632c3e486c146105e25780632e82f1a0146105f857600080fd5b80631a8145bb146105385780631f3fed8f1461054e578063203e727e1461056457806323b872dd1461058457600080fd5b806318160ddd116103b757806318160ddd146104cb5780631816467f146104ea578063184c16c51461050c578063199ffc721461052257600080fd5b806306fdde03146103f4578063095ea7b31461041f57806310d5de531461044f5780631694505e1461047f57600080fd5b366103ef57005b600080fd5b34801561040057600080fd5b50610409610c0c565b6040516104169190613285565b60405180910390f35b34801561042b57600080fd5b5061043f61043a3660046132f2565b610c9e565b6040519015158152602001610416565b34801561045b57600080fd5b5061043f61046a36600461331e565b60256020526000908152604090205460ff1681565b34801561048b57600080fd5b506104b37f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610416565b3480156104d757600080fd5b506002545b604051908152602001610416565b3480156104f657600080fd5b5061050a61050536600461331e565b610cb5565b005b34801561051857600080fd5b506104dc600f5481565b34801561052e57600080fd5b506104dc600b5481565b34801561054457600080fd5b506104dc60215481565b34801561055a57600080fd5b506104dc60205481565b34801561057057600080fd5b5061050a61057f36600461333b565b610d45565b34801561059057600080fd5b5061043f61059f366004613354565b610e22565b3480156105b057600080fd5b506104b373a57e79bbc5ce48ce73e546d9ad85e5249827af1d81565b3480156105d857600080fd5b506104dc601f5481565b3480156105ee57600080fd5b506104dc600d5481565b34801561060457600080fd5b50600c5461043f9060ff1681565b34801561061e57600080fd5b5060405160128152602001610416565b34801561063a57600080fd5b5061043f6106493660046132f2565b610e8b565b34801561065a57600080fd5b506104b37f000000000000000000000000000000000000000000000000000000000000000081565b34801561068e57600080fd5b5060115461043f9060ff1681565b3480156106a857600080fd5b5061043f6106b736600461331e565b6001600160a01b031660009081526024602052604090205460ff1690565b3480156106e157600080fd5b506104dc601e5481565b3480156106f757600080fd5b506104dc601a5481565b34801561070d57600080fd5b5060115461043f9062010000900460ff1681565b34801561072d57600080fd5b506104dc61073c36600461331e565b6001600160a01b031660009081526020819052604090205490565b34801561076357600080fd5b5061050a610ec1565b34801561077857600080fd5b5061050a6107873660046133a5565b610f35565b34801561079857600080fd5b5061043f61105e565b3480156107ad57600080fd5b5061050a6107bc3660046133da565b61109b565b3480156107cd57600080fd5b506006546104b3906001600160a01b031681565b3480156107ed57600080fd5b506104dc60175481565b34801561080357600080fd5b5061050a61081236600461340f565b6110f0565b34801561082357600080fd5b5061050a611198565b34801561083857600080fd5b506005546001600160a01b03166104b3565b34801561085657600080fd5b506007546104b3906001600160a01b031681565b34801561087657600080fd5b506104dc601b5481565b34801561088c57600080fd5b5061050a61089b36600461343b565b6111dd565b3480156108ac57600080fd5b50610409611223565b3480156108c157600080fd5b5061050a6108d03660046133da565b611232565b3480156108e157600080fd5b506104dc60195481565b3480156108f757600080fd5b506104dc60105481565b34801561090d57600080fd5b506104dc60225481565b34801561092357600080fd5b506104dc601d5481565b34801561093957600080fd5b5061050a61094836600461343b565b611312565b34801561095957600080fd5b5061043f6109683660046132f2565b61135a565b34801561097957600080fd5b506104dc600e5481565b34801561098f57600080fd5b5060115461043f906301000000900460ff1681565b3480156109b057600080fd5b5061043f6109bf3660046132f2565b6113a9565b3480156109d057600080fd5b5061050a6109df36600461331e565b6113b6565b3480156109f057600080fd5b5061043f6109ff36600461331e565b60266020526000908152604090205460ff1681565b348015610a2057600080fd5b5060115461043f90610100900460ff1681565b348015610a3f57600080fd5b5061050a610a4e3660046133da565b61143d565b348015610a5f57600080fd5b5061050a610a6e36600461333b565b6114c6565b348015610a7f57600080fd5b5061050a610a8e3660046134a2565b611597565b348015610a9f57600080fd5b5060155461043f9060ff1681565b348015610ab957600080fd5b506104dc60085481565b348015610acf57600080fd5b5061043f610ade36600461333b565b611660565b348015610aef57600080fd5b506104dc60165481565b348015610b0557600080fd5b506104dc610b1436600461350e565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610b4b57600080fd5b506104dc60095481565b348015610b6157600080fd5b5061043f6117b7565b348015610b7657600080fd5b506104dc60185481565b348015610b8c57600080fd5b5061050a610b9b36600461331e565b6117f4565b348015610bac57600080fd5b506104dc601c5481565b348015610bc257600080fd5b506104dc600a5481565b348015610bd857600080fd5b5061043f610be736600461333b565b6118df565b348015610bf857600080fd5b5061050a610c07366004613547565b611b68565b606060038054610c1b90613582565b80601f0160208091040260200160405190810160405280929190818152602001828054610c4790613582565b8015610c945780601f10610c6957610100808354040283529160200191610c94565b820191906000526020600020905b815481529060010190602001808311610c7757829003601f168201915b5050505050905090565b6000610cab338484611c7b565b5060015b92915050565b6005546001600160a01b03163314610ce85760405162461bcd60e51b8152600401610cdf906135bd565b60405180910390fd5b6007546040516001600160a01b03918216918316907f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74390600090a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610d6f5760405162461bcd60e51b8152600401610cdf906135bd565b670de0b6b3a76400006103e8610d8460025490565b610d8f906001613608565b610d999190613627565b610da39190613627565b811015610e0a5760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e312560881b6064820152608401610cdf565b610e1c81670de0b6b3a7640000613608565b60085550565b6000610e2f848484611da0565b610e818433610e7c8560405180606001604052806028815260200161382d602891396001600160a01b038a166000908152600160209081526040808320338452909152902054919061291a565b611c7b565b5060019392505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610cab918590610e7c9086611c15565b6005546001600160a01b03163314610eeb5760405162461bcd60e51b8152600401610cdf906135bd565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610f5f5760405162461bcd60e51b8152600401610cdf906135bd565b610258831015610fcd5760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e207468604482015272616e206576657279203130206d696e7574657360681b6064820152608401610cdf565b6103e88211158015610fdd575060015b6110425760405162461bcd60e51b815260206004820152603060248201527f4d75737420736574206175746f204c50206275726e2070657263656e7420626560448201526f747765656e20302520616e642031302560801b6064820152608401610cdf565b600d92909255600b55600c805460ff1916911515919091179055565b6005546000906001600160a01b0316331461108b5760405162461bcd60e51b8152600401610cdf906135bd565b506011805460ff19169055600190565b6005546001600160a01b031633146110c55760405162461bcd60e51b8152600401610cdf906135bd565b6001600160a01b03919091166000908152602560205260409020805460ff1916911515919091179055565b6005546001600160a01b0316331461111a5760405162461bcd60e51b8152600401610cdf906135bd565b601783905560188290556019819055806111348385613649565b61113e9190613649565b6016819055601410156111935760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610cdf565b505050565b6005546001600160a01b031633146111c25760405162461bcd60e51b8152600401610cdf906135bd565b6011805462ffff0019166201010017905542600e5543602355565b6005546001600160a01b031633146112075760405162461bcd60e51b8152600401610cdf906135bd565b60118054911515620100000262ff000019909216919091179055565b606060048054610c1b90613582565b6005546001600160a01b0316331461125c5760405162461bcd60e51b8152600401610cdf906135bd565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156113045760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610cdf565b61130e8282612954565b5050565b6005546001600160a01b0316331461133c5760405162461bcd60e51b8152600401610cdf906135bd565b6011805491151563010000000263ff00000019909216919091179055565b6000610cab3384610e7c85604051806060016040528060258152602001613855602591393360009081526001602090815260408083206001600160a01b038d168452909152902054919061291a565b6000610cab338484611da0565b6005546001600160a01b031633146113e05760405162461bcd60e51b8152600401610cdf906135bd565b6006546040516001600160a01b03918216918316907fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567490600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146114675760405162461bcd60e51b8152600401610cdf906135bd565b6001600160a01b038216600081815260246020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146114f05760405162461bcd60e51b8152600401610cdf906135bd565b670de0b6b3a76400006103e861150560025490565b611510906005613608565b61151a9190613627565b6115249190613627565b81101561157f5760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b6064820152608401610cdf565b61159181670de0b6b3a7640000613608565b600a5550565b6005546001600160a01b031633146115c15760405162461bcd60e51b8152600401610cdf906135bd565b60005b838110156116595760008585838181106115e0576115e0613661565b90506020020160208101906115f5919061331e565b905083838381811061160957611609613661565b905060200201602081019061161e919061343b565b6001600160a01b03919091166000908152601460205260409020805460ff19169115159190911790558061165181613677565b9150506115c4565b5050505050565b6005546000906001600160a01b0316331461168d5760405162461bcd60e51b8152600401610cdf906135bd565b620186a061169a60025490565b6116a5906001613608565b6116af9190613627565b82101561171c5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610cdf565b6103e861172860025490565b611733906005613608565b61173d9190613627565b8211156117a95760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610cdf565b50600981905560015b919050565b6005546000906001600160a01b031633146117e45760405162461bcd60e51b8152600401610cdf906135bd565b506015805460ff19169055600190565b6005546001600160a01b0316331461181e5760405162461bcd60e51b8152600401610cdf906135bd565b6001600160a01b0381166118835760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610cdf565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546000906001600160a01b0316331461190c5760405162461bcd60e51b8152600401610cdf906135bd565b600f5460105461191c9190613649565b421161196a5760405162461bcd60e51b815260206004820181905260248201527f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e6973686044820152606401610cdf565b6103e88211156119cf5760405162461bcd60e51b815260206004820152602a60248201527f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60448201526906b656e7320696e204c560b41b6064820152608401610cdf565b426010556040516370a0823160e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016600482015260009030906370a082319060240160206040518083038186803b158015611a3557600080fd5b505afa158015611a49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6d9190613692565b90506000611a87612710611a8184876129a8565b90612a27565b90508015611abc57611abc7f000000000000000000000000000000000000000000000000000000000000000061dead83612a69565b60007f00000000000000000000000000000000000000000000000000000000000000009050806001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611b1c57600080fd5b505af1158015611b30573d6000803e3d6000fd5b50506040517f8462566617872a3fbab94534675218431ff9e204063ee3f4f43d965626a39abb925060009150a1506001949350505050565b6005546001600160a01b03163314611b925760405162461bcd60e51b8152600401610cdf906135bd565b601b859055601c849055601d839055601e829055601f81905582611bb68587613649565b611bc09190613649565b601a819055601910156116595760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323525206f72206c6573730000006044820152606401610cdf565b600080611c228385613649565b905083811015611c745760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610cdf565b9392505050565b6001600160a01b038316611cdd5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610cdf565b6001600160a01b038216611d3e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610cdf565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611dc65760405162461bcd60e51b8152600401610cdf906136ab565b6001600160a01b038216611dec5760405162461bcd60e51b8152600401610cdf906136f0565b6001600160a01b03821660009081526014602052604090205460ff16158015611e2e57506001600160a01b03831660009081526014602052604090205460ff16155b611e945760405162461bcd60e51b815260206004820152603160248201527f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460448201527072616e73666572696e6720746f6b656e7360781b6064820152608401610cdf565b80611ea55761119383836000612a69565b60115460ff1615612362576005546001600160a01b03848116911614801590611edc57506005546001600160a01b03838116911614155b8015611ef057506001600160a01b03821615155b8015611f0757506001600160a01b03821661dead14155b8015611f1d5750600554600160a01b900460ff16155b1561236257601154610100900460ff16611fb5576001600160a01b03831660009081526024602052604090205460ff1680611f7057506001600160a01b03821660009081526024602052604090205460ff165b611fb55760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610cdf565b60155460ff16156120fc576005546001600160a01b0383811691161480159061201057507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b801561204e57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b156120fc573260009081526012602052604090205443116120e95760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610cdf565b3260009081526012602052604090204390555b6001600160a01b03831660009081526026602052604090205460ff16801561213d57506001600160a01b03821660009081526025602052604090205460ff16155b15612221576008548111156121b25760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610cdf565b600a546001600160a01b0383166000908152602081905260409020546121d89083613649565b111561221c5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610cdf565b612362565b6001600160a01b03821660009081526026602052604090205460ff16801561226257506001600160a01b03831660009081526025602052604090205460ff16155b156122d85760085481111561221c5760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610cdf565b6001600160a01b03821660009081526025602052604090205460ff1661236257600a546001600160a01b03831660009081526020819052604090205461231e9083613649565b11156123625760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610cdf565b602354612370906001613649565b43111580156123b157507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b80156123da57506001600160a01b038216737a250d5630b4cf539739df2c5dacb4c659f2488d14155b15612403576001600160a01b0382166000908152601460205260409020805460ff191660011790555b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b039081169084161480158161244957506011546301000000900460ff165b156124e9576001600160a01b0384166000908152601360205260409020541580159061249b57506001600160a01b03841660009081526013602052604090205442906124989062015180613649565b10155b156124cf57601e54601c819055601f54601b819055601d54916124bd91613649565b6124c79190613649565b601a5561255b565b6005601c819055601b819055601d54906124bd9080613649565b6001600160a01b038316600090815260136020526040902054612522576001600160a01b03831660009081526013602052604090204290555b6011546301000000900460ff1661255b576005601c819055601b819055601d549061254d9080613649565b6125579190613649565b601a555b3060009081526020819052604090205460095481108015908190612587575060115462010000900460ff165b801561259d5750600554600160a01b900460ff16155b80156125c257506001600160a01b03861660009081526026602052604090205460ff16155b80156125e757506001600160a01b03861660009081526024602052604090205460ff16155b801561260c57506001600160a01b03851660009081526024602052604090205460ff16155b1561263a576005805460ff60a01b1916600160a01b17905561262c612b72565b6005805460ff60a01b191690555b600554600160a01b900460ff1615801561266c57506001600160a01b03851660009081526026602052604090205460ff165b801561267a5750600c5460ff165b80156126955750600d54600e546126919190613649565b4210155b80156126ba57506001600160a01b03861660009081526024602052604090205460ff16155b156126c9576126c7612dac565b505b6005546001600160a01b03871660009081526024602052604090205460ff600160a01b90920482161591168061271757506001600160a01b03861660009081526024602052604090205460ff165b15612720575060005b60008115612905576001600160a01b03871660009081526026602052604090205460ff16801561275257506000601a54115b1561280a576127716064611a81601a54896129a890919063ffffffff16565b9050601a54601c54826127849190613608565b61278e9190613627565b6021600082825461279f9190613649565b9091555050601a54601d546127b49083613608565b6127be9190613627565b602260008282546127cf9190613649565b9091555050601a54601b546127e49083613608565b6127ee9190613627565b602060008282546127ff9190613649565b909155506128e79050565b6001600160a01b03881660009081526026602052604090205460ff16801561283457506000601654115b156128e7576128536064611a81601654896129a890919063ffffffff16565b9050601654601854826128669190613608565b6128709190613627565b602160008282546128819190613649565b90915550506016546019546128969083613608565b6128a09190613627565b602260008282546128b19190613649565b90915550506016546017546128c69083613608565b6128d09190613627565b602060008282546128e19190613649565b90915550505b80156128f8576128f8883083612a69565b6129028187613733565b95505b612910888888612a69565b5050505050505050565b6000818484111561293e5760405162461bcd60e51b8152600401610cdf9190613285565b50600061294b8486613733565b95945050505050565b6001600160a01b038216600081815260266020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6000826129b757506000610caf565b60006129c38385613608565b9050826129d08583613627565b14611c745760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610cdf565b6000611c7483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612f4b565b6001600160a01b038316612a8f5760405162461bcd60e51b8152600401610cdf906136ab565b6001600160a01b038216612ab55760405162461bcd60e51b8152600401610cdf906136f0565b612af281604051806060016040528060268152602001613807602691396001600160a01b038616600090815260208190526040902054919061291a565b6001600160a01b038085166000908152602081905260408082209390935590841681522054612b219082611c15565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611d93565b3060009081526020819052604081205490506000602254602054602154612b999190613649565b612ba39190613649565b90506000821580612bb2575081155b15612bbc57505050565b600954612bca906014613608565b831115612be257600954612bdf906014613608565b92505b600060028360215486612bf59190613608565b612bff9190613627565b612c099190613627565b90506000612c178583612f79565b905047612c2382612fbb565b6000612c2f4783612f79565b90506000612c4c87611a81602054856129a890919063ffffffff16565b90506000612c6988611a81602254866129a890919063ffffffff16565b9050600081612c788486613733565b612c829190613733565b60006021819055602081905560228190556007546040519293506001600160a01b031691849181818185875af1925050503d8060008114612cdf576040519150601f19603f3d011682016040523d82523d6000602084013e612ce4565b606091505b50909850508615801590612cf85750600081115b15612d4b57612d07878261318a565b602154604080518881526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b6006546040516001600160a01b03909116904790600081818185875af1925050503d8060008114612d98576040519150601f19603f3d011682016040523d82523d6000602084013e612d9d565b606091505b50505050505050505050505050565b42600e556040516370a0823160e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166004820152600090819030906370a082319060240160206040518083038186803b158015612e1457600080fd5b505afa158015612e28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e4c9190613692565b90506000612e6b612710611a81600b54856129a890919063ffffffff16565b90508015612ea057612ea07f000000000000000000000000000000000000000000000000000000000000000061dead83612a69565b60007f00000000000000000000000000000000000000000000000000000000000000009050806001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612f0057600080fd5b505af1158015612f14573d6000803e3d6000fd5b50506040517f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d925060009150a16001935050505090565b60008183612f6c5760405162461bcd60e51b8152600401610cdf9190613285565b50600061294b8486613627565b6000611c7483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061291a565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612ff057612ff0613661565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561306957600080fd5b505afa15801561307d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130a1919061374a565b816001815181106130b4576130b4613661565b60200260200101906001600160a01b031690816001600160a01b0316815250506130ff307f000000000000000000000000000000000000000000000000000000000000000084611c7b565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790613154908590600090869030904290600401613767565b600060405180830381600087803b15801561316e57600080fd5b505af1158015613182573d6000803e3d6000fd5b505050505050565b6131b5307f000000000000000000000000000000000000000000000000000000000000000084611c7b565b60405163f305d71960e01b815230600482015260248101839052600060448201819052606482015273a57e79bbc5ce48ce73e546d9ad85e5249827af1d60848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063f305d71990839060c4016060604051808303818588803b15801561324c57600080fd5b505af1158015613260573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061165991906137d8565b600060208083528351808285015260005b818110156132b257858101830151858201604001528201613296565b818111156132c4576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b03811681146132ef57600080fd5b50565b6000806040838503121561330557600080fd5b8235613310816132da565b946020939093013593505050565b60006020828403121561333057600080fd5b8135611c74816132da565b60006020828403121561334d57600080fd5b5035919050565b60008060006060848603121561336957600080fd5b8335613374816132da565b92506020840135613384816132da565b929592945050506040919091013590565b803580151581146117b257600080fd5b6000806000606084860312156133ba57600080fd5b83359250602084013591506133d160408501613395565b90509250925092565b600080604083850312156133ed57600080fd5b82356133f8816132da565b915061340660208401613395565b90509250929050565b60008060006060848603121561342457600080fd5b505081359360208301359350604090920135919050565b60006020828403121561344d57600080fd5b611c7482613395565b60008083601f84011261346857600080fd5b50813567ffffffffffffffff81111561348057600080fd5b6020830191508360208260051b850101111561349b57600080fd5b9250929050565b600080600080604085870312156134b857600080fd5b843567ffffffffffffffff808211156134d057600080fd5b6134dc88838901613456565b909650945060208701359150808211156134f557600080fd5b5061350287828801613456565b95989497509550505050565b6000806040838503121561352157600080fd5b823561352c816132da565b9150602083013561353c816132da565b809150509250929050565b600080600080600060a0868803121561355f57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600181811c9082168061359657607f821691505b602082108114156135b757634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615613622576136226135f2565b500290565b60008261364457634e487b7160e01b600052601260045260246000fd5b500490565b6000821982111561365c5761365c6135f2565b500190565b634e487b7160e01b600052603260045260246000fd5b600060001982141561368b5761368b6135f2565b5060010190565b6000602082840312156136a457600080fd5b5051919050565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b600082821015613745576137456135f2565b500390565b60006020828403121561375c57600080fd5b8151611c74816132da565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156137b75784516001600160a01b031683529383019391830191600101613792565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156137ed57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212201e6efd1a1af72a54871d2276e2c2bc4ff10699bc012da2910f8a9e1e6dfb10f564736f6c634300080900334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572

Deployed Bytecode

0x6080604052600436106103e85760003560e01c80638da5cb5b11610208578063bbc0c74211610118578063dd62ed3e116100ab578063f2fde38b1161007a578063f2fde38b14610b80578063f637434214610ba0578063f8b45b0514610bb6578063fe72b27a14610bcc578063ff935af614610bec57600080fd5b8063dd62ed3e14610af9578063e2f4560514610b3f578063e884f26014610b55578063f11a24d314610b6a57600080fd5b8063c876d0b9116100e7578063c876d0b914610a93578063c8c8ebe414610aad578063d257b34f14610ac3578063d85ba06314610ae357600080fd5b8063bbc0c74214610a14578063c024666814610a33578063c18bc19514610a53578063c24f3e0e14610a7357600080fd5b80639fccce321161019b578063a4c82a001161016a578063a4c82a001461096d578063a4d15b6414610983578063a9059cbb146109a4578063aacebbe3146109c4578063b62496f5146109e457600080fd5b80639fccce3214610901578063a0d82dc514610917578063a26577781461092d578063a457c2d71461094d57600080fd5b806395d89b41116101d757806395d89b41146108a05780639a7a23d6146108b55780639c3b4fdc146108d55780639ec22c0e146108eb57600080fd5b80638da5cb5b1461082c5780638ea5220f1461084a578063921369131461086a578063924de9b71461088057600080fd5b8063313ce5671161030357806370a08231116102965780637571336a116102655780637571336a146107a157806375f0a874146107c15780637bce5a04146107e15780638095d564146107f75780638a8c523c1461081757600080fd5b806370a0823114610721578063715018a614610757578063730c18881461076c578063751039fc1461078c57600080fd5b80634fbee193116102d25780634fbee1931461069c578063541a43cf146106d55780636a486a8e146106eb5780636ddd17131461070157600080fd5b8063313ce56714610612578063395093511461062e57806349bd5a5e1461064e5780634a62bb651461068257600080fd5b80631a8145bb1161037b57806327c8f8351161034a57806327c8f835146105a45780632bf3d42d146105cc5780632c3e486c146105e25780632e82f1a0146105f857600080fd5b80631a8145bb146105385780631f3fed8f1461054e578063203e727e1461056457806323b872dd1461058457600080fd5b806318160ddd116103b757806318160ddd146104cb5780631816467f146104ea578063184c16c51461050c578063199ffc721461052257600080fd5b806306fdde03146103f4578063095ea7b31461041f57806310d5de531461044f5780631694505e1461047f57600080fd5b366103ef57005b600080fd5b34801561040057600080fd5b50610409610c0c565b6040516104169190613285565b60405180910390f35b34801561042b57600080fd5b5061043f61043a3660046132f2565b610c9e565b6040519015158152602001610416565b34801561045b57600080fd5b5061043f61046a36600461331e565b60256020526000908152604090205460ff1681565b34801561048b57600080fd5b506104b37f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b039091168152602001610416565b3480156104d757600080fd5b506002545b604051908152602001610416565b3480156104f657600080fd5b5061050a61050536600461331e565b610cb5565b005b34801561051857600080fd5b506104dc600f5481565b34801561052e57600080fd5b506104dc600b5481565b34801561054457600080fd5b506104dc60215481565b34801561055a57600080fd5b506104dc60205481565b34801561057057600080fd5b5061050a61057f36600461333b565b610d45565b34801561059057600080fd5b5061043f61059f366004613354565b610e22565b3480156105b057600080fd5b506104b373a57e79bbc5ce48ce73e546d9ad85e5249827af1d81565b3480156105d857600080fd5b506104dc601f5481565b3480156105ee57600080fd5b506104dc600d5481565b34801561060457600080fd5b50600c5461043f9060ff1681565b34801561061e57600080fd5b5060405160128152602001610416565b34801561063a57600080fd5b5061043f6106493660046132f2565b610e8b565b34801561065a57600080fd5b506104b37f0000000000000000000000005c5b133eb698747f081028365188329ff7bfaaec81565b34801561068e57600080fd5b5060115461043f9060ff1681565b3480156106a857600080fd5b5061043f6106b736600461331e565b6001600160a01b031660009081526024602052604090205460ff1690565b3480156106e157600080fd5b506104dc601e5481565b3480156106f757600080fd5b506104dc601a5481565b34801561070d57600080fd5b5060115461043f9062010000900460ff1681565b34801561072d57600080fd5b506104dc61073c36600461331e565b6001600160a01b031660009081526020819052604090205490565b34801561076357600080fd5b5061050a610ec1565b34801561077857600080fd5b5061050a6107873660046133a5565b610f35565b34801561079857600080fd5b5061043f61105e565b3480156107ad57600080fd5b5061050a6107bc3660046133da565b61109b565b3480156107cd57600080fd5b506006546104b3906001600160a01b031681565b3480156107ed57600080fd5b506104dc60175481565b34801561080357600080fd5b5061050a61081236600461340f565b6110f0565b34801561082357600080fd5b5061050a611198565b34801561083857600080fd5b506005546001600160a01b03166104b3565b34801561085657600080fd5b506007546104b3906001600160a01b031681565b34801561087657600080fd5b506104dc601b5481565b34801561088c57600080fd5b5061050a61089b36600461343b565b6111dd565b3480156108ac57600080fd5b50610409611223565b3480156108c157600080fd5b5061050a6108d03660046133da565b611232565b3480156108e157600080fd5b506104dc60195481565b3480156108f757600080fd5b506104dc60105481565b34801561090d57600080fd5b506104dc60225481565b34801561092357600080fd5b506104dc601d5481565b34801561093957600080fd5b5061050a61094836600461343b565b611312565b34801561095957600080fd5b5061043f6109683660046132f2565b61135a565b34801561097957600080fd5b506104dc600e5481565b34801561098f57600080fd5b5060115461043f906301000000900460ff1681565b3480156109b057600080fd5b5061043f6109bf3660046132f2565b6113a9565b3480156109d057600080fd5b5061050a6109df36600461331e565b6113b6565b3480156109f057600080fd5b5061043f6109ff36600461331e565b60266020526000908152604090205460ff1681565b348015610a2057600080fd5b5060115461043f90610100900460ff1681565b348015610a3f57600080fd5b5061050a610a4e3660046133da565b61143d565b348015610a5f57600080fd5b5061050a610a6e36600461333b565b6114c6565b348015610a7f57600080fd5b5061050a610a8e3660046134a2565b611597565b348015610a9f57600080fd5b5060155461043f9060ff1681565b348015610ab957600080fd5b506104dc60085481565b348015610acf57600080fd5b5061043f610ade36600461333b565b611660565b348015610aef57600080fd5b506104dc60165481565b348015610b0557600080fd5b506104dc610b1436600461350e565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610b4b57600080fd5b506104dc60095481565b348015610b6157600080fd5b5061043f6117b7565b348015610b7657600080fd5b506104dc60185481565b348015610b8c57600080fd5b5061050a610b9b36600461331e565b6117f4565b348015610bac57600080fd5b506104dc601c5481565b348015610bc257600080fd5b506104dc600a5481565b348015610bd857600080fd5b5061043f610be736600461333b565b6118df565b348015610bf857600080fd5b5061050a610c07366004613547565b611b68565b606060038054610c1b90613582565b80601f0160208091040260200160405190810160405280929190818152602001828054610c4790613582565b8015610c945780601f10610c6957610100808354040283529160200191610c94565b820191906000526020600020905b815481529060010190602001808311610c7757829003601f168201915b5050505050905090565b6000610cab338484611c7b565b5060015b92915050565b6005546001600160a01b03163314610ce85760405162461bcd60e51b8152600401610cdf906135bd565b60405180910390fd5b6007546040516001600160a01b03918216918316907f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74390600090a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610d6f5760405162461bcd60e51b8152600401610cdf906135bd565b670de0b6b3a76400006103e8610d8460025490565b610d8f906001613608565b610d999190613627565b610da39190613627565b811015610e0a5760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e312560881b6064820152608401610cdf565b610e1c81670de0b6b3a7640000613608565b60085550565b6000610e2f848484611da0565b610e818433610e7c8560405180606001604052806028815260200161382d602891396001600160a01b038a166000908152600160209081526040808320338452909152902054919061291a565b611c7b565b5060019392505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610cab918590610e7c9086611c15565b6005546001600160a01b03163314610eeb5760405162461bcd60e51b8152600401610cdf906135bd565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610f5f5760405162461bcd60e51b8152600401610cdf906135bd565b610258831015610fcd5760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e207468604482015272616e206576657279203130206d696e7574657360681b6064820152608401610cdf565b6103e88211158015610fdd575060015b6110425760405162461bcd60e51b815260206004820152603060248201527f4d75737420736574206175746f204c50206275726e2070657263656e7420626560448201526f747765656e20302520616e642031302560801b6064820152608401610cdf565b600d92909255600b55600c805460ff1916911515919091179055565b6005546000906001600160a01b0316331461108b5760405162461bcd60e51b8152600401610cdf906135bd565b506011805460ff19169055600190565b6005546001600160a01b031633146110c55760405162461bcd60e51b8152600401610cdf906135bd565b6001600160a01b03919091166000908152602560205260409020805460ff1916911515919091179055565b6005546001600160a01b0316331461111a5760405162461bcd60e51b8152600401610cdf906135bd565b601783905560188290556019819055806111348385613649565b61113e9190613649565b6016819055601410156111935760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610cdf565b505050565b6005546001600160a01b031633146111c25760405162461bcd60e51b8152600401610cdf906135bd565b6011805462ffff0019166201010017905542600e5543602355565b6005546001600160a01b031633146112075760405162461bcd60e51b8152600401610cdf906135bd565b60118054911515620100000262ff000019909216919091179055565b606060048054610c1b90613582565b6005546001600160a01b0316331461125c5760405162461bcd60e51b8152600401610cdf906135bd565b7f0000000000000000000000005c5b133eb698747f081028365188329ff7bfaaec6001600160a01b0316826001600160a01b031614156113045760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610cdf565b61130e8282612954565b5050565b6005546001600160a01b0316331461133c5760405162461bcd60e51b8152600401610cdf906135bd565b6011805491151563010000000263ff00000019909216919091179055565b6000610cab3384610e7c85604051806060016040528060258152602001613855602591393360009081526001602090815260408083206001600160a01b038d168452909152902054919061291a565b6000610cab338484611da0565b6005546001600160a01b031633146113e05760405162461bcd60e51b8152600401610cdf906135bd565b6006546040516001600160a01b03918216918316907fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567490600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146114675760405162461bcd60e51b8152600401610cdf906135bd565b6001600160a01b038216600081815260246020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146114f05760405162461bcd60e51b8152600401610cdf906135bd565b670de0b6b3a76400006103e861150560025490565b611510906005613608565b61151a9190613627565b6115249190613627565b81101561157f5760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b6064820152608401610cdf565b61159181670de0b6b3a7640000613608565b600a5550565b6005546001600160a01b031633146115c15760405162461bcd60e51b8152600401610cdf906135bd565b60005b838110156116595760008585838181106115e0576115e0613661565b90506020020160208101906115f5919061331e565b905083838381811061160957611609613661565b905060200201602081019061161e919061343b565b6001600160a01b03919091166000908152601460205260409020805460ff19169115159190911790558061165181613677565b9150506115c4565b5050505050565b6005546000906001600160a01b0316331461168d5760405162461bcd60e51b8152600401610cdf906135bd565b620186a061169a60025490565b6116a5906001613608565b6116af9190613627565b82101561171c5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610cdf565b6103e861172860025490565b611733906005613608565b61173d9190613627565b8211156117a95760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610cdf565b50600981905560015b919050565b6005546000906001600160a01b031633146117e45760405162461bcd60e51b8152600401610cdf906135bd565b506015805460ff19169055600190565b6005546001600160a01b0316331461181e5760405162461bcd60e51b8152600401610cdf906135bd565b6001600160a01b0381166118835760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610cdf565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546000906001600160a01b0316331461190c5760405162461bcd60e51b8152600401610cdf906135bd565b600f5460105461191c9190613649565b421161196a5760405162461bcd60e51b815260206004820181905260248201527f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e6973686044820152606401610cdf565b6103e88211156119cf5760405162461bcd60e51b815260206004820152602a60248201527f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60448201526906b656e7320696e204c560b41b6064820152608401610cdf565b426010556040516370a0823160e01b81526001600160a01b037f0000000000000000000000005c5b133eb698747f081028365188329ff7bfaaec16600482015260009030906370a082319060240160206040518083038186803b158015611a3557600080fd5b505afa158015611a49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6d9190613692565b90506000611a87612710611a8184876129a8565b90612a27565b90508015611abc57611abc7f0000000000000000000000005c5b133eb698747f081028365188329ff7bfaaec61dead83612a69565b60007f0000000000000000000000005c5b133eb698747f081028365188329ff7bfaaec9050806001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611b1c57600080fd5b505af1158015611b30573d6000803e3d6000fd5b50506040517f8462566617872a3fbab94534675218431ff9e204063ee3f4f43d965626a39abb925060009150a1506001949350505050565b6005546001600160a01b03163314611b925760405162461bcd60e51b8152600401610cdf906135bd565b601b859055601c849055601d839055601e829055601f81905582611bb68587613649565b611bc09190613649565b601a819055601910156116595760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323525206f72206c6573730000006044820152606401610cdf565b600080611c228385613649565b905083811015611c745760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610cdf565b9392505050565b6001600160a01b038316611cdd5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610cdf565b6001600160a01b038216611d3e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610cdf565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611dc65760405162461bcd60e51b8152600401610cdf906136ab565b6001600160a01b038216611dec5760405162461bcd60e51b8152600401610cdf906136f0565b6001600160a01b03821660009081526014602052604090205460ff16158015611e2e57506001600160a01b03831660009081526014602052604090205460ff16155b611e945760405162461bcd60e51b815260206004820152603160248201527f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460448201527072616e73666572696e6720746f6b656e7360781b6064820152608401610cdf565b80611ea55761119383836000612a69565b60115460ff1615612362576005546001600160a01b03848116911614801590611edc57506005546001600160a01b03838116911614155b8015611ef057506001600160a01b03821615155b8015611f0757506001600160a01b03821661dead14155b8015611f1d5750600554600160a01b900460ff16155b1561236257601154610100900460ff16611fb5576001600160a01b03831660009081526024602052604090205460ff1680611f7057506001600160a01b03821660009081526024602052604090205460ff165b611fb55760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610cdf565b60155460ff16156120fc576005546001600160a01b0383811691161480159061201057507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316826001600160a01b031614155b801561204e57507f0000000000000000000000005c5b133eb698747f081028365188329ff7bfaaec6001600160a01b0316826001600160a01b031614155b156120fc573260009081526012602052604090205443116120e95760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610cdf565b3260009081526012602052604090204390555b6001600160a01b03831660009081526026602052604090205460ff16801561213d57506001600160a01b03821660009081526025602052604090205460ff16155b15612221576008548111156121b25760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610cdf565b600a546001600160a01b0383166000908152602081905260409020546121d89083613649565b111561221c5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610cdf565b612362565b6001600160a01b03821660009081526026602052604090205460ff16801561226257506001600160a01b03831660009081526025602052604090205460ff16155b156122d85760085481111561221c5760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610cdf565b6001600160a01b03821660009081526025602052604090205460ff1661236257600a546001600160a01b03831660009081526020819052604090205461231e9083613649565b11156123625760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610cdf565b602354612370906001613649565b43111580156123b157507f0000000000000000000000005c5b133eb698747f081028365188329ff7bfaaec6001600160a01b0316826001600160a01b031614155b80156123da57506001600160a01b038216737a250d5630b4cf539739df2c5dacb4c659f2488d14155b15612403576001600160a01b0382166000908152601460205260409020805460ff191660011790555b7f0000000000000000000000005c5b133eb698747f081028365188329ff7bfaaec6001600160a01b039081169084161480158161244957506011546301000000900460ff165b156124e9576001600160a01b0384166000908152601360205260409020541580159061249b57506001600160a01b03841660009081526013602052604090205442906124989062015180613649565b10155b156124cf57601e54601c819055601f54601b819055601d54916124bd91613649565b6124c79190613649565b601a5561255b565b6005601c819055601b819055601d54906124bd9080613649565b6001600160a01b038316600090815260136020526040902054612522576001600160a01b03831660009081526013602052604090204290555b6011546301000000900460ff1661255b576005601c819055601b819055601d549061254d9080613649565b6125579190613649565b601a555b3060009081526020819052604090205460095481108015908190612587575060115462010000900460ff165b801561259d5750600554600160a01b900460ff16155b80156125c257506001600160a01b03861660009081526026602052604090205460ff16155b80156125e757506001600160a01b03861660009081526024602052604090205460ff16155b801561260c57506001600160a01b03851660009081526024602052604090205460ff16155b1561263a576005805460ff60a01b1916600160a01b17905561262c612b72565b6005805460ff60a01b191690555b600554600160a01b900460ff1615801561266c57506001600160a01b03851660009081526026602052604090205460ff165b801561267a5750600c5460ff165b80156126955750600d54600e546126919190613649565b4210155b80156126ba57506001600160a01b03861660009081526024602052604090205460ff16155b156126c9576126c7612dac565b505b6005546001600160a01b03871660009081526024602052604090205460ff600160a01b90920482161591168061271757506001600160a01b03861660009081526024602052604090205460ff165b15612720575060005b60008115612905576001600160a01b03871660009081526026602052604090205460ff16801561275257506000601a54115b1561280a576127716064611a81601a54896129a890919063ffffffff16565b9050601a54601c54826127849190613608565b61278e9190613627565b6021600082825461279f9190613649565b9091555050601a54601d546127b49083613608565b6127be9190613627565b602260008282546127cf9190613649565b9091555050601a54601b546127e49083613608565b6127ee9190613627565b602060008282546127ff9190613649565b909155506128e79050565b6001600160a01b03881660009081526026602052604090205460ff16801561283457506000601654115b156128e7576128536064611a81601654896129a890919063ffffffff16565b9050601654601854826128669190613608565b6128709190613627565b602160008282546128819190613649565b90915550506016546019546128969083613608565b6128a09190613627565b602260008282546128b19190613649565b90915550506016546017546128c69083613608565b6128d09190613627565b602060008282546128e19190613649565b90915550505b80156128f8576128f8883083612a69565b6129028187613733565b95505b612910888888612a69565b5050505050505050565b6000818484111561293e5760405162461bcd60e51b8152600401610cdf9190613285565b50600061294b8486613733565b95945050505050565b6001600160a01b038216600081815260266020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6000826129b757506000610caf565b60006129c38385613608565b9050826129d08583613627565b14611c745760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610cdf565b6000611c7483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612f4b565b6001600160a01b038316612a8f5760405162461bcd60e51b8152600401610cdf906136ab565b6001600160a01b038216612ab55760405162461bcd60e51b8152600401610cdf906136f0565b612af281604051806060016040528060268152602001613807602691396001600160a01b038616600090815260208190526040902054919061291a565b6001600160a01b038085166000908152602081905260408082209390935590841681522054612b219082611c15565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611d93565b3060009081526020819052604081205490506000602254602054602154612b999190613649565b612ba39190613649565b90506000821580612bb2575081155b15612bbc57505050565b600954612bca906014613608565b831115612be257600954612bdf906014613608565b92505b600060028360215486612bf59190613608565b612bff9190613627565b612c099190613627565b90506000612c178583612f79565b905047612c2382612fbb565b6000612c2f4783612f79565b90506000612c4c87611a81602054856129a890919063ffffffff16565b90506000612c6988611a81602254866129a890919063ffffffff16565b9050600081612c788486613733565b612c829190613733565b60006021819055602081905560228190556007546040519293506001600160a01b031691849181818185875af1925050503d8060008114612cdf576040519150601f19603f3d011682016040523d82523d6000602084013e612ce4565b606091505b50909850508615801590612cf85750600081115b15612d4b57612d07878261318a565b602154604080518881526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b6006546040516001600160a01b03909116904790600081818185875af1925050503d8060008114612d98576040519150601f19603f3d011682016040523d82523d6000602084013e612d9d565b606091505b50505050505050505050505050565b42600e556040516370a0823160e01b81526001600160a01b037f0000000000000000000000005c5b133eb698747f081028365188329ff7bfaaec166004820152600090819030906370a082319060240160206040518083038186803b158015612e1457600080fd5b505afa158015612e28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e4c9190613692565b90506000612e6b612710611a81600b54856129a890919063ffffffff16565b90508015612ea057612ea07f0000000000000000000000005c5b133eb698747f081028365188329ff7bfaaec61dead83612a69565b60007f0000000000000000000000005c5b133eb698747f081028365188329ff7bfaaec9050806001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612f0057600080fd5b505af1158015612f14573d6000803e3d6000fd5b50506040517f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d925060009150a16001935050505090565b60008183612f6c5760405162461bcd60e51b8152600401610cdf9190613285565b50600061294b8486613627565b6000611c7483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061291a565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612ff057612ff0613661565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561306957600080fd5b505afa15801561307d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130a1919061374a565b816001815181106130b4576130b4613661565b60200260200101906001600160a01b031690816001600160a01b0316815250506130ff307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611c7b565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790613154908590600090869030904290600401613767565b600060405180830381600087803b15801561316e57600080fd5b505af1158015613182573d6000803e3d6000fd5b505050505050565b6131b5307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611c7b565b60405163f305d71960e01b815230600482015260248101839052600060448201819052606482015273a57e79bbc5ce48ce73e546d9ad85e5249827af1d60848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03169063f305d71990839060c4016060604051808303818588803b15801561324c57600080fd5b505af1158015613260573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061165991906137d8565b600060208083528351808285015260005b818110156132b257858101830151858201604001528201613296565b818111156132c4576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b03811681146132ef57600080fd5b50565b6000806040838503121561330557600080fd5b8235613310816132da565b946020939093013593505050565b60006020828403121561333057600080fd5b8135611c74816132da565b60006020828403121561334d57600080fd5b5035919050565b60008060006060848603121561336957600080fd5b8335613374816132da565b92506020840135613384816132da565b929592945050506040919091013590565b803580151581146117b257600080fd5b6000806000606084860312156133ba57600080fd5b83359250602084013591506133d160408501613395565b90509250925092565b600080604083850312156133ed57600080fd5b82356133f8816132da565b915061340660208401613395565b90509250929050565b60008060006060848603121561342457600080fd5b505081359360208301359350604090920135919050565b60006020828403121561344d57600080fd5b611c7482613395565b60008083601f84011261346857600080fd5b50813567ffffffffffffffff81111561348057600080fd5b6020830191508360208260051b850101111561349b57600080fd5b9250929050565b600080600080604085870312156134b857600080fd5b843567ffffffffffffffff808211156134d057600080fd5b6134dc88838901613456565b909650945060208701359150808211156134f557600080fd5b5061350287828801613456565b95989497509550505050565b6000806040838503121561352157600080fd5b823561352c816132da565b9150602083013561353c816132da565b809150509250929050565b600080600080600060a0868803121561355f57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600181811c9082168061359657607f821691505b602082108114156135b757634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615613622576136226135f2565b500290565b60008261364457634e487b7160e01b600052601260045260246000fd5b500490565b6000821982111561365c5761365c6135f2565b500190565b634e487b7160e01b600052603260045260246000fd5b600060001982141561368b5761368b6135f2565b5060010190565b6000602082840312156136a457600080fd5b5051919050565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b600082821015613745576137456135f2565b500390565b60006020828403121561375c57600080fd5b8151611c74816132da565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156137b75784516001600160a01b031683529383019391830191600101613792565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156137ed57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212201e6efd1a1af72a54871d2276e2c2bc4ff10699bc012da2910f8a9e1e6dfb10f564736f6c63430008090033

Deployed Bytecode Sourcemap

29978:20455:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8076:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10250:169;;;;;;;;;;-1:-1:-1;10250:169:0;;;;;:::i;:::-;;:::i;:::-;;;1237:14:1;;1230:22;1212:41;;1200:2;1185:18;10250:169:0;1072:187:1;32027:64:0;;;;;;;;;;-1:-1:-1;32027:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;30059:51;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1707:32:1;;;1689:51;;1677:2;1662:18;30059:51:0;1516:230:1;9199:108:0;;;;;;;;;;-1:-1:-1;9287:12:0;;9199:108;;;1897:25:1;;;1885:2;1870:18;9199:108:0;1751:177:1;39465:157:0;;;;;;;;;;-1:-1:-1;39465:157:0;;;;;:::i;:::-;;:::i;:::-;;30666:47;;;;;;;;;;;;;;;;30480:36;;;;;;;;;;;;;;;;31741:33;;;;;;;;;;;;;;;;31701;;;;;;;;;;;;;;;;36559:234;;;;;;;;;;-1:-1:-1;36559:234:0;;;;;:::i;:::-;;:::i;10902:355::-;;;;;;;;;;-1:-1:-1;10902:355:0;;;;;:::i;:::-;;:::i;30162:89::-;;;;;;;;;;;;30208:42;30162:89;;31655:36;;;;;;;;;;;;;;;;30575:45;;;;;;;;;;;;;;;;30536:32;;;;;;;;;;-1:-1:-1;30536:32:0;;;;;;;;9040:93;;;;;;;;;;-1:-1:-1;9040:93:0;;9123:2;2929:36:1;;2917:2;2902:18;9040:93:0;2787:184:1;11667:218:0;;;;;;;;;;-1:-1:-1;11667:218:0;;;;;:::i;:::-;;:::i;30117:38::-;;;;;;;;;;;;;;;30765:33;;;;;;;;;;-1:-1:-1;30765:33:0;;;;;;;;39634:125;;;;;;;;;;-1:-1:-1;39634:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;39723:28:0;39699:4;39723:28;;;:19;:28;;;;;;;;;39634:125;31612:36;;;;;;;;;;;;;;;;31466:28;;;;;;;;;;;;;;;;30845:31;;;;;;;;;;-1:-1:-1;30845:31:0;;;;;;;;;;;9371:127;;;;;;;;;;-1:-1:-1;9371:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;9472:18:0;9445:7;9472:18;;;;;;;;;;;;9371:127;22578:148;;;;;;;;;;;;;:::i;48206:447::-;;;;;;;;;;-1:-1:-1;48206:447:0;;;;;:::i;:::-;;:::i;35670:120::-;;;;;;;;;;;;;:::i;37026:144::-;;;;;;;;;;-1:-1:-1;37026:144:0;;;;;:::i;:::-;;:::i;30293:30::-;;;;;;;;;;-1:-1:-1;30293:30:0;;;;-1:-1:-1;;;;;30293:30:0;;;31358;;;;;;;;;;;;;;;;37377:369;;;;;;;;;;-1:-1:-1;37377:369:0;;;;;:::i;:::-;;:::i;35426:191::-;;;;;;;;;;;;;:::i;21934:79::-;;;;;;;;;;-1:-1:-1;21999:6:0;;-1:-1:-1;;;;;21999:6:0;21934:79;;30330:24;;;;;;;;;;-1:-1:-1;30330:24:0;;;;-1:-1:-1;;;;;30330:24:0;;;31501:31;;;;;;;;;;;;;;;;37267:101;;;;;;;;;;-1:-1:-1;37267:101:0;;;;;:::i;:::-;;:::i;8296:104::-;;;;;;;;;;;;;:::i;38796:245::-;;;;;;;;;;-1:-1:-1;38796:245:0;;;;;:::i;:::-;;:::i;31432:24::-;;;;;;;;;;;;;;;;30720:35;;;;;;;;;;;;;;;;31781:27;;;;;;;;;;;;;;;;31577:25;;;;;;;;;;;;;;;;35995:102;;;;;;;;;;-1:-1:-1;35995:102:0;;;;;:::i;:::-;;:::i;12389:269::-;;;;;;;;;;-1:-1:-1;12389:269:0;;;;;:::i;:::-;;:::i;30627:29::-;;;;;;;;;;;;;;;;30883:37;;;;;;;;;;-1:-1:-1;30883:37:0;;;;;;;;;;;9712:175;;;;;;;;;;-1:-1:-1;9712:175:0;;;;;:::i;:::-;;:::i;39248:208::-;;;;;;;;;;-1:-1:-1;39248:208:0;;;;;:::i;:::-;;:::i;32250:58::-;;;;;;;;;;-1:-1:-1;32250:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;30805:33;;;;;;;;;;-1:-1:-1;30805:33:0;;;;;;;;;;;38320:182;;;;;;;;;;-1:-1:-1;38320:182:0;;;;;:::i;:::-;;:::i;36802:215::-;;;;;;;;;;-1:-1:-1;36802:215:0;;;;;:::i;:::-;;:::i;38511:276::-;;;;;;;;;;-1:-1:-1;38511:276:0;;;;;:::i;:::-;;:::i;31275:39::-;;;;;;;;;;-1:-1:-1;31275:39:0;;;;;;;;30364:35;;;;;;;;;;;;;;;;36169:381;;;;;;;;;;-1:-1:-1;36169:381:0;;;;;:::i;:::-;;:::i;31324:27::-;;;;;;;;;;;;;;;;9951:151;;;;;;;;;;-1:-1:-1;9951:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;10067:18:0;;;10040:7;10067:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;9951:151;30406:33;;;;;;;;;;;;;;;;35852:134;;;;;;;;;;;;;:::i;31395:30::-;;;;;;;;;;;;;;;;22882:244;;;;;;;;;;-1:-1:-1;22882:244:0;;;;;:::i;:::-;;:::i;31539:31::-;;;;;;;;;;;;;;;;30446:24;;;;;;;;;;;;;;;;49440:990;;;;;;;;;;-1:-1:-1;49440:990:0;;;;;:::i;:::-;;:::i;37755:556::-;;;;;;;;;;-1:-1:-1;37755:556:0;;;;;:::i;:::-;;:::i;8076:100::-;8130:13;8163:5;8156:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8076:100;:::o;10250:169::-;10333:4;10350:39;758:10;10373:7;10382:6;10350:8;:39::i;:::-;-1:-1:-1;10407:4:0;10250:169;;;;;:::o;39465:157::-;22147:6;;-1:-1:-1;;;;;22147:6:0;758:10;22147:22;22139:67;;;;-1:-1:-1;;;22139:67:0;;;;;;;:::i;:::-;;;;;;;;;39572:9:::1;::::0;39544:38:::1;::::0;-1:-1:-1;;;;;39572:9:0;;::::1;::::0;39544:38;::::1;::::0;::::1;::::0;39572:9:::1;::::0;39544:38:::1;39593:9;:21:::0;;-1:-1:-1;;;;;;39593:21:0::1;-1:-1:-1::0;;;;;39593:21:0;;;::::1;::::0;;;::::1;::::0;;39465:157::o;36559:234::-;22147:6;;-1:-1:-1;;;;;22147:6:0;758:10;22147:22;22139:67;;;;-1:-1:-1;;;22139:67:0;;;;;;;:::i;:::-;36678:4:::1;36672;36652:13;9287:12:::0;;;9199:108;36652:13:::1;:17;::::0;36668:1:::1;36652:17;:::i;:::-;:24;;;;:::i;:::-;36651:31;;;;:::i;:::-;36641:6;:41;;36633:101;;;::::0;-1:-1:-1;;;36633:101:0;;7762:2:1;36633:101:0::1;::::0;::::1;7744:21:1::0;7801:2;7781:18;;;7774:30;7840:34;7820:18;;;7813:62;-1:-1:-1;;;7891:18:1;;;7884:45;7946:19;;36633:101:0::1;7560:411:1::0;36633:101:0::1;36768:17;:6:::0;36778::::1;36768:17;:::i;:::-;36745:20;:40:::0;-1:-1:-1;36559:234:0:o;10902:355::-;11042:4;11059:36;11069:6;11077:9;11088:6;11059:9;:36::i;:::-;11106:121;11115:6;758:10;11137:89;11175:6;11137:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11137:19:0;;;;;;:11;:19;;;;;;;;758:10;11137:33;;;;;;;;;;:37;:89::i;:::-;11106:8;:121::i;:::-;-1:-1:-1;11245:4:0;10902:355;;;;;:::o;11667:218::-;758:10;11755:4;11804:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;11804:34:0;;;;;;;;;;11755:4;;11772:83;;11795:7;;11804:50;;11843:10;11804:38;:50::i;22578:148::-;22147:6;;-1:-1:-1;;;;;22147:6:0;758:10;22147:22;22139:67;;;;-1:-1:-1;;;22139:67:0;;;;;;;:::i;:::-;22669:6:::1;::::0;22648:40:::1;::::0;22685:1:::1;::::0;-1:-1:-1;;;;;22669:6:0::1;::::0;22648:40:::1;::::0;22685:1;;22648:40:::1;22699:6;:19:::0;;-1:-1:-1;;;;;;22699:19:0::1;::::0;;22578:148::o;48206:447::-;22147:6;;-1:-1:-1;;;;;22147:6:0;758:10;22147:22;22139:67;;;;-1:-1:-1;;;22139:67:0;;;;;;;:::i;:::-;48360:3:::1;48337:19;:26;;48329:90;;;::::0;-1:-1:-1;;;48329:90:0;;8178:2:1;48329:90:0::1;::::0;::::1;8160:21:1::0;8217:2;8197:18;;;8190:30;8256:34;8236:18;;;8229:62;-1:-1:-1;;;8307:18:1;;;8300:49;8366:19;;48329:90:0::1;7976:415:1::0;48329:90:0::1;48450:4;48438:8;:16;;:33;;;;-1:-1:-1::0;48458:13:0;48438:33:::1;48430:94;;;::::0;-1:-1:-1;;;48430:94:0;;8598:2:1;48430:94:0::1;::::0;::::1;8580:21:1::0;8637:2;8617:18;;;8610:30;8676:34;8656:18;;;8649:62;-1:-1:-1;;;8727:18:1;;;8720:46;8783:19;;48430:94:0::1;8396:412:1::0;48430:94:0::1;48535:15;:37:::0;;;;48583:16:::1;:27:::0;48621:13:::1;:24:::0;;-1:-1:-1;;48621:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;48206:447::o;35670:120::-;22147:6;;35722:4;;-1:-1:-1;;;;;22147:6:0;758:10;22147:22;22139:67;;;;-1:-1:-1;;;22139:67:0;;;;;;;:::i;:::-;-1:-1:-1;35738:14:0::1;:22:::0;;-1:-1:-1;;35738:22:0::1;::::0;;;35670:120;:::o;37026:144::-;22147:6;;-1:-1:-1;;;;;22147:6:0;758:10;22147:22;22139:67;;;;-1:-1:-1;;;22139:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37116:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;37116:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;37026:144::o;37377:369::-;22147:6;;-1:-1:-1;;;;;22147:6:0;758:10;22147:22;22139:67;;;;-1:-1:-1;;;22139:67:0;;;;;;;:::i;:::-;37493:15:::1;:31:::0;;;37535:15:::1;:31:::0;;;37577:9:::1;:19:::0;;;37589:7;37622:33:::1;37553:13:::0;37511;37622:33:::1;:::i;:::-;:45;;;;:::i;:::-;37607:12;:60:::0;;;37702:2:::1;-1:-1:-1::0;37686:18:0::1;37678:60;;;::::0;-1:-1:-1;;;37678:60:0;;9148:2:1;37678:60:0::1;::::0;::::1;9130:21:1::0;9187:2;9167:18;;;9160:30;9226:31;9206:18;;;9199:59;9275:18;;37678:60:0::1;8946:353:1::0;37678:60:0::1;37377:369:::0;;;:::o;35426:191::-;22147:6;;-1:-1:-1;;;;;22147:6:0;758:10;22147:22;22139:67;;;;-1:-1:-1;;;22139:67:0;;;;;;;:::i;:::-;35481:13:::1;:20:::0;;-1:-1:-1;;35512:18:0;;;;;35558:15:::1;35541:14;:32:::0;35597:12:::1;35584:10;:25:::0;35426:191::o;37267:101::-;22147:6;;-1:-1:-1;;;;;22147:6:0;758:10;22147:22;22139:67;;;;-1:-1:-1;;;22139:67:0;;;;;;;:::i;:::-;37339:11:::1;:21:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;37339:21:0;;::::1;::::0;;;::::1;::::0;;37267:101::o;8296:104::-;8352:13;8385:7;8378:14;;;;;:::i;38796:245::-;22147:6;;-1:-1:-1;;;;;22147:6:0;758:10;22147:22;22139:67;;;;-1:-1:-1;;;22139:67:0;;;;;;;:::i;:::-;38903:13:::1;-1:-1:-1::0;;;;;38895:21:0::1;:4;-1:-1:-1::0;;;;;38895:21:0::1;;;38887:91;;;::::0;-1:-1:-1;;;38887:91:0;;9506:2:1;38887:91:0::1;::::0;::::1;9488:21:1::0;9545:2;9525:18;;;9518:30;9584:34;9564:18;;;9557:62;9655:27;9635:18;;;9628:55;9700:19;;38887:91:0::1;9304:421:1::0;38887:91:0::1;38992:41;39021:4;39027:5;38992:28;:41::i;:::-;38796:245:::0;;:::o;35995:102::-;22147:6;;-1:-1:-1;;;;;22147:6:0;758:10;22147:22;22139:67;;;;-1:-1:-1;;;22139:67:0;;;;;;;:::i;:::-;36063:18:::1;:26:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;36063:26:0;;::::1;::::0;;;::::1;::::0;;35995:102::o;12389:269::-;12482:4;12499:129;758:10;12522:7;12531:96;12570:15;12531:96;;;;;;;;;;;;;;;;;758:10;12531:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;12531:34:0;;;;;;;;;;;;:38;:96::i;9712:175::-;9798:4;9815:42;758:10;9839:9;9850:6;9815:9;:42::i;39248:208::-;22147:6;;-1:-1:-1;;;;;22147:6:0;758:10;22147:22;22139:67;;;;-1:-1:-1;;;22139:67:0;;;;;;;:::i;:::-;39385:15:::1;::::0;39342:59:::1;::::0;-1:-1:-1;;;;;39385:15:0;;::::1;::::0;39342:59;::::1;::::0;::::1;::::0;39385:15:::1;::::0;39342:59:::1;39412:15;:36:::0;;-1:-1:-1;;;;;;39412:36:0::1;-1:-1:-1::0;;;;;39412:36:0;;;::::1;::::0;;;::::1;::::0;;39248:208::o;38320:182::-;22147:6;;-1:-1:-1;;;;;22147:6:0;758:10;22147:22;22139:67;;;;-1:-1:-1;;;22139:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38405:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;38405:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;38460:34;;1212:41:1;;;38460:34:0::1;::::0;1185:18:1;38460:34:0::1;;;;;;;38320:182:::0;;:::o;36802:215::-;22147:6;;-1:-1:-1;;;;;22147:6:0;758:10;22147:22;22139:67;;;;-1:-1:-1;;;22139:67:0;;;;;;;:::i;:::-;36924:4:::1;36918;36898:13;9287:12:::0;;;9199:108;36898:13:::1;:17;::::0;36914:1:::1;36898:17;:::i;:::-;:24;;;;:::i;:::-;36897:31;;;;:::i;:::-;36887:6;:41;;36879:90;;;::::0;-1:-1:-1;;;36879:90:0;;9932:2:1;36879:90:0::1;::::0;::::1;9914:21:1::0;9971:2;9951:18;;;9944:30;10010:34;9990:18;;;9983:62;-1:-1:-1;;;10061:18:1;;;10054:34;10105:19;;36879:90:0::1;9730:400:1::0;36879:90:0::1;36992:17;:6:::0;37002::::1;36992:17;:::i;:::-;36980:9;:29:::0;-1:-1:-1;36802:215:0:o;38511:276::-;22147:6;;-1:-1:-1;;;;;22147:6:0;758:10;22147:22;22139:67;;;;-1:-1:-1;;;22139:67:0;;;;;;;:::i;:::-;38631:9:::1;38626:154;38646:19:::0;;::::1;38626:154;;;38686:15;38704:8;;38713:1;38704:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;38686:29;;38752:13;;38766:1;38752:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;38730:19:0;;;::::1;;::::0;;;:10:::1;:19;::::0;;;;:38;;-1:-1:-1;;38730:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;38667:3;::::1;::::0;::::1;:::i;:::-;;;;38626:154;;;;38511:276:::0;;;;:::o;36169:381::-;22147:6;;36250:4;;-1:-1:-1;;;;;22147:6:0;758:10;22147:22;22139:67;;;;-1:-1:-1;;;22139:67:0;;;;;;;:::i;:::-;36306:6:::1;36286:13;9287:12:::0;;;9199:108;36286:13:::1;:17;::::0;36302:1:::1;36286:17;:::i;:::-;:26;;;;:::i;:::-;36273:9;:39;;36265:105;;;::::0;-1:-1:-1;;;36265:105:0;;10609:2:1;36265:105:0::1;::::0;::::1;10591:21:1::0;10648:2;10628:18;;;10621:30;10687:34;10667:18;;;10660:62;-1:-1:-1;;;10738:18:1;;;10731:51;10799:19;;36265:105:0::1;10407:417:1::0;36265:105:0::1;36421:4;36401:13;9287:12:::0;;;9199:108;36401:13:::1;:17;::::0;36417:1:::1;36401:17;:::i;:::-;:24;;;;:::i;:::-;36388:9;:37;;36380:102;;;::::0;-1:-1:-1;;;36380:102:0;;11031:2:1;36380:102:0::1;::::0;::::1;11013:21:1::0;11070:2;11050:18;;;11043:30;11109:34;11089:18;;;11082:62;-1:-1:-1;;;11160:18:1;;;11153:50;11220:19;;36380:102:0::1;10829:416:1::0;36380:102:0::1;-1:-1:-1::0;36492:18:0::1;:30:::0;;;36539:4:::1;22217:1;36169:381:::0;;;:::o;35852:134::-;22147:6;;35912:4;;-1:-1:-1;;;;;22147:6:0;758:10;22147:22;22139:67;;;;-1:-1:-1;;;22139:67:0;;;;;;;:::i;:::-;-1:-1:-1;35928:20:0::1;:28:::0;;-1:-1:-1;;35928:28:0::1;::::0;;;35852:134;:::o;22882:244::-;22147:6;;-1:-1:-1;;;;;22147:6:0;758:10;22147:22;22139:67;;;;-1:-1:-1;;;22139:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22971:22:0;::::1;22963:73;;;::::0;-1:-1:-1;;;22963:73:0;;11452:2:1;22963:73:0::1;::::0;::::1;11434:21:1::0;11491:2;11471:18;;;11464:30;11530:34;11510:18;;;11503:62;-1:-1:-1;;;11581:18:1;;;11574:36;11627:19;;22963:73:0::1;11250:402:1::0;22963:73:0::1;23073:6;::::0;23052:38:::1;::::0;-1:-1:-1;;;;;23052:38:0;;::::1;::::0;23073:6:::1;::::0;23052:38:::1;::::0;23073:6:::1;::::0;23052:38:::1;23101:6;:17:::0;;-1:-1:-1;;;;;;23101:17:0::1;-1:-1:-1::0;;;;;23101:17:0;;;::::1;::::0;;;::::1;::::0;;22882:244::o;49440:990::-;22147:6;;49524:4;;-1:-1:-1;;;;;22147:6:0;758:10;22147:22;22139:67;;;;-1:-1:-1;;;22139:67:0;;;;;;;:::i;:::-;49589:19:::1;;49566:20;;:42;;;;:::i;:::-;49548:15;:60;49540:106;;;::::0;-1:-1:-1;;;49540:106:0;;11859:2:1;49540:106:0::1;::::0;::::1;11841:21:1::0;;;11878:18;;;11871:30;11937:34;11917:18;;;11910:62;11989:18;;49540:106:0::1;11657:356:1::0;49540:106:0::1;49676:4;49665:7;:15;;49657:70;;;::::0;-1:-1:-1;;;49657:70:0;;12220:2:1;49657:70:0::1;::::0;::::1;12202:21:1::0;12259:2;12239:18;;;12232:30;12298:34;12278:18;;;12271:62;-1:-1:-1;;;12349:18:1;;;12342:40;12399:19;;49657:70:0::1;12018:406:1::0;49657:70:0::1;49761:15;49738:20;:38:::0;49863:29:::1;::::0;-1:-1:-1;;;49863:29:0;;-1:-1:-1;;;;;49878:13:0::1;1707:32:1::0;49863:29:0::1;::::0;::::1;1689:51:1::0;49832:28:0::1;::::0;49863:4:::1;::::0;:14:::1;::::0;1662:18:1;;49863:29:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49832:60:::0;-1:-1:-1;49943:20:0::1;49966:44;50004:5;49966:33;49832:60:::0;49991:7;49966:24:::1;:33::i;:::-;:37:::0;::::1;:44::i;:::-;49943:67:::0;-1:-1:-1;50116:16:0;;50112:109:::1;;50148:61;50164:13;50187:6;50196:12;50148:15;:61::i;:::-;50297:19;50334:13;50297:51;;50359:4;-1:-1:-1::0;;;;;50359:9:0::1;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;50386:14:0::1;::::0;::::1;::::0;-1:-1:-1;50386:14:0;;-1:-1:-1;50386:14:0::1;-1:-1:-1::0;50418:4:0::1;::::0;49440:990;-1:-1:-1;;;;49440:990:0:o;37755:556::-;22147:6;;-1:-1:-1;;;;;22147:6:0;758:10;22147:22;22139:67;;;;-1:-1:-1;;;22139:67:0;;;;;;;:::i;:::-;37936:16:::1;:32:::0;;;37979:16:::1;:32:::0;;;38022:10:::1;:20:::0;;;38053:21:::1;:46:::0;;;38110:21:::1;:46:::0;;;38035:7;38183:35:::1;37998:13:::0;37955;38183:35:::1;:::i;:::-;:48;;;;:::i;:::-;38167:13;:64:::0;;;38267:2:::1;-1:-1:-1::0;38250:19:0::1;38242:61;;;::::0;-1:-1:-1;;;38242:61:0;;12820:2:1;38242:61:0::1;::::0;::::1;12802:21:1::0;12859:2;12839:18;;;12832:30;12898:31;12878:18;;;12871:59;12947:18;;38242:61:0::1;12618:353:1::0;16966:182:0;17024:7;;17056:5;17060:1;17056;:5;:::i;:::-;17044:17;;17085:1;17080;:6;;17072:46;;;;-1:-1:-1;;;17072:46:0;;13178:2:1;17072:46:0;;;13160:21:1;13217:2;13197:18;;;13190:30;13256:29;13236:18;;;13229:57;13303:18;;17072:46:0;12976:351:1;17072:46:0;17139:1;16966:182;-1:-1:-1;;;16966:182:0:o;15585:381::-;-1:-1:-1;;;;;15721:19:0;;15713:68;;;;-1:-1:-1;;;15713:68:0;;13534:2:1;15713:68:0;;;13516:21:1;13573:2;13553:18;;;13546:30;13612:34;13592:18;;;13585:62;-1:-1:-1;;;13663:18:1;;;13656:34;13707:19;;15713:68:0;13332:400:1;15713:68:0;-1:-1:-1;;;;;15800:21:0;;15792:68;;;;-1:-1:-1;;;15792:68:0;;13939:2:1;15792:68:0;;;13921:21:1;13978:2;13958:18;;;13951:30;14017:34;13997:18;;;13990:62;-1:-1:-1;;;14068:18:1;;;14061:32;14110:19;;15792:68:0;13737:398:1;15792:68:0;-1:-1:-1;;;;;15874:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;15926:32;;1897:25:1;;;15926:32:0;;1870:18:1;15926:32:0;;;;;;;;15585:381;;;:::o;39819:5653::-;-1:-1:-1;;;;;39951:18:0;;39943:68;;;;-1:-1:-1;;;39943:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;40030:16:0;;40022:64;;;;-1:-1:-1;;;40022:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;40106:14:0;;;;;;:10;:14;;;;;;;;40105:15;:36;;;;-1:-1:-1;;;;;;40125:16:0;;;;;;:10;:16;;;;;;;;40124:17;40105:36;40097:98;;;;-1:-1:-1;;;40097:98:0;;15152:2:1;40097:98:0;;;15134:21:1;15191:2;15171:18;;;15164:30;15230:34;15210:18;;;15203:62;-1:-1:-1;;;15281:18:1;;;15274:47;15338:19;;40097:98:0;14950:413:1;40097:98:0;40210:11;40207:92;;40238:28;40254:4;40260:2;40264:1;40238:15;:28::i;40207:92::-;40315:14;;;;40312:1811;;;21999:6;;-1:-1:-1;;;;;40367:15:0;;;21999:6;;40367:15;;;;:49;;-1:-1:-1;21999:6:0;;-1:-1:-1;;;;;40403:13:0;;;21999:6;;40403:13;;40367:49;:86;;;;-1:-1:-1;;;;;;40437:16:0;;;;40367:86;:128;;;;-1:-1:-1;;;;;;40474:21:0;;40488:6;40474:21;;40367:128;:158;;;;-1:-1:-1;40517:8:0;;-1:-1:-1;;;40517:8:0;;;;40516:9;40367:158;40345:1767;;;40563:13;;;;;;;40559:148;;-1:-1:-1;;;;;40608:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;40637:23:0;;;;;;:19;:23;;;;;;;;40608:52;40600:87;;;;-1:-1:-1;;;40600:87:0;;15570:2:1;40600:87:0;;;15552:21:1;15609:2;15589:18;;;15582:30;-1:-1:-1;;;15628:18:1;;;15621:52;15690:18;;40600:87:0;15368:346:1;40600:87:0;40866:20;;;;40862:423;;;21999:6;;-1:-1:-1;;;;;40914:13:0;;;21999:6;;40914:13;;;;:47;;;40945:15;-1:-1:-1;;;;;40931:30:0;:2;-1:-1:-1;;;;;40931:30:0;;;40914:47;:79;;;;;40979:13;-1:-1:-1;;;;;40965:28:0;:2;-1:-1:-1;;;;;40965:28:0;;;40914:79;40910:356;;;41058:9;41029:39;;;;:28;:39;;;;;;41071:12;-1:-1:-1;41021:140:0;;;;-1:-1:-1;;;41021:140:0;;15921:2:1;41021:140:0;;;15903:21:1;15960:2;15940:18;;;15933:30;15999:34;15979:18;;;15972:62;16070:34;16050:18;;;16043:62;-1:-1:-1;;;16121:19:1;;;16114:40;16171:19;;41021:140:0;15719:477:1;41021:140:0;41217:9;41188:39;;;;:28;:39;;;;;41230:12;41188:54;;40910:356;-1:-1:-1;;;;;41338:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;41374:35:0;;;;;;:31;:35;;;;;;;;41373:36;41338:71;41334:763;;;41456:20;;41446:6;:30;;41438:96;;;;-1:-1:-1;;;41438:96:0;;16403:2:1;41438:96:0;;;16385:21:1;16442:2;16422:18;;;16415:30;16481:34;16461:18;;;16454:62;-1:-1:-1;;;16532:18:1;;;16525:51;16593:19;;41438:96:0;16201:417:1;41438:96:0;41595:9;;-1:-1:-1;;;;;9472:18:0;;9445:7;9472:18;;;;;;;;;;;41569:22;;:6;:22;:::i;:::-;:35;;41561:67;;;;-1:-1:-1;;;41561:67:0;;16825:2:1;41561:67:0;;;16807:21:1;16864:2;16844:18;;;16837:30;-1:-1:-1;;;16883:18:1;;;16876:49;16942:18;;41561:67:0;16623:343:1;41561:67:0;41334:763;;;-1:-1:-1;;;;;41707:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;41741:37:0;;;;;;:31;:37;;;;;;;;41740:38;41707:71;41703:394;;;41825:20;;41815:6;:30;;41807:97;;;;-1:-1:-1;;;41807:97:0;;17173:2:1;41807:97:0;;;17155:21:1;17212:2;17192:18;;;17185:30;17251:34;17231:18;;;17224:62;-1:-1:-1;;;17302:18:1;;;17295:52;17364:19;;41807:97:0;16971:418:1;41703:394:0;-1:-1:-1;;;;;41951:35:0;;;;;;:31;:35;;;;;;;;41947:150;;42044:9;;-1:-1:-1;;;;;9472:18:0;;9445:7;9472:18;;;;;;;;;;;42018:22;;:6;:22;:::i;:::-;:35;;42010:67;;;;-1:-1:-1;;;42010:67:0;;16825:2:1;42010:67:0;;;16807:21:1;16864:2;16844:18;;;16837:30;-1:-1:-1;;;16883:18:1;;;16876:49;16942:18;;42010:67:0;16623:343:1;42010:67:0;42184:10;;:14;;42197:1;42184:14;:::i;:::-;42167:12;:32;;:73;;;;;42227:13;-1:-1:-1;;;;;42221:19:0;:2;-1:-1:-1;;;;;42221:19:0;;;42167:73;:152;;;;-1:-1:-1;;;;;;42262:57:0;;42276:42;42262:57;;42167:152;42163:221;;;-1:-1:-1;;;;;42351:14:0;;;;;;:10;:14;;;;;:21;;-1:-1:-1;;42351:21:0;42368:4;42351:21;;;42163:221;42447:13;-1:-1:-1;;;;;42439:21:0;;;;;;;42475:6;;42439:21;42475:28;;-1:-1:-1;42485:18:0;;;;;;;42475:28;42471:958;;;-1:-1:-1;;;;;42524:30:0;;;;;;:24;:30;;;;;;:35;;;;:120;;-1:-1:-1;;;;;;42581:30:0;;;;;;:24;:30;;;;;;42628:15;;42581:43;;42615:8;42581:43;:::i;:::-;:62;;42524:120;42520:527;;;42685:21;;42666:16;:40;;;42744:21;;42725:16;:40;;;42838:10;;;42800:35;;;:::i;:::-;:48;;;;:::i;:::-;42784:13;:64;42471:958;;42520:527;42908:1;42889:16;:20;;;42928:16;:20;;;43021:10;;;42983:35;;42908:1;42983:35;:::i;42471:958::-;-1:-1:-1;;;;;43083:28:0;;;;;;:24;:28;;;;;;43079:120;;-1:-1:-1;;;;;43137:28:0;;;;;;:24;:28;;;;;43168:15;43137:46;;43079:120;43221:18;;;;;;;43216:202;;43279:1;43260:16;:20;;;43299:16;:20;;;43392:10;;;43354:35;;43279:1;43354:35;:::i;:::-;:48;;;;:::i;:::-;43338:13;:64;43216:202;43485:4;43436:28;9472:18;;;;;;;;;;;43544;;43520:42;;;;;;;43594:35;;-1:-1:-1;43618:11:0;;;;;;;43594:35;:61;;;;-1:-1:-1;43647:8:0;;-1:-1:-1;;;43647:8:0;;;;43646:9;43594:61;:110;;;;-1:-1:-1;;;;;;43673:31:0;;;;;;:25;:31;;;;;;;;43672:32;43594:110;:153;;;;-1:-1:-1;;;;;;43722:25:0;;;;;;:19;:25;;;;;;;;43721:26;43594:153;:194;;;;-1:-1:-1;;;;;;43765:23:0;;;;;;:19;:23;;;;;;;;43764:24;43594:194;43576:328;;;43815:8;:15;;-1:-1:-1;;;;43815:15:0;-1:-1:-1;;;43815:15:0;;;43848:10;:8;:10::i;:::-;43876:8;:16;;-1:-1:-1;;;;43876:16:0;;;43576:328;43921:8;;-1:-1:-1;;;43921:8:0;;;;43920:9;:42;;;;-1:-1:-1;;;;;;43933:29:0;;;;;;:25;:29;;;;;;;;43920:42;:59;;;;-1:-1:-1;43966:13:0;;;;43920:59;:114;;;;;44019:15;;44002:14;;:32;;;;:::i;:::-;43983:15;:51;;43920:114;:144;;;;-1:-1:-1;;;;;;44039:25:0;;;;;;:19;:25;;;;;;;;44038:26;43920:144;43917:204;;;44080:29;:27;:29::i;:::-;;43917:204;44150:8;;-1:-1:-1;;;;;44260:25:0;;44134:12;44260:25;;;:19;:25;;;;;;44150:8;-1:-1:-1;;;44150:8:0;;;;;44149:9;;44260:25;;:52;;-1:-1:-1;;;;;;44289:23:0;;;;;;:19;:23;;;;;;;;44260:52;44257:99;;;-1:-1:-1;44339:5:0;44257:99;44369:12;44473:7;44470:948;;;-1:-1:-1;;;;;44524:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;44573:1;44557:13;;:17;44524:50;44520:748;;;44601:34;44631:3;44601:25;44612:13;;44601:6;:10;;:25;;;;:::i;:34::-;44594:41;;44702:13;;44683:16;;44676:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;44654:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;44770:13:0;;44757:10;;44750:17;;:4;:17;:::i;:::-;:33;;;;:::i;:::-;44734:12;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;44850:13:0;;44831:16;;44824:23;;:4;:23;:::i;:::-;:39;;;;:::i;:::-;44802:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;44520:748:0;;-1:-1:-1;44520:748:0;;-1:-1:-1;;;;;44924:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;44974:1;44959:12;;:16;44924:51;44921:347;;;45000:33;45029:3;45000:24;45011:12;;45000:6;:10;;:24;;;;:::i;:33::-;44993:40;;45096:12;;45078:15;;45071:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;45049:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;45162:12:0;;45150:9;;45143:16;;:4;:16;:::i;:::-;:31;;;;:::i;:::-;45127:12;;:47;;;;;;;:::i;:::-;;;;-1:-1:-1;;45240:12:0;;45222:15;;45215:22;;:4;:22;:::i;:::-;:37;;;;:::i;:::-;45193:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;44921:347:0;45288:8;;45285:93;;45320:42;45336:4;45350;45357;45320:15;:42::i;:::-;45392:14;45402:4;45392:14;;:::i;:::-;;;44470:948;45431:33;45447:4;45453:2;45457:6;45431:15;:33::i;:::-;39932:5540;;;;;39819:5653;;;:::o;17872:193::-;17958:7;17994:12;17986:6;;;;17978:29;;;;-1:-1:-1;;;17978:29:0;;;;;;;;:::i;:::-;-1:-1:-1;18018:9:0;18030:5;18034:1;18030;:5;:::i;:::-;18018:17;17872:193;-1:-1:-1;;;;;17872:193:0:o;39050:189::-;-1:-1:-1;;;;;39133:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;39133:39:0;;;;;;;;;;39191:40;;39133:39;;:31;39191:40;;;39050:189;;:::o;18325:473::-;18383:7;18628:6;18624:47;;-1:-1:-1;18658:1:0;18651:8;;18624:47;18684:9;18696:5;18700:1;18696;:5;:::i;:::-;18684:17;-1:-1:-1;18729:1:0;18720:5;18724:1;18684:17;18720:5;:::i;:::-;:10;18712:56;;;;-1:-1:-1;;;18712:56:0;;17726:2:1;18712:56:0;;;17708:21:1;17765:2;17745:18;;;17738:30;17804:34;17784:18;;;17777:62;-1:-1:-1;;;17855:18:1;;;17848:31;17896:19;;18712:56:0;17524:397:1;19275:132:0;19333:7;19360:39;19364:1;19367;19360:39;;;;;;;;;;;;;;;;;:3;:39::i;13149:575::-;-1:-1:-1;;;;;13289:20:0;;13281:70;;;;-1:-1:-1;;;13281:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13370:23:0;;13362:71;;;;-1:-1:-1;;;13362:71:0;;;;;;;:::i;:::-;13528;13550:6;13528:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13528:17:0;;:9;:17;;;;;;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;13508:17:0;;;:9;:17;;;;;;;;;;;:91;;;;13633:20;;;;;;;:32;;13658:6;13633:24;:32::i;:::-;-1:-1:-1;;;;;13610:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;13681:35;1897:25:1;;;13610:20:0;;13681:35;;;;;;1870:18:1;13681:35:0;1751:177:1;46620:1577:0;46703:4;46659:23;9472:18;;;;;;;;;;;46659:50;;46720:25;46790:12;;46769:18;;46748;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;46720:82;-1:-1:-1;46813:12:0;46842:20;;;:46;;-1:-1:-1;46866:22:0;;46842:46;46839:60;;;46891:7;;;46620:1577::o;46839:60::-;46933:18;;:23;;46954:2;46933:23;:::i;:::-;46915:15;:41;46912:111;;;46988:18;;:23;;47009:2;46988:23;:::i;:::-;46970:41;;46912:111;47085:23;47170:1;47150:17;47129:18;;47111:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;47085:86;-1:-1:-1;47182:26:0;47211:36;:15;47085:86;47211:19;:36::i;:::-;47182:65;-1:-1:-1;47289:21:0;47324:36;47182:65;47324:16;:36::i;:::-;47375:18;47396:44;:21;47422:17;47396:25;:44::i;:::-;47375:65;;47454:23;47480:57;47519:17;47480:34;47495:18;;47480:10;:14;;:34;;;;:::i;:57::-;47454:83;;47548:17;47568:51;47601:17;47568:28;47583:12;;47568:10;:14;;:28;;;;:::i;:51::-;47548:71;-1:-1:-1;47636:23:0;47548:71;47662:28;47675:15;47662:10;:28;:::i;:::-;:40;;;;:::i;:::-;47740:1;47719:18;:22;;;47752:18;:22;;;47785:12;:16;;;47836:9;;47828:45;;47636:66;;-1:-1:-1;;;;;;47836:9:0;;47859;;47828:45;47740:1;47828:45;47859:9;47836;47828:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47815:58:0;;-1:-1:-1;;47890:19:0;;;;;:42;;;47931:1;47913:15;:19;47890:42;47887:210;;;47948:46;47961:15;47978;47948:12;:46::i;:::-;48066:18;;48014:71;;;18338:25:1;;;18394:2;18379:18;;18372:34;;;18422:18;;;18415:34;;;;48014:71:0;;;;;;18326:2:1;48014:71:0;;;47887:210;48134:15;;48126:63;;-1:-1:-1;;;;;48134:15:0;;;;48163:21;;48126:63;;;;48163:21;48134:15;48126:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;46620:1577:0:o;48662:769::-;48755:15;48738:14;:32;48857:29;;-1:-1:-1;;;48857:29:0;;-1:-1:-1;;;;;48872:13:0;1707:32:1;48857:29:0;;;1689:51:1;48719:4:0;;;;48857;;:14;;1662:18:1;;48857:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48826:60;;48937:20;48960:53;49007:5;48960:42;48985:16;;48960:20;:24;;:42;;;;:::i;:53::-;48937:76;-1:-1:-1;49119:16:0;;49115:109;;49151:61;49167:13;49190:6;49199:12;49151:15;:61::i;:::-;49300:19;49337:13;49300:51;;49362:4;-1:-1:-1;;;;;49362:9:0;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;49389:12:0;;;;-1:-1:-1;49389:12:0;;-1:-1:-1;49389:12:0;49419:4;49412:11;;;;;48662:769;:::o;19904:279::-;19990:7;20025:12;20018:5;20010:28;;;;-1:-1:-1;;;20010:28:0;;;;;;;;:::i;:::-;-1:-1:-1;20049:9:0;20061:5;20065:1;20061;:5;:::i;17432:136::-;17490:7;17517:43;17521:1;17524;17517:43;;;;;;;;;;;;;;;;;:3;:43::i;45481:597::-;45634:16;;;45648:1;45634:16;;;;;;;;45610:21;;45634:16;;;;;;;;;;-1:-1:-1;45634:16:0;45610:40;;45679:4;45661;45666:1;45661:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;45661:23:0;;;-1:-1:-1;;;;;45661:23:0;;;;;45705:15;-1:-1:-1;;;;;45705:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45695:4;45700:1;45695:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;45695:32:0;;;-1:-1:-1;;;;;45695:32:0;;;;;45741:62;45758:4;45773:15;45791:11;45741:8;:62::i;:::-;45843:224;;-1:-1:-1;;;45843:224:0;;-1:-1:-1;;;;;45843:15:0;:66;;;;:224;;45924:11;;45950:1;;45994:4;;46021;;46041:15;;45843:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45536:542;45481:597;:::o;46093:518::-;46241:62;46258:4;46273:15;46291:11;46241:8;:62::i;:::-;46347:256;;-1:-1:-1;;;46347:256:0;;46419:4;46347:256;;;20174:34:1;20224:18;;;20217:34;;;46465:1:0;20267:18:1;;;20260:34;;;20310:18;;;20303:34;30208:42:0;20353:19:1;;;20346:44;46577:15:0;20406:19:1;;;20399:35;46347:15:0;-1:-1:-1;;;;;46347:31:0;;;;46386:9;;20108:19:1;;46347:256:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;14:597:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:1;574:15;-1:-1:-1;;570:29:1;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:1:o;616:131::-;-1:-1:-1;;;;;691:31:1;;681:42;;671:70;;737:1;734;727:12;671:70;616:131;:::o;752:315::-;820:6;828;881:2;869:9;860:7;856:23;852:32;849:52;;;897:1;894;887:12;849:52;936:9;923:23;955:31;980:5;955:31;:::i;:::-;1005:5;1057:2;1042:18;;;;1029:32;;-1:-1:-1;;;752:315:1:o;1264:247::-;1323:6;1376:2;1364:9;1355:7;1351:23;1347:32;1344:52;;;1392:1;1389;1382:12;1344:52;1431:9;1418:23;1450:31;1475:5;1450:31;:::i;1933:180::-;1992:6;2045:2;2033:9;2024:7;2020:23;2016:32;2013:52;;;2061:1;2058;2051:12;2013:52;-1:-1:-1;2084:23:1;;1933:180;-1:-1:-1;1933:180:1:o;2118:456::-;2195:6;2203;2211;2264:2;2252:9;2243:7;2239:23;2235:32;2232:52;;;2280:1;2277;2270:12;2232:52;2319:9;2306:23;2338:31;2363:5;2338:31;:::i;:::-;2388:5;-1:-1:-1;2445:2:1;2430:18;;2417:32;2458:33;2417:32;2458:33;:::i;:::-;2118:456;;2510:7;;-1:-1:-1;;;2564:2:1;2549:18;;;;2536:32;;2118:456::o;2976:160::-;3041:20;;3097:13;;3090:21;3080:32;;3070:60;;3126:1;3123;3116:12;3141:316;3215:6;3223;3231;3284:2;3272:9;3263:7;3259:23;3255:32;3252:52;;;3300:1;3297;3290:12;3252:52;3336:9;3323:23;3313:33;;3393:2;3382:9;3378:18;3365:32;3355:42;;3416:35;3447:2;3436:9;3432:18;3416:35;:::i;:::-;3406:45;;3141:316;;;;;:::o;3462:315::-;3527:6;3535;3588:2;3576:9;3567:7;3563:23;3559:32;3556:52;;;3604:1;3601;3594:12;3556:52;3643:9;3630:23;3662:31;3687:5;3662:31;:::i;:::-;3712:5;-1:-1:-1;3736:35:1;3767:2;3752:18;;3736:35;:::i;:::-;3726:45;;3462:315;;;;;:::o;3782:316::-;3859:6;3867;3875;3928:2;3916:9;3907:7;3903:23;3899:32;3896:52;;;3944:1;3941;3934:12;3896:52;-1:-1:-1;;3967:23:1;;;4037:2;4022:18;;4009:32;;-1:-1:-1;4088:2:1;4073:18;;;4060:32;;3782:316;-1:-1:-1;3782:316:1:o;4103:180::-;4159:6;4212:2;4200:9;4191:7;4187:23;4183:32;4180:52;;;4228:1;4225;4218:12;4180:52;4251:26;4267:9;4251:26;:::i;4288:367::-;4351:8;4361:6;4415:3;4408:4;4400:6;4396:17;4392:27;4382:55;;4433:1;4430;4423:12;4382:55;-1:-1:-1;4456:20:1;;4499:18;4488:30;;4485:50;;;4531:1;4528;4521:12;4485:50;4568:4;4560:6;4556:17;4544:29;;4628:3;4621:4;4611:6;4608:1;4604:14;4596:6;4592:27;4588:38;4585:47;4582:67;;;4645:1;4642;4635:12;4582:67;4288:367;;;;;:::o;4660:770::-;4779:6;4787;4795;4803;4856:2;4844:9;4835:7;4831:23;4827:32;4824:52;;;4872:1;4869;4862:12;4824:52;4912:9;4899:23;4941:18;4982:2;4974:6;4971:14;4968:34;;;4998:1;4995;4988:12;4968:34;5037:70;5099:7;5090:6;5079:9;5075:22;5037:70;:::i;:::-;5126:8;;-1:-1:-1;5011:96:1;-1:-1:-1;5214:2:1;5199:18;;5186:32;;-1:-1:-1;5230:16:1;;;5227:36;;;5259:1;5256;5249:12;5227:36;;5298:72;5362:7;5351:8;5340:9;5336:24;5298:72;:::i;:::-;4660:770;;;;-1:-1:-1;5389:8:1;-1:-1:-1;;;;4660:770:1:o;5435:388::-;5503:6;5511;5564:2;5552:9;5543:7;5539:23;5535:32;5532:52;;;5580:1;5577;5570:12;5532:52;5619:9;5606:23;5638:31;5663:5;5638:31;:::i;:::-;5688:5;-1:-1:-1;5745:2:1;5730:18;;5717:32;5758:33;5717:32;5758:33;:::i;:::-;5810:7;5800:17;;;5435:388;;;;;:::o;5828:454::-;5923:6;5931;5939;5947;5955;6008:3;5996:9;5987:7;5983:23;5979:33;5976:53;;;6025:1;6022;6015:12;5976:53;-1:-1:-1;;6048:23:1;;;6118:2;6103:18;;6090:32;;-1:-1:-1;6169:2:1;6154:18;;6141:32;;6220:2;6205:18;;6192:32;;-1:-1:-1;6271:3:1;6256:19;6243:33;;-1:-1:-1;5828:454:1;-1:-1:-1;5828:454:1:o;6287:380::-;6366:1;6362:12;;;;6409;;;6430:61;;6484:4;6476:6;6472:17;6462:27;;6430:61;6537:2;6529:6;6526:14;6506:18;6503:38;6500:161;;;6583:10;6578:3;6574:20;6571:1;6564:31;6618:4;6615:1;6608:15;6646:4;6643:1;6636:15;6500:161;;6287:380;;;:::o;6672:356::-;6874:2;6856:21;;;6893:18;;;6886:30;6952:34;6947:2;6932:18;;6925:62;7019:2;7004:18;;6672:356::o;7033:127::-;7094:10;7089:3;7085:20;7082:1;7075:31;7125:4;7122:1;7115:15;7149:4;7146:1;7139:15;7165:168;7205:7;7271:1;7267;7263:6;7259:14;7256:1;7253:21;7248:1;7241:9;7234:17;7230:45;7227:71;;;7278:18;;:::i;:::-;-1:-1:-1;7318:9:1;;7165:168::o;7338:217::-;7378:1;7404;7394:132;;7448:10;7443:3;7439:20;7436:1;7429:31;7483:4;7480:1;7473:15;7511:4;7508:1;7501:15;7394:132;-1:-1:-1;7540:9:1;;7338:217::o;8813:128::-;8853:3;8884:1;8880:6;8877:1;8874:13;8871:39;;;8890:18;;:::i;:::-;-1:-1:-1;8926:9:1;;8813:128::o;10135:127::-;10196:10;10191:3;10187:20;10184:1;10177:31;10227:4;10224:1;10217:15;10251:4;10248:1;10241:15;10267:135;10306:3;-1:-1:-1;;10327:17:1;;10324:43;;;10347:18;;:::i;:::-;-1:-1:-1;10394:1:1;10383:13;;10267:135::o;12429:184::-;12499:6;12552:2;12540:9;12531:7;12527:23;12523:32;12520:52;;;12568:1;12565;12558:12;12520:52;-1:-1:-1;12591:16:1;;12429:184;-1:-1:-1;12429:184:1:o;14140:401::-;14342:2;14324:21;;;14381:2;14361:18;;;14354:30;14420:34;14415:2;14400:18;;14393:62;-1:-1:-1;;;14486:2:1;14471:18;;14464:35;14531:3;14516:19;;14140:401::o;14546:399::-;14748:2;14730:21;;;14787:2;14767:18;;;14760:30;14826:34;14821:2;14806:18;;14799:62;-1:-1:-1;;;14892:2:1;14877:18;;14870:33;14935:3;14920:19;;14546:399::o;17394:125::-;17434:4;17462:1;17459;17456:8;17453:34;;;17467:18;;:::i;:::-;-1:-1:-1;17504:9:1;;17394:125::o;18592:251::-;18662:6;18715:2;18703:9;18694:7;18690:23;18686:32;18683:52;;;18731:1;18728;18721:12;18683:52;18763:9;18757:16;18782:31;18807:5;18782:31;:::i;18848:980::-;19110:4;19158:3;19147:9;19143:19;19189:6;19178:9;19171:25;19215:2;19253:6;19248:2;19237:9;19233:18;19226:34;19296:3;19291:2;19280:9;19276:18;19269:31;19320:6;19355;19349:13;19386:6;19378;19371:22;19424:3;19413:9;19409:19;19402:26;;19463:2;19455:6;19451:15;19437:29;;19484:1;19494:195;19508:6;19505:1;19502:13;19494:195;;;19573:13;;-1:-1:-1;;;;;19569:39:1;19557:52;;19664:15;;;;19629:12;;;;19605:1;19523:9;19494:195;;;-1:-1:-1;;;;;;;19745:32:1;;;;19740:2;19725:18;;19718:60;-1:-1:-1;;;19809:3:1;19794:19;19787:35;19706:3;18848:980;-1:-1:-1;;;18848:980:1:o;20445:306::-;20533:6;20541;20549;20602:2;20590:9;20581:7;20577:23;20573:32;20570:52;;;20618:1;20615;20608:12;20570:52;20647:9;20641:16;20631:26;;20697:2;20686:9;20682:18;20676:25;20666:35;;20741:2;20730:9;20726:18;20720:25;20710:35;;20445:306;;;;;:::o

Swarm Source

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