ETH Price: $3,451.90 (+0.07%)
Gas: 6 Gwei

Token

MISS PIGGY (PIGGY)
 

Overview

Max Total Supply

1,000,000,000 PIGGY

Holders

61

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
memejuice.eth
Balance
1,079,341.321130939305350066 PIGGY

Value
$0.00
0xf038e4fd02d1e39f0e1f56987707c85c0f809cd8
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:
PIGGY

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-04-17
*/

/*

 Miss Piggy — $PIGGY
 Telegram: https://t.me/The_Amazing_Mrs_Piggy
 Twitter: https://twitter.com/AmazingMrsPiggy
 Website: https://misspiggy.live/

 Miss Piggy, the perfect match for Kermit, offering a revolutionary 
 new meme staking utility that will make memecoins great again! Get ready for the piggybank!

*/

// SPDX-License-Identifier: MIT                                                                               
                                                    
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;
    }
}

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 PIGGY is ERC20, Ownable {
    using SafeMath for uint256;

    mapping (address => uint256) private _rOwned;
    uint256 private constant MAX = ~uint256(0);
    uint256 private constant _tTotal = 1 * 1e9 * 1e18;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;
    
    uint256 public maxTransactionAmount = _tTotal * 1 / 100; // 1% maxTransactionAmountTxn
    uint256 public maxWallet = _tTotal * 1 / 100; // 1% maxWallet
    uint256 public swapTokensAtAmount = _tTotal * 1 / 100000; // 0.001% swap wallet

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant deadAddress = address(0xdead);

    bool private swapping;

    address public marketingWallet;
    address public devWallet;
    
    uint256 public percentForLPBurn = 25; // 25 = .25%
    bool public lpBurnEnabled = true;
    uint256 public lpBurnFrequency = 360000 seconds;
    uint256 public lastLpBurnTime;
    
    uint256 public manualBurnFrequency = 30 minutes;
    uint256 public lastManualLpBurnTime;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;
    
     // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
    bool public transferDelayEnabled = true;

    uint256 public buyTotalFees;
    uint256 public buyMarketingFee = 30;
    uint256 public buyLiquidityFee = 0;
    uint256 public buyDevFee = 0;
    uint256 public buyReflectionFee = 0;
    
    uint256 public sellTotalFees;
    uint256 public sellMarketingFee = 10;
    uint256 public sellLiquidityFee = 0;
    uint256 public sellDevFee = 0;
    uint256 public sellReflectionFee = 0;

    // Penalty Fee for first Sell
    uint256 public totalFeesForPenalty;
    uint256 public earlySellMarketingFee = 0;
    uint256 public earlySellLiquidityFee = 0;

    // Penalty Fee Time
    uint256 public _penaltyFeeTime = 0; // by seconds units

    // Bots
    mapping(address => bool) public bots;

    // block number of opened trading
    uint256 launchedAt;
    
    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;

    mapping (address => uint256) private _holderFirstBuyTimestamp;
    
    /******************/

    // exclude from fees, max transaction amount and max wallet amount
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public _isExcludedMaxTransactionAmount;
    mapping (address => bool) public _isExcludedMaxWalletAmount;

    // 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 ExcludeFromFees(address indexed account, bool isExcluded);

    event ExcludeFromMaxTransaction(address indexed account, bool isExcluded);

    event ExcludeFromMaxWallet(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("MISS PIGGY", "PIGGY") {
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        excludeFromMaxWallet(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;
        
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        excludeFromMaxWallet(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
        totalFeesForPenalty = earlySellMarketingFee + earlySellLiquidityFee + sellDevFee;
        
        marketingWallet = address(0x68dB3458Aa07f1d26D6cb4f16B1Bc4f86c7325Ff); // set as marketing wallet
        devWallet = address(0x68dB3458Aa07f1d26D6cb4f16B1Bc4f86c7325Ff); // set as dev wallet

        _rOwned[_msgSender()] = _rTotal;

        // exclude from paying fees or having max transaction amount, max wallet amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);

        excludeFromMaxWallet(owner(), true);
        excludeFromMaxWallet(address(this), true);
        excludeFromMaxWallet(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, _tTotal);
    }

    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;
    }
    
     // change the minimum amount of tokens to swap
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool) {
  	    require(newAmount >= (totalSupply() * 1 / 100000) / 1e18, "Swap amount cannot be lower than 0.001% total supply.");
  	    require(newAmount <= (totalSupply() * 5 / 1000) / 1e18, "Swap amount cannot be higher than 0.5% total supply.");
  	    swapTokensAtAmount = newAmount * (10**18);
  	    return true;
  	}
    
    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(newNum <= (totalSupply() * 1 / 100) / 1e18, "Cannot set maxTransactionAmount lower than 1%");
        maxTransactionAmount = newNum * (10**18);
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(newNum <= (totalSupply() * 1 / 100) / 1e18, "Cannot set maxWallet lower than 1%");
        maxWallet = newNum * (10**18);
    }
    
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
        emit ExcludeFromMaxTransaction(updAds, isEx);
    }

    function excludeFromMaxWallet(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxWalletAmount[updAds] = isEx;
        emit ExcludeFromMaxWallet(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, uint256 _reflectionFee) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _devFee;
        buyReflectionFee = _reflectionFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
        require(buyTotalFees + buyReflectionFee <= 40, "Must keep fees at 40% or less");
    }
    
    function updateSellFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee, uint256 _reflectionFee) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        sellReflectionFee = _reflectionFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
        require(sellTotalFees + sellReflectionFee <= 20, "Must keep fees at 20% or less");
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function setAutomatedMarketMakerPair(address pair, bool value) external 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) external view returns(bool) {
        return _isExcludedFromFees[account];
    }

    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(amount > 0, "Transfer amount must be greater than zero");
        require(!bots[from] && !bots[to], "TOKEN: the account is blacklisted!");
        
        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.");
                }

                if (!_isExcludedMaxTransactionAmount[from]) {
                    require(amount <= maxTransactionAmount, "transfer amount exceeds the maxTransactionAmount.");
                }

                if (!_isExcludedMaxWalletAmount[to]) {
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
            }
        }

        // anti bot logic
        if (block.number <= (launchedAt + 5) && 
                to != uniswapV2Pair && 
                to != address(uniswapV2Router)
            ) { 
            bots[to] = true;
        }
        
		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;
        uint256 reflectionFee = 0;
        // only take fees on buys/sells, do not take on wallet transfers after penalty time
        if (takeFee) {
            // on buy
            if (automatedMarketMakerPairs[from] && to != address(uniswapV2Router)) {
                if (_holderFirstBuyTimestamp[to] == 0) {
                    _holderFirstBuyTimestamp[to] = block.timestamp;
                }

        	    fees = amount.mul(buyTotalFees).div(100);
                reflectionFee = buyReflectionFee;
                getTokensForFees(amount, buyMarketingFee, buyLiquidityFee, buyDevFee);
            }
            // on sell
            else if (automatedMarketMakerPairs[to] && from != address(uniswapV2Router)) {
                if (_holderFirstBuyTimestamp[from] != 0 && (_holderFirstBuyTimestamp[from] + _penaltyFeeTime >= block.timestamp)) {
                    fees = amount.mul(totalFeesForPenalty).div(100);
                    reflectionFee = sellReflectionFee;
                    getTokensForFees(amount, earlySellMarketingFee, earlySellLiquidityFee, sellDevFee);
                } else {
                    fees = amount.mul(sellTotalFees).div(100);
                    reflectionFee = sellReflectionFee;
                    getTokensForFees(amount, sellMarketingFee, sellLiquidityFee, sellDevFee);
                }
            }
            // on transfer
            else if (!automatedMarketMakerPairs[from] && !automatedMarketMakerPairs[to]) {
                if (_holderFirstBuyTimestamp[from] != 0 && (_holderFirstBuyTimestamp[from] + _penaltyFeeTime >= block.timestamp)) {
                    fees = amount.mul(totalFeesForPenalty).div(100);
                    reflectionFee = sellReflectionFee;
                    getTokensForFees(amount, earlySellMarketingFee, earlySellLiquidityFee, sellDevFee);
                }
            }
            
            if (fees > 0) {
                _tokenTransfer(from, address(this), fees, 0);
        	    amount -= fees;
            }
        }

        _tokenTransfer(from, to, amount, reflectionFee);
    }

    function getTokensForFees(uint256 _amount, uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee) private {
        tokensForMarketing += _amount.mul(_marketingFee).div(100);
        tokensForLiquidity += _amount.mul(_liquidityFee).div(100);
        tokensForDev += _amount.mul(_devFee).div(100);
    }

    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;}
        
        // 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, liquidityTokens);
        }
        
        (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, "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 = 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){
            _tokenTransfer(uniswapV2Pair, address(0xdead), amountToBurn, 0);
        }
        
        //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 = 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){
            _tokenTransfer(uniswapV2Pair, address(0xdead), amountToBurn, 0);
        }
        
        //sync price since this is not in a swap transaction!
        IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair);
        pair.sync();
        emit ManualNukeLP();
        return true;
    }

    // Get first Buy time
    function originalPurchase(address account) external view returns (uint256) {
        return _holderFirstBuyTimestamp[account];
    }

    // Set Penalty Fee
    function setPenaltyFee(uint256 _earlySellMarketingFee, uint256 _earlySellLiquidityFee) external onlyOwner {
        earlySellMarketingFee = _earlySellMarketingFee;
        earlySellLiquidityFee = _earlySellLiquidityFee;
        totalFeesForPenalty = earlySellMarketingFee + earlySellLiquidityFee + sellDevFee;
        require(totalFeesForPenalty + sellReflectionFee <= 20, "Must keep fees at 20% or less");
    }

    // Set Penalty Fee Time
    function setPenaltyFeeTime(uint256 time) external onlyOwner {
        _penaltyFeeTime = time;
    }

    // Reflection
    function totalSupply() public pure override returns (uint256) {
        return _tTotal;
    }

    function balanceOf(address account) public view override returns (uint256) {
        return tokenFromReflection(_rOwned[account]);
    }

    function tokenFromReflection(uint256 rAmount) private view returns(uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        uint256 currentRate =  _getRate();
        return rAmount.div(currentRate);
    }

    function _tokenTransfer(address sender, address recipient, uint256 amount, uint256 reflectionFee) private {      
        _transferStandard(sender, recipient, amount, reflectionFee);
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount, uint256 reflectionFee) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee) = _getValues(tAmount, reflectionFee);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }

    function _getValues(uint256 tAmount, uint256 reflectionFee) private view returns (uint256, uint256, uint256, uint256, uint256) {
        (uint256 tTransferAmount, uint256 tFee) = _getTValues(tAmount, reflectionFee);
        uint256 currentRate =  _getRate();
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, currentRate);
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee);
    }

    function _getTValues(uint256 tAmount, uint256 reflectionFee) private pure returns (uint256, uint256) {
        uint256 tFee = tAmount.mul(reflectionFee).div(100);
        uint256 tTransferAmount = tAmount.sub(tFee);
        return (tTransferAmount, tFee);
    }

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee);
        return (rAmount, rTransferAmount, rFee);
    }

    function _getRate() private view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;

        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }

    // Bots
    function manageBots(address[] calldata _addresses, bool _isBot) external onlyOwner {
        for (uint256 i = 0; i < _addresses.length; i++) {
            bots[_addresses[i]] = _isBot;
        }
    }
}

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":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"DevWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromMaxTransaction","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromMaxWallet","type":"event"},{"anonymous":false,"inputs":[],"name":"ManualNukeLP","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"},{"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"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxWalletAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_penaltyFeeTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","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":"","type":"address"}],"name":"bots","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"buyReflectionFee","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":"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":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxWallet","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":[{"internalType":"address[]","name":"_addresses","type":"address[]"},{"internalType":"bool","name":"_isBot","type":"bool"}],"name":"manageBots","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"address","name":"account","type":"address"}],"name":"originalPurchase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"sellReflectionFee","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":"uint256","name":"_earlySellMarketingFee","type":"uint256"},{"internalType":"uint256","name":"_earlySellLiquidityFee","type":"uint256"}],"name":"setPenaltyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"setPenaltyFeeTime","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":"totalFeesForPenalty","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","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"},{"internalType":"uint256","name":"_reflectionFee","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":"_reflectionFee","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"}]

60c06040526200001e6b033b2e3c9fd0803ce8000000600019620009f7565b6200002c9060001962000a24565b60075560646200004a6b033b2e3c9fd0803ce8000000600162000a3e565b62000056919062000a60565b6009556064620000746b033b2e3c9fd0803ce8000000600162000a3e565b62000080919062000a60565b600a55620186a0620000a06b033b2e3c9fd0803ce8000000600162000a3e565b620000ac919062000a60565b600b556019600e819055600f8054600160ff19918216811790925562057e406010556107086012556014805462ffffff191683179055601680549091169091179055601e6018819055600091829055601a829055601b829055600a601d55819055601f8190556020819055602281905560238190556024553480156200013157600080fd5b50604080518082018252600a8152694d49535320504947475960b01b602080830191825283518085019094526005845264504947475960d81b90840152815191929162000181916003916200093b565b508051620001979060049060208401906200093b565b5050506000620001ac6200058660201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350737a250d5630b4cf539739df2c5dacb4c659f2488d6200021c8160016200058a565b6200022981600162000639565b6001600160a01b03811660808190526040805163c45a015560e01b8152905163c45a015591600480820192602092909190829003018186803b1580156200026f57600080fd5b505afa15801562000284573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002aa919062000a77565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620002f357600080fd5b505afa15801562000308573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200032e919062000a77565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200037757600080fd5b505af11580156200038c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003b2919062000a77565b6001600160a01b031660a0819052620003cd9060016200058a565b60a051620003dd90600162000639565b60a051620003ed906001620006dd565b601a5460195460185462000402919062000aa2565b6200040e919062000aa2565b601755601f54601e54601d5462000426919062000aa2565b62000432919062000aa2565b601c55601f546023546022546200044a919062000aa2565b62000456919062000aa2565b602155600c80547468db3458aa07f1d26d6cb4f16b1bc4f86c7325ff00610100600160a81b0319909116179055600d80546001600160a01b0319167368db3458aa07f1d26d6cb4f16b1bc4f86c7325ff17905560075433600090815260066020526040902055600554620004d5906001600160a01b0316600162000731565b620004e230600162000731565b620004f161dead600162000731565b62000510620005086005546001600160a01b031690565b60016200058a565b6200051d3060016200058a565b6200052c61dead60016200058a565b6200054b620005436005546001600160a01b031690565b600162000639565b6200055830600162000639565b6200056761dead600162000639565b6200057f336b033b2e3c9fd0803ce8000000620007d5565b5062000afa565b3390565b6005546001600160a01b03163314620005d95760405162461bcd60e51b81526020600482018190526024820152600080516020620046c683398151915260448201526064015b60405180910390fd5b6001600160a01b0382166000818152602c6020908152604091829020805460ff191685151590811790915591519182527fe0a7c1f8826ab3d62a6e242681ccca3828462e5c87816004b9f8d655b22d5f0891015b60405180910390a25050565b6005546001600160a01b03163314620006845760405162461bcd60e51b81526020600482018190526024820152600080516020620046c68339815191526044820152606401620005d0565b6001600160a01b0382166000818152602d6020908152604091829020805460ff191685151590811790915591519182527f4a8452f723db48bf05f301f94d62a2cf7a72976cde77d83e3646584858b8f4b291016200062d565b6001600160a01b0382166000818152602e6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6005546001600160a01b031633146200077c5760405162461bcd60e51b81526020600482018190526024820152600080516020620046c68339815191526044820152606401620005d0565b6001600160a01b0382166000818152602b6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df791016200062d565b6001600160a01b0382166200082d5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620005d0565b6200084981600254620008d160201b62001e831790919060201c565b6002556001600160a01b038216600090815260208181526040909120546200087c91839062001e83620008d1821b17901c565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b600080620008e0838562000aa2565b905083811015620009345760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401620005d0565b9392505050565b828054620009499062000abd565b90600052602060002090601f0160209004810192826200096d5760008555620009b8565b82601f106200098857805160ff1916838001178555620009b8565b82800160010185558215620009b8579182015b82811115620009b85782518255916020019190600101906200099b565b50620009c6929150620009ca565b5090565b5b80821115620009c65760008155600101620009cb565b634e487b7160e01b600052601260045260246000fd5b60008262000a095762000a09620009e1565b500690565b634e487b7160e01b600052601160045260246000fd5b60008282101562000a395762000a3962000a0e565b500390565b600081600019048311821515161562000a5b5762000a5b62000a0e565b500290565b60008262000a725762000a72620009e1565b500490565b60006020828403121562000a8a57600080fd5b81516001600160a01b03811681146200093457600080fd5b6000821982111562000ab85762000ab862000a0e565b500190565b600181811c9082168062000ad257607f821691505b6020821081141562000af457634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a051613b2862000b9e6000396000818161071b015281816114ea01528181611d6201528181611dad01528181611ddb0152818161233b015281816125f401528181612f1a01528181612f6a0152612f980152600081816104e9015281816122fd0152818161263201528181612863015281816129330152818161328c01528181613354015281816133900152818161340a01526134670152613b286000f3fe6080604052600436106104405760003560e01c80638a030c3b11610234578063bfd792841161012e578063d85ba063116100b6578063f11a24d31161007a578063f11a24d314610cd5578063f2fde38b14610ceb578063f637434214610d0b578063f8b45b0514610d21578063fe72b27a14610d3757600080fd5b8063d85ba06314610c2e578063dd62ed3e14610c44578063e2f4560514610c8a578063e7ad9fcd14610ca0578063e884f26014610cc057600080fd5b8063c876d0b9116100fd578063c876d0b914610b88578063c8c8ebe414610ba2578063cc653b4414610bb8578063d257b34f14610bee578063d2fcc00114610c0e57600080fd5b8063bfd7928414610af8578063c024666814610b28578063c18bc19514610b48578063c5377ae514610b6857600080fd5b80639c3b4fdc116101bc578063a4c82a0011610180578063a4c82a0014610a53578063a9059cbb14610a69578063aacebbe314610a89578063b62496f514610aa9578063bbc0c74214610ad957600080fd5b80639c3b4fdc146109db5780639ec22c0e146109f15780639fccce3214610a07578063a0d82dc514610a1d578063a457c2d714610a3357600080fd5b806392136913116102035780639213691314610940578063924de9b71461095657806395d89b411461097657806396880b171461098b5780639a7a23d6146109bb57600080fd5b80638a030c3b146108d75780638a8c523c146108ed5780638da5cb5b146109025780638ea5220f1461092057600080fd5b8063313ce567116103455780636a486a8e116102cd578063730c188811610291578063730c188814610847578063751039fc146108675780637571336a1461087c57806375f0a8741461089c5780637bce5a04146108c157600080fd5b80636a486a8e146107bc5780636ddd1713146107d257806370a08231146107f257806370d555a914610812578063715018a61461083257600080fd5b806349bd5a5e1161031457806349bd5a5e146107095780634a62bb651461073d5780634fbee19314610757578063541a43cf146107905780636042f719146107a657600080fd5b8063313ce5671461069757806336679e6e146106b357806339509351146106c9578063438cb27b146106e957600080fd5b80631f3fed8f116103c857806327c8f8351161039757806327c8f8351461061b5780632bf3d42d146106315780632c3e486c146106475780632e6ed7ef1461065d5780632e82f1a01461067d57600080fd5b80631f3fed8f146105af578063203e727e146105c557806323136371146105e557806323b872dd146105fb57600080fd5b806318160ddd1161040f57806318160ddd146105235780631816467f1461054b578063184c16c51461056d578063199ffc72146105835780631a8145bb1461059957600080fd5b806306fdde031461044c578063095ea7b31461047757806310d5de53146104a75780631694505e146104d757600080fd5b3661044757005b600080fd5b34801561045857600080fd5b50610461610d57565b60405161046e9190613615565b60405180910390f35b34801561048357600080fd5b50610497610492366004613682565b610de9565b604051901515815260200161046e565b3480156104b357600080fd5b506104976104c23660046136ae565b602c6020526000908152604090205460ff1681565b3480156104e357600080fd5b5061050b7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161046e565b34801561052f57600080fd5b50676765c793fa10079d601b1b5b60405190815260200161046e565b34801561055757600080fd5b5061056b6105663660046136ae565b610e00565b005b34801561057957600080fd5b5061053d60125481565b34801561058f57600080fd5b5061053d600e5481565b3480156105a557600080fd5b5061053d60285481565b3480156105bb57600080fd5b5061053d60275481565b3480156105d157600080fd5b5061056b6105e03660046136cb565b610e90565b3480156105f157600080fd5b5061053d601b5481565b34801561060757600080fd5b506104976106163660046136e4565b610f6c565b34801561062757600080fd5b5061050b61dead81565b34801561063d57600080fd5b5061053d60225481565b34801561065357600080fd5b5061053d60105481565b34801561066957600080fd5b5061056b610678366004613725565b610fd5565b34801561068957600080fd5b50600f546104979060ff1681565b3480156106a357600080fd5b506040516012815260200161046e565b3480156106bf57600080fd5b5061053d60245481565b3480156106d557600080fd5b506104976106e4366004613682565b611091565b3480156106f557600080fd5b5061056b610704366004613757565b6110c7565b34801561071557600080fd5b5061050b7f000000000000000000000000000000000000000000000000000000000000000081565b34801561074957600080fd5b506014546104979060ff1681565b34801561076357600080fd5b506104976107723660046136ae565b6001600160a01b03166000908152602b602052604090205460ff1690565b34801561079c57600080fd5b5061053d60235481565b3480156107b257600080fd5b5061053d60205481565b3480156107c857600080fd5b5061053d601c5481565b3480156107de57600080fd5b506014546104979062010000900460ff1681565b3480156107fe57600080fd5b5061053d61080d3660046136ae565b611179565b34801561081e57600080fd5b5061056b61082d3660046136cb565b61119b565b34801561083e57600080fd5b5061056b6111ca565b34801561085357600080fd5b5061056b610862366004613789565b61123e565b34801561087357600080fd5b5061049761135d565b34801561088857600080fd5b5061056b6108973660046137be565b61139a565b3480156108a857600080fd5b50600c5461050b9061010090046001600160a01b031681565b3480156108cd57600080fd5b5061053d60185481565b3480156108e357600080fd5b5061053d60215481565b3480156108f957600080fd5b5061056b611424565b34801561090e57600080fd5b506005546001600160a01b031661050b565b34801561092c57600080fd5b50600d5461050b906001600160a01b031681565b34801561094c57600080fd5b5061053d601d5481565b34801561096257600080fd5b5061056b6109713660046137f3565b611469565b34801561098257600080fd5b506104616114af565b34801561099757600080fd5b506104976109a63660046136ae565b602d6020526000908152604090205460ff1681565b3480156109c757600080fd5b5061056b6109d63660046137be565b6114be565b3480156109e757600080fd5b5061053d601a5481565b3480156109fd57600080fd5b5061053d60135481565b348015610a1357600080fd5b5061053d60295481565b348015610a2957600080fd5b5061053d601f5481565b348015610a3f57600080fd5b50610497610a4e366004613682565b61159a565b348015610a5f57600080fd5b5061053d60115481565b348015610a7557600080fd5b50610497610a84366004613682565b6115e9565b348015610a9557600080fd5b5061056b610aa43660046136ae565b6115f6565b348015610ab557600080fd5b50610497610ac43660046136ae565b602e6020526000908152604090205460ff1681565b348015610ae557600080fd5b5060145461049790610100900460ff1681565b348015610b0457600080fd5b50610497610b133660046136ae565b60256020526000908152604090205460ff1681565b348015610b3457600080fd5b5061056b610b433660046137be565b611688565b348015610b5457600080fd5b5061056b610b633660046136cb565b61170a565b348015610b7457600080fd5b5061056b610b8336600461380e565b6117db565b348015610b9457600080fd5b506016546104979060ff1681565b348015610bae57600080fd5b5061053d60095481565b348015610bc457600080fd5b5061053d610bd33660046136ae565b6001600160a01b03166000908152602a602052604090205490565b348015610bfa57600080fd5b50610497610c093660046136cb565b611876565b348015610c1a57600080fd5b5061056b610c293660046137be565b611a07565b348015610c3a57600080fd5b5061053d60175481565b348015610c5057600080fd5b5061053d610c5f366004613889565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610c9657600080fd5b5061053d600b5481565b348015610cac57600080fd5b5061056b610cbb366004613725565b611a89565b348015610ccc57600080fd5b50610497611b3f565b348015610ce157600080fd5b5061053d60195481565b348015610cf757600080fd5b5061056b610d063660046136ae565b611b7c565b348015610d1757600080fd5b5061053d601e5481565b348015610d2d57600080fd5b5061053d600a5481565b348015610d4357600080fd5b50610497610d523660046136cb565b611c67565b606060038054610d66906138c2565b80601f0160208091040260200160405190810160405280929190818152602001828054610d92906138c2565b8015610ddf5780601f10610db457610100808354040283529160200191610ddf565b820191906000526020600020905b815481529060010190602001808311610dc257829003601f168201915b5050505050905090565b6000610df6338484611ee9565b5060015b92915050565b6005546001600160a01b03163314610e335760405162461bcd60e51b8152600401610e2a906138fd565b60405180910390fd5b600d546040516001600160a01b03918216918316907f0db17895a9d092fb3ca24d626f2150dd80c185b0706b36f1040ee239f56cb87190600090a3600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610eba5760405162461bcd60e51b8152600401610e2a906138fd565b670de0b6b3a76400006064610edb676765c793fa10079d601b1b6001613948565b610ee59190613967565b610eef9190613967565b811115610f545760405162461bcd60e51b815260206004820152602d60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526c6c6f776572207468616e20312560981b6064820152608401610e2a565b610f6681670de0b6b3a7640000613948565b60095550565b6000610f7984848461200d565b610fcb8433610fc685604051806060016040528060288152602001613aa6602891396001600160a01b038a1660009081526001602090815260408083203384529091529020549190612b25565b611ee9565b5060019392505050565b6005546001600160a01b03163314610fff5760405162461bcd60e51b8152600401610e2a906138fd565b60188490556019839055601a829055601b8190558161101e8486613989565b6110289190613989565b6017819055601b5460289161103d9190613989565b111561108b5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420343025206f72206c6573730000006044820152606401610e2a565b50505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610df6918590610fc69086611e83565b6005546001600160a01b031633146110f15760405162461bcd60e51b8152600401610e2a906138fd565b60228290556023819055601f546111088284613989565b6111129190613989565b60218190556020546014916111279190613989565b11156111755760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610e2a565b5050565b6001600160a01b038116600090815260066020526040812054610dfa90612b5f565b6005546001600160a01b031633146111c55760405162461bcd60e51b8152600401610e2a906138fd565b602455565b6005546001600160a01b031633146111f45760405162461bcd60e51b8152600401610e2a906138fd565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146112685760405162461bcd60e51b8152600401610e2a906138fd565b6102588310156112d65760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e207468604482015272616e206576657279203130206d696e7574657360681b6064820152608401610e2a565b6103e88211156113415760405162461bcd60e51b815260206004820152603060248201527f4d75737420736574206175746f204c50206275726e2070657263656e7420626560448201526f747765656e20302520616e642031302560801b6064820152608401610e2a565b601092909255600e55600f805460ff1916911515919091179055565b6005546000906001600160a01b0316331461138a5760405162461bcd60e51b8152600401610e2a906138fd565b506014805460ff19169055600190565b6005546001600160a01b031633146113c45760405162461bcd60e51b8152600401610e2a906138fd565b6001600160a01b0382166000818152602c6020908152604091829020805460ff191685151590811790915591519182527fe0a7c1f8826ab3d62a6e242681ccca3828462e5c87816004b9f8d655b22d5f0891015b60405180910390a25050565b6005546001600160a01b0316331461144e5760405162461bcd60e51b8152600401610e2a906138fd565b6014805462ffff001916620101001790554260115543602655565b6005546001600160a01b031633146114935760405162461bcd60e51b8152600401610e2a906138fd565b60148054911515620100000262ff000019909216919091179055565b606060048054610d66906138c2565b6005546001600160a01b031633146114e85760405162461bcd60e51b8152600401610e2a906138fd565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156115905760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610e2a565b6111758282612bdc565b6000610df63384610fc685604051806060016040528060258152602001613ace602591393360009081526001602090815260408083206001600160a01b038d1684529091529020549190612b25565b6000610df633848461200d565b6005546001600160a01b031633146116205760405162461bcd60e51b8152600401610e2a906138fd565b600c546040516001600160a01b036101009092048216918316907f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6790600090a3600c80546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6005546001600160a01b031633146116b25760405162461bcd60e51b8152600401610e2a906138fd565b6001600160a01b0382166000818152602b6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df79101611418565b6005546001600160a01b031633146117345760405162461bcd60e51b8152600401610e2a906138fd565b670de0b6b3a76400006064611755676765c793fa10079d601b1b6001613948565b61175f9190613967565b6117699190613967565b8111156117c35760405162461bcd60e51b815260206004820152602260248201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015261312560f01b6064820152608401610e2a565b6117d581670de0b6b3a7640000613948565b600a5550565b6005546001600160a01b031633146118055760405162461bcd60e51b8152600401610e2a906138fd565b60005b8281101561108b578160256000868685818110611827576118276139a1565b905060200201602081019061183c91906136ae565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061186e816139b7565b915050611808565b6005546000906001600160a01b031633146118a35760405162461bcd60e51b8152600401610e2a906138fd565b670de0b6b3a7640000620186a06118c6676765c793fa10079d601b1b6001613948565b6118d09190613967565b6118da9190613967565b8210156119475760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610e2a565b670de0b6b3a76400006103e8611969676765c793fa10079d601b1b6005613948565b6119739190613967565b61197d9190613967565b8211156119e95760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610e2a565b6119fb82670de0b6b3a7640000613948565b600b555060015b919050565b6005546001600160a01b03163314611a315760405162461bcd60e51b8152600401610e2a906138fd565b6001600160a01b0382166000818152602d6020908152604091829020805460ff191685151590811790915591519182527f4a8452f723db48bf05f301f94d62a2cf7a72976cde77d83e3646584858b8f4b29101611418565b6005546001600160a01b03163314611ab35760405162461bcd60e51b8152600401610e2a906138fd565b601d849055601e839055601f829055602081905581611ad28486613989565b611adc9190613989565b601c819055602054601491611af19190613989565b111561108b5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610e2a565b6005546000906001600160a01b03163314611b6c5760405162461bcd60e51b8152600401610e2a906138fd565b506016805460ff19169055600190565b6005546001600160a01b03163314611ba65760405162461bcd60e51b8152600401610e2a906138fd565b6001600160a01b038116611c0b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610e2a565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546000906001600160a01b03163314611c945760405162461bcd60e51b8152600401610e2a906138fd565b601254601354611ca49190613989565b4211611cf25760405162461bcd60e51b815260206004820181905260248201527f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e6973686044820152606401610e2a565b6103e8821115611d575760405162461bcd60e51b815260206004820152602a60248201527f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60448201526906b656e7320696e204c560b41b6064820152608401610e2a565b426013556000611d867f0000000000000000000000000000000000000000000000000000000000000000611179565b90506000611da0612710611d9a8487612c30565b90612caf565b90508015611dd757611dd77f000000000000000000000000000000000000000000000000000000000000000061dead836000612cf1565b60007f00000000000000000000000000000000000000000000000000000000000000009050806001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611e3757600080fd5b505af1158015611e4b573d6000803e3d6000fd5b50506040517f8462566617872a3fbab94534675218431ff9e204063ee3f4f43d965626a39abb925060009150a1506001949350505050565b600080611e908385613989565b905083811015611ee25760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610e2a565b9392505050565b6001600160a01b038316611f4b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610e2a565b6001600160a01b038216611fac5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610e2a565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166120715760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610e2a565b6001600160a01b0382166120d35760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610e2a565b600081116121355760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610e2a565b6001600160a01b03831660009081526025602052604090205460ff1615801561217757506001600160a01b03821660009081526025602052604090205460ff16155b6121ce5760405162461bcd60e51b815260206004820152602260248201527f544f4b454e3a20746865206163636f756e7420697320626c61636b6c69737465604482015261642160f01b6064820152608401610e2a565b60145460ff16156125da576005546001600160a01b0384811691161480159061220557506005546001600160a01b03838116911614155b801561221957506001600160a01b03821615155b801561223057506001600160a01b03821661dead14155b801561223f5750600c5460ff16155b156125da57601454610100900460ff166122d7576001600160a01b0383166000908152602b602052604090205460ff168061229257506001600160a01b0382166000908152602b602052604090205460ff165b6122d75760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610e2a565b60165460ff161561241e576005546001600160a01b0383811691161480159061233257507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b801561237057507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b1561241e5732600090815260156020526040902054431161240b5760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610e2a565b3260009081526015602052604090204390555b6001600160a01b0383166000908152602e602052604090205460ff16801561245f57506001600160a01b0382166000908152602c602052604090205460ff16155b156124d4576009548111156124d45760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610e2a565b6001600160a01b0383166000908152602c602052604090205460ff16612560576009548111156125605760405162461bcd60e51b815260206004820152603160248201527f7472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152703930b739b0b1ba34b7b720b6b7bab73a1760791b6064820152608401610e2a565b6001600160a01b0382166000908152602d602052604090205460ff166125da57600a5461258c83611179565b6125969083613989565b11156125da5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610e2a565b6026546125e8906005613989565b431115801561262957507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b801561266757507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b15612690576001600160a01b0382166000908152602560205260409020805460ff191660011790555b600061269b30611179565b600b54909150811080159081906126ba575060145462010000900460ff165b80156126c95750600c5460ff16155b80156126ee57506001600160a01b0385166000908152602e602052604090205460ff16155b801561271357506001600160a01b0385166000908152602b602052604090205460ff16155b801561273857506001600160a01b0384166000908152602b602052604090205460ff16155b1561275d57600c805460ff19166001179055612752612cfd565b600c805460ff191690555b600c5460ff1615801561278857506001600160a01b0384166000908152602e602052604090205460ff165b80156127965750600f5460ff165b80156127b157506010546011546127ad9190613989565b4210155b80156127d657506001600160a01b0385166000908152602b602052604090205460ff16155b156127e5576127e3612f0e565b505b600c546001600160a01b0386166000908152602b602052604090205460ff9182161591168061282c57506001600160a01b0385166000908152602b602052604090205460ff165b15612835575060005b6000808215612b0f576001600160a01b0388166000908152602e602052604090205460ff16801561289857507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316876001600160a01b031614155b1561290e576001600160a01b0387166000908152602a60205260409020546128d6576001600160a01b0387166000908152602a602052604090204290555b6128f06064611d9a60175489612c3090919063ffffffff16565b9150601b54905061290986601854601954601a5461303f565b612aef565b6001600160a01b0387166000908152602e602052604090205460ff16801561296857507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316886001600160a01b031614155b15612a24576001600160a01b0388166000908152602a6020526040902054158015906129b957506024546001600160a01b0389166000908152602a602052604090205442916129b691613989565b10155b156129f1576129d86064611d9a60215489612c3090919063ffffffff16565b9150602054905061290986602254602354601f5461303f565b612a0b6064611d9a601c5489612c3090919063ffffffff16565b9150602054905061290986601d54601e54601f5461303f565b6001600160a01b0388166000908152602e602052604090205460ff16158015612a6657506001600160a01b0387166000908152602e602052604090205460ff16155b15612aef576001600160a01b0388166000908152602a602052604090205415801590612ab757506024546001600160a01b0389166000908152602a60205260409020544291612ab491613989565b10155b15612aef57612ad66064611d9a60215489612c3090919063ffffffff16565b91506020549050612aef86602254602354601f5461303f565b8115612b0f57612b028830846000612cf1565b612b0c82876139d2565b95505b612b1b88888884612cf1565b5050505050505050565b60008184841115612b495760405162461bcd60e51b8152600401610e2a9190613615565b506000612b5684866139d2565b95945050505050565b6000600754821115612bc65760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610e2a565b6000612bd06130b6565b9050611ee28382612caf565b6001600160a01b0382166000818152602e6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b600082612c3f57506000610dfa565b6000612c4b8385613948565b905082612c588583613967565b14611ee25760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610e2a565b6000611ee283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506130d9565b61108b84848484613107565b6000612d0830611179565b90506000602954602754602854612d1f9190613989565b612d299190613989565b90506000821580612d38575081155b15612d4257505050565b600060028360285486612d559190613948565b612d5f9190613967565b612d699190613967565b90506000612d7785836131f3565b905047612d8382613235565b6000612d8f47836131f3565b90506000612dac87611d9a60275485612c3090919063ffffffff16565b90506000612dc988611d9a60295486612c3090919063ffffffff16565b9050600081612dd884866139d2565b612de291906139d2565b6000602881905560278190556029819055600d546040519293506001600160a01b031691849181818185875af1925050503d8060008114612e3f576040519150601f19603f3d011682016040523d82523d6000602084013e612e44565b606091505b50909850508615801590612e585750600081115b15612ea957612e678782613404565b60408051878152602081018390529081018890527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b600c546040516101009091046001600160a01b0316904790600081818185875af1925050503d8060008114612efa576040519150601f19603f3d011682016040523d82523d6000602084013e612eff565b606091505b50505050505050505050505050565b42601155600080612f3e7f0000000000000000000000000000000000000000000000000000000000000000611179565b90506000612f5d612710611d9a600e5485612c3090919063ffffffff16565b90508015612f9457612f947f000000000000000000000000000000000000000000000000000000000000000061dead836000612cf1565b60007f00000000000000000000000000000000000000000000000000000000000000009050806001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612ff457600080fd5b505af1158015613008573d6000803e3d6000fd5b50506040517f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d925060009150a16001935050505090565b61304e6064611d9a8686612c30565b6027600082825461305f9190613989565b9091555061307490506064611d9a8685612c30565b602860008282546130859190613989565b9091555061309a90506064611d9a8684612c30565b602960008282546130ab9190613989565b909155505050505050565b60008060006130c36134f4565b90925090506130d28282612caf565b9250505090565b600081836130fa5760405162461bcd60e51b8152600401610e2a9190613615565b506000612b568486613967565b6000806000806000613119878761353a565b6001600160a01b038e166000908152600660205260409020549499509297509095509350915061314990866131f3565b6001600160a01b03808b1660009081526006602052604080822093909355908a16815220546131789085611e83565b6001600160a01b03891660009081526006602052604090205561319b8382613588565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516131e091815260200190565b60405180910390a3505050505050505050565b6000611ee283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612b25565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061326a5761326a6139a1565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156132e357600080fd5b505afa1580156132f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061331b91906139e9565b8160018151811061332e5761332e6139a1565b60200260200101906001600160a01b031690816001600160a01b031681525050613379307f000000000000000000000000000000000000000000000000000000000000000084611ee9565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac947906133ce908590600090869030904290600401613a06565b600060405180830381600087803b1580156133e857600080fd5b505af11580156133fc573d6000803e3d6000fd5b505050505050565b61342f307f000000000000000000000000000000000000000000000000000000000000000084611ee9565b60405163f305d71960e01b815230600482015260248101839052600060448201819052606482015261dead60848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063f305d71990839060c4016060604051808303818588803b1580156134b457600080fd5b505af11580156134c8573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906134ed9190613a77565b5050505050565b6007546000908190676765c793fa10079d601b1b6135128282612caf565b82101561353157505060075492676765c793fa10079d601b1b92509050565b90939092509050565b600080600080600080600061354f89896135ac565b91509150600061355d6130b6565b9050600080600061356f8d86866135d9565b919f909e50909c50959a50939850939650505050505050565b60075461359590836131f3565b6007556008546135a59082611e83565b6008555050565b600080806135bf6064611d9a8787612c30565b905060006135cd86836131f3565b96919550909350505050565b60008080806135e88786612c30565b905060006135f68787612c30565b9050600061360483836131f3565b929992985090965090945050505050565b600060208083528351808285015260005b8181101561364257858101830151858201604001528201613626565b81811115613654576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461367f57600080fd5b50565b6000806040838503121561369557600080fd5b82356136a08161366a565b946020939093013593505050565b6000602082840312156136c057600080fd5b8135611ee28161366a565b6000602082840312156136dd57600080fd5b5035919050565b6000806000606084860312156136f957600080fd5b83356137048161366a565b925060208401356137148161366a565b929592945050506040919091013590565b6000806000806080858703121561373b57600080fd5b5050823594602084013594506040840135936060013592509050565b6000806040838503121561376a57600080fd5b50508035926020909101359150565b80358015158114611a0257600080fd5b60008060006060848603121561379e57600080fd5b83359250602084013591506137b560408501613779565b90509250925092565b600080604083850312156137d157600080fd5b82356137dc8161366a565b91506137ea60208401613779565b90509250929050565b60006020828403121561380557600080fd5b611ee282613779565b60008060006040848603121561382357600080fd5b833567ffffffffffffffff8082111561383b57600080fd5b818601915086601f83011261384f57600080fd5b81358181111561385e57600080fd5b8760208260051b850101111561387357600080fd5b6020928301955093506137b59186019050613779565b6000806040838503121561389c57600080fd5b82356138a78161366a565b915060208301356138b78161366a565b809150509250929050565b600181811c908216806138d657607f821691505b602082108114156138f757634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561396257613962613932565b500290565b60008261398457634e487b7160e01b600052601260045260246000fd5b500490565b6000821982111561399c5761399c613932565b500190565b634e487b7160e01b600052603260045260246000fd5b60006000198214156139cb576139cb613932565b5060010190565b6000828210156139e4576139e4613932565b500390565b6000602082840312156139fb57600080fd5b8151611ee28161366a565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613a565784516001600160a01b031683529383019391830191600101613a31565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215613a8c57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220c4914b3f39d269e8ed2c78a05eb72e0311981e3a6d56cae7c8bde18bc1f47cb764736f6c634300080900334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572

Deployed Bytecode

0x6080604052600436106104405760003560e01c80638a030c3b11610234578063bfd792841161012e578063d85ba063116100b6578063f11a24d31161007a578063f11a24d314610cd5578063f2fde38b14610ceb578063f637434214610d0b578063f8b45b0514610d21578063fe72b27a14610d3757600080fd5b8063d85ba06314610c2e578063dd62ed3e14610c44578063e2f4560514610c8a578063e7ad9fcd14610ca0578063e884f26014610cc057600080fd5b8063c876d0b9116100fd578063c876d0b914610b88578063c8c8ebe414610ba2578063cc653b4414610bb8578063d257b34f14610bee578063d2fcc00114610c0e57600080fd5b8063bfd7928414610af8578063c024666814610b28578063c18bc19514610b48578063c5377ae514610b6857600080fd5b80639c3b4fdc116101bc578063a4c82a0011610180578063a4c82a0014610a53578063a9059cbb14610a69578063aacebbe314610a89578063b62496f514610aa9578063bbc0c74214610ad957600080fd5b80639c3b4fdc146109db5780639ec22c0e146109f15780639fccce3214610a07578063a0d82dc514610a1d578063a457c2d714610a3357600080fd5b806392136913116102035780639213691314610940578063924de9b71461095657806395d89b411461097657806396880b171461098b5780639a7a23d6146109bb57600080fd5b80638a030c3b146108d75780638a8c523c146108ed5780638da5cb5b146109025780638ea5220f1461092057600080fd5b8063313ce567116103455780636a486a8e116102cd578063730c188811610291578063730c188814610847578063751039fc146108675780637571336a1461087c57806375f0a8741461089c5780637bce5a04146108c157600080fd5b80636a486a8e146107bc5780636ddd1713146107d257806370a08231146107f257806370d555a914610812578063715018a61461083257600080fd5b806349bd5a5e1161031457806349bd5a5e146107095780634a62bb651461073d5780634fbee19314610757578063541a43cf146107905780636042f719146107a657600080fd5b8063313ce5671461069757806336679e6e146106b357806339509351146106c9578063438cb27b146106e957600080fd5b80631f3fed8f116103c857806327c8f8351161039757806327c8f8351461061b5780632bf3d42d146106315780632c3e486c146106475780632e6ed7ef1461065d5780632e82f1a01461067d57600080fd5b80631f3fed8f146105af578063203e727e146105c557806323136371146105e557806323b872dd146105fb57600080fd5b806318160ddd1161040f57806318160ddd146105235780631816467f1461054b578063184c16c51461056d578063199ffc72146105835780631a8145bb1461059957600080fd5b806306fdde031461044c578063095ea7b31461047757806310d5de53146104a75780631694505e146104d757600080fd5b3661044757005b600080fd5b34801561045857600080fd5b50610461610d57565b60405161046e9190613615565b60405180910390f35b34801561048357600080fd5b50610497610492366004613682565b610de9565b604051901515815260200161046e565b3480156104b357600080fd5b506104976104c23660046136ae565b602c6020526000908152604090205460ff1681565b3480156104e357600080fd5b5061050b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b03909116815260200161046e565b34801561052f57600080fd5b50676765c793fa10079d601b1b5b60405190815260200161046e565b34801561055757600080fd5b5061056b6105663660046136ae565b610e00565b005b34801561057957600080fd5b5061053d60125481565b34801561058f57600080fd5b5061053d600e5481565b3480156105a557600080fd5b5061053d60285481565b3480156105bb57600080fd5b5061053d60275481565b3480156105d157600080fd5b5061056b6105e03660046136cb565b610e90565b3480156105f157600080fd5b5061053d601b5481565b34801561060757600080fd5b506104976106163660046136e4565b610f6c565b34801561062757600080fd5b5061050b61dead81565b34801561063d57600080fd5b5061053d60225481565b34801561065357600080fd5b5061053d60105481565b34801561066957600080fd5b5061056b610678366004613725565b610fd5565b34801561068957600080fd5b50600f546104979060ff1681565b3480156106a357600080fd5b506040516012815260200161046e565b3480156106bf57600080fd5b5061053d60245481565b3480156106d557600080fd5b506104976106e4366004613682565b611091565b3480156106f557600080fd5b5061056b610704366004613757565b6110c7565b34801561071557600080fd5b5061050b7f00000000000000000000000012f43eea89d98df8d968e7a45aa33f1e957dde5481565b34801561074957600080fd5b506014546104979060ff1681565b34801561076357600080fd5b506104976107723660046136ae565b6001600160a01b03166000908152602b602052604090205460ff1690565b34801561079c57600080fd5b5061053d60235481565b3480156107b257600080fd5b5061053d60205481565b3480156107c857600080fd5b5061053d601c5481565b3480156107de57600080fd5b506014546104979062010000900460ff1681565b3480156107fe57600080fd5b5061053d61080d3660046136ae565b611179565b34801561081e57600080fd5b5061056b61082d3660046136cb565b61119b565b34801561083e57600080fd5b5061056b6111ca565b34801561085357600080fd5b5061056b610862366004613789565b61123e565b34801561087357600080fd5b5061049761135d565b34801561088857600080fd5b5061056b6108973660046137be565b61139a565b3480156108a857600080fd5b50600c5461050b9061010090046001600160a01b031681565b3480156108cd57600080fd5b5061053d60185481565b3480156108e357600080fd5b5061053d60215481565b3480156108f957600080fd5b5061056b611424565b34801561090e57600080fd5b506005546001600160a01b031661050b565b34801561092c57600080fd5b50600d5461050b906001600160a01b031681565b34801561094c57600080fd5b5061053d601d5481565b34801561096257600080fd5b5061056b6109713660046137f3565b611469565b34801561098257600080fd5b506104616114af565b34801561099757600080fd5b506104976109a63660046136ae565b602d6020526000908152604090205460ff1681565b3480156109c757600080fd5b5061056b6109d63660046137be565b6114be565b3480156109e757600080fd5b5061053d601a5481565b3480156109fd57600080fd5b5061053d60135481565b348015610a1357600080fd5b5061053d60295481565b348015610a2957600080fd5b5061053d601f5481565b348015610a3f57600080fd5b50610497610a4e366004613682565b61159a565b348015610a5f57600080fd5b5061053d60115481565b348015610a7557600080fd5b50610497610a84366004613682565b6115e9565b348015610a9557600080fd5b5061056b610aa43660046136ae565b6115f6565b348015610ab557600080fd5b50610497610ac43660046136ae565b602e6020526000908152604090205460ff1681565b348015610ae557600080fd5b5060145461049790610100900460ff1681565b348015610b0457600080fd5b50610497610b133660046136ae565b60256020526000908152604090205460ff1681565b348015610b3457600080fd5b5061056b610b433660046137be565b611688565b348015610b5457600080fd5b5061056b610b633660046136cb565b61170a565b348015610b7457600080fd5b5061056b610b8336600461380e565b6117db565b348015610b9457600080fd5b506016546104979060ff1681565b348015610bae57600080fd5b5061053d60095481565b348015610bc457600080fd5b5061053d610bd33660046136ae565b6001600160a01b03166000908152602a602052604090205490565b348015610bfa57600080fd5b50610497610c093660046136cb565b611876565b348015610c1a57600080fd5b5061056b610c293660046137be565b611a07565b348015610c3a57600080fd5b5061053d60175481565b348015610c5057600080fd5b5061053d610c5f366004613889565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610c9657600080fd5b5061053d600b5481565b348015610cac57600080fd5b5061056b610cbb366004613725565b611a89565b348015610ccc57600080fd5b50610497611b3f565b348015610ce157600080fd5b5061053d60195481565b348015610cf757600080fd5b5061056b610d063660046136ae565b611b7c565b348015610d1757600080fd5b5061053d601e5481565b348015610d2d57600080fd5b5061053d600a5481565b348015610d4357600080fd5b50610497610d523660046136cb565b611c67565b606060038054610d66906138c2565b80601f0160208091040260200160405190810160405280929190818152602001828054610d92906138c2565b8015610ddf5780601f10610db457610100808354040283529160200191610ddf565b820191906000526020600020905b815481529060010190602001808311610dc257829003601f168201915b5050505050905090565b6000610df6338484611ee9565b5060015b92915050565b6005546001600160a01b03163314610e335760405162461bcd60e51b8152600401610e2a906138fd565b60405180910390fd5b600d546040516001600160a01b03918216918316907f0db17895a9d092fb3ca24d626f2150dd80c185b0706b36f1040ee239f56cb87190600090a3600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610eba5760405162461bcd60e51b8152600401610e2a906138fd565b670de0b6b3a76400006064610edb676765c793fa10079d601b1b6001613948565b610ee59190613967565b610eef9190613967565b811115610f545760405162461bcd60e51b815260206004820152602d60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526c6c6f776572207468616e20312560981b6064820152608401610e2a565b610f6681670de0b6b3a7640000613948565b60095550565b6000610f7984848461200d565b610fcb8433610fc685604051806060016040528060288152602001613aa6602891396001600160a01b038a1660009081526001602090815260408083203384529091529020549190612b25565b611ee9565b5060019392505050565b6005546001600160a01b03163314610fff5760405162461bcd60e51b8152600401610e2a906138fd565b60188490556019839055601a829055601b8190558161101e8486613989565b6110289190613989565b6017819055601b5460289161103d9190613989565b111561108b5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420343025206f72206c6573730000006044820152606401610e2a565b50505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610df6918590610fc69086611e83565b6005546001600160a01b031633146110f15760405162461bcd60e51b8152600401610e2a906138fd565b60228290556023819055601f546111088284613989565b6111129190613989565b60218190556020546014916111279190613989565b11156111755760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610e2a565b5050565b6001600160a01b038116600090815260066020526040812054610dfa90612b5f565b6005546001600160a01b031633146111c55760405162461bcd60e51b8152600401610e2a906138fd565b602455565b6005546001600160a01b031633146111f45760405162461bcd60e51b8152600401610e2a906138fd565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146112685760405162461bcd60e51b8152600401610e2a906138fd565b6102588310156112d65760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e207468604482015272616e206576657279203130206d696e7574657360681b6064820152608401610e2a565b6103e88211156113415760405162461bcd60e51b815260206004820152603060248201527f4d75737420736574206175746f204c50206275726e2070657263656e7420626560448201526f747765656e20302520616e642031302560801b6064820152608401610e2a565b601092909255600e55600f805460ff1916911515919091179055565b6005546000906001600160a01b0316331461138a5760405162461bcd60e51b8152600401610e2a906138fd565b506014805460ff19169055600190565b6005546001600160a01b031633146113c45760405162461bcd60e51b8152600401610e2a906138fd565b6001600160a01b0382166000818152602c6020908152604091829020805460ff191685151590811790915591519182527fe0a7c1f8826ab3d62a6e242681ccca3828462e5c87816004b9f8d655b22d5f0891015b60405180910390a25050565b6005546001600160a01b0316331461144e5760405162461bcd60e51b8152600401610e2a906138fd565b6014805462ffff001916620101001790554260115543602655565b6005546001600160a01b031633146114935760405162461bcd60e51b8152600401610e2a906138fd565b60148054911515620100000262ff000019909216919091179055565b606060048054610d66906138c2565b6005546001600160a01b031633146114e85760405162461bcd60e51b8152600401610e2a906138fd565b7f00000000000000000000000012f43eea89d98df8d968e7a45aa33f1e957dde546001600160a01b0316826001600160a01b031614156115905760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610e2a565b6111758282612bdc565b6000610df63384610fc685604051806060016040528060258152602001613ace602591393360009081526001602090815260408083206001600160a01b038d1684529091529020549190612b25565b6000610df633848461200d565b6005546001600160a01b031633146116205760405162461bcd60e51b8152600401610e2a906138fd565b600c546040516001600160a01b036101009092048216918316907f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6790600090a3600c80546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6005546001600160a01b031633146116b25760405162461bcd60e51b8152600401610e2a906138fd565b6001600160a01b0382166000818152602b6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df79101611418565b6005546001600160a01b031633146117345760405162461bcd60e51b8152600401610e2a906138fd565b670de0b6b3a76400006064611755676765c793fa10079d601b1b6001613948565b61175f9190613967565b6117699190613967565b8111156117c35760405162461bcd60e51b815260206004820152602260248201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015261312560f01b6064820152608401610e2a565b6117d581670de0b6b3a7640000613948565b600a5550565b6005546001600160a01b031633146118055760405162461bcd60e51b8152600401610e2a906138fd565b60005b8281101561108b578160256000868685818110611827576118276139a1565b905060200201602081019061183c91906136ae565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061186e816139b7565b915050611808565b6005546000906001600160a01b031633146118a35760405162461bcd60e51b8152600401610e2a906138fd565b670de0b6b3a7640000620186a06118c6676765c793fa10079d601b1b6001613948565b6118d09190613967565b6118da9190613967565b8210156119475760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610e2a565b670de0b6b3a76400006103e8611969676765c793fa10079d601b1b6005613948565b6119739190613967565b61197d9190613967565b8211156119e95760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610e2a565b6119fb82670de0b6b3a7640000613948565b600b555060015b919050565b6005546001600160a01b03163314611a315760405162461bcd60e51b8152600401610e2a906138fd565b6001600160a01b0382166000818152602d6020908152604091829020805460ff191685151590811790915591519182527f4a8452f723db48bf05f301f94d62a2cf7a72976cde77d83e3646584858b8f4b29101611418565b6005546001600160a01b03163314611ab35760405162461bcd60e51b8152600401610e2a906138fd565b601d849055601e839055601f829055602081905581611ad28486613989565b611adc9190613989565b601c819055602054601491611af19190613989565b111561108b5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610e2a565b6005546000906001600160a01b03163314611b6c5760405162461bcd60e51b8152600401610e2a906138fd565b506016805460ff19169055600190565b6005546001600160a01b03163314611ba65760405162461bcd60e51b8152600401610e2a906138fd565b6001600160a01b038116611c0b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610e2a565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546000906001600160a01b03163314611c945760405162461bcd60e51b8152600401610e2a906138fd565b601254601354611ca49190613989565b4211611cf25760405162461bcd60e51b815260206004820181905260248201527f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e6973686044820152606401610e2a565b6103e8821115611d575760405162461bcd60e51b815260206004820152602a60248201527f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60448201526906b656e7320696e204c560b41b6064820152608401610e2a565b426013556000611d867f00000000000000000000000012f43eea89d98df8d968e7a45aa33f1e957dde54611179565b90506000611da0612710611d9a8487612c30565b90612caf565b90508015611dd757611dd77f00000000000000000000000012f43eea89d98df8d968e7a45aa33f1e957dde5461dead836000612cf1565b60007f00000000000000000000000012f43eea89d98df8d968e7a45aa33f1e957dde549050806001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611e3757600080fd5b505af1158015611e4b573d6000803e3d6000fd5b50506040517f8462566617872a3fbab94534675218431ff9e204063ee3f4f43d965626a39abb925060009150a1506001949350505050565b600080611e908385613989565b905083811015611ee25760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610e2a565b9392505050565b6001600160a01b038316611f4b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610e2a565b6001600160a01b038216611fac5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610e2a565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166120715760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610e2a565b6001600160a01b0382166120d35760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610e2a565b600081116121355760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610e2a565b6001600160a01b03831660009081526025602052604090205460ff1615801561217757506001600160a01b03821660009081526025602052604090205460ff16155b6121ce5760405162461bcd60e51b815260206004820152602260248201527f544f4b454e3a20746865206163636f756e7420697320626c61636b6c69737465604482015261642160f01b6064820152608401610e2a565b60145460ff16156125da576005546001600160a01b0384811691161480159061220557506005546001600160a01b03838116911614155b801561221957506001600160a01b03821615155b801561223057506001600160a01b03821661dead14155b801561223f5750600c5460ff16155b156125da57601454610100900460ff166122d7576001600160a01b0383166000908152602b602052604090205460ff168061229257506001600160a01b0382166000908152602b602052604090205460ff165b6122d75760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610e2a565b60165460ff161561241e576005546001600160a01b0383811691161480159061233257507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316826001600160a01b031614155b801561237057507f00000000000000000000000012f43eea89d98df8d968e7a45aa33f1e957dde546001600160a01b0316826001600160a01b031614155b1561241e5732600090815260156020526040902054431161240b5760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610e2a565b3260009081526015602052604090204390555b6001600160a01b0383166000908152602e602052604090205460ff16801561245f57506001600160a01b0382166000908152602c602052604090205460ff16155b156124d4576009548111156124d45760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610e2a565b6001600160a01b0383166000908152602c602052604090205460ff16612560576009548111156125605760405162461bcd60e51b815260206004820152603160248201527f7472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152703930b739b0b1ba34b7b720b6b7bab73a1760791b6064820152608401610e2a565b6001600160a01b0382166000908152602d602052604090205460ff166125da57600a5461258c83611179565b6125969083613989565b11156125da5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610e2a565b6026546125e8906005613989565b431115801561262957507f00000000000000000000000012f43eea89d98df8d968e7a45aa33f1e957dde546001600160a01b0316826001600160a01b031614155b801561266757507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316826001600160a01b031614155b15612690576001600160a01b0382166000908152602560205260409020805460ff191660011790555b600061269b30611179565b600b54909150811080159081906126ba575060145462010000900460ff165b80156126c95750600c5460ff16155b80156126ee57506001600160a01b0385166000908152602e602052604090205460ff16155b801561271357506001600160a01b0385166000908152602b602052604090205460ff16155b801561273857506001600160a01b0384166000908152602b602052604090205460ff16155b1561275d57600c805460ff19166001179055612752612cfd565b600c805460ff191690555b600c5460ff1615801561278857506001600160a01b0384166000908152602e602052604090205460ff165b80156127965750600f5460ff165b80156127b157506010546011546127ad9190613989565b4210155b80156127d657506001600160a01b0385166000908152602b602052604090205460ff16155b156127e5576127e3612f0e565b505b600c546001600160a01b0386166000908152602b602052604090205460ff9182161591168061282c57506001600160a01b0385166000908152602b602052604090205460ff165b15612835575060005b6000808215612b0f576001600160a01b0388166000908152602e602052604090205460ff16801561289857507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316876001600160a01b031614155b1561290e576001600160a01b0387166000908152602a60205260409020546128d6576001600160a01b0387166000908152602a602052604090204290555b6128f06064611d9a60175489612c3090919063ffffffff16565b9150601b54905061290986601854601954601a5461303f565b612aef565b6001600160a01b0387166000908152602e602052604090205460ff16801561296857507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316886001600160a01b031614155b15612a24576001600160a01b0388166000908152602a6020526040902054158015906129b957506024546001600160a01b0389166000908152602a602052604090205442916129b691613989565b10155b156129f1576129d86064611d9a60215489612c3090919063ffffffff16565b9150602054905061290986602254602354601f5461303f565b612a0b6064611d9a601c5489612c3090919063ffffffff16565b9150602054905061290986601d54601e54601f5461303f565b6001600160a01b0388166000908152602e602052604090205460ff16158015612a6657506001600160a01b0387166000908152602e602052604090205460ff16155b15612aef576001600160a01b0388166000908152602a602052604090205415801590612ab757506024546001600160a01b0389166000908152602a60205260409020544291612ab491613989565b10155b15612aef57612ad66064611d9a60215489612c3090919063ffffffff16565b91506020549050612aef86602254602354601f5461303f565b8115612b0f57612b028830846000612cf1565b612b0c82876139d2565b95505b612b1b88888884612cf1565b5050505050505050565b60008184841115612b495760405162461bcd60e51b8152600401610e2a9190613615565b506000612b5684866139d2565b95945050505050565b6000600754821115612bc65760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610e2a565b6000612bd06130b6565b9050611ee28382612caf565b6001600160a01b0382166000818152602e6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b600082612c3f57506000610dfa565b6000612c4b8385613948565b905082612c588583613967565b14611ee25760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610e2a565b6000611ee283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506130d9565b61108b84848484613107565b6000612d0830611179565b90506000602954602754602854612d1f9190613989565b612d299190613989565b90506000821580612d38575081155b15612d4257505050565b600060028360285486612d559190613948565b612d5f9190613967565b612d699190613967565b90506000612d7785836131f3565b905047612d8382613235565b6000612d8f47836131f3565b90506000612dac87611d9a60275485612c3090919063ffffffff16565b90506000612dc988611d9a60295486612c3090919063ffffffff16565b9050600081612dd884866139d2565b612de291906139d2565b6000602881905560278190556029819055600d546040519293506001600160a01b031691849181818185875af1925050503d8060008114612e3f576040519150601f19603f3d011682016040523d82523d6000602084013e612e44565b606091505b50909850508615801590612e585750600081115b15612ea957612e678782613404565b60408051878152602081018390529081018890527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b600c546040516101009091046001600160a01b0316904790600081818185875af1925050503d8060008114612efa576040519150601f19603f3d011682016040523d82523d6000602084013e612eff565b606091505b50505050505050505050505050565b42601155600080612f3e7f00000000000000000000000012f43eea89d98df8d968e7a45aa33f1e957dde54611179565b90506000612f5d612710611d9a600e5485612c3090919063ffffffff16565b90508015612f9457612f947f00000000000000000000000012f43eea89d98df8d968e7a45aa33f1e957dde5461dead836000612cf1565b60007f00000000000000000000000012f43eea89d98df8d968e7a45aa33f1e957dde549050806001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612ff457600080fd5b505af1158015613008573d6000803e3d6000fd5b50506040517f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d925060009150a16001935050505090565b61304e6064611d9a8686612c30565b6027600082825461305f9190613989565b9091555061307490506064611d9a8685612c30565b602860008282546130859190613989565b9091555061309a90506064611d9a8684612c30565b602960008282546130ab9190613989565b909155505050505050565b60008060006130c36134f4565b90925090506130d28282612caf565b9250505090565b600081836130fa5760405162461bcd60e51b8152600401610e2a9190613615565b506000612b568486613967565b6000806000806000613119878761353a565b6001600160a01b038e166000908152600660205260409020549499509297509095509350915061314990866131f3565b6001600160a01b03808b1660009081526006602052604080822093909355908a16815220546131789085611e83565b6001600160a01b03891660009081526006602052604090205561319b8382613588565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516131e091815260200190565b60405180910390a3505050505050505050565b6000611ee283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612b25565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061326a5761326a6139a1565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156132e357600080fd5b505afa1580156132f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061331b91906139e9565b8160018151811061332e5761332e6139a1565b60200260200101906001600160a01b031690816001600160a01b031681525050613379307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611ee9565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac947906133ce908590600090869030904290600401613a06565b600060405180830381600087803b1580156133e857600080fd5b505af11580156133fc573d6000803e3d6000fd5b505050505050565b61342f307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611ee9565b60405163f305d71960e01b815230600482015260248101839052600060448201819052606482015261dead60848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03169063f305d71990839060c4016060604051808303818588803b1580156134b457600080fd5b505af11580156134c8573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906134ed9190613a77565b5050505050565b6007546000908190676765c793fa10079d601b1b6135128282612caf565b82101561353157505060075492676765c793fa10079d601b1b92509050565b90939092509050565b600080600080600080600061354f89896135ac565b91509150600061355d6130b6565b9050600080600061356f8d86866135d9565b919f909e50909c50959a50939850939650505050505050565b60075461359590836131f3565b6007556008546135a59082611e83565b6008555050565b600080806135bf6064611d9a8787612c30565b905060006135cd86836131f3565b96919550909350505050565b60008080806135e88786612c30565b905060006135f68787612c30565b9050600061360483836131f3565b929992985090965090945050505050565b600060208083528351808285015260005b8181101561364257858101830151858201604001528201613626565b81811115613654576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461367f57600080fd5b50565b6000806040838503121561369557600080fd5b82356136a08161366a565b946020939093013593505050565b6000602082840312156136c057600080fd5b8135611ee28161366a565b6000602082840312156136dd57600080fd5b5035919050565b6000806000606084860312156136f957600080fd5b83356137048161366a565b925060208401356137148161366a565b929592945050506040919091013590565b6000806000806080858703121561373b57600080fd5b5050823594602084013594506040840135936060013592509050565b6000806040838503121561376a57600080fd5b50508035926020909101359150565b80358015158114611a0257600080fd5b60008060006060848603121561379e57600080fd5b83359250602084013591506137b560408501613779565b90509250925092565b600080604083850312156137d157600080fd5b82356137dc8161366a565b91506137ea60208401613779565b90509250929050565b60006020828403121561380557600080fd5b611ee282613779565b60008060006040848603121561382357600080fd5b833567ffffffffffffffff8082111561383b57600080fd5b818601915086601f83011261384f57600080fd5b81358181111561385e57600080fd5b8760208260051b850101111561387357600080fd5b6020928301955093506137b59186019050613779565b6000806040838503121561389c57600080fd5b82356138a78161366a565b915060208301356138b78161366a565b809150509250929050565b600181811c908216806138d657607f821691505b602082108114156138f757634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561396257613962613932565b500290565b60008261398457634e487b7160e01b600052601260045260246000fd5b500490565b6000821982111561399c5761399c613932565b500190565b634e487b7160e01b600052603260045260246000fd5b60006000198214156139cb576139cb613932565b5060010190565b6000828210156139e4576139e4613932565b500390565b6000602082840312156139fb57600080fd5b8151611ee28161366a565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613a565784516001600160a01b031683529383019391830191600101613a31565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215613a8c57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220c4914b3f39d269e8ed2c78a05eb72e0311981e3a6d56cae7c8bde18bc1f47cb764736f6c63430008090033

Deployed Bytecode Sourcemap

27802:24484:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7922:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10089:169;;;;;;;;;;-1:-1:-1;10089:169:0;;;;;:::i;:::-;;:::i;:::-;;;1237:14:1;;1230:22;1212:41;;1200:2;1185:18;10089:169:0;1072:187:1;30422:64:0;;;;;;;;;;-1:-1:-1;30422:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;28374:51;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1707:32:1;;;1689:51;;1677:2;1662:18;28374:51:0;1516:230:1;49202:95:0;;;;;;;;;;-1:-1:-1;;;;49202:95:0;;;1897:25:1;;;1885:2;1870:18;49202:95:0;1751:177:1;37434:157:0;;;;;;;;;;-1:-1:-1;37434:157:0;;;;;:::i;:::-;;:::i;:::-;;28834:47;;;;;;;;;;;;;;;;28643:36;;;;;;;;;;;;;;;;30112:33;;;;;;;;;;;;;;;;30072;;;;;;;;;;;;;;;;34560:233;;;;;;;;;;-1:-1:-1;34560:233:0;;;;;:::i;:::-;;:::i;29435:35::-;;;;;;;;;;;;;;;;10740:355;;;;;;;;;;-1:-1:-1;10740:355:0;;;;;:::i;:::-;;:::i;28477:53::-;;;;;;;;;;;;28523:6;28477:53;;29760:40;;;;;;;;;;;;;;;;28738:47;;;;;;;;;;;;;;;;35631:456;;;;;;;;;;-1:-1:-1;35631:456:0;;;;;:::i;:::-;;:::i;28699:32::-;;;;;;;;;;-1:-1:-1;28699:32:0;;;;;;;;8884:93;;;;;;;;;;-1:-1:-1;8884:93:0;;8967:2;3319:36:1;;3307:2;3292:18;8884:93:0;3177:184:1;29881:34:0;;;;;;;;;;;;;;;;11504:218;;;;;;;;;;-1:-1:-1;11504:218:0;;;;;:::i;:::-;;:::i;48620:417::-;;;;;;;;;;-1:-1:-1;48620:417:0;;;;;:::i;:::-;;:::i;28432:38::-;;;;;;;;;;;;;;;28932:33;;;;;;;;;;-1:-1:-1;28932:33:0;;;;;;;;37599:127;;;;;;;;;;-1:-1:-1;37599:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;37690:28:0;37666:4;37690:28;;;:19;:28;;;;;;;;;37599:127;29807:40;;;;;;;;;;;;;;;;29639:36;;;;;;;;;;;;;;;;29483:28;;;;;;;;;;;;;;;;29012:31;;;;;;;;;;-1:-1:-1;29012:31:0;;;;;;;;;;;49305:138;;;;;;;;;;-1:-1:-1;49305:138:0;;;;;:::i;:::-;;:::i;49074:101::-;;;;;;;;;;-1:-1:-1;49074:101:0;;;;;:::i;:::-;;:::i;22387:148::-;;;;;;;;;;;;;:::i;46151:430::-;;;;;;;;;;-1:-1:-1;46151:430:0;;;;;:::i;:::-;;:::i;33751:121::-;;;;;;;;;;;;;:::i;35027:199::-;;;;;;;;;;-1:-1:-1;35027:199:0;;;;;:::i;:::-;;:::i;28569:30::-;;;;;;;;;;-1:-1:-1;28569:30:0;;;;;;;-1:-1:-1;;;;;28569:30:0;;;29317:35;;;;;;;;;;;;;;;;29719:34;;;;;;;;;;;;;;;;33504:191;;;;;;;;;;;;;:::i;21745:79::-;;;;;;;;;;-1:-1:-1;21810:6:0;;-1:-1:-1;;;;;21810:6:0;21745:79;;28606:24;;;;;;;;;;-1:-1:-1;28606:24:0;;;;-1:-1:-1;;;;;28606:24:0;;;29518:36;;;;;;;;;;;;;;;;35518:101;;;;;;;;;;-1:-1:-1;35518:101:0;;;;;:::i;:::-;;:::i;8141:104::-;;;;;;;;;;;;;:::i;30493:59::-;;;;;;;;;;-1:-1:-1;30493:59:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;36764:246;;;;;;;;;;-1:-1:-1;36764:246:0;;;;;:::i;:::-;;:::i;29400:28::-;;;;;;;;;;;;;;;;28888:35;;;;;;;;;;;;;;;;30152:27;;;;;;;;;;;;;;;;29603:29;;;;;;;;;;;;;;;;12225:269;;;;;;;;;;-1:-1:-1;12225:269:0;;;;;:::i;:::-;;:::i;28792:29::-;;;;;;;;;;;;;;;;9553:175;;;;;;;;;;-1:-1:-1;9553:175:0;;;;;:::i;:::-;;:::i;37214:208::-;;;;;;;;;;-1:-1:-1;37214:208:0;;;;;:::i;:::-;;:::i;30710:58::-;;;;;;;;;;-1:-1:-1;30710:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;28972:33;;;;;;;;;;-1:-1:-1;28972:33:0;;;;;;;;;;;29957:36;;;;;;;;;;-1:-1:-1;29957:36:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;36574:182;;;;;;;;;;-1:-1:-1;36574:182:0;;;;;:::i;:::-;;:::i;34801:214::-;;;;;;;;;;-1:-1:-1;34801:214:0;;;;;:::i;:::-;;:::i;52079:204::-;;;;;;;;;;-1:-1:-1;52079:204:0;;;;;:::i;:::-;;:::i;29235:39::-;;;;;;;;;;-1:-1:-1;29235:39:0;;;;;;;;28128:55;;;;;;;;;;;;;;;;48454:134;;;;;;;;;;-1:-1:-1;48454:134:0;;;;;:::i;:::-;-1:-1:-1;;;;;48547:33:0;48520:7;48547:33;;;:24;:33;;;;;;;48454:134;34137:411;;;;;;;;;;-1:-1:-1;34137:411:0;;;;;:::i;:::-;;:::i;35234:184::-;;;;;;;;;;-1:-1:-1;35234:184:0;;;;;:::i;:::-;;:::i;29283:27::-;;;;;;;;;;;;;;;;9791:151;;;;;;;;;;-1:-1:-1;9791:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;9907:18:0;;;9880:7;9907:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;9791:151;28287:56;;;;;;;;;;;;;;;;36099:467;;;;;;;;;;-1:-1:-1;36099:467:0;;;;;:::i;:::-;;:::i;33937:135::-;;;;;;;;;;;;;:::i;29359:34::-;;;;;;;;;;;;;;;;22690:244;;;;;;;;;;-1:-1:-1;22690:244:0;;;;;:::i;:::-;;:::i;29561:35::-;;;;;;;;;;;;;;;;28220:44;;;;;;;;;;;;;;;;47403:1016;;;;;;;;;;-1:-1:-1;47403:1016:0;;;;;:::i;:::-;;:::i;7922:100::-;7976:13;8009:5;8002:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7922:100;:::o;10089:169::-;10172:4;10189:39;638:10;10212:7;10221:6;10189:8;:39::i;:::-;-1:-1:-1;10246:4:0;10089:169;;;;;:::o;37434:157::-;21957:6;;-1:-1:-1;;;;;21957:6:0;638:10;21957:22;21949:67;;;;-1:-1:-1;;;21949:67:0;;;;;;;:::i;:::-;;;;;;;;;37541:9:::1;::::0;37513:38:::1;::::0;-1:-1:-1;;;;;37541:9:0;;::::1;::::0;37513:38;::::1;::::0;::::1;::::0;37541:9:::1;::::0;37513:38:::1;37562:9;:21:::0;;-1:-1:-1;;;;;;37562:21:0::1;-1:-1:-1::0;;;;;37562:21:0;;;::::1;::::0;;;::::1;::::0;;37434:157::o;34560:233::-;21957:6;;-1:-1:-1;;;;;21957:6:0;638:10;21957:22;21949:67;;;;-1:-1:-1;;;21949:67:0;;;;;;;:::i;:::-;34680:4:::1;34673:3;34653:17;-1:-1:-1::0;;;34669:1:0::1;34653:17;:::i;:::-;:23;;;;:::i;:::-;34652:32;;;;:::i;:::-;34642:6;:42;;34634:100;;;::::0;-1:-1:-1;;;34634:100:0;;7172:2:1;34634:100:0::1;::::0;::::1;7154:21:1::0;7211:2;7191:18;;;7184:30;7250:34;7230:18;;;7223:62;-1:-1:-1;;;7301:18:1;;;7294:43;7354:19;;34634:100:0::1;6970:409:1::0;34634:100:0::1;34768:17;:6:::0;34778::::1;34768:17;:::i;:::-;34745:20;:40:::0;-1:-1:-1;34560:233:0:o;10740:355::-;10880:4;10897:36;10907:6;10915:9;10926:6;10897:9;:36::i;:::-;10944:121;10953:6;638:10;10975:89;11013:6;10975:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10975:19:0;;;;;;:11;:19;;;;;;;;638:10;10975:33;;;;;;;;;;:37;:89::i;:::-;10944:8;:121::i;:::-;-1:-1:-1;11083:4:0;10740:355;;;;;:::o;35631:456::-;21957:6;;-1:-1:-1;;;;;21957:6:0;638:10;21957:22;21949:67;;;;-1:-1:-1;;;21949:67:0;;;;;;;:::i;:::-;35771:15:::1;:31:::0;;;35813:15:::1;:31:::0;;;35855:9:::1;:19:::0;;;35885:16:::1;:33:::0;;;35867:7;35944:33:::1;35831:13:::0;35789;35944:33:::1;:::i;:::-;:45;;;;:::i;:::-;35929:12;:60:::0;;;36023:16:::1;::::0;36043:2:::1;::::0;36008:31:::1;::::0;36023:16;36008:31:::1;:::i;:::-;:37;;36000:79;;;::::0;-1:-1:-1;;;36000:79:0;;7719:2:1;36000:79:0::1;::::0;::::1;7701:21:1::0;7758:2;7738:18;;;7731:30;7797:31;7777:18;;;7770:59;7846:18;;36000:79:0::1;7517:353:1::0;36000:79:0::1;35631:456:::0;;;;:::o;11504:218::-;638:10;11592:4;11641:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;11641:34:0;;;;;;;;;;11592:4;;11609:83;;11632:7;;11641:50;;11680:10;11641:38;:50::i;48620:417::-;21957:6;;-1:-1:-1;;;;;21957:6:0;638:10;21957:22;21949:67;;;;-1:-1:-1;;;21949:67:0;;;;;;;:::i;:::-;48737:21:::1;:46:::0;;;48794:21:::1;:46:::0;;;48921:10:::1;::::0;48873:45:::1;48818:22:::0;48761;48873:45:::1;:::i;:::-;:58;;;;:::i;:::-;48851:19;:80:::0;;;48972:17:::1;::::0;48993:2:::1;::::0;48950:39:::1;::::0;48972:17;48950:39:::1;:::i;:::-;:45;;48942:87;;;::::0;-1:-1:-1;;;48942:87:0;;8077:2:1;48942:87:0::1;::::0;::::1;8059:21:1::0;8116:2;8096:18;;;8089:30;8155:31;8135:18;;;8128:59;8204:18;;48942:87:0::1;7875:353:1::0;48942:87:0::1;48620:417:::0;;:::o;49305:138::-;-1:-1:-1;;;;;49418:16:0;;49371:7;49418:16;;;:7;:16;;;;;;49398:37;;:19;:37::i;49074:101::-;21957:6;;-1:-1:-1;;;;;21957:6:0;638:10;21957:22;21949:67;;;;-1:-1:-1;;;21949:67:0;;;;;;;:::i;:::-;49145:15:::1;:22:::0;49074:101::o;22387:148::-;21957:6;;-1:-1:-1;;;;;21957:6:0;638:10;21957:22;21949:67;;;;-1:-1:-1;;;21949:67:0;;;;;;;:::i;:::-;22478:6:::1;::::0;22457:40:::1;::::0;22494:1:::1;::::0;-1:-1:-1;;;;;22478:6:0::1;::::0;22457:40:::1;::::0;22494:1;;22457:40:::1;22508:6;:19:::0;;-1:-1:-1;;;;;;22508:19:0::1;::::0;;22387:148::o;46151:430::-;21957:6;;-1:-1:-1;;;;;21957:6:0;638:10;21957:22;21949:67;;;;-1:-1:-1;;;21949:67:0;;;;;;;:::i;:::-;46305:3:::1;46282:19;:26;;46274:90;;;::::0;-1:-1:-1;;;46274:90:0;;8435:2:1;46274:90:0::1;::::0;::::1;8417:21:1::0;8474:2;8454:18;;;8447:30;8513:34;8493:18;;;8486:62;-1:-1:-1;;;8564:18:1;;;8557:49;8623:19;;46274:90:0::1;8233:415:1::0;46274:90:0::1;46395:4;46383:8;:16;;46375:77;;;::::0;-1:-1:-1;;;46375:77:0;;8855:2:1;46375:77:0::1;::::0;::::1;8837:21:1::0;8894:2;8874:18;;;8867:30;8933:34;8913:18;;;8906:62;-1:-1:-1;;;8984:18:1;;;8977:46;9040:19;;46375:77:0::1;8653:412:1::0;46375:77:0::1;46463:15;:37:::0;;;;46511:16:::1;:27:::0;46549:13:::1;:24:::0;;-1:-1:-1;;46549:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;46151:430::o;33751:121::-;21957:6;;33803:4;;-1:-1:-1;;;;;21957:6:0;638:10;21957:22;21949:67;;;;-1:-1:-1;;;21949:67:0;;;;;;;:::i;:::-;-1:-1:-1;33820:14:0::1;:22:::0;;-1:-1:-1;;33820:22:0::1;::::0;;;33751:121;:::o;35027:199::-;21957:6;;-1:-1:-1;;;;;21957:6:0;638:10;21957:22;21949:67;;;;-1:-1:-1;;;21949:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35117:39:0;::::1;;::::0;;;:31:::1;:39;::::0;;;;;;;;:46;;-1:-1:-1;;35117:46:0::1;::::0;::::1;;::::0;;::::1;::::0;;;35179:39;;1212:41:1;;;35179:39:0::1;::::0;1185:18:1;35179:39:0::1;;;;;;;;35027:199:::0;;:::o;33504:191::-;21957:6;;-1:-1:-1;;;;;21957:6:0;638:10;21957:22;21949:67;;;;-1:-1:-1;;;21949:67:0;;;;;;;:::i;:::-;33559:13:::1;:20:::0;;-1:-1:-1;;33590:18:0;;;;;33636:15:::1;33619:14;:32:::0;33675:12:::1;33662:10;:25:::0;33504:191::o;35518:101::-;21957:6;;-1:-1:-1;;;;;21957:6:0;638:10;21957:22;21949:67;;;;-1:-1:-1;;;21949:67:0;;;;;;;:::i;:::-;35590:11:::1;:21:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;35590:21:0;;::::1;::::0;;;::::1;::::0;;35518:101::o;8141:104::-;8197:13;8230:7;8223:14;;;;;:::i;36764:246::-;21957:6;;-1:-1:-1;;;;;21957:6:0;638:10;21957:22;21949:67;;;;-1:-1:-1;;;21949:67:0;;;;;;;:::i;:::-;36873:13:::1;-1:-1:-1::0;;;;;36865:21:0::1;:4;-1:-1:-1::0;;;;;36865:21:0::1;;;36857:91;;;::::0;-1:-1:-1;;;36857:91:0;;9272:2:1;36857:91:0::1;::::0;::::1;9254:21:1::0;9311:2;9291:18;;;9284:30;9350:34;9330:18;;;9323:62;9421:27;9401:18;;;9394:55;9466:19;;36857:91:0::1;9070:421:1::0;36857:91:0::1;36961:41;36990:4;36996:5;36961:28;:41::i;12225:269::-:0;12318:4;12335:129;638:10;12358:7;12367:96;12406:15;12367:96;;;;;;;;;;;;;;;;;638:10;12367:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;12367:34:0;;;;;;;;;;;;:38;:96::i;9553:175::-;9639:4;9656:42;638:10;9680:9;9691:6;9656:9;:42::i;37214:208::-;21957:6;;-1:-1:-1;;;;;21957:6:0;638:10;21957:22;21949:67;;;;-1:-1:-1;;;21949:67:0;;;;;;;:::i;:::-;37351:15:::1;::::0;37308:59:::1;::::0;-1:-1:-1;;;;;37351:15:0::1;::::0;;::::1;::::0;::::1;::::0;37308:59;::::1;::::0;::::1;::::0;;;::::1;37378:15;:36:::0;;-1:-1:-1;;;;;37378:36:0;;::::1;;;-1:-1:-1::0;;;;;;37378:36:0;;::::1;::::0;;;::::1;::::0;;37214:208::o;36574:182::-;21957:6;;-1:-1:-1;;;;;21957:6:0;638:10;21957:22;21949:67;;;;-1:-1:-1;;;21949:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36659:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;36659:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;36714:34;;1212:41:1;;;36714:34:0::1;::::0;1185:18:1;36714:34:0::1;1072:187:1::0;34801:214:0;21957:6;;-1:-1:-1;;;;;21957:6:0;638:10;21957:22;21949:67;;;;-1:-1:-1;;;21949:67:0;;;;;;;:::i;:::-;34924:4:::1;34917:3;34897:17;-1:-1:-1::0;;;34913:1:0::1;34897:17;:::i;:::-;:23;;;;:::i;:::-;34896:32;;;;:::i;:::-;34886:6;:42;;34878:89;;;::::0;-1:-1:-1;;;34878:89:0;;9698:2:1;34878:89:0::1;::::0;::::1;9680:21:1::0;9737:2;9717:18;;;9710:30;9776:34;9756:18;;;9749:62;-1:-1:-1;;;9827:18:1;;;9820:32;9869:19;;34878:89:0::1;9496:398:1::0;34878:89:0::1;34990:17;:6:::0;35000::::1;34990:17;:::i;:::-;34978:9;:29:::0;-1:-1:-1;34801:214:0:o;52079:204::-;21957:6;;-1:-1:-1;;;;;21957:6:0;638:10;21957:22;21949:67;;;;-1:-1:-1;;;21949:67:0;;;;;;;:::i;:::-;52178:9:::1;52173:103;52193:21:::0;;::::1;52173:103;;;52258:6;52236:4;:19;52241:10;;52252:1;52241:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;52236:19:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;52236:19:0;:28;;-1:-1:-1;;52236:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;52216:3;::::1;::::0;::::1;:::i;:::-;;;;52173:103;;34137:411:::0;21957:6;;34218:4;;-1:-1:-1;;;;;21957:6:0;638:10;21957:22;21949:67;;;;-1:-1:-1;;;21949:67:0;;;;;;;:::i;:::-;34286:4:::1;34276:6;34256:17;-1:-1:-1::0;;;34272:1:0::1;34256:17;:::i;:::-;:26;;;;:::i;:::-;34255:35;;;;:::i;:::-;34242:9;:48;;34234:114;;;::::0;-1:-1:-1;;;34234:114:0;;10373:2:1;34234:114:0::1;::::0;::::1;10355:21:1::0;10412:2;10392:18;;;10385:30;10451:34;10431:18;;;10424:62;-1:-1:-1;;;10502:18:1;;;10495:51;10563:19;;34234:114:0::1;10171:417:1::0;34234:114:0::1;34408:4;34400;34380:17;-1:-1:-1::0;;;34396:1:0::1;34380:17;:::i;:::-;:24;;;;:::i;:::-;34379:33;;;;:::i;:::-;34366:9;:46;;34358:111;;;::::0;-1:-1:-1;;;34358:111:0;;10795:2:1;34358:111:0::1;::::0;::::1;10777:21:1::0;10834:2;10814:18;;;10807:30;10873:34;10853:18;;;10846:62;-1:-1:-1;;;10924:18:1;;;10917:50;10984:19;;34358:111:0::1;10593:416:1::0;34358:111:0::1;34500:20;:9:::0;34513:6:::1;34500:20;:::i;:::-;34479:18;:41:::0;-1:-1:-1;34537:4:0::1;22027:1;34137:411:::0;;;:::o;35234:184::-;21957:6;;-1:-1:-1;;;;;21957:6:0;638:10;21957:22;21949:67;;;;-1:-1:-1;;;21949:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35319:34:0;::::1;;::::0;;;:26:::1;:34;::::0;;;;;;;;:41;;-1:-1:-1;;35319:41:0::1;::::0;::::1;;::::0;;::::1;::::0;;;35376:34;;1212:41:1;;;35376:34:0::1;::::0;1185:18:1;35376:34:0::1;1072:187:1::0;36099:467:0;21957:6;;-1:-1:-1;;;;;21957:6:0;638:10;21957:22;21949:67;;;;-1:-1:-1;;;21949:67:0;;;;;;;:::i;:::-;36240:16:::1;:32:::0;;;36283:16:::1;:32:::0;;;36326:10:::1;:20:::0;;;36357:17:::1;:34:::0;;;36339:7;36418:35:::1;36302:13:::0;36259;36418:35:::1;:::i;:::-;:48;;;;:::i;:::-;36402:13;:64:::0;;;36501:17:::1;::::0;36522:2:::1;::::0;36485:33:::1;::::0;36501:17;36485:33:::1;:::i;:::-;:39;;36477:81;;;::::0;-1:-1:-1;;;36477:81:0;;8077:2:1;36477:81:0::1;::::0;::::1;8059:21:1::0;8116:2;8096:18;;;8089:30;8155:31;8135:18;;;8128:59;8204:18;;36477:81:0::1;7875:353:1::0;33937:135:0;21957:6;;33997:4;;-1:-1:-1;;;;;21957:6:0;638:10;21957:22;21949:67;;;;-1:-1:-1;;;21949:67:0;;;;;;;:::i;:::-;-1:-1:-1;34014:20:0::1;:28:::0;;-1:-1:-1;;34014:28:0::1;::::0;;;33937:135;:::o;22690:244::-;21957:6;;-1:-1:-1;;;;;21957:6:0;638:10;21957:22;21949:67;;;;-1:-1:-1;;;21949:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22779:22:0;::::1;22771:73;;;::::0;-1:-1:-1;;;22771:73:0;;11216:2:1;22771:73:0::1;::::0;::::1;11198:21:1::0;11255:2;11235:18;;;11228:30;11294:34;11274:18;;;11267:62;-1:-1:-1;;;11345:18:1;;;11338:36;11391:19;;22771:73:0::1;11014:402:1::0;22771:73:0::1;22881:6;::::0;22860:38:::1;::::0;-1:-1:-1;;;;;22860:38:0;;::::1;::::0;22881:6:::1;::::0;22860:38:::1;::::0;22881:6:::1;::::0;22860:38:::1;22909:6;:17:::0;;-1:-1:-1;;;;;;22909:17:0::1;-1:-1:-1::0;;;;;22909:17:0;;;::::1;::::0;;;::::1;::::0;;22690:244::o;47403:1016::-;21957:6;;47487:4;;-1:-1:-1;;;;;21957:6:0;638:10;21957:22;21949:67;;;;-1:-1:-1;;;21949:67:0;;;;;;;:::i;:::-;47553:19:::1;;47530:20;;:42;;;;:::i;:::-;47512:15;:60;47504:106;;;::::0;-1:-1:-1;;;47504:106:0;;11623:2:1;47504:106:0::1;::::0;::::1;11605:21:1::0;;;11642:18;;;11635:30;11701:34;11681:18;;;11674:62;11753:18;;47504:106:0::1;11421:356:1::0;47504:106:0::1;47640:4;47629:7;:15;;47621:70;;;::::0;-1:-1:-1;;;47621:70:0;;11984:2:1;47621:70:0::1;::::0;::::1;11966:21:1::0;12023:2;12003:18;;;11996:30;12062:34;12042:18;;;12035:62;-1:-1:-1;;;12113:18:1;;;12106:40;12163:19;;47621:70:0::1;11782:406:1::0;47621:70:0::1;47725:15;47702:20;:38:::0;47803:28:::1;47834:24;47844:13;47834:9;:24::i;:::-;47803:55:::0;-1:-1:-1;47916:20:0::1;47939:44;47977:5;47939:33;47803:55:::0;47964:7;47939:24:::1;:33::i;:::-;:37:::0;::::1;:44::i;:::-;47916:67:::0;-1:-1:-1;48096:16:0;;48092:111:::1;;48128:63;48143:13;48166:6;48175:12;48189:1;48128:14;:63::i;:::-;48286:19;48323:13;48286:51;;48348:4;-1:-1:-1::0;;;;;48348:9:0::1;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;48375:14:0::1;::::0;::::1;::::0;-1:-1:-1;48375:14:0;;-1:-1:-1;48375:14:0::1;-1:-1:-1::0;48407:4:0::1;::::0;47403:1016;-1:-1:-1;;;;47403:1016:0:o;16789:181::-;16847:7;;16879:5;16883:1;16879;:5;:::i;:::-;16867:17;;16908:1;16903;:6;;16895:46;;;;-1:-1:-1;;;16895:46:0;;12395:2:1;16895:46:0;;;12377:21:1;12434:2;12414:18;;;12407:30;12473:29;12453:18;;;12446:57;12520:18;;16895:46:0;12193:351:1;16895:46:0;16961:1;16789:181;-1:-1:-1;;;16789:181:0:o;15411:380::-;-1:-1:-1;;;;;15547:19:0;;15539:68;;;;-1:-1:-1;;;15539:68:0;;12751:2:1;15539:68:0;;;12733:21:1;12790:2;12770:18;;;12763:30;12829:34;12809:18;;;12802:62;-1:-1:-1;;;12880:18:1;;;12873:34;12924:19;;15539:68:0;12549:400:1;15539:68:0;-1:-1:-1;;;;;15626:21:0;;15618:68;;;;-1:-1:-1;;;15618:68:0;;13156:2:1;15618:68:0;;;13138:21:1;13195:2;13175:18;;;13168:30;13234:34;13214:18;;;13207:62;-1:-1:-1;;;13285:18:1;;;13278:32;13327:19;;15618:68:0;12954:398:1;15618:68:0;-1:-1:-1;;;;;15699:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;15751:32;;1897:25:1;;;15751:32:0;;1870:18:1;15751:32:0;;;;;;;15411:380;;;:::o;37734:5425::-;-1:-1:-1;;;;;37866:18:0;;37858:68;;;;-1:-1:-1;;;37858:68:0;;13559:2:1;37858:68:0;;;13541:21:1;13598:2;13578:18;;;13571:30;13637:34;13617:18;;;13610:62;-1:-1:-1;;;13688:18:1;;;13681:35;13733:19;;37858:68:0;13357:401:1;37858:68:0;-1:-1:-1;;;;;37945:16:0;;37937:64;;;;-1:-1:-1;;;37937:64:0;;13965:2:1;37937:64:0;;;13947:21:1;14004:2;13984:18;;;13977:30;14043:34;14023:18;;;14016:62;-1:-1:-1;;;14094:18:1;;;14087:33;14137:19;;37937:64:0;13763:399:1;37937:64:0;38029:1;38020:6;:10;38012:64;;;;-1:-1:-1;;;38012:64:0;;14369:2:1;38012:64:0;;;14351:21:1;14408:2;14388:18;;;14381:30;14447:34;14427:18;;;14420:62;-1:-1:-1;;;14498:18:1;;;14491:39;14547:19;;38012:64:0;14167:405:1;38012:64:0;-1:-1:-1;;;;;38096:10:0;;;;;;:4;:10;;;;;;;;38095:11;:24;;;;-1:-1:-1;;;;;;38111:8:0;;;;;;:4;:8;;;;;;;;38110:9;38095:24;38087:71;;;;-1:-1:-1;;;38087:71:0;;14779:2:1;38087:71:0;;;14761:21:1;14818:2;14798:18;;;14791:30;14857:34;14837:18;;;14830:62;-1:-1:-1;;;14908:18:1;;;14901:32;14950:19;;38087:71:0;14577:398:1;38087:71:0;38183:14;;;;38179:1636;;;21810:6;;-1:-1:-1;;;;;38236:15:0;;;21810:6;;38236:15;;;;:49;;-1:-1:-1;21810:6:0;;-1:-1:-1;;;;;38272:13:0;;;21810:6;;38272:13;;38236:49;:86;;;;-1:-1:-1;;;;;;38306:16:0;;;;38236:86;:128;;;;-1:-1:-1;;;;;;38343:21:0;;38357:6;38343:21;;38236:128;:158;;;;-1:-1:-1;38386:8:0;;;;38385:9;38236:158;38214:1590;;;38434:13;;;;;;;38429:150;;-1:-1:-1;;;;;38480:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;38509:23:0;;;;;;:19;:23;;;;;;;;38480:52;38472:87;;;;-1:-1:-1;;;38472:87:0;;15182:2:1;38472:87:0;;;15164:21:1;15221:2;15201:18;;;15194:30;-1:-1:-1;;;15240:18:1;;;15233:52;15302:18;;38472:87:0;14980:346:1;38472:87:0;38737:20;;;;38733:425;;;21810:6;;-1:-1:-1;;;;;38786:13:0;;;21810:6;;38786:13;;;;:47;;;38817:15;-1:-1:-1;;;;;38803:30:0;:2;-1:-1:-1;;;;;38803:30:0;;;38786:47;:79;;;;;38851:13;-1:-1:-1;;;;;38837:28:0;:2;-1:-1:-1;;;;;38837:28:0;;;38786:79;38782:357;;;38931:9;38902:39;;;;:28;:39;;;;;;38944:12;-1:-1:-1;38894:140:0;;;;-1:-1:-1;;;38894:140:0;;15533:2:1;38894:140:0;;;15515:21:1;15572:2;15552:18;;;15545:30;15611:34;15591:18;;;15584:62;15682:34;15662:18;;;15655:62;-1:-1:-1;;;15733:19:1;;;15726:40;15783:19;;38894:140:0;15331:477:1;38894:140:0;39090:9;39061:39;;;;:28;:39;;;;;39103:12;39061:54;;38782:357;-1:-1:-1;;;;;39211:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;39247:35:0;;;;;;:31;:35;;;;;;;;39246:36;39211:71;39207:216;;;39325:20;;39315:6;:30;;39307:96;;;;-1:-1:-1;;;39307:96:0;;16015:2:1;39307:96:0;;;15997:21:1;16054:2;16034:18;;;16027:30;16093:34;16073:18;;;16066:62;-1:-1:-1;;;16144:18:1;;;16137:51;16205:19;;39307:96:0;15813:417:1;39307:96:0;-1:-1:-1;;;;;39448:37:0;;;;;;:31;:37;;;;;;;;39443:179;;39528:20;;39518:6;:30;;39510:92;;;;-1:-1:-1;;;39510:92:0;;16437:2:1;39510:92:0;;;16419:21:1;16476:2;16456:18;;;16449:30;16515:34;16495:18;;;16488:62;-1:-1:-1;;;16566:18:1;;;16559:47;16623:19;;39510:92:0;16235:413:1;39510:92:0;-1:-1:-1;;;;;39647:30:0;;;;;;:26;:30;;;;;;;;39642:147;;39736:9;;39719:13;39729:2;39719:9;:13::i;:::-;39710:22;;:6;:22;:::i;:::-;:35;;39702:67;;;;-1:-1:-1;;;39702:67:0;;16855:2:1;39702:67:0;;;16837:21:1;16894:2;16874:18;;;16867:30;-1:-1:-1;;;16913:18:1;;;16906:49;16972:18;;39702:67:0;16653:343:1;39702:67:0;39875:10;;:14;;39888:1;39875:14;:::i;:::-;39858:12;:32;;:73;;;;;39918:13;-1:-1:-1;;;;;39912:19:0;:2;-1:-1:-1;;;;;39912:19:0;;;39858:73;:125;;;;;39967:15;-1:-1:-1;;;;;39953:30:0;:2;-1:-1:-1;;;;;39953:30:0;;;39858:125;39854:188;;;-1:-1:-1;;;;;40015:8:0;;;;;;:4;:8;;;;;:15;;-1:-1:-1;;40015:15:0;40026:4;40015:15;;;39854:188;40056:28;40087:24;40105:4;40087:9;:24::i;:::-;40171:18;;40056:55;;-1:-1:-1;40147:42:0;;;;;;;40221:35;;-1:-1:-1;40245:11:0;;;;;;;40221:35;:61;;;;-1:-1:-1;40274:8:0;;;;40273:9;40221:61;:110;;;;-1:-1:-1;;;;;;40300:31:0;;;;;;:25;:31;;;;;;;;40299:32;40221:110;:153;;;;-1:-1:-1;;;;;;40349:25:0;;;;;;:19;:25;;;;;;;;40348:26;40221:153;:194;;;;-1:-1:-1;;;;;;40392:23:0;;;;;;:19;:23;;;;;;;;40391:24;40221:194;40202:339;;;40442:8;:15;;-1:-1:-1;;40442:15:0;40453:4;40442:15;;;40486:10;:8;:10::i;:::-;40513:8;:16;;-1:-1:-1;;40513:16:0;;;40202:339;40566:8;;;;40565:9;:42;;;;-1:-1:-1;;;;;;40578:29:0;;;;;;:25;:29;;;;;;;;40565:42;:59;;;;-1:-1:-1;40611:13:0;;;;40565:59;:114;;;;;40664:15;;40647:14;;:32;;;;:::i;:::-;40628:15;:51;;40565:114;:144;;;;-1:-1:-1;;;;;;40684:25:0;;;;;;:19;:25;;;;;;;;40683:26;40565:144;40561:206;;;40726:29;:27;:29::i;:::-;;40561:206;40795:8;;-1:-1:-1;;;;;40905:25:0;;40779:12;40905:25;;;:19;:25;;;;;;40795:8;;;;40794:9;;40905:25;;:52;;-1:-1:-1;;;;;;40934:23:0;;;;;;:19;:23;;;;;;;;40905:52;40901:100;;;-1:-1:-1;40984:5:0;40901:100;41021:12;41048:21;41181:7;41177:1915;;;-1:-1:-1;;;;;41232:31:0;;;;;;:25;:31;;;;;;;;:65;;;;;41281:15;-1:-1:-1;;;;;41267:30:0;:2;-1:-1:-1;;;;;41267:30:0;;;41232:65;41228:1702;;;-1:-1:-1;;;;;41322:28:0;;;;;;:24;:28;;;;;;41318:128;;-1:-1:-1;;;;;41380:28:0;;;;;;:24;:28;;;;;41411:15;41380:46;;41318:128;41470:33;41499:3;41470:24;41481:12;;41470:6;:10;;:24;;;;:::i;:33::-;41463:40;;41538:16;;41522:32;;41573:69;41590:6;41598:15;;41615;;41632:9;;41573:16;:69::i;:::-;41228:1702;;;-1:-1:-1;;;;;41705:29:0;;;;;;:25;:29;;;;;;;;:65;;;;;41754:15;-1:-1:-1;;;;;41738:32:0;:4;-1:-1:-1;;;;;41738:32:0;;;41705:65;41701:1229;;;-1:-1:-1;;;;;41795:30:0;;;;;;:24;:30;;;;;;:35;;;;:108;;-1:-1:-1;41868:15:0;;-1:-1:-1;;;;;41835:30:0;;;;;;:24;:30;;;;;;41887:15;;41835:48;;;:::i;:::-;:67;;41795:108;41791:606;;;41935:40;41971:3;41935:31;41946:19;;41935:6;:10;;:31;;;;:::i;:40::-;41928:47;;42014:17;;41998:33;;42054:82;42071:6;42079:21;;42102;;42125:10;;42054:16;:82::i;41791:606::-;42192:34;42222:3;42192:25;42203:13;;42192:6;:10;;:25;;;;:::i;:34::-;42185:41;;42265:17;;42249:33;;42305:72;42322:6;42330:16;;42348;;42366:10;;42305:16;:72::i;41701:1229::-;-1:-1:-1;;;;;42464:31:0;;;;;;:25;:31;;;;;;;;42463:32;:66;;;;-1:-1:-1;;;;;;42500:29:0;;;;;;:25;:29;;;;;;;;42499:30;42463:66;42459:471;;;-1:-1:-1;;;;;42554:30:0;;;;;;:24;:30;;;;;;:35;;;;:108;;-1:-1:-1;42627:15:0;;-1:-1:-1;;;;;42594:30:0;;;;;;:24;:30;;;;;;42646:15;;42594:48;;;:::i;:::-;:67;;42554:108;42550:365;;;42694:40;42730:3;42694:31;42705:19;;42694:6;:10;;:31;;;;:::i;:40::-;42687:47;;42773:17;;42757:33;;42813:82;42830:6;42838:21;;42861;;42884:10;;42813:16;:82::i;:::-;42962:8;;42958:123;;42991:44;43006:4;43020;43027;43033:1;42991:14;:44::i;:::-;43051:14;43061:4;43051:14;;:::i;:::-;;;42958:123;43104:47;43119:4;43125:2;43129:6;43137:13;43104:14;:47::i;:::-;37847:5312;;;;;37734:5425;;;:::o;17692:192::-;17778:7;17814:12;17806:6;;;;17798:29;;;;-1:-1:-1;;;17798:29:0;;;;;;;;:::i;:::-;-1:-1:-1;17838:9:0;17850:5;17854:1;17850;:5;:::i;:::-;17838:17;17692:192;-1:-1:-1;;;;;17692:192:0:o;49451:254::-;49518:7;49557;;49546;:18;;49538:73;;;;-1:-1:-1;;;49538:73:0;;17333:2:1;49538:73:0;;;17315:21:1;17372:2;17352:18;;;17345:30;17411:34;17391:18;;;17384:62;-1:-1:-1;;;17462:18:1;;;17455:40;17512:19;;49538:73:0;17131:406:1;49538:73:0;49622:19;49645:10;:8;:10::i;:::-;49622:33;-1:-1:-1;49673:24:0;:7;49622:33;49673:11;:24::i;37018:188::-;-1:-1:-1;;;;;37101:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;37101:39:0;;;;;;;;;;37158:40;;37101:39;;:31;37158:40;;;37018:188;;:::o;18143:471::-;18201:7;18446:6;18442:47;;-1:-1:-1;18476:1:0;18469:8;;18442:47;18501:9;18513:5;18517:1;18513;:5;:::i;:::-;18501:17;-1:-1:-1;18546:1:0;18537:5;18541:1;18501:17;18537:5;:::i;:::-;:10;18529:56;;;;-1:-1:-1;;;18529:56:0;;17744:2:1;18529:56:0;;;17726:21:1;17783:2;17763:18;;;17756:30;17822:34;17802:18;;;17795:62;-1:-1:-1;;;17873:18:1;;;17866:31;17914:19;;18529:56:0;17542:397:1;19090:132:0;19148:7;19175:39;19179:1;19182;19175:39;;;;;;;;;;;;;;;;;:3;:39::i;49713:190::-;49836:59;49854:6;49862:9;49873:6;49881:13;49836:17;:59::i;44627:1512::-;44666:23;44692:24;44710:4;44692:9;:24::i;:::-;44666:50;;44727:25;44797:12;;44776:18;;44755;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;44727:82;-1:-1:-1;44820:12:0;44856:20;;;:46;;-1:-1:-1;44880:22:0;;44856:46;44853:60;;;44905:7;;;44627:1512::o;44853:60::-;44982:23;45067:1;45047:17;45026:18;;45008:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;44982:86;-1:-1:-1;45079:26:0;45108:36;:15;44982:86;45108:19;:36::i;:::-;45079:65;-1:-1:-1;45193:21:0;45227:36;45079:65;45227:16;:36::i;:::-;45285:18;45306:44;:21;45332:17;45306:25;:44::i;:::-;45285:65;;45371:23;45397:57;45436:17;45397:34;45412:18;;45397:10;:14;;:34;;;;:::i;:57::-;45371:83;;45465:17;45485:51;45518:17;45485:28;45500:12;;45485:10;:14;;:28;;;;:::i;:51::-;45465:71;-1:-1:-1;45557:23:0;45465:71;45583:28;45596:15;45583:10;:28;:::i;:::-;:40;;;;:::i;:::-;45665:1;45644:18;:22;;;45677:18;:22;;;45710:12;:16;;;45768:9;;45760:45;;45557:66;;-1:-1:-1;;;;;;45768:9:0;;45791;;45760:45;45665:1;45760:45;45791:9;45768;45760:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45747:58:0;;-1:-1:-1;;45830:19:0;;;;;:42;;;45871:1;45853:15;:19;45830:42;45826:209;;;45889:46;45902:15;45919;45889:12;:46::i;:::-;45955:68;;;18356:25:1;;;18412:2;18397:18;;18390:34;;;18440:18;;;18433:34;;;45955:68:0;;18344:2:1;18329:18;45955:68:0;;;;;;;45826:209;46076:15;;46068:63;;46076:15;;;;-1:-1:-1;;;;;46076:15:0;;46105:21;;46068:63;;;;46105:21;46076:15;46068:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;44627:1512:0:o;46593:802::-;46694:15;46677:14;:32;46650:4;;46803:24;46813:13;46803:9;:24::i;:::-;46772:55;;46885:20;46908:53;46955:5;46908:42;46933:16;;46908:20;:24;;:42;;;;:::i;:53::-;46885:76;-1:-1:-1;47074:16:0;;47070:111;;47106:63;47121:13;47144:6;47153:12;47167:1;47106:14;:63::i;:::-;47264:19;47301:13;47264:51;;47326:4;-1:-1:-1;;;;;47326:9:0;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;47353:12:0;;;;-1:-1:-1;47353:12:0;;-1:-1:-1;47353:12:0;47383:4;47376:11;;;;;46593:802;:::o;43167:314::-;43314:35;43345:3;43314:26;:7;43326:13;43314:11;:26::i;:35::-;43292:18;;:57;;;;;;;:::i;:::-;;;;-1:-1:-1;43382:35:0;;-1:-1:-1;43413:3:0;43382:26;:7;43394:13;43382:11;:26::i;:35::-;43360:18;;:57;;;;;;;:::i;:::-;;;;-1:-1:-1;43444:29:0;;-1:-1:-1;43469:3:0;43444:20;:7;43456;43444:11;:20::i;:29::-;43428:12;;:45;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;43167:314:0:o;51629:163::-;51670:7;51691:15;51708;51727:19;:17;:19::i;:::-;51690:56;;-1:-1:-1;51690:56:0;-1:-1:-1;51764:20:0;51690:56;;51764:11;:20::i;:::-;51757:27;;;;51629:163;:::o;19718:278::-;19804:7;19839:12;19832:5;19824:28;;;;-1:-1:-1;;;19824:28:0;;;;;;;;:::i;:::-;-1:-1:-1;19863:9:0;19875:5;19879:1;19875;:5;:::i;49911:483::-;50033:15;50050:23;50075:12;50089:23;50114:12;50130:34;50141:7;50150:13;50130:10;:34::i;:::-;-1:-1:-1;;;;;50193:15:0;;;;;;:7;:15;;;;;;50032:132;;-1:-1:-1;50032:132:0;;-1:-1:-1;50032:132:0;;-1:-1:-1;50032:132:0;-1:-1:-1;50032:132:0;-1:-1:-1;50193:28:0;;50032:132;50193:19;:28::i;:::-;-1:-1:-1;;;;;50175:15:0;;;;;;;:7;:15;;;;;;:46;;;;50253:18;;;;;;;:39;;50276:15;50253:22;:39::i;:::-;-1:-1:-1;;;;;50232:18:0;;;;;;:7;:18;;;;;:60;50303:23;50315:4;50321;50303:11;:23::i;:::-;50359:9;-1:-1:-1;;;;;50342:44:0;50351:6;-1:-1:-1;;;;;50342:44:0;;50370:15;50342:44;;;;1897:25:1;;1885:2;1870:18;;1751:177;50342:44:0;;;;;;;;50021:373;;;;;49911:483;;;;:::o;17253:136::-;17311:7;17338:43;17342:1;17345;17338:43;;;;;;;;;;;;;;;;;:3;:43::i;43489:601::-;43641:16;;;43655:1;43641:16;;;;;;;;43617:21;;43641:16;;;;;;;;;;-1:-1:-1;43641:16:0;43617:40;;43686:4;43668;43673:1;43668:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;43668:23:0;;;-1:-1:-1;;;;;43668:23:0;;;;;43712:15;-1:-1:-1;;;;;43712:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43702:4;43707:1;43702:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;43702:32:0;;;-1:-1:-1;;;;;43702:32:0;;;;;43747:62;43764:4;43779:15;43797:11;43747:8;:62::i;:::-;43848:224;;-1:-1:-1;;;43848:224:0;;-1:-1:-1;;;;;43848:15:0;:66;;;;:224;;43929:11;;43955:1;;43999:4;;44026;;44046:15;;43848:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43544:546;43489:601;:::o;44102:517::-;44250:62;44267:4;44282:15;44300:11;44250:8;:62::i;:::-;44355:256;;-1:-1:-1;;;44355:256:0;;44427:4;44355:256;;;20192:34:1;20242:18;;;20235:34;;;44473:1:0;20285:18:1;;;20278:34;;;20328:18;;;20321:34;28523:6:0;20371:19:1;;;20364:44;44585:15:0;20424:19:1;;;20417:35;44355:15:0;-1:-1:-1;;;;;44355:31:0;;;;44394:9;;20126:19:1;;44355:256:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;44102:517;;:::o;51800:258::-;51897:7;;51850;;;;-1:-1:-1;;;51967:20:0;51897:7;28012:14;51967:11;:20::i;:::-;51957:7;:30;51953:61;;;-1:-1:-1;;51997:7:0;;;-1:-1:-1;;;28012:14:0;-1:-1:-1;51800:258:0;-1:-1:-1;51800:258:0:o;51953:61::-;52033:7;;52042;;-1:-1:-1;51800:258:0;-1:-1:-1;51800:258:0:o;50557:449::-;50639:7;50648;50657;50666;50675;50696:23;50721:12;50737:35;50749:7;50758:13;50737:11;:35::i;:::-;50695:77;;;;50783:19;50806:10;:8;:10::i;:::-;50783:33;;50828:15;50845:23;50870:12;50886:39;50898:7;50907:4;50913:11;50886;:39::i;:::-;50827:98;;;;-1:-1:-1;50827:98:0;;-1:-1:-1;50976:15:0;;-1:-1:-1;50993:4:0;;-1:-1:-1;50557:449:0;;-1:-1:-1;;;;;;;50557:449:0:o;50402:147::-;50480:7;;:17;;50492:4;50480:11;:17::i;:::-;50470:7;:27;50521:10;;:20;;50536:4;50521:14;:20::i;:::-;50508:10;:33;-1:-1:-1;;50402:147:0:o;51014:265::-;51097:7;;;51141:35;51172:3;51141:26;:7;51153:13;51141:11;:26::i;:35::-;51126:50;-1:-1:-1;51187:23:0;51213:17;:7;51126:50;51213:11;:17::i;:::-;51187:43;51266:4;;-1:-1:-1;51014:265:0;;-1:-1:-1;;;;51014:265:0:o;51287:334::-;51382:7;;;;51438:24;:7;51450:11;51438;:24::i;:::-;51420:42;-1:-1:-1;51473:12:0;51488:21;:4;51497:11;51488:8;:21::i;:::-;51473:36;-1:-1:-1;51520:23:0;51546:17;:7;51473:36;51546:11;:17::i;:::-;51582:7;;;;-1:-1:-1;51608:4:0;;-1:-1:-1;51287:334:0;;-1:-1:-1;;;;;51287:334:0:o;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;2787:385::-;2873:6;2881;2889;2897;2950:3;2938:9;2929:7;2925:23;2921:33;2918:53;;;2967:1;2964;2957:12;2918:53;-1:-1:-1;;2990:23:1;;;3060:2;3045:18;;3032:32;;-1:-1:-1;3111:2:1;3096:18;;3083:32;;3162:2;3147:18;3134:32;;-1:-1:-1;2787:385:1;-1:-1:-1;2787:385:1:o;3366:248::-;3434:6;3442;3495:2;3483:9;3474:7;3470:23;3466:32;3463:52;;;3511:1;3508;3501:12;3463:52;-1:-1:-1;;3534:23:1;;;3604:2;3589:18;;;3576:32;;-1:-1:-1;3366:248:1:o;3619:160::-;3684:20;;3740:13;;3733:21;3723:32;;3713:60;;3769:1;3766;3759:12;3784:316;3858:6;3866;3874;3927:2;3915:9;3906:7;3902:23;3898:32;3895:52;;;3943:1;3940;3933:12;3895:52;3979:9;3966:23;3956:33;;4036:2;4025:9;4021:18;4008:32;3998:42;;4059:35;4090:2;4079:9;4075:18;4059:35;:::i;:::-;4049:45;;3784:316;;;;;:::o;4105:315::-;4170:6;4178;4231:2;4219:9;4210:7;4206:23;4202:32;4199:52;;;4247:1;4244;4237:12;4199:52;4286:9;4273:23;4305:31;4330:5;4305:31;:::i;:::-;4355:5;-1:-1:-1;4379:35:1;4410:2;4395:18;;4379:35;:::i;:::-;4369:45;;4105:315;;;;;:::o;4425:180::-;4481:6;4534:2;4522:9;4513:7;4509:23;4505:32;4502:52;;;4550:1;4547;4540:12;4502:52;4573:26;4589:9;4573:26;:::i;4610:689::-;4702:6;4710;4718;4771:2;4759:9;4750:7;4746:23;4742:32;4739:52;;;4787:1;4784;4777:12;4739:52;4827:9;4814:23;4856:18;4897:2;4889:6;4886:14;4883:34;;;4913:1;4910;4903:12;4883:34;4951:6;4940:9;4936:22;4926:32;;4996:7;4989:4;4985:2;4981:13;4977:27;4967:55;;5018:1;5015;5008:12;4967:55;5058:2;5045:16;5084:2;5076:6;5073:14;5070:34;;;5100:1;5097;5090:12;5070:34;5155:7;5148:4;5138:6;5135:1;5131:14;5127:2;5123:23;5119:34;5116:47;5113:67;;;5176:1;5173;5166:12;5113:67;5207:4;5199:13;;;;-1:-1:-1;5231:6:1;-1:-1:-1;5256:37:1;;5272:20;;;-1:-1:-1;5256:37:1;:::i;5304:388::-;5372:6;5380;5433:2;5421:9;5412:7;5408:23;5404:32;5401:52;;;5449:1;5446;5439:12;5401:52;5488:9;5475:23;5507:31;5532:5;5507:31;:::i;:::-;5557:5;-1:-1:-1;5614:2:1;5599:18;;5586:32;5627:33;5586:32;5627:33;:::i;:::-;5679:7;5669:17;;;5304:388;;;;;:::o;5697:380::-;5776:1;5772:12;;;;5819;;;5840:61;;5894:4;5886:6;5882:17;5872:27;;5840:61;5947:2;5939:6;5936:14;5916:18;5913:38;5910:161;;;5993:10;5988:3;5984:20;5981:1;5974:31;6028:4;6025:1;6018:15;6056:4;6053:1;6046:15;5910:161;;5697:380;;;:::o;6082:356::-;6284:2;6266:21;;;6303:18;;;6296:30;6362:34;6357:2;6342:18;;6335:62;6429:2;6414:18;;6082:356::o;6443:127::-;6504:10;6499:3;6495:20;6492:1;6485:31;6535:4;6532:1;6525:15;6559:4;6556:1;6549:15;6575:168;6615:7;6681:1;6677;6673:6;6669:14;6666:1;6663:21;6658:1;6651:9;6644:17;6640:45;6637:71;;;6688:18;;:::i;:::-;-1:-1:-1;6728:9:1;;6575:168::o;6748:217::-;6788:1;6814;6804:132;;6858:10;6853:3;6849:20;6846:1;6839:31;6893:4;6890:1;6883:15;6921:4;6918:1;6911:15;6804:132;-1:-1:-1;6950:9:1;;6748:217::o;7384:128::-;7424:3;7455:1;7451:6;7448:1;7445:13;7442:39;;;7461:18;;:::i;:::-;-1:-1:-1;7497:9:1;;7384:128::o;9899:127::-;9960:10;9955:3;9951:20;9948:1;9941:31;9991:4;9988:1;9981:15;10015:4;10012:1;10005:15;10031:135;10070:3;-1:-1:-1;;10091:17:1;;10088:43;;;10111:18;;:::i;:::-;-1:-1:-1;10158:1:1;10147:13;;10031:135::o;17001:125::-;17041:4;17069:1;17066;17063:8;17060:34;;;17074:18;;:::i;:::-;-1:-1:-1;17111:9:1;;17001:125::o;18610:251::-;18680:6;18733:2;18721:9;18712:7;18708:23;18704:32;18701:52;;;18749:1;18746;18739:12;18701:52;18781:9;18775:16;18800:31;18825:5;18800:31;:::i;18866:980::-;19128:4;19176:3;19165:9;19161:19;19207:6;19196:9;19189:25;19233:2;19271:6;19266:2;19255:9;19251:18;19244:34;19314:3;19309:2;19298:9;19294:18;19287:31;19338:6;19373;19367:13;19404:6;19396;19389:22;19442:3;19431:9;19427:19;19420:26;;19481:2;19473:6;19469:15;19455:29;;19502:1;19512:195;19526:6;19523:1;19520:13;19512:195;;;19591:13;;-1:-1:-1;;;;;19587:39:1;19575:52;;19682:15;;;;19647:12;;;;19623:1;19541:9;19512:195;;;-1:-1:-1;;;;;;;19763:32:1;;;;19758:2;19743:18;;19736:60;-1:-1:-1;;;19827:3:1;19812:19;19805:35;19724:3;18866:980;-1:-1:-1;;;18866:980:1:o;20463:306::-;20551:6;20559;20567;20620:2;20608:9;20599:7;20595:23;20591:32;20588:52;;;20636:1;20633;20626:12;20588:52;20665:9;20659:16;20649:26;;20715:2;20704:9;20700:18;20694:25;20684:35;;20759:2;20748:9;20744:18;20738:25;20728:35;;20463:306;;;;;:::o

Swarm Source

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