ETH Price: $3,093.27 (-1.30%)

Token

RED (RED)
 

Overview

Max Total Supply

1,000,000,000 RED

Holders

888 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
478,314.000000000000478314 RED

Value
$0.00
0x0721bb248c140c3f7bc074aa81ce10208defc6fa
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

RED, the token that never stops burning. Everyone's favorite token is set out on a mission to burn until infinity during over liquefied periods.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
BURNREDBURN

Compiler Version
v0.8.16+commit.07a7930e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT                                                                               
             
pragma solidity 0.8.16;

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 IPlaygroundToken {
    // function addPair(address pair, address token) external;

    function claimFees(uint256 amount, address token) external;
}

library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling
     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.
     *
     * _Available since v4.8._
     */
    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        if (success) {
            if (returndata.length == 0) {
                // only check isContract if the call was successful and the return data is empty
                // otherwise we already know that it was a contract
                require(isContract(target), "Address: call to non-contract");
            }
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    /**
     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason or using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    function _revert(bytes memory returndata, string memory errorMessage) private pure {
        // Look for revert reason and bubble it up if present
        if (returndata.length > 0) {
            // The easiest way to bubble the revert reason is using memory via assembly
            /// @solidity memory-safe-assembly
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert(errorMessage);
        }
    }
}

library SafeERC20 {
    using Address for address;

    function safeTransfer(
        IERC20 token,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(
        IERC20 token,
        address from,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    /**
     * @dev Deprecated. This function has issues similar to the ones found in
     * {IERC20-approve}, and its usage is discouraged.
     *
     * Whenever possible, use {safeIncreaseAllowance} and
     * {safeDecreaseAllowance} instead.
     */
    function safeApprove(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        // safeApprove should only be called when setting an initial allowance,
        // or when resetting it to zero. To increase and decrease it, use
        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
        require(
            (value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }

    function safeIncreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        uint256 newAllowance = token.allowance(address(this), spender) + value;
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function safeDecreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        unchecked {
            uint256 oldAllowance = token.allowance(address(this), spender);
            require(oldAllowance >= value, "SafeERC20: decreased allowance below zero");
            uint256 newAllowance = oldAllowance - value;
            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
        }
    }

    function safePermit(
        IERC20Permit token,
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) internal {
        uint256 nonceBefore = token.nonces(owner);
        token.permit(owner, spender, value, deadline, v, r, s);
        uint256 nonceAfter = token.nonces(owner);
        require(nonceAfter == nonceBefore + 1, "SafeERC20: permit did not succeed");
    }

    /**
     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
     * on the return value: the return value is optional (but if data is returned, it must not be false).
     * @param token The token targeted by the call.
     * @param data The call data (encoded using abi.encode or one of its variants).
     */
    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
        // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that
        // the target address contains contract code and also asserts for success in the low-level call.

        bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
        if (returndata.length > 0) {
            // Return data is optional
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}

interface IERC20Permit {
    /**
     * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,
     * given ``owner``'s signed approval.
     *
     * IMPORTANT: The same issues {IERC20-approve} has related to transaction
     * ordering also apply here.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `deadline` must be a timestamp in the future.
     * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`
     * over the EIP712-formatted function arguments.
     * - the signature must use ``owner``'s current nonce (see {nonces}).
     *
     * For more information on the signature format, see the
     * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP
     * section].
     */
    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;

    /**
     * @dev Returns the current nonce for `owner`. This value must be
     * included whenever a signature is generated for {permit}.
     *
     * Every successful call to {permit} increases ``owner``'s nonce by one. This
     * prevents a signature from being used multiple times.
     */
    function nonces(address owner) external view returns (uint256);

    /**
     * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.
     */
    // solhint-disable-next-line func-name-mixedcase
    function DOMAIN_SEPARATOR() external view returns (bytes32);
}

interface IPlaygroundPair {
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
    event Transfer(address indexed from, address indexed to, uint256 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 (uint256);

    function balanceOf(address owner) external view returns (uint256);

    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    function approve(address spender, uint256 value) external returns (bool);

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 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 (uint256);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function feeToken() external view returns (address);

    function totalFee() external view returns (uint256);

    function getReserves()
        external
        view
        returns (
            uint112 reserve0,
            uint112 reserve1,
            uint32 blockTimestampLast
        );

    function setFeeToken(address _feeToken) external;

    function setTotalFee(uint256 _totalFee) external returns (bool);

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function mint(address to) external returns (uint256 liquidity);

    function burn(address to)
        external
        returns (uint256 amount0, uint256 amount1);

    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        uint256 amount0Fee,
        uint256 amount1Fee,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(
        address,
        address,
        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 {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    function name() public view virtual override returns (string memory) {
        return _name;
    }

    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

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

    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    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");

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);
    }

    function _createInitialSupply(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

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

    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);
    }
}

contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    function owner() public view returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() external virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    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 IPlaygroundRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function swapExactTokensForETHSupportingFeeOnTransferTokens(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external;
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable;
    function addLiquidityETH(address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline) external payable returns (uint256 amountToken, uint256 amountETH, uint256 liquidity);
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function removeLiquidityETH(address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline) external returns (uint amountToken, uint amountETH);
}

interface IPlaygroundFactory {
    function createPair(address tokenA, address tokenB, address router) external returns (address pair);
}

contract TokenHandler is Ownable {
    function sendTokenToOwner(address token) external onlyOwner {
        if(IERC20(token).balanceOf(address(this)) > 0){
            IERC20(token).transfer(owner(), IERC20(token).balanceOf(address(this)));
        }
    }
}

contract BURNREDBURN is ERC20, Ownable, IPlaygroundToken {

    IPlaygroundRouter public dexRouter;
    IPlaygroundPair public lpPair;
    IPlaygroundPair public usdcLpPair;
    address usdcAddress;

    uint256 public maxTxnAmount;
    uint256 public maxWallet;

    address public communityAddress;

    TokenHandler public tokenHandler;

    address public RED;

    uint256 public tradingActiveBlock = 0; // 0 means trading is not active

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;

    uint256 public totalFees;
    uint256 public communityFee;
    uint256 public liquidityFee;

    uint256 public constant FEE_DIVISOR = 1000;

    uint256 public lpWithdrawRequestTimestamp;
    uint256 public lpWithdrawRequestDuration = 1 minutes;
    bool public lpWithdrawRequestPending;
    uint256 public lpPercToWithDraw;

    uint256 public percentForLPBurn = 25; // 25 = .25%
    bool public lpBurnEnabled = false;
    uint256 public lpBurnFrequency = 360000 seconds;
    uint256 public lastLpBurnTime;
    
    uint256 public manualBurnFrequency = 1 seconds;
    uint256 public lastManualLpBurnTime;
    
    /******************/

    mapping (address => bool) private _isWhitelisted;

    // 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 SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event EnabledTrading();

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event UpdatedCommunityAddress(address indexed newWallet);

    event OwnerForcedSwapBack(uint256 timestamp);

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    event AutoBurnLP(uint256 indexed tokensBurned);

    event ManualBurnLP(uint256 indexed tokensBurned);

    event TransferForeignToken(address token, uint256 amount);

    event RequestedLPWithdraw();
    
    event WithdrewLPForMigration();

    event CanceledLpWithdrawRequest();

    event UpdatedMaxTxnAmount(uint256 newAmount);

    event RemovedLimits();

    constructor() ERC20("RED", "RED") payable {
        
        address newOwner = msg.sender; // can leave alone if owner is deployer.
        address _dexRouter;

        if(block.chainid == 1){
            _dexRouter = 0xd0c2ce21b55fc153e1298455276418D8F2fA6431; // Plaground Router
            usdcAddress = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48; // USDC 
            
        } else if(block.chainid == 5){
            _dexRouter = 0x57BdACb706c392c675Fb103924f1b3C325FaDd12; // Goerli Router
            usdcAddress = 0x2f3A40A3db8a7e3D09B0adfEfbCe4f6F81927557;
        } else if(block.chainid == 42161){
            _dexRouter = 0x30F7f0C9A9f3BE5D0E06FA187bd25693BDdb4CD6; // Arbitrum Router
            usdcAddress = 0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8;
        }else {
            revert("Chain not configured");
        }

        tokenHandler = new TokenHandler();
        RED = owner();

        // initialize router
        dexRouter = IPlaygroundRouter(_dexRouter);
        // create pair
        lpPair = IPlaygroundPair(IPlaygroundFactory(dexRouter.factory()).createPair(address(this), dexRouter.WETH(), address(dexRouter)));
        usdcLpPair = IPlaygroundPair(IPlaygroundFactory(dexRouter.factory()).createPair(address(this), usdcAddress, address(dexRouter)));

        usdcLpPair.setFeeToken(usdcAddress);
        lpPair.setFeeToken(dexRouter.WETH());

        _setAutomatedMarketMakerPair(address(lpPair), true);
        _setAutomatedMarketMakerPair(address(usdcLpPair), true);
        
        uint256 totalSupply = 1 * 1e9 * (10 ** decimals());

        maxTxnAmount = totalSupply * 5 / 1000;
        maxWallet = totalSupply * 1 / 100; // 1%
        
        communityFee = 50;
        liquidityFee = 50;
        totalFees = communityFee + liquidityFee;

        communityAddress = address(msg.sender);

        whitelist(newOwner, true);
        whitelist(address(this), true);
        whitelist(address(0xdead), true);
        whitelist(address(communityAddress), true);
        whitelist(address(dexRouter), true);

        _createInitialSupply(newOwner, totalSupply);
        transferOwnership(newOwner);
    }

    receive() external payable {}
    
    function enableTrading() external onlyOwner {
        require(!tradingActive, "Cannot reenable trading");
        usdcLpPair.setTotalFee(totalFees);
        lpPair.setTotalFee(totalFees);
        tradingActive = true;
        tradingActiveBlock = block.number;
        emit EnabledTrading();
    }
    
    function airdropToWallets(address[] memory wallets, uint256[] memory amountsInTokens) external onlyOwner {
        require(wallets.length == amountsInTokens.length, "arrays must be the same length");
        require(wallets.length < 600, "Can only airdrop 600 wallets per txn due to gas limits"); // allows for airdrop + launch at the same exact time, reducing delays and reducing sniper input.
        for(uint256 i = 0; i < wallets.length; i++){
            address wallet = wallets[i];
            uint256 amount = amountsInTokens[i];
            super._transfer(msg.sender, wallet, amount);
        }
    }

    function setAutomatedMarketMakerPair(address pair, bool value) external onlyOwner {
        require(pair != address(lpPair), "The pair cannot be removed from automatedMarketMakerPairs");
        _setAutomatedMarketMakerPair(pair, value);
        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;
        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateFees(uint256 _communityFee, uint256 _liquidityFee) external onlyRED {
        communityFee = _communityFee;
        liquidityFee = _liquidityFee;
        totalFees = communityFee + liquidityFee;
        lpPair.setTotalFee(totalFees);
        usdcLpPair.setTotalFee(totalFees);
        require(totalFees <= 15 * FEE_DIVISOR / 100, "Must keep fees at 15% or less");
    }

    function massExcludeFromFees(address[] calldata accounts, bool excluded) external onlyOwner {
        for(uint256 i = 0; i < accounts.length; i++){
            _isWhitelisted[accounts[i]] = excluded;
            emit ExcludeFromFees(accounts[i], excluded);
        }
    }

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

    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 2 / 1000)/1e18, "Cannot set max buy amount lower than 0.2%");
        maxTxnAmount = newNum * (10**18);
        emit UpdatedMaxTxnAmount(maxTxnAmount);
    }

    function updateMaxWallet(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 100)/1e18, "Cannot set max wallet amount lower than 1%");
        maxWallet = newNum * (10**18);
    }

    // remove limits after token is stable
    function removeLimits() external onlyOwner {
        limitsInEffect = false;
        emit RemovedLimits();
    }

    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, "amount must be greater than 0");
        
        if(!tradingActive){
            require(_isWhitelisted[from] || _isWhitelisted[to], "Trading is not active.");
        }

        if(limitsInEffect){
            if (!_isWhitelisted[from] && !_isWhitelisted[to]){
                //when buy
                if (automatedMarketMakerPairs[from]) {
                    require(amount <= maxTxnAmount, "Buy transfer amount exceeds the max buy.");
                    require(amount + balanceOf(to) <= maxWallet, "Max Wallet exceeded");
                } 
                //when sell
                else if (automatedMarketMakerPairs[to]) {
                    require(amount <= maxTxnAmount, "Sell transfer amount exceeds the max sell.");
                }
            }
        }

        if(automatedMarketMakerPairs[to] && lpBurnEnabled && block.timestamp >= lastLpBurnTime + lpBurnFrequency && !_isWhitelisted[from]){
            autoBurnLiquidityPairTokens();
        }

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

    function claimFees(uint256 amount, address token) external {
        if(amount == 0) return;
        SafeERC20.safeTransferFrom(IERC20(token), msg.sender, address(this), amount);
        uint256 amountForCommunity = amount * communityFee / totalFees;
        if(amountForCommunity > 0){
            SafeERC20.safeTransfer(IERC20(token), communityAddress, amountForCommunity);
        }
    }

    function transferForeignToken(address _token, address _to) external onlyRED {
        require(_token != address(0), "_token address cannot be 0");
        require(_token != address(lpPair) || !tradingActive, "Can't withdraw LP while trading is active");
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        SafeERC20.safeTransfer(IERC20(_token), _to , _contractBalance);
        emit TransferForeignToken(_token, _contractBalance);
    }

    // withdraw ETH if stuck or someone sends to the address
    function withdrawStuckETH() external onlyRED {
        bool success;
        (success,) = address(msg.sender).call{value: address(this).balance}("");
    }

    function setCommunityAddress(address _communityAddress) external onlyRED {
        require(_communityAddress != address(0), "_communityAddress address cannot be 0");
        communityAddress = payable(_communityAddress);
        emit UpdatedCommunityAddress(_communityAddress);
    }

    function setAutoLPBurnSettings(uint256 _frequencyInSeconds, uint256 _percent, bool _Enabled) external onlyRED {
        require(_frequencyInSeconds >= 600, "cannot set buyback more often than every 10 minutes");
        require(_percent <= 1000 && _percent >= 0, "Must set auto LP burn percent between 0% and 10%");
        lpBurnFrequency = _frequencyInSeconds;
        percentForLPBurn = _percent;
        lpBurnEnabled = _Enabled;
    }
    
    function autoBurnLiquidityPairTokens() internal {
        
        lastLpBurnTime = block.timestamp;
        
        lastManualLpBurnTime = block.timestamp;
        uint256 lpBalance = IERC20(address(lpPair)).balanceOf(address(this));
        uint256 tokenBalance = balanceOf(address(this));
        uint256 lpAmount = lpBalance * percentForLPBurn / 10000;
        uint256 initialEthBalance = address(this).balance;

        // approve token transfer to cover all possible scenarios
        IERC20(address(lpPair)).approve(address(dexRouter), lpAmount);

        // remove the liquidity
        dexRouter.removeLiquidityETH(
            address(this),
            lpAmount,
            1, // slippage is unavoidable
            1, // slippage is unavoidable
            address(this),
            block.timestamp
        );

        uint256 deltaTokenBalance = balanceOf(address(this)) - tokenBalance;
        if(deltaTokenBalance > 0){
            super._transfer(address(this), address(0xdead), deltaTokenBalance);
        }

        uint256 deltaEthBalance = address(this).balance - initialEthBalance;

        if(deltaEthBalance > 0){
            buyBackTokens(deltaEthBalance);
        }

        emit AutoBurnLP(lpAmount);
    }

    function manualBurnLiquidityPairTokens(uint256 percent) external onlyRED {
        require(percent <=2000, "May not burn more than 20% of contract's LP at a time");
        require(lastManualLpBurnTime <= block.timestamp - manualBurnFrequency, "Burn too soon");
        lastManualLpBurnTime = block.timestamp;
        uint256 lpBalance = IERC20(address(lpPair)).balanceOf(address(this));
        uint256 tokenBalance = balanceOf(address(this));
        uint256 lpAmount = lpBalance * percent / 10000;
        uint256 initialEthBalance = address(this).balance;

        // approve token transfer to cover all possible scenarios
        IERC20(address(lpPair)).approve(address(dexRouter), lpAmount);

        // remove the liquidity
        dexRouter.removeLiquidityETH(
            address(this),
            lpAmount,
            1, // slippage is unavoidable
            1, // slippage is unavoidable
            address(this),
            block.timestamp
        );

        uint256 deltaTokenBalance = balanceOf(address(this)) - tokenBalance;
        if(deltaTokenBalance > 0){
            super._transfer(address(this), address(0xdead), deltaTokenBalance);
        }

        uint256 deltaEthBalance = address(this).balance - initialEthBalance;

        if(deltaEthBalance > 0){
            buyBackTokens(deltaEthBalance);
        }

        emit ManualBurnLP(lpAmount);
    }

    function buyBackTokens(uint256 amountInWei) internal {
        address[] memory path = new address[](2);
        path[0] = dexRouter.WETH();
        path[1] = address(this);

        dexRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amountInWei}(
            0,
            path,
            address(0xdead),
            block.timestamp
        );
    }

    function requestToWithdrawLP(uint256 percToWithdraw) external onlyOwner {
        require(!lpWithdrawRequestPending, "Cannot request again until first request is over.");
        require(percToWithdraw <= 100 && percToWithdraw > 0, "Need to set between 1-100%");
        lpWithdrawRequestTimestamp = block.timestamp;
        lpWithdrawRequestPending = true;
        lpPercToWithDraw = percToWithdraw;
        emit RequestedLPWithdraw();
    }

    function nextAvailableLpWithdrawDate() public view returns (uint256){
        if(lpWithdrawRequestPending){
            return lpWithdrawRequestTimestamp + lpWithdrawRequestDuration;
        }
        else {
            return 0;  // 0 means no open requests
        }
    }

    function withdrawRequestedLP() external onlyOwner {
        require(block.timestamp >= nextAvailableLpWithdrawDate() && nextAvailableLpWithdrawDate() > 0, "Must request and wait.");
        lpWithdrawRequestTimestamp = 0;
        lpWithdrawRequestPending = false;

        uint256 amtToWithdraw = IERC20(address(lpPair)).balanceOf(address(this)) * lpPercToWithDraw / 100;
        
        lpPercToWithDraw = 0;

        IERC20(address(lpPair)).transfer(msg.sender, amtToWithdraw);
    }

    function cancelLPWithdrawRequest() external onlyOwner {
        lpWithdrawRequestPending = false;
        lpPercToWithDraw = 0;
        lpWithdrawRequestTimestamp = 0;
        emit CanceledLpWithdrawRequest();
    }

    function addInitialLiquidity(uint256 blocksForPenalty) external onlyOwner {
        require(!tradingActive, "Trading is already active, cannot relaunch.");
        require(blocksForPenalty < 10, "Cannot make penalty blocks more than 10");
   
        // add the liquidity

        require(address(this).balance > 0, "Must have ETH on contract to launch");

        require(balanceOf(address(this)) > 0, "Must have Tokens on contract to launch");

        _approve(address(this), address(dexRouter), balanceOf(address(this)));
        dexRouter.addLiquidityETH{value: address(this).balance}(
            address(this),
            balanceOf(address(this)),
            1, // slippage is unavoidable
            1, // slippage is unavoidable
            address(this),
            block.timestamp
        );
    }

    function addLiquidity() external onlyRED {
        require(tradingActive, "Trading is not active.");
        uint256 wethBalance = IERC20(dexRouter.WETH()).balanceOf(address(this));
        require(wethBalance > 0, "No WETH");
        IERC20(dexRouter.WETH()).transfer(address(lpPair), wethBalance);
        lpPair.sync();
    }

    function addLiquidityUSDC() external onlyRED {
        require(tradingActive, "Trading is not active.");
        uint256 usdcBalance = IERC20(usdcAddress).balanceOf(address(this));
        require(usdcBalance > 0, "No USDC");
        IERC20(usdcAddress).transfer(address(usdcLpPair), usdcBalance);
        usdcLpPair.sync();
    }

    modifier onlyRED(){
        require(msg.sender == RED, "Not RED");
        _;
    }

    function renounceREDOwnership() external onlyRED {
        RED = address(0);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokensBurned","type":"uint256"}],"name":"AutoBurnLP","type":"event"},{"anonymous":false,"inputs":[],"name":"CanceledLpWithdrawRequest","type":"event"},{"anonymous":false,"inputs":[],"name":"EnabledTrading","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":"uint256","name":"tokensBurned","type":"uint256"}],"name":"ManualBurnLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"OwnerForcedSwapBack","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":[],"name":"RemovedLimits","type":"event"},{"anonymous":false,"inputs":[],"name":"RequestedLPWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferForeignToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedCommunityAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxTxnAmount","type":"event"},{"anonymous":false,"inputs":[],"name":"WithdrewLPForMigration","type":"event"},{"inputs":[],"name":"FEE_DIVISOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RED","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocksForPenalty","type":"uint256"}],"name":"addInitialLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"addLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"addLiquidityUSDC","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"uint256[]","name":"amountsInTokens","type":"uint256[]"}],"name":"airdropToWallets","outputs":[],"stateMutability":"nonpayable","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":[],"name":"cancelLPWithdrawRequest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"token","type":"address"}],"name":"claimFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"communityAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"communityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IPlaygroundRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"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":"liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"contract IPlaygroundPair","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPercToWithDraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpWithdrawRequestDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpWithdrawRequestPending","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpWithdrawRequestTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"manualBurnLiquidityPairTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"massExcludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxTxnAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextAvailableLpWithdrawDate","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":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceREDOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percToWithdraw","type":"uint256"}],"name":"requestToWithdrawLP","outputs":[],"stateMutability":"nonpayable","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":"address","name":"_communityAddress","type":"address"}],"name":"setCommunityAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenHandler","outputs":[{"internalType":"contract TokenHandler","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActiveBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferForeignToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_communityFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateFees","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":"updateMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"usdcLpPair","outputs":[{"internalType":"contract IPlaygroundPair","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"whitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawRequestedLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6000600f556010805462ffffff19166001908117909155603c60155560196018819055805460ff1916905562057e40601a55601c55600360808181526214915160ea1b60a081905261010060405260c083815260e091909152909162000066838262000b05565b50600462000075828262000b05565b50505060006200008a6200076e60201b60201c565b600580546001600160a01b0319166001600160a01b03831690811790915560405191925090600090600080516020620050fb833981519152908290a35033600046600103620001155750600980546001600160a01b03191673a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4817905573d0c2ce21b55fc153e1298455276418d8f2fa6431620001f9565b46600503620001605750600980546001600160a01b031916732f3a40a3db8a7e3d09b0adfefbce4f6f819275571790557357bdacb706c392c675fb103924f1b3c325fadd12620001f9565b4661a4b103620001ac5750600980546001600160a01b03191673ff970a61a04b1ca14834a43f5de4533ebddb5cc81790557330f7f0c9a9f3be5d0e06fa187bd25693bddb4cd6620001f9565b60405162461bcd60e51b815260206004820152601460248201527f436861696e206e6f7420636f6e6669677572656400000000000000000000000060448201526064015b60405180910390fd5b604051620002079062000a52565b604051809103906000f08015801562000224573d6000803e3d6000fd5b50600d80546001600160a01b0319166001600160a01b0392831617905560055416600e80546001600160a01b039283166001600160a01b0319918216179091556006805492841692909116821790556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa158015620002af573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002d5919062000bd1565b6001600160a01b03166376f7973830600660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000338573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200035e919062000bd1565b60065460405160e085901b6001600160e01b03191681526001600160a01b03938416600482015291831660248301529190911660448201526064016020604051808303816000875af1158015620003b9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003df919062000bd1565b600780546001600160a01b0319166001600160a01b039283161790556006546040805163c45a015560e01b81529051919092169163c45a01559160048083019260209291908290030181865afa1580156200043e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000464919062000bd1565b600954600654604051630edef2e760e31b81523060048201526001600160a01b03928316602482015290821660448201529116906376f79738906064016020604051808303816000875af1158015620004c1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004e7919062000bd1565b600880546001600160a01b0319166001600160a01b03928316908117909155600954604051630573388960e21b815292166004830152906315cce22490602401600060405180830381600087803b1580156200054257600080fd5b505af115801562000557573d6000803e3d6000fd5b5050600754600654604080516315ab88c960e31b815290516001600160a01b0393841695506315cce2249450919092169163ad5c46489160048083019260209291908290030181865afa158015620005b3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005d9919062000bd1565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401600060405180830381600087803b1580156200061b57600080fd5b505af115801562000630573d6000803e3d6000fd5b50506007546200064e92506001600160a01b03169050600162000772565b60085462000667906001600160a01b0316600162000772565b6000620006776012600a62000d18565b6200068790633b9aca0062000d29565b90506103e86200069982600562000d29565b620006a5919062000d4b565b600a556064620006b782600162000d29565b620006c3919062000d4b565b600b55603260128190556013819055620006de908062000d6e565b601155600c80546001600160a01b0319163317905562000700836001620007c6565b6200070d306001620007c6565b6200071c61dead6001620007c6565b600c5462000735906001600160a01b03166001620007c6565b6006546200074e906001600160a01b03166001620007c6565b6200075a838262000870565b620007658362000955565b50505062000d84565b3390565b6001600160a01b0382166000818152601f6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6005546001600160a01b03163314620008115760405162461bcd60e51b81526020600482018190526024820152600080516020620050db8339815191526044820152606401620001f0565b6001600160a01b0382166000818152601e6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620008c85760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620001f0565b8060026000828254620008dc919062000d6e565b90915550506001600160a01b038216600090815260208190526040812080548392906200090b90849062000d6e565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b03163314620009a05760405162461bcd60e51b81526020600482018190526024820152600080516020620050db8339815191526044820152606401620001f0565b6001600160a01b03811662000a075760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620001f0565b6005546040516001600160a01b03808416921690600080516020620050fb83398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6104d68062004c0583390190565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168062000a8b57607f821691505b60208210810362000aac57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000b0057600081815260208120601f850160051c8101602086101562000adb5750805b601f850160051c820191505b8181101562000afc5782815560010162000ae7565b5050505b505050565b81516001600160401b0381111562000b215762000b2162000a60565b62000b398162000b32845462000a76565b8462000ab2565b602080601f83116001811462000b71576000841562000b585750858301515b600019600386901b1c1916600185901b17855562000afc565b600085815260208120601f198616915b8281101562000ba25788860151825594840194600190910190840162000b81565b508582101562000bc15787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000be457600080fd5b81516001600160a01b038116811462000bfc57600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000c5a57816000190482111562000c3e5762000c3e62000c03565b8085161562000c4c57918102915b93841c939080029062000c1e565b509250929050565b60008262000c735750600162000d12565b8162000c825750600062000d12565b816001811462000c9b576002811462000ca65762000cc6565b600191505062000d12565b60ff84111562000cba5762000cba62000c03565b50506001821b62000d12565b5060208310610133831016604e8410600b841016171562000ceb575081810a62000d12565b62000cf7838362000c19565b806000190482111562000d0e5762000d0e62000c03565b0290505b92915050565b600062000bfc60ff84168362000c62565b600081600019048311821515161562000d465762000d4662000c03565b500290565b60008262000d6957634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111562000d125762000d1262000c03565b613e718062000d946000396000f3fe6080604052600436106103c75760003560e01c806386e476dd116101f2578063befd2fac1161010d578063f2fde38b116100a0578063f8b45b051161006f578063f8b45b0514610aa5578063fc4db32314610abb578063fd361d0e14610adb578063fe72b27a14610af557600080fd5b8063f2fde38b14610a30578063f5648a4f14610a50578063f59c370814610a65578063f7ce447914610a8557600080fd5b8063e8078d94116100dc578063e8078d94146109da578063e90f0d04146109ef578063ee40166e14610a04578063ee44b44e14610a1a57600080fd5b8063befd2fac14610949578063c7c61e2c14610969578063cf46f24c1461097e578063dd62ed3e1461099457600080fd5b80639ec22c0e11610185578063a9059cbb11610154578063a9059cbb146108ba578063b62496f5146108da578063bbc0c7421461090a578063bd5fb9201461092957600080fd5b80639ec22c0e14610859578063a457c2d71461086f578063a46c9aa41461088f578063a4c82a00146108a457600080fd5b806395d89b41116101c157806395d89b41146107f857806398118cb41461080d5780639a7a23d6146108235780639e93ad8e1461084357600080fd5b806386e476dd1461078f5780638961be6b146107af5780638a8c523c146107c55780638da5cb5b146107da57600080fd5b806336d18b67116102e257806370a0823111610275578063751039fc11610244578063751039fc1461072f578063763cef4914610744578063783102eb146107595780638366e79a1461076f57600080fd5b806370a08231146106c5578063712c2985146106e5578063715018a6146106fa578063730c18881461070f57600080fd5b8063452ed4f1116102b1578063452ed4f11461064b5780634a62bb651461066b5780636db79437146106855780636ddd1713146106a557600080fd5b806336d18b67146105cb57806339509351146105eb5780633e743e3f1461060b57806341a22cc21461062b57600080fd5b80631b3d6e871161035a57806323b872dd1161032957806323b872dd1461055f5780632c3e486c1461057f5780632e82f1a014610595578063313ce567146105af57600080fd5b80631b3d6e87146104dd5780631c499ab0146104fd578063203e727e1461051f5780632307b4411461053f57600080fd5b806313114a9d1161039657806313114a9d1461048657806318160ddd1461049c578063184c16c5146104b1578063199ffc72146104c757600080fd5b8063058054c9146103d357806306fdde03146103fc5780630758d9241461041e578063095ea7b31461045657600080fd5b366103ce57005b600080fd5b3480156103df57600080fd5b506103e960145481565b6040519081526020015b60405180910390f35b34801561040857600080fd5b50610411610b15565b6040516103f391906136e4565b34801561042a57600080fd5b5060065461043e906001600160a01b031681565b6040516001600160a01b0390911681526020016103f3565b34801561046257600080fd5b5061047661047136600461372f565b610ba7565b60405190151581526020016103f3565b34801561049257600080fd5b506103e960115481565b3480156104a857600080fd5b506002546103e9565b3480156104bd57600080fd5b506103e9601c5481565b3480156104d357600080fd5b506103e960185481565b3480156104e957600080fd5b50600d5461043e906001600160a01b031681565b34801561050957600080fd5b5061051d61051836600461375b565b610bbe565b005b34801561052b57600080fd5b5061051d61053a36600461375b565b610c9e565b34801561054b57600080fd5b5061051d61055a36600461384a565b610daa565b34801561056b57600080fd5b5061047661057a36600461390c565b610f03565b34801561058b57600080fd5b506103e9601a5481565b3480156105a157600080fd5b506019546104769060ff1681565b3480156105bb57600080fd5b50604051601281526020016103f3565b3480156105d757600080fd5b50600e5461043e906001600160a01b031681565b3480156105f757600080fd5b5061047661060636600461372f565b610fad565b34801561061757600080fd5b5060085461043e906001600160a01b031681565b34801561063757600080fd5b5061051d61064636600461375b565b610fe9565b34801561065757600080fd5b5060075461043e906001600160a01b031681565b34801561067757600080fd5b506010546104769060ff1681565b34801561069157600080fd5b5061051d6106a036600461394d565b611248565b3480156106b157600080fd5b506010546104769062010000900460ff1681565b3480156106d157600080fd5b506103e96106e036600461396f565b6113e1565b3480156106f157600080fd5b506103e96113fc565b34801561070657600080fd5b5061051d611425565b34801561071b57600080fd5b5061051d61072a3660046139a1565b611499565b34801561073b57600080fd5b5061051d6115c2565b34801561075057600080fd5b5061051d611621565b34801561076557600080fd5b506103e960175481565b34801561077b57600080fd5b5061051d61078a3660046139da565b6117bf565b34801561079b57600080fd5b50600c5461043e906001600160a01b031681565b3480156107bb57600080fd5b506103e960125481565b3480156107d157600080fd5b5061051d611981565b3480156107e657600080fd5b506005546001600160a01b031661043e565b34801561080457600080fd5b50610411611b33565b34801561081957600080fd5b506103e960135481565b34801561082f57600080fd5b5061051d61083e366004613a13565b611b42565b34801561084f57600080fd5b506103e96103e881565b34801561086557600080fd5b506103e9601d5481565b34801561087b57600080fd5b5061047661088a36600461372f565b611c36565b34801561089b57600080fd5b5061051d611ccf565b3480156108b057600080fd5b506103e9601b5481565b3480156108c657600080fd5b506104766108d536600461372f565b611d0b565b3480156108e657600080fd5b506104766108f536600461396f565b601f6020526000908152604090205460ff1681565b34801561091657600080fd5b5060105461047690610100900460ff1681565b34801561093557600080fd5b5061051d610944366004613a41565b611d18565b34801561095557600080fd5b5061051d61096436600461375b565b611e1e565b34801561097557600080fd5b5061051d611f54565b34801561098a57600080fd5b506103e9600a5481565b3480156109a057600080fd5b506103e96109af3660046139da565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156109e657600080fd5b5061051d611fbd565b3480156109fb57600080fd5b5061051d61227b565b348015610a1057600080fd5b506103e9600f5481565b348015610a2657600080fd5b506103e960155481565b348015610a3c57600080fd5b5061051d610a4b36600461396f565b61243f565b348015610a5c57600080fd5b5061051d61252a565b348015610a7157600080fd5b5061051d610a80366004613a13565b612596565b348015610a9157600080fd5b5061051d610aa036600461396f565b61261f565b348015610ab157600080fd5b506103e9600b5481565b348015610ac757600080fd5b5061051d610ad6366004613abc565b6126f7565b348015610ae757600080fd5b506016546104769060ff1681565b348015610b0157600080fd5b5061051d610b1036600461375b565b61274c565b606060038054610b2490613ae1565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5090613ae1565b8015610b9d5780601f10610b7257610100808354040283529160200191610b9d565b820191906000526020600020905b815481529060010190602001808311610b8057829003601f168201915b5050505050905090565b6000610bb4338484612a46565b5060015b92915050565b6005546001600160a01b03163314610bf15760405162461bcd60e51b8152600401610be890613b1b565b60405180910390fd5b670de0b6b3a76400006064610c0560025490565b610c10906001613b66565b610c1a9190613b85565b610c249190613b85565b811015610c865760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f776044820152696572207468616e20312560b01b6064820152608401610be8565b610c9881670de0b6b3a7640000613b66565b600b5550565b6005546001600160a01b03163314610cc85760405162461bcd60e51b8152600401610be890613b1b565b670de0b6b3a76400006103e8610cdd60025490565b610ce8906002613b66565b610cf29190613b85565b610cfc9190613b85565b811015610d5d5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e322560b81b6064820152608401610be8565b610d6f81670de0b6b3a7640000613b66565b600a8190556040519081527f89c099a4e6d77f9ed9839689924c080dcc270b4bc837e2d8979544f19df27d789060200160405180910390a150565b6005546001600160a01b03163314610dd45760405162461bcd60e51b8152600401610be890613b1b565b8051825114610e255760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610be8565b610258825110610e965760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203630302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610be8565b60005b8251811015610efe576000838281518110610eb657610eb6613ba7565b602002602001015190506000838381518110610ed457610ed4613ba7565b60200260200101519050610ee9338383612b6a565b50508080610ef690613bbd565b915050610e99565b505050565b6000610f10848484612cbf565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610f955760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610be8565b610fa28533858403612a46565b506001949350505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610bb4918590610fe4908690613bd6565b612a46565b6005546001600160a01b031633146110135760405162461bcd60e51b8152600401610be890613b1b565b601054610100900460ff161561107f5760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610be8565b600a81106110df5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206d616b652070656e616c747920626c6f636b73206d6f72652060448201526607468616e2031360cc1b6064820152608401610be8565b6000471161113b5760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401610be8565b6000611146306113e1565b116111a25760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610be8565b6006546111bd9030906001600160a01b0316610fe4826113e1565b6006546001600160a01b031663f305d71947306111d9816113e1565b60018030426040518863ffffffff1660e01b81526004016111ff96959493929190613be9565b60606040518083038185885af115801561121d573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906112429190613c24565b50505050565b600e546001600160a01b031633146112725760405162461bcd60e51b8152600401610be890613c52565b601282905560138190556112868183613bd6565b601181905560075460405163992d0ebb60e01b815260048101929092526001600160a01b03169063992d0ebb906024016020604051808303816000875af11580156112d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112f99190613c73565b5060085460115460405163992d0ebb60e01b81526001600160a01b039092169163992d0ebb9161132f9160040190815260200190565b6020604051808303816000875af115801561134e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113729190613c73565b5060646113826103e8600f613b66565b61138c9190613b85565b60115411156113dd5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610be8565b5050565b6001600160a01b031660009081526020819052604090205490565b60165460009060ff161561141f5760155460145461141a9190613bd6565b905090565b50600090565b6005546001600160a01b0316331461144f5760405162461bcd60e51b8152600401610be890613b1b565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b600e546001600160a01b031633146114c35760405162461bcd60e51b8152600401610be890613c52565b6102588310156115315760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e207468604482015272616e206576657279203130206d696e7574657360681b6064820152608401610be8565b6103e88211158015611541575060015b6115a65760405162461bcd60e51b815260206004820152603060248201527f4d75737420736574206175746f204c50206275726e2070657263656e7420626560448201526f747765656e20302520616e642031302560801b6064820152608401610be8565b601a929092556018556019805460ff1916911515919091179055565b6005546001600160a01b031633146115ec5760405162461bcd60e51b8152600401610be890613b1b565b6010805460ff191690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b0316331461164b5760405162461bcd60e51b8152600401610be890613b1b565b6116536113fc565b4210158015611669575060006116676113fc565b115b6116ae5760405162461bcd60e51b815260206004820152601660248201527526bab9ba103932b8bab2b9ba1030b732103bb0b4ba1760511b6044820152606401610be8565b600060148190556016805460ff191690556017546007546040516370a0823160e01b8152306004820152606492916001600160a01b0316906370a0823190602401602060405180830381865afa15801561170c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117309190613c90565b61173a9190613b66565b6117449190613b85565b600060175560075460405163a9059cbb60e01b8152336004820152602481018390529192506001600160a01b03169063a9059cbb906044016020604051808303816000875af115801561179b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113dd9190613c73565b600e546001600160a01b031633146117e95760405162461bcd60e51b8152600401610be890613c52565b6001600160a01b03821661183f5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610be8565b6007546001600160a01b0383811691161415806118645750601054610100900460ff16155b6118c25760405162461bcd60e51b815260206004820152602960248201527f43616e2774207769746864726177204c50207768696c652074726164696e672060448201526869732061637469766560b81b6064820152608401610be8565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa158015611909573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061192d9190613c90565b905061193a838383613002565b604080516001600160a01b0385168152602081018390527fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a1505050565b6005546001600160a01b031633146119ab5760405162461bcd60e51b8152600401610be890613b1b565b601054610100900460ff1615611a035760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610be8565b60085460115460405163992d0ebb60e01b81526001600160a01b039092169163992d0ebb91611a389160040190815260200190565b6020604051808303816000875af1158015611a57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a7b9190613c73565b5060075460115460405163992d0ebb60e01b81526001600160a01b039092169163992d0ebb91611ab19160040190815260200190565b6020604051808303816000875af1158015611ad0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611af49190613c73565b506010805461ff00191661010017905543600f556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1565b606060048054610b2490613ae1565b6005546001600160a01b03163314611b6c5760405162461bcd60e51b8152600401610be890613b1b565b6007546001600160a01b0390811690831603611bf05760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610be8565b611bfa8282613065565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015611cb85760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610be8565b611cc53385858403612a46565b5060019392505050565b600e546001600160a01b03163314611cf95760405162461bcd60e51b8152600401610be890613c52565b600e80546001600160a01b0319169055565b6000610bb4338484612cbf565b6005546001600160a01b03163314611d425760405162461bcd60e51b8152600401610be890613b1b565b60005b828110156112425781601e6000868685818110611d6457611d64613ba7565b9050602002016020810190611d79919061396f565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055838382818110611db357611db3613ba7565b9050602002016020810190611dc8919061396f565b6001600160a01b03167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df783604051611e04911515815260200190565b60405180910390a280611e1681613bbd565b915050611d45565b6005546001600160a01b03163314611e485760405162461bcd60e51b8152600401610be890613b1b565b60165460ff1615611eb55760405162461bcd60e51b815260206004820152603160248201527f43616e6e6f74207265717565737420616761696e20756e74696c206669727374604482015270103932b8bab2b9ba1034b99037bb32b91760791b6064820152608401610be8565b60648111158015611ec65750600081115b611f125760405162461bcd60e51b815260206004820152601a60248201527f4e65656420746f20736574206265747765656e20312d313030250000000000006044820152606401610be8565b426014556016805460ff1916600117905560178190556040517fd99a77b2f3951cd076e75814e44db497e6abc203dd251329da0b62c288f9f48b90600090a150565b6005546001600160a01b03163314611f7e5760405162461bcd60e51b8152600401610be890613b1b565b6016805460ff191690556000601781905560148190556040517ffbcc1c208c9c4d1d9f557267b55c5ae316e74ce676a0db72ef18c6d5f5767c619190a1565b600e546001600160a01b03163314611fe75760405162461bcd60e51b8152600401610be890613c52565b601054610100900460ff1661200e5760405162461bcd60e51b8152600401610be890613ca9565b600654604080516315ab88c960e31b815290516000926001600160a01b03169163ad5c46489160048083019260209291908290030181865afa158015612058573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061207c9190613cd9565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa1580156120c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120e69190613c90565b9050600081116121225760405162461bcd60e51b815260206004820152600760248201526609cde40ae8aa8960cb1b6044820152606401610be8565b600660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612175573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121999190613cd9565b60075460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810184905291169063a9059cbb906044016020604051808303816000875af11580156121eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061220f9190613c73565b50600760009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561226057600080fd5b505af1158015612274573d6000803e3d6000fd5b5050505050565b600e546001600160a01b031633146122a55760405162461bcd60e51b8152600401610be890613c52565b601054610100900460ff166122cc5760405162461bcd60e51b8152600401610be890613ca9565b6009546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015612315573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123399190613c90565b9050600081116123755760405162461bcd60e51b81526020600482015260076024820152664e6f205553444360c81b6044820152606401610be8565b60095460085460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810184905291169063a9059cbb906044016020604051808303816000875af11580156123ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123ee9190613c73565b50600860009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561226057600080fd5b6005546001600160a01b031633146124695760405162461bcd60e51b8152600401610be890613b1b565b6001600160a01b0381166124ce5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610be8565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b600e546001600160a01b031633146125545760405162461bcd60e51b8152600401610be890613c52565b604051600090339047908381818185875af1925050503d8060008114611242576040519150601f19603f3d011682016040523d82523d6000602084013e611242565b6005546001600160a01b031633146125c05760405162461bcd60e51b8152600401610be890613b1b565b6001600160a01b0382166000818152601e6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b600e546001600160a01b031633146126495760405162461bcd60e51b8152600401610be890613c52565b6001600160a01b0381166126ad5760405162461bcd60e51b815260206004820152602560248201527f5f636f6d6d756e6974794164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610be8565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517fe7f4d7e428b365576306cf2023fd3729dbbe89131a6e105179b7971fc561f49090600090a250565b81600003612703575050565b61270f813330856130b9565b6000601154601254846127229190613b66565b61272c9190613b85565b90508015610efe57600c54610efe9083906001600160a01b031683613002565b600e546001600160a01b031633146127765760405162461bcd60e51b8152600401610be890613c52565b6107d08111156127e65760405162461bcd60e51b815260206004820152603560248201527f4d6179206e6f74206275726e206d6f7265207468616e20323025206f6620636f6044820152746e74726163742773204c5020617420612074696d6560581b6064820152608401610be8565b601c546127f39042613cf6565b601d5411156128345760405162461bcd60e51b815260206004820152600d60248201526c213ab937103a37b79039b7b7b760991b6044820152606401610be8565b42601d556007546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015612881573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128a59190613c90565b905060006128b2306113e1565b905060006127106128c38585613b66565b6128cd9190613b85565b60075460065460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350479291169063095ea7b3906044016020604051808303816000875af1158015612927573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061294b9190613c73565b50600654604051629d473b60e21b81526001600160a01b03909116906302751cec906129869030908690600190819084904290600401613be9565b60408051808303816000875af11580156129a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129c89190613d09565b50506000836129d6306113e1565b6129e09190613cf6565b905080156129f5576129f53061dead83612b6a565b6000612a018347613cf6565b90508015612a1257612a12816130f1565b60405184907f81b7e7967a97e0708996ad25e859322b1c2e22612ac6798c9c95cfda2dca265f90600090a250505050505050565b6001600160a01b038316612aa85760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610be8565b6001600160a01b038216612b095760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610be8565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316612b905760405162461bcd60e51b8152600401610be890613d2d565b6001600160a01b038216612bb65760405162461bcd60e51b8152600401610be890613d72565b6001600160a01b03831660009081526020819052604090205481811015612c2e5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610be8565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612c65908490613bd6565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612cb191815260200190565b60405180910390a350505050565b6001600160a01b038316612ce55760405162461bcd60e51b8152600401610be890613d2d565b6001600160a01b038216612d0b5760405162461bcd60e51b8152600401610be890613d72565b60008111612d5b5760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610be8565b601054610100900460ff16612dc5576001600160a01b0383166000908152601e602052604090205460ff1680612da957506001600160a01b0382166000908152601e602052604090205460ff165b612dc55760405162461bcd60e51b8152600401610be890613ca9565b60105460ff1615612f80576001600160a01b0383166000908152601e602052604090205460ff16158015612e1257506001600160a01b0382166000908152601e602052604090205460ff16155b15612f80576001600160a01b0383166000908152601f602052604090205460ff1615612efa57600a54811115612e9b5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610be8565b600b54612ea7836113e1565b612eb19083613bd6565b1115612ef55760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08195e18d959591959606a1b6044820152606401610be8565b612f80565b6001600160a01b0382166000908152601f602052604090205460ff1615612f8057600a54811115612f805760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610be8565b6001600160a01b0382166000908152601f602052604090205460ff168015612faa575060195460ff165b8015612fc55750601a54601b54612fc19190613bd6565b4210155b8015612fea57506001600160a01b0383166000908152601e602052604090205460ff16155b15612ff757612ff7613244565b610efe838383612b6a565b6040516001600160a01b038316602482015260448101829052610efe90849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261345e565b6001600160a01b0382166000818152601f6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6040516001600160a01b03808516602483015283166044820152606481018290526112429085906323b872dd60e01b9060840161302e565b6040805160028082526060820183526000926020830190803683375050600654604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa15801561315b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061317f9190613cd9565b8160008151811061319257613192613ba7565b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106131c6576131c6613ba7565b6001600160a01b03928316602091820292909201015260065460405163b6f9de9560e01b815291169063b6f9de9590849061320e90600090869061dead904290600401613db5565b6000604051808303818588803b15801561322757600080fd5b505af115801561323b573d6000803e3d6000fd5b50505050505050565b42601b819055601d556007546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015613296573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132ba9190613c90565b905060006132c7306113e1565b90506000612710601854846132dc9190613b66565b6132e69190613b85565b60075460065460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350479291169063095ea7b3906044016020604051808303816000875af1158015613340573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133649190613c73565b50600654604051629d473b60e21b81526001600160a01b03909116906302751cec9061339f9030908690600190819084904290600401613be9565b60408051808303816000875af11580156133bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133e19190613d09565b50506000836133ef306113e1565b6133f99190613cf6565b9050801561340e5761340e3061dead83612b6a565b600061341a8347613cf6565b9050801561342b5761342b816130f1565b60405184907f30464008593337c7762c84338a125f5c481ce1997dbf1d7931bcce0b6430787a90600090a2505050505050565b60006134b3826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166135309092919063ffffffff16565b805190915015610efe57808060200190518101906134d19190613c73565b610efe5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610be8565b606061353f8484600085613547565b949350505050565b6060824710156135a85760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610be8565b600080866001600160a01b031685876040516135c49190613e1f565b60006040518083038185875af1925050503d8060008114613601576040519150601f19603f3d011682016040523d82523d6000602084013e613606565b606091505b509150915061361787838387613622565b979650505050505050565b6060831561369157825160000361368a576001600160a01b0385163b61368a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610be8565b508161353f565b61353f83838151156136a65781518083602001fd5b8060405162461bcd60e51b8152600401610be891906136e4565b60005b838110156136db5781810151838201526020016136c3565b50506000910152565b60208152600082518060208401526137038160408501602087016136c0565b601f01601f19169190910160400192915050565b6001600160a01b038116811461372c57600080fd5b50565b6000806040838503121561374257600080fd5b823561374d81613717565b946020939093013593505050565b60006020828403121561376d57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156137b3576137b3613774565b604052919050565b600067ffffffffffffffff8211156137d5576137d5613774565b5060051b60200190565b600082601f8301126137f057600080fd5b81356020613805613800836137bb565b61378a565b82815260059290921b8401810191818101908684111561382457600080fd5b8286015b8481101561383f5780358352918301918301613828565b509695505050505050565b6000806040838503121561385d57600080fd5b823567ffffffffffffffff8082111561387557600080fd5b818501915085601f83011261388957600080fd5b81356020613899613800836137bb565b82815260059290921b840181019181810190898411156138b857600080fd5b948201945b838610156138df5785356138d081613717565b825294820194908201906138bd565b965050860135925050808211156138f557600080fd5b50613902858286016137df565b9150509250929050565b60008060006060848603121561392157600080fd5b833561392c81613717565b9250602084013561393c81613717565b929592945050506040919091013590565b6000806040838503121561396057600080fd5b50508035926020909101359150565b60006020828403121561398157600080fd5b813561398c81613717565b9392505050565b801515811461372c57600080fd5b6000806000606084860312156139b657600080fd5b833592506020840135915060408401356139cf81613993565b809150509250925092565b600080604083850312156139ed57600080fd5b82356139f881613717565b91506020830135613a0881613717565b809150509250929050565b60008060408385031215613a2657600080fd5b8235613a3181613717565b91506020830135613a0881613993565b600080600060408486031215613a5657600080fd5b833567ffffffffffffffff80821115613a6e57600080fd5b818601915086601f830112613a8257600080fd5b813581811115613a9157600080fd5b8760208260051b8501011115613aa657600080fd5b602092830195509350508401356139cf81613993565b60008060408385031215613acf57600080fd5b823591506020830135613a0881613717565b600181811c90821680613af557607f821691505b602082108103613b1557634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615613b8057613b80613b50565b500290565b600082613ba257634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b600060018201613bcf57613bcf613b50565b5060010190565b80820180821115610bb857610bb8613b50565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b600080600060608486031215613c3957600080fd5b8351925060208401519150604084015190509250925092565b602080825260079082015266139bdd0814915160ca1b604082015260600190565b600060208284031215613c8557600080fd5b815161398c81613993565b600060208284031215613ca257600080fd5b5051919050565b6020808252601690820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b604082015260600190565b600060208284031215613ceb57600080fd5b815161398c81613717565b81810381811115610bb857610bb8613b50565b60008060408385031215613d1c57600080fd5b505080516020909101519092909150565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b600060808201868352602060808185015281875180845260a086019150828901935060005b81811015613dff5784516001600160a01b031683529383019391830191600101613dda565b50506001600160a01b039690961660408501525050506060015292915050565b60008251613e318184602087016136c0565b919091019291505056fea26469706673582212207e791ce5efb915c1ef2a084c9b5a6e97d0e34b696eb8e5e656a614f83ce801d064736f6c63430008100033608060405234801561001057600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350610475806100616000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806313ea204414610051578063715018a6146100665780638da5cb5b1461006e578063f2fde38b1461008d575b600080fd5b61006461005f36600461039f565b6100a0565b005b610064610241565b600054604080516001600160a01b039092168252519081900360200190f35b61006461009b36600461039f565b6102b5565b6000546001600160a01b031633146100d35760405162461bcd60e51b81526004016100ca906103cf565b60405180910390fd5b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa15801561011a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061013e9190610404565b111561023e57806001600160a01b031663a9059cbb6101656000546001600160a01b031690565b6040516370a0823160e01b81523060048201526001600160a01b038516906370a0823190602401602060405180830381865afa1580156101a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101cd9190610404565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610218573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061023c919061041d565b505b50565b6000546001600160a01b0316331461026b5760405162461bcd60e51b81526004016100ca906103cf565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146102df5760405162461bcd60e51b81526004016100ca906103cf565b6001600160a01b0381166103445760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016100ca565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000602082840312156103b157600080fd5b81356001600160a01b03811681146103c857600080fd5b9392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006020828403121561041657600080fd5b5051919050565b60006020828403121561042f57600080fd5b815180151581146103c857600080fdfea264697066735822122039b7567582f99f8d1c37ac43b7cde70aeff087b489355209dde70341fbc2bfe264736f6c634300081000334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x6080604052600436106103c75760003560e01c806386e476dd116101f2578063befd2fac1161010d578063f2fde38b116100a0578063f8b45b051161006f578063f8b45b0514610aa5578063fc4db32314610abb578063fd361d0e14610adb578063fe72b27a14610af557600080fd5b8063f2fde38b14610a30578063f5648a4f14610a50578063f59c370814610a65578063f7ce447914610a8557600080fd5b8063e8078d94116100dc578063e8078d94146109da578063e90f0d04146109ef578063ee40166e14610a04578063ee44b44e14610a1a57600080fd5b8063befd2fac14610949578063c7c61e2c14610969578063cf46f24c1461097e578063dd62ed3e1461099457600080fd5b80639ec22c0e11610185578063a9059cbb11610154578063a9059cbb146108ba578063b62496f5146108da578063bbc0c7421461090a578063bd5fb9201461092957600080fd5b80639ec22c0e14610859578063a457c2d71461086f578063a46c9aa41461088f578063a4c82a00146108a457600080fd5b806395d89b41116101c157806395d89b41146107f857806398118cb41461080d5780639a7a23d6146108235780639e93ad8e1461084357600080fd5b806386e476dd1461078f5780638961be6b146107af5780638a8c523c146107c55780638da5cb5b146107da57600080fd5b806336d18b67116102e257806370a0823111610275578063751039fc11610244578063751039fc1461072f578063763cef4914610744578063783102eb146107595780638366e79a1461076f57600080fd5b806370a08231146106c5578063712c2985146106e5578063715018a6146106fa578063730c18881461070f57600080fd5b8063452ed4f1116102b1578063452ed4f11461064b5780634a62bb651461066b5780636db79437146106855780636ddd1713146106a557600080fd5b806336d18b67146105cb57806339509351146105eb5780633e743e3f1461060b57806341a22cc21461062b57600080fd5b80631b3d6e871161035a57806323b872dd1161032957806323b872dd1461055f5780632c3e486c1461057f5780632e82f1a014610595578063313ce567146105af57600080fd5b80631b3d6e87146104dd5780631c499ab0146104fd578063203e727e1461051f5780632307b4411461053f57600080fd5b806313114a9d1161039657806313114a9d1461048657806318160ddd1461049c578063184c16c5146104b1578063199ffc72146104c757600080fd5b8063058054c9146103d357806306fdde03146103fc5780630758d9241461041e578063095ea7b31461045657600080fd5b366103ce57005b600080fd5b3480156103df57600080fd5b506103e960145481565b6040519081526020015b60405180910390f35b34801561040857600080fd5b50610411610b15565b6040516103f391906136e4565b34801561042a57600080fd5b5060065461043e906001600160a01b031681565b6040516001600160a01b0390911681526020016103f3565b34801561046257600080fd5b5061047661047136600461372f565b610ba7565b60405190151581526020016103f3565b34801561049257600080fd5b506103e960115481565b3480156104a857600080fd5b506002546103e9565b3480156104bd57600080fd5b506103e9601c5481565b3480156104d357600080fd5b506103e960185481565b3480156104e957600080fd5b50600d5461043e906001600160a01b031681565b34801561050957600080fd5b5061051d61051836600461375b565b610bbe565b005b34801561052b57600080fd5b5061051d61053a36600461375b565b610c9e565b34801561054b57600080fd5b5061051d61055a36600461384a565b610daa565b34801561056b57600080fd5b5061047661057a36600461390c565b610f03565b34801561058b57600080fd5b506103e9601a5481565b3480156105a157600080fd5b506019546104769060ff1681565b3480156105bb57600080fd5b50604051601281526020016103f3565b3480156105d757600080fd5b50600e5461043e906001600160a01b031681565b3480156105f757600080fd5b5061047661060636600461372f565b610fad565b34801561061757600080fd5b5060085461043e906001600160a01b031681565b34801561063757600080fd5b5061051d61064636600461375b565b610fe9565b34801561065757600080fd5b5060075461043e906001600160a01b031681565b34801561067757600080fd5b506010546104769060ff1681565b34801561069157600080fd5b5061051d6106a036600461394d565b611248565b3480156106b157600080fd5b506010546104769062010000900460ff1681565b3480156106d157600080fd5b506103e96106e036600461396f565b6113e1565b3480156106f157600080fd5b506103e96113fc565b34801561070657600080fd5b5061051d611425565b34801561071b57600080fd5b5061051d61072a3660046139a1565b611499565b34801561073b57600080fd5b5061051d6115c2565b34801561075057600080fd5b5061051d611621565b34801561076557600080fd5b506103e960175481565b34801561077b57600080fd5b5061051d61078a3660046139da565b6117bf565b34801561079b57600080fd5b50600c5461043e906001600160a01b031681565b3480156107bb57600080fd5b506103e960125481565b3480156107d157600080fd5b5061051d611981565b3480156107e657600080fd5b506005546001600160a01b031661043e565b34801561080457600080fd5b50610411611b33565b34801561081957600080fd5b506103e960135481565b34801561082f57600080fd5b5061051d61083e366004613a13565b611b42565b34801561084f57600080fd5b506103e96103e881565b34801561086557600080fd5b506103e9601d5481565b34801561087b57600080fd5b5061047661088a36600461372f565b611c36565b34801561089b57600080fd5b5061051d611ccf565b3480156108b057600080fd5b506103e9601b5481565b3480156108c657600080fd5b506104766108d536600461372f565b611d0b565b3480156108e657600080fd5b506104766108f536600461396f565b601f6020526000908152604090205460ff1681565b34801561091657600080fd5b5060105461047690610100900460ff1681565b34801561093557600080fd5b5061051d610944366004613a41565b611d18565b34801561095557600080fd5b5061051d61096436600461375b565b611e1e565b34801561097557600080fd5b5061051d611f54565b34801561098a57600080fd5b506103e9600a5481565b3480156109a057600080fd5b506103e96109af3660046139da565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156109e657600080fd5b5061051d611fbd565b3480156109fb57600080fd5b5061051d61227b565b348015610a1057600080fd5b506103e9600f5481565b348015610a2657600080fd5b506103e960155481565b348015610a3c57600080fd5b5061051d610a4b36600461396f565b61243f565b348015610a5c57600080fd5b5061051d61252a565b348015610a7157600080fd5b5061051d610a80366004613a13565b612596565b348015610a9157600080fd5b5061051d610aa036600461396f565b61261f565b348015610ab157600080fd5b506103e9600b5481565b348015610ac757600080fd5b5061051d610ad6366004613abc565b6126f7565b348015610ae757600080fd5b506016546104769060ff1681565b348015610b0157600080fd5b5061051d610b1036600461375b565b61274c565b606060038054610b2490613ae1565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5090613ae1565b8015610b9d5780601f10610b7257610100808354040283529160200191610b9d565b820191906000526020600020905b815481529060010190602001808311610b8057829003601f168201915b5050505050905090565b6000610bb4338484612a46565b5060015b92915050565b6005546001600160a01b03163314610bf15760405162461bcd60e51b8152600401610be890613b1b565b60405180910390fd5b670de0b6b3a76400006064610c0560025490565b610c10906001613b66565b610c1a9190613b85565b610c249190613b85565b811015610c865760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f776044820152696572207468616e20312560b01b6064820152608401610be8565b610c9881670de0b6b3a7640000613b66565b600b5550565b6005546001600160a01b03163314610cc85760405162461bcd60e51b8152600401610be890613b1b565b670de0b6b3a76400006103e8610cdd60025490565b610ce8906002613b66565b610cf29190613b85565b610cfc9190613b85565b811015610d5d5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e322560b81b6064820152608401610be8565b610d6f81670de0b6b3a7640000613b66565b600a8190556040519081527f89c099a4e6d77f9ed9839689924c080dcc270b4bc837e2d8979544f19df27d789060200160405180910390a150565b6005546001600160a01b03163314610dd45760405162461bcd60e51b8152600401610be890613b1b565b8051825114610e255760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610be8565b610258825110610e965760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203630302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610be8565b60005b8251811015610efe576000838281518110610eb657610eb6613ba7565b602002602001015190506000838381518110610ed457610ed4613ba7565b60200260200101519050610ee9338383612b6a565b50508080610ef690613bbd565b915050610e99565b505050565b6000610f10848484612cbf565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610f955760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610be8565b610fa28533858403612a46565b506001949350505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610bb4918590610fe4908690613bd6565b612a46565b6005546001600160a01b031633146110135760405162461bcd60e51b8152600401610be890613b1b565b601054610100900460ff161561107f5760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610be8565b600a81106110df5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206d616b652070656e616c747920626c6f636b73206d6f72652060448201526607468616e2031360cc1b6064820152608401610be8565b6000471161113b5760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401610be8565b6000611146306113e1565b116111a25760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610be8565b6006546111bd9030906001600160a01b0316610fe4826113e1565b6006546001600160a01b031663f305d71947306111d9816113e1565b60018030426040518863ffffffff1660e01b81526004016111ff96959493929190613be9565b60606040518083038185885af115801561121d573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906112429190613c24565b50505050565b600e546001600160a01b031633146112725760405162461bcd60e51b8152600401610be890613c52565b601282905560138190556112868183613bd6565b601181905560075460405163992d0ebb60e01b815260048101929092526001600160a01b03169063992d0ebb906024016020604051808303816000875af11580156112d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112f99190613c73565b5060085460115460405163992d0ebb60e01b81526001600160a01b039092169163992d0ebb9161132f9160040190815260200190565b6020604051808303816000875af115801561134e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113729190613c73565b5060646113826103e8600f613b66565b61138c9190613b85565b60115411156113dd5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610be8565b5050565b6001600160a01b031660009081526020819052604090205490565b60165460009060ff161561141f5760155460145461141a9190613bd6565b905090565b50600090565b6005546001600160a01b0316331461144f5760405162461bcd60e51b8152600401610be890613b1b565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b600e546001600160a01b031633146114c35760405162461bcd60e51b8152600401610be890613c52565b6102588310156115315760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e207468604482015272616e206576657279203130206d696e7574657360681b6064820152608401610be8565b6103e88211158015611541575060015b6115a65760405162461bcd60e51b815260206004820152603060248201527f4d75737420736574206175746f204c50206275726e2070657263656e7420626560448201526f747765656e20302520616e642031302560801b6064820152608401610be8565b601a929092556018556019805460ff1916911515919091179055565b6005546001600160a01b031633146115ec5760405162461bcd60e51b8152600401610be890613b1b565b6010805460ff191690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b0316331461164b5760405162461bcd60e51b8152600401610be890613b1b565b6116536113fc565b4210158015611669575060006116676113fc565b115b6116ae5760405162461bcd60e51b815260206004820152601660248201527526bab9ba103932b8bab2b9ba1030b732103bb0b4ba1760511b6044820152606401610be8565b600060148190556016805460ff191690556017546007546040516370a0823160e01b8152306004820152606492916001600160a01b0316906370a0823190602401602060405180830381865afa15801561170c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117309190613c90565b61173a9190613b66565b6117449190613b85565b600060175560075460405163a9059cbb60e01b8152336004820152602481018390529192506001600160a01b03169063a9059cbb906044016020604051808303816000875af115801561179b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113dd9190613c73565b600e546001600160a01b031633146117e95760405162461bcd60e51b8152600401610be890613c52565b6001600160a01b03821661183f5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610be8565b6007546001600160a01b0383811691161415806118645750601054610100900460ff16155b6118c25760405162461bcd60e51b815260206004820152602960248201527f43616e2774207769746864726177204c50207768696c652074726164696e672060448201526869732061637469766560b81b6064820152608401610be8565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa158015611909573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061192d9190613c90565b905061193a838383613002565b604080516001600160a01b0385168152602081018390527fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a1505050565b6005546001600160a01b031633146119ab5760405162461bcd60e51b8152600401610be890613b1b565b601054610100900460ff1615611a035760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610be8565b60085460115460405163992d0ebb60e01b81526001600160a01b039092169163992d0ebb91611a389160040190815260200190565b6020604051808303816000875af1158015611a57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a7b9190613c73565b5060075460115460405163992d0ebb60e01b81526001600160a01b039092169163992d0ebb91611ab19160040190815260200190565b6020604051808303816000875af1158015611ad0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611af49190613c73565b506010805461ff00191661010017905543600f556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1565b606060048054610b2490613ae1565b6005546001600160a01b03163314611b6c5760405162461bcd60e51b8152600401610be890613b1b565b6007546001600160a01b0390811690831603611bf05760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610be8565b611bfa8282613065565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015611cb85760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610be8565b611cc53385858403612a46565b5060019392505050565b600e546001600160a01b03163314611cf95760405162461bcd60e51b8152600401610be890613c52565b600e80546001600160a01b0319169055565b6000610bb4338484612cbf565b6005546001600160a01b03163314611d425760405162461bcd60e51b8152600401610be890613b1b565b60005b828110156112425781601e6000868685818110611d6457611d64613ba7565b9050602002016020810190611d79919061396f565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055838382818110611db357611db3613ba7565b9050602002016020810190611dc8919061396f565b6001600160a01b03167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df783604051611e04911515815260200190565b60405180910390a280611e1681613bbd565b915050611d45565b6005546001600160a01b03163314611e485760405162461bcd60e51b8152600401610be890613b1b565b60165460ff1615611eb55760405162461bcd60e51b815260206004820152603160248201527f43616e6e6f74207265717565737420616761696e20756e74696c206669727374604482015270103932b8bab2b9ba1034b99037bb32b91760791b6064820152608401610be8565b60648111158015611ec65750600081115b611f125760405162461bcd60e51b815260206004820152601a60248201527f4e65656420746f20736574206265747765656e20312d313030250000000000006044820152606401610be8565b426014556016805460ff1916600117905560178190556040517fd99a77b2f3951cd076e75814e44db497e6abc203dd251329da0b62c288f9f48b90600090a150565b6005546001600160a01b03163314611f7e5760405162461bcd60e51b8152600401610be890613b1b565b6016805460ff191690556000601781905560148190556040517ffbcc1c208c9c4d1d9f557267b55c5ae316e74ce676a0db72ef18c6d5f5767c619190a1565b600e546001600160a01b03163314611fe75760405162461bcd60e51b8152600401610be890613c52565b601054610100900460ff1661200e5760405162461bcd60e51b8152600401610be890613ca9565b600654604080516315ab88c960e31b815290516000926001600160a01b03169163ad5c46489160048083019260209291908290030181865afa158015612058573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061207c9190613cd9565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa1580156120c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120e69190613c90565b9050600081116121225760405162461bcd60e51b815260206004820152600760248201526609cde40ae8aa8960cb1b6044820152606401610be8565b600660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612175573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121999190613cd9565b60075460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810184905291169063a9059cbb906044016020604051808303816000875af11580156121eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061220f9190613c73565b50600760009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561226057600080fd5b505af1158015612274573d6000803e3d6000fd5b5050505050565b600e546001600160a01b031633146122a55760405162461bcd60e51b8152600401610be890613c52565b601054610100900460ff166122cc5760405162461bcd60e51b8152600401610be890613ca9565b6009546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015612315573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123399190613c90565b9050600081116123755760405162461bcd60e51b81526020600482015260076024820152664e6f205553444360c81b6044820152606401610be8565b60095460085460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810184905291169063a9059cbb906044016020604051808303816000875af11580156123ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123ee9190613c73565b50600860009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561226057600080fd5b6005546001600160a01b031633146124695760405162461bcd60e51b8152600401610be890613b1b565b6001600160a01b0381166124ce5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610be8565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b600e546001600160a01b031633146125545760405162461bcd60e51b8152600401610be890613c52565b604051600090339047908381818185875af1925050503d8060008114611242576040519150601f19603f3d011682016040523d82523d6000602084013e611242565b6005546001600160a01b031633146125c05760405162461bcd60e51b8152600401610be890613b1b565b6001600160a01b0382166000818152601e6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b600e546001600160a01b031633146126495760405162461bcd60e51b8152600401610be890613c52565b6001600160a01b0381166126ad5760405162461bcd60e51b815260206004820152602560248201527f5f636f6d6d756e6974794164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610be8565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517fe7f4d7e428b365576306cf2023fd3729dbbe89131a6e105179b7971fc561f49090600090a250565b81600003612703575050565b61270f813330856130b9565b6000601154601254846127229190613b66565b61272c9190613b85565b90508015610efe57600c54610efe9083906001600160a01b031683613002565b600e546001600160a01b031633146127765760405162461bcd60e51b8152600401610be890613c52565b6107d08111156127e65760405162461bcd60e51b815260206004820152603560248201527f4d6179206e6f74206275726e206d6f7265207468616e20323025206f6620636f6044820152746e74726163742773204c5020617420612074696d6560581b6064820152608401610be8565b601c546127f39042613cf6565b601d5411156128345760405162461bcd60e51b815260206004820152600d60248201526c213ab937103a37b79039b7b7b760991b6044820152606401610be8565b42601d556007546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015612881573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128a59190613c90565b905060006128b2306113e1565b905060006127106128c38585613b66565b6128cd9190613b85565b60075460065460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350479291169063095ea7b3906044016020604051808303816000875af1158015612927573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061294b9190613c73565b50600654604051629d473b60e21b81526001600160a01b03909116906302751cec906129869030908690600190819084904290600401613be9565b60408051808303816000875af11580156129a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129c89190613d09565b50506000836129d6306113e1565b6129e09190613cf6565b905080156129f5576129f53061dead83612b6a565b6000612a018347613cf6565b90508015612a1257612a12816130f1565b60405184907f81b7e7967a97e0708996ad25e859322b1c2e22612ac6798c9c95cfda2dca265f90600090a250505050505050565b6001600160a01b038316612aa85760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610be8565b6001600160a01b038216612b095760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610be8565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316612b905760405162461bcd60e51b8152600401610be890613d2d565b6001600160a01b038216612bb65760405162461bcd60e51b8152600401610be890613d72565b6001600160a01b03831660009081526020819052604090205481811015612c2e5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610be8565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612c65908490613bd6565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612cb191815260200190565b60405180910390a350505050565b6001600160a01b038316612ce55760405162461bcd60e51b8152600401610be890613d2d565b6001600160a01b038216612d0b5760405162461bcd60e51b8152600401610be890613d72565b60008111612d5b5760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610be8565b601054610100900460ff16612dc5576001600160a01b0383166000908152601e602052604090205460ff1680612da957506001600160a01b0382166000908152601e602052604090205460ff165b612dc55760405162461bcd60e51b8152600401610be890613ca9565b60105460ff1615612f80576001600160a01b0383166000908152601e602052604090205460ff16158015612e1257506001600160a01b0382166000908152601e602052604090205460ff16155b15612f80576001600160a01b0383166000908152601f602052604090205460ff1615612efa57600a54811115612e9b5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610be8565b600b54612ea7836113e1565b612eb19083613bd6565b1115612ef55760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08195e18d959591959606a1b6044820152606401610be8565b612f80565b6001600160a01b0382166000908152601f602052604090205460ff1615612f8057600a54811115612f805760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610be8565b6001600160a01b0382166000908152601f602052604090205460ff168015612faa575060195460ff165b8015612fc55750601a54601b54612fc19190613bd6565b4210155b8015612fea57506001600160a01b0383166000908152601e602052604090205460ff16155b15612ff757612ff7613244565b610efe838383612b6a565b6040516001600160a01b038316602482015260448101829052610efe90849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261345e565b6001600160a01b0382166000818152601f6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6040516001600160a01b03808516602483015283166044820152606481018290526112429085906323b872dd60e01b9060840161302e565b6040805160028082526060820183526000926020830190803683375050600654604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa15801561315b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061317f9190613cd9565b8160008151811061319257613192613ba7565b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106131c6576131c6613ba7565b6001600160a01b03928316602091820292909201015260065460405163b6f9de9560e01b815291169063b6f9de9590849061320e90600090869061dead904290600401613db5565b6000604051808303818588803b15801561322757600080fd5b505af115801561323b573d6000803e3d6000fd5b50505050505050565b42601b819055601d556007546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015613296573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132ba9190613c90565b905060006132c7306113e1565b90506000612710601854846132dc9190613b66565b6132e69190613b85565b60075460065460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350479291169063095ea7b3906044016020604051808303816000875af1158015613340573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133649190613c73565b50600654604051629d473b60e21b81526001600160a01b03909116906302751cec9061339f9030908690600190819084904290600401613be9565b60408051808303816000875af11580156133bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133e19190613d09565b50506000836133ef306113e1565b6133f99190613cf6565b9050801561340e5761340e3061dead83612b6a565b600061341a8347613cf6565b9050801561342b5761342b816130f1565b60405184907f30464008593337c7762c84338a125f5c481ce1997dbf1d7931bcce0b6430787a90600090a2505050505050565b60006134b3826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166135309092919063ffffffff16565b805190915015610efe57808060200190518101906134d19190613c73565b610efe5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610be8565b606061353f8484600085613547565b949350505050565b6060824710156135a85760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610be8565b600080866001600160a01b031685876040516135c49190613e1f565b60006040518083038185875af1925050503d8060008114613601576040519150601f19603f3d011682016040523d82523d6000602084013e613606565b606091505b509150915061361787838387613622565b979650505050505050565b6060831561369157825160000361368a576001600160a01b0385163b61368a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610be8565b508161353f565b61353f83838151156136a65781518083602001fd5b8060405162461bcd60e51b8152600401610be891906136e4565b60005b838110156136db5781810151838201526020016136c3565b50506000910152565b60208152600082518060208401526137038160408501602087016136c0565b601f01601f19169190910160400192915050565b6001600160a01b038116811461372c57600080fd5b50565b6000806040838503121561374257600080fd5b823561374d81613717565b946020939093013593505050565b60006020828403121561376d57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156137b3576137b3613774565b604052919050565b600067ffffffffffffffff8211156137d5576137d5613774565b5060051b60200190565b600082601f8301126137f057600080fd5b81356020613805613800836137bb565b61378a565b82815260059290921b8401810191818101908684111561382457600080fd5b8286015b8481101561383f5780358352918301918301613828565b509695505050505050565b6000806040838503121561385d57600080fd5b823567ffffffffffffffff8082111561387557600080fd5b818501915085601f83011261388957600080fd5b81356020613899613800836137bb565b82815260059290921b840181019181810190898411156138b857600080fd5b948201945b838610156138df5785356138d081613717565b825294820194908201906138bd565b965050860135925050808211156138f557600080fd5b50613902858286016137df565b9150509250929050565b60008060006060848603121561392157600080fd5b833561392c81613717565b9250602084013561393c81613717565b929592945050506040919091013590565b6000806040838503121561396057600080fd5b50508035926020909101359150565b60006020828403121561398157600080fd5b813561398c81613717565b9392505050565b801515811461372c57600080fd5b6000806000606084860312156139b657600080fd5b833592506020840135915060408401356139cf81613993565b809150509250925092565b600080604083850312156139ed57600080fd5b82356139f881613717565b91506020830135613a0881613717565b809150509250929050565b60008060408385031215613a2657600080fd5b8235613a3181613717565b91506020830135613a0881613993565b600080600060408486031215613a5657600080fd5b833567ffffffffffffffff80821115613a6e57600080fd5b818601915086601f830112613a8257600080fd5b813581811115613a9157600080fd5b8760208260051b8501011115613aa657600080fd5b602092830195509350508401356139cf81613993565b60008060408385031215613acf57600080fd5b823591506020830135613a0881613717565b600181811c90821680613af557607f821691505b602082108103613b1557634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615613b8057613b80613b50565b500290565b600082613ba257634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b600060018201613bcf57613bcf613b50565b5060010190565b80820180821115610bb857610bb8613b50565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b600080600060608486031215613c3957600080fd5b8351925060208401519150604084015190509250925092565b602080825260079082015266139bdd0814915160ca1b604082015260600190565b600060208284031215613c8557600080fd5b815161398c81613993565b600060208284031215613ca257600080fd5b5051919050565b6020808252601690820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b604082015260600190565b600060208284031215613ceb57600080fd5b815161398c81613717565b81810381811115610bb857610bb8613b50565b60008060408385031215613d1c57600080fd5b505080516020909101519092909150565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b600060808201868352602060808185015281875180845260a086019150828901935060005b81811015613dff5784516001600160a01b031683529383019391830191600101613dda565b50506001600160a01b039690961660408501525050506060015292915050565b60008251613e318184602087016136c0565b919091019291505056fea26469706673582212207e791ce5efb915c1ef2a084c9b5a6e97d0e34b696eb8e5e656a614f83ce801d064736f6c63430008100033

Deployed Bytecode Sourcemap

28726:17028:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29463:41;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;29463:41:0;;;;;;;;22207:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;28792:34::-;;;;;;;;;;-1:-1:-1;28792:34:0;;;;-1:-1:-1;;;;;28792:34:0;;;;;;-1:-1:-1;;;;;1042:32:1;;;1024:51;;1012:2;997:18;28792:34:0;852:229:1;23121:169:0;;;;;;;;;;-1:-1:-1;23121:169:0;;;;;:::i;:::-;;:::i;:::-;;;1707:14:1;;1700:22;1682:41;;1670:2;1655:18;23121:169:0;1542:187:1;29311:24:0;;;;;;;;;;;;;;;;22528:108;;;;;;;;;;-1:-1:-1;22616:12:0;;22528:108;;29845:46;;;;;;;;;;;;;;;;29653:36;;;;;;;;;;;;;;;;29044:32;;;;;;;;;;-1:-1:-1;29044:32:0;;;;-1:-1:-1;;;;;29044:32:0;;;35904:214;;;;;;;;;;-1:-1:-1;35904:214:0;;;;;:::i;:::-;;:::i;:::-;;35627:269;;;;;;;;;;-1:-1:-1;35627:269:0;;;;;:::i;:::-;;:::i;33634:618::-;;;;;;;;;;-1:-1:-1;33634:618:0;;;;;:::i;:::-;;:::i;23298:492::-;;;;;;;;;;-1:-1:-1;23298:492:0;;;;;:::i;:::-;;:::i;29749:47::-;;;;;;;;;;;;;;;;29709:33;;;;;;;;;;-1:-1:-1;29709:33:0;;;;;;;;22427:93;;;;;;;;;;-1:-1:-1;22427:93:0;;22510:2;5238:36:1;;5226:2;5211:18;22427:93:0;5096:184:1;29085:18:0;;;;;;;;;;-1:-1:-1;29085:18:0;;;;-1:-1:-1;;;;;29085:18:0;;;23798:215;;;;;;;;;;-1:-1:-1;23798:215:0;;;;;:::i;:::-;;:::i;28869:33::-;;;;;;;;;;-1:-1:-1;28869:33:0;;;;-1:-1:-1;;;;;28869:33:0;;;44049:830;;;;;;;;;;-1:-1:-1;44049:830:0;;;;;:::i;:::-;;:::i;28833:29::-;;;;;;;;;;-1:-1:-1;28833:29:0;;;;-1:-1:-1;;;;;28833:29:0;;;29191:33;;;;;;;;;;-1:-1:-1;29191:33:0;;;;;;;;34764:391;;;;;;;;;;-1:-1:-1;34764:391:0;;;;;:::i;:::-;;:::i;29271:31::-;;;;;;;;;;-1:-1:-1;29271:31:0;;;;;;;;;;;22644:127;;;;;;;;;;-1:-1:-1;22644:127:0;;;;;:::i;:::-;;:::i;43028:281::-;;;;;;;;;;;;;:::i;26288:150::-;;;;;;;;;;;;;:::i;39024:445::-;;;;;;;;;;-1:-1:-1;39024:445:0;;;;;:::i;:::-;;:::i;36170:115::-;;;;;;;;;;;;;:::i;43317:496::-;;;;;;;;;;;;;:::i;29613:31::-;;;;;;;;;;;;;;;;38019:474;;;;;;;;;;-1:-1:-1;38019:474:0;;;;;:::i;:::-;;:::i;29004:31::-;;;;;;;;;;-1:-1:-1;29004:31:0;;;;-1:-1:-1;;;;;29004:31:0;;;29342:27;;;;;;;;;;;;;;;;33318:304;;;;;;;;;;;;;:::i;26074:79::-;;;;;;;;;;-1:-1:-1;26139:6:0;;-1:-1:-1;;;;;26139:6:0;26074:79;;22315:104;;;;;;;;;;;;;:::i;29376:27::-;;;;;;;;;;;;;;;;34260:302;;;;;;;;;;-1:-1:-1;34260:302:0;;;;;:::i;:::-;;:::i;29412:42::-;;;;;;;;;;;;29450:4;29412:42;;29898:35;;;;;;;;;;;;;;;;24021:413;;;;;;;;;;-1:-1:-1;24021:413:0;;;;;:::i;:::-;;:::i;45667:84::-;;;;;;;;;;;;;:::i;29803:29::-;;;;;;;;;;;;;;;;22779:175;;;;;;;;;;-1:-1:-1;22779:175:0;;;;;:::i;:::-;;:::i;30180:58::-;;;;;;;;;;-1:-1:-1;30180:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;29231:33;;;;;;;;;;-1:-1:-1;29231:33:0;;;;;;;;;;;35163:277;;;;;;;;;;-1:-1:-1;35163:277:0;;;;;:::i;:::-;;:::i;42571:449::-;;;;;;;;;;-1:-1:-1;42571:449:0;;;;;:::i;:::-;;:::i;43821:220::-;;;;;;;;;;;;;:::i;28937:27::-;;;;;;;;;;;;;;;;22962:151;;;;;;;;;;-1:-1:-1;22962:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;23078:18:0;;;23051:7;23078:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;22962:151;44887:334;;;;;;;;;;;;;:::i;45229:336::-;;;;;;;;;;;;;:::i;29112:37::-;;;;;;;;;;;;;;;;29511:52;;;;;;;;;;;;;;;;26446:244;;;;;;;;;;-1:-1:-1;26446:244:0;;;;;:::i;:::-;;:::i;38563:158::-;;;;;;;;;;;;;:::i;35448:171::-;;;;;;;;;;-1:-1:-1;35448:171:0;;;;;:::i;:::-;;:::i;38729:287::-;;;;;;;;;;-1:-1:-1;38729:287:0;;;;;:::i;:::-;;:::i;28971:24::-;;;;;;;;;;;;;;;;37613:398;;;;;;;;;;-1:-1:-1;37613:398:0;;;;;:::i;:::-;;:::i;29570:36::-;;;;;;;;;;-1:-1:-1;29570:36:0;;;;;;;;40759:1414;;;;;;;;;;-1:-1:-1;40759:1414:0;;;;;:::i;:::-;;:::i;22207:100::-;22261:13;22294:5;22287:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22207:100;:::o;23121:169::-;23204:4;23221:39;267:10;23244:7;23253:6;23221:8;:39::i;:::-;-1:-1:-1;23278:4:0;23121:169;;;;;:::o;35904:214::-;26201:6;;-1:-1:-1;;;;;26201:6:0;267:10;26201:22;26193:67;;;;-1:-1:-1;;;26193:67:0;;;;;;;:::i;:::-;;;;;;;;;36019:4:::1;36014:3;35994:13;22616:12:::0;;;22528:108;35994:13:::1;:17;::::0;36010:1:::1;35994:17;:::i;:::-;:23;;;;:::i;:::-;35993:30;;;;:::i;:::-;35983:6;:40;;35975:95;;;::::0;-1:-1:-1;;;35975:95:0;;10064:2:1;35975:95:0::1;::::0;::::1;10046:21:1::0;10103:2;10083:18;;;10076:30;10142:34;10122:18;;;10115:62;-1:-1:-1;;;10193:18:1;;;10186:40;10243:19;;35975:95:0::1;9862:406:1::0;35975:95:0::1;36093:17;:6:::0;36103::::1;36093:17;:::i;:::-;36081:9;:29:::0;-1:-1:-1;35904:214:0:o;35627:269::-;26201:6;;-1:-1:-1;;;;;26201:6:0;267:10;26201:22;26193:67;;;;-1:-1:-1;;;26193:67:0;;;;;;;:::i;:::-;35746:4:::1;35740;35720:13;22616:12:::0;;;22528:108;35720:13:::1;:17;::::0;35736:1:::1;35720:17;:::i;:::-;:24;;;;:::i;:::-;35719:31;;;;:::i;:::-;35709:6;:41;;35701:95;;;::::0;-1:-1:-1;;;35701:95:0;;10475:2:1;35701:95:0::1;::::0;::::1;10457:21:1::0;10514:2;10494:18;;;10487:30;10553:34;10533:18;;;10526:62;-1:-1:-1;;;10604:18:1;;;10597:39;10653:19;;35701:95:0::1;10273:405:1::0;35701:95:0::1;35822:17;:6:::0;35832::::1;35822:17;:::i;:::-;35807:12;:32:::0;;;35855:33:::1;::::0;160:25:1;;;35855:33:0::1;::::0;148:2:1;133:18;35855:33:0::1;;;;;;;35627:269:::0;:::o;33634:618::-;26201:6;;-1:-1:-1;;;;;26201:6:0;267:10;26201:22;26193:67;;;;-1:-1:-1;;;26193:67:0;;;;;;;:::i;:::-;33776:15:::1;:22;33758:7;:14;:40;33750:83;;;::::0;-1:-1:-1;;;33750:83:0;;10885:2:1;33750:83:0::1;::::0;::::1;10867:21:1::0;10924:2;10904:18;;;10897:30;10963:32;10943:18;;;10936:60;11013:18;;33750:83:0::1;10683:354:1::0;33750:83:0::1;33869:3;33852:7;:14;:20;33844:87;;;::::0;-1:-1:-1;;;33844:87:0;;11244:2:1;33844:87:0::1;::::0;::::1;11226:21:1::0;11283:2;11263:18;;;11256:30;11322:34;11302:18;;;11295:62;-1:-1:-1;;;11373:18:1;;;11366:52;11435:19;;33844:87:0::1;11042:418:1::0;33844:87:0::1;34044:9;34040:205;34063:7;:14;34059:1;:18;34040:205;;;34098:14;34115:7;34123:1;34115:10;;;;;;;;:::i;:::-;;;;;;;34098:27;;34140:14;34157:15;34173:1;34157:18;;;;;;;;:::i;:::-;;;;;;;34140:35;;34190:43;34206:10;34218:6;34226;34190:15;:43::i;:::-;34083:162;;34079:3;;;;;:::i;:::-;;;;34040:205;;;;33634:618:::0;;:::o;23298:492::-;23438:4;23455:36;23465:6;23473:9;23484:6;23455:9;:36::i;:::-;-1:-1:-1;;;;;23531:19:0;;23504:24;23531:19;;;:11;:19;;;;;;;;267:10;23531:33;;;;;;;;23583:26;;;;23575:79;;;;-1:-1:-1;;;23575:79:0;;11939:2:1;23575:79:0;;;11921:21:1;11978:2;11958:18;;;11951:30;12017:34;11997:18;;;11990:62;-1:-1:-1;;;12068:18:1;;;12061:38;12116:19;;23575:79:0;11737:404:1;23575:79:0;23690:57;23699:6;267:10;23740:6;23721:16;:25;23690:8;:57::i;:::-;-1:-1:-1;23778:4:0;;23298:492;-1:-1:-1;;;;23298:492:0:o;23798:215::-;267:10;23886:4;23935:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;23935:34:0;;;;;;;;;;23886:4;;23903:80;;23926:7;;23935:47;;23972:10;;23935:47;:::i;:::-;23903:8;:80::i;44049:830::-;26201:6;;-1:-1:-1;;;;;26201:6:0;267:10;26201:22;26193:67;;;;-1:-1:-1;;;26193:67:0;;;;;;;:::i;:::-;44143:13:::1;::::0;::::1;::::0;::::1;;;44142:14;44134:70;;;::::0;-1:-1:-1;;;44134:70:0;;12478:2:1;44134:70:0::1;::::0;::::1;12460:21:1::0;12517:2;12497:18;;;12490:30;12556:34;12536:18;;;12529:62;-1:-1:-1;;;12607:18:1;;;12600:41;12658:19;;44134:70:0::1;12276:407:1::0;44134:70:0::1;44242:2;44223:16;:21;44215:73;;;::::0;-1:-1:-1;;;44215:73:0;;12890:2:1;44215:73:0::1;::::0;::::1;12872:21:1::0;12929:2;12909:18;;;12902:30;12968:34;12948:18;;;12941:62;-1:-1:-1;;;13019:18:1;;;13012:37;13066:19;;44215:73:0::1;12688:403:1::0;44215:73:0::1;44368:1;44344:21;:25;44336:73;;;::::0;-1:-1:-1;;;44336:73:0;;13298:2:1;44336:73:0::1;::::0;::::1;13280:21:1::0;13337:2;13317:18;;;13310:30;13376:34;13356:18;;;13349:62;-1:-1:-1;;;13427:18:1;;;13420:33;13470:19;;44336:73:0::1;13096:399:1::0;44336:73:0::1;44457:1;44430:24;44448:4;44430:9;:24::i;:::-;:28;44422:79;;;::::0;-1:-1:-1;;;44422:79:0;;13702:2:1;44422:79:0::1;::::0;::::1;13684:21:1::0;13741:2;13721:18;;;13714:30;13780:34;13760:18;;;13753:62;-1:-1:-1;;;13831:18:1;;;13824:36;13877:19;;44422:79:0::1;13500:402:1::0;44422:79:0::1;44546:9;::::0;44514:69:::1;::::0;44531:4:::1;::::0;-1:-1:-1;;;;;44546:9:0::1;44558:24;44531:4:::0;44558:9:::1;:24::i;44514:69::-;44594:9;::::0;-1:-1:-1;;;;;44594:9:0::1;:25;44627:21;44672:4;44692:24;44672:4:::0;44692:9:::1;:24::i;:::-;44731:1;44774::::0;44825:4:::1;44845:15;44594:277;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;44049:830:::0;:::o;34764:391::-;45624:3;;-1:-1:-1;;;;;45624:3:0;45610:10;:17;45602:37;;;;-1:-1:-1;;;45602:37:0;;;;;;;:::i;:::-;34858:12:::1;:28:::0;;;34897:12:::1;:28:::0;;;34948:27:::1;34912:13:::0;34873;34948:27:::1;:::i;:::-;34936:9;:39:::0;;;34986:6:::1;::::0;:29:::1;::::0;-1:-1:-1;;;34986:29:0;;::::1;::::0;::::1;160:25:1::0;;;;-1:-1:-1;;;;;34986:6:0::1;::::0;:18:::1;::::0;133::1;;34986:29:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;35026:10:0::1;::::0;35049:9:::1;::::0;35026:33:::1;::::0;-1:-1:-1;;;35026:33:0;;-1:-1:-1;;;;;35026:10:0;;::::1;::::0;:22:::1;::::0;:33:::1;::::0;::::1;;160:25:1::0;;;148:2;133:18;;14:177;35026:33:0::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;35110:3:0::1;35091:16;29450:4;35091:2;:16;:::i;:::-;:22;;;;:::i;:::-;35078:9;;:35;;35070:77;;;::::0;-1:-1:-1;;;35070:77:0;;15617:2:1;35070:77:0::1;::::0;::::1;15599:21:1::0;15656:2;15636:18;;;15629:30;15695:31;15675:18;;;15668:59;15744:18;;35070:77:0::1;15415:353:1::0;35070:77:0::1;34764:391:::0;;:::o;22644:127::-;-1:-1:-1;;;;;22745:18:0;22718:7;22745:18;;;;;;;;;;;;22644:127::o;43028:281::-;43110:24;;43088:7;;43110:24;;43107:195;;;43186:25;;43157:26;;:54;;;;:::i;:::-;43150:61;;43028:281;:::o;43107:195::-;-1:-1:-1;43260:1:0;;43028:281::o;26288:150::-;26201:6;;-1:-1:-1;;;;;26201:6:0;267:10;26201:22;26193:67;;;;-1:-1:-1;;;26193:67:0;;;;;;;:::i;:::-;26381:6:::1;::::0;26360:40:::1;::::0;26397:1:::1;::::0;-1:-1:-1;;;;;26381:6:0::1;::::0;26360:40:::1;::::0;26397:1;;26360:40:::1;26411:6;:19:::0;;-1:-1:-1;;;;;;26411:19:0::1;::::0;;26288:150::o;39024:445::-;45624:3;;-1:-1:-1;;;;;45624:3:0;45610:10;:17;45602:37;;;;-1:-1:-1;;;45602:37:0;;;;;;;:::i;:::-;39176:3:::1;39153:19;:26;;39145:90;;;::::0;-1:-1:-1;;;39145:90:0;;15975:2:1;39145:90:0::1;::::0;::::1;15957:21:1::0;16014:2;15994:18;;;15987:30;16053:34;16033:18;;;16026:62;-1:-1:-1;;;16104:18:1;;;16097:49;16163:19;;39145:90:0::1;15773:415:1::0;39145:90:0::1;39266:4;39254:8;:16;;:33;;;;-1:-1:-1::0;39274:13:0;39254:33:::1;39246:94;;;::::0;-1:-1:-1;;;39246:94:0;;16395:2:1;39246:94:0::1;::::0;::::1;16377:21:1::0;16434:2;16414:18;;;16407:30;16473:34;16453:18;;;16446:62;-1:-1:-1;;;16524:18:1;;;16517:46;16580:19;;39246:94:0::1;16193:412:1::0;39246:94:0::1;39351:15;:37:::0;;;;39399:16:::1;:27:::0;39437:13:::1;:24:::0;;-1:-1:-1;;39437:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;39024:445::o;36170:115::-;26201:6;;-1:-1:-1;;;;;26201:6:0;267:10;26201:22;26193:67;;;;-1:-1:-1;;;26193:67:0;;;;;;;:::i;:::-;36224:14:::1;:22:::0;;-1:-1:-1;;36224:22:0::1;::::0;;36262:15:::1;::::0;::::1;::::0;36241:5:::1;::::0;36262:15:::1;36170:115::o:0;43317:496::-;26201:6;;-1:-1:-1;;;;;26201:6:0;267:10;26201:22;26193:67;;;;-1:-1:-1;;;26193:67:0;;;;;;;:::i;:::-;43405:29:::1;:27;:29::i;:::-;43386:15;:48;;:85;;;;;43470:1;43438:29;:27;:29::i;:::-;:33;43386:85;43378:120;;;::::0;-1:-1:-1;;;43378:120:0;;16812:2:1;43378:120:0::1;::::0;::::1;16794:21:1::0;16851:2;16831:18;;;16824:30;-1:-1:-1;;;16870:18:1;;;16863:52;16932:18;;43378:120:0::1;16610:346:1::0;43378:120:0::1;43538:1;43509:26;:30:::0;;;43550:24:::1;:32:::0;;-1:-1:-1;;43550:32:0::1;::::0;;43670:16:::1;::::0;43634:6:::1;::::0;43619:48:::1;::::0;-1:-1:-1;;;43619:48:0;;43661:4:::1;43619:48;::::0;::::1;1024:51:1::0;43689:3:0::1;::::0;43670:16;-1:-1:-1;;;;;43634:6:0::1;::::0;43619:33:::1;::::0;997:18:1;;43619:48:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:67;;;;:::i;:::-;:73;;;;:::i;:::-;43732:1;43713:16;:20:::0;43761:6:::1;::::0;43746:59:::1;::::0;-1:-1:-1;;;43746:59:0;;43779:10:::1;43746:59;::::0;::::1;17324:51:1::0;17391:18;;;17384:34;;;43595:97:0;;-1:-1:-1;;;;;;43761:6:0::1;::::0;43746:32:::1;::::0;17297:18:1;;43746:59:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;38019:474::-:0;45624:3;;-1:-1:-1;;;;;45624:3:0;45610:10;:17;45602:37;;;;-1:-1:-1;;;45602:37:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38114:20:0;::::1;38106:59;;;::::0;-1:-1:-1;;;38106:59:0;;17631:2:1;38106:59:0::1;::::0;::::1;17613:21:1::0;17670:2;17650:18;;;17643:30;17709:28;17689:18;;;17682:56;17755:18;;38106:59:0::1;17429:350:1::0;38106:59:0::1;38202:6;::::0;-1:-1:-1;;;;;38184:25:0;;::::1;38202:6:::0;::::1;38184:25;;::::0;:43:::1;;-1:-1:-1::0;38214:13:0::1;::::0;::::1;::::0;::::1;;;38213:14;38184:43;38176:97;;;::::0;-1:-1:-1;;;38176:97:0;;17986:2:1;38176:97:0::1;::::0;::::1;17968:21:1::0;18025:2;18005:18;;;17998:30;18064:34;18044:18;;;18037:62;-1:-1:-1;;;18115:18:1;;;18108:39;18164:19;;38176:97:0::1;17784:405:1::0;38176:97:0::1;38311:39;::::0;-1:-1:-1;;;38311:39:0;;38344:4:::1;38311:39;::::0;::::1;1024:51:1::0;38284:24:0::1;::::0;-1:-1:-1;;;;;38311:24:0;::::1;::::0;::::1;::::0;997:18:1;;38311:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38284:66;;38361:62;38391:6;38400:3;38406:16;38361:22;:62::i;:::-;38439:46;::::0;;-1:-1:-1;;;;;17342:32:1;;17324:51;;17406:2;17391:18;;17384:34;;;38439:46:0::1;::::0;17297:18:1;38439:46:0::1;;;;;;;38095:398;38019:474:::0;;:::o;33318:304::-;26201:6;;-1:-1:-1;;;;;26201:6:0;267:10;26201:22;26193:67;;;;-1:-1:-1;;;26193:67:0;;;;;;;:::i;:::-;33382:13:::1;::::0;::::1;::::0;::::1;;;33381:14;33373:50;;;::::0;-1:-1:-1;;;33373:50:0;;18396:2:1;33373:50:0::1;::::0;::::1;18378:21:1::0;18435:2;18415:18;;;18408:30;18474:25;18454:18;;;18447:53;18517:18;;33373:50:0::1;18194:347:1::0;33373:50:0::1;33434:10;::::0;33457:9:::1;::::0;33434:33:::1;::::0;-1:-1:-1;;;33434:33:0;;-1:-1:-1;;;;;33434:10:0;;::::1;::::0;:22:::1;::::0;:33:::1;::::0;::::1;;160:25:1::0;;;148:2;133:18;;14:177;33434:33:0::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;33478:6:0::1;::::0;33497:9:::1;::::0;33478:29:::1;::::0;-1:-1:-1;;;33478:29:0;;-1:-1:-1;;;;;33478:6:0;;::::1;::::0;:18:::1;::::0;:29:::1;::::0;::::1;;160:25:1::0;;;148:2;133:18;;14:177;33478:29:0::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;33518:13:0::1;:20:::0;;-1:-1:-1;;33518:20:0::1;;;::::0;;33570:12:::1;33549:18;:33:::0;33598:16:::1;::::0;::::1;::::0;33518:20;;33598:16:::1;33318:304::o:0;22315:104::-;22371:13;22404:7;22397:14;;;;;:::i;34260:302::-;26201:6;;-1:-1:-1;;;;;26201:6:0;267:10;26201:22;26193:67;;;;-1:-1:-1;;;26193:67:0;;;;;;;:::i;:::-;34377:6:::1;::::0;-1:-1:-1;;;;;34377:6:0;;::::1;34361:23:::0;;::::1;::::0;34353:93:::1;;;::::0;-1:-1:-1;;;34353:93:0;;18748:2:1;34353:93:0::1;::::0;::::1;18730:21:1::0;18787:2;18767:18;;;18760:30;18826:34;18806:18;;;18799:62;18897:27;18877:18;;;18870:55;18942:19;;34353:93:0::1;18546:421:1::0;34353:93:0::1;34457:41;34486:4;34492:5;34457:28;:41::i;:::-;34514:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;34514:40:0;::::1;::::0;::::1;::::0;;;::::1;34260:302:::0;;:::o;24021:413::-;267:10;24114:4;24158:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;24158:34:0;;;;;;;;;;24211:35;;;;24203:85;;;;-1:-1:-1;;;24203:85:0;;19174:2:1;24203:85:0;;;19156:21:1;19213:2;19193:18;;;19186:30;19252:34;19232:18;;;19225:62;-1:-1:-1;;;19303:18:1;;;19296:35;19348:19;;24203:85:0;18972:401:1;24203:85:0;24324:67;267:10;24347:7;24375:15;24356:16;:34;24324:8;:67::i;:::-;-1:-1:-1;24422:4:0;;24021:413;-1:-1:-1;;;24021:413:0:o;45667:84::-;45624:3;;-1:-1:-1;;;;;45624:3:0;45610:10;:17;45602:37;;;;-1:-1:-1;;;45602:37:0;;;;;;;:::i;:::-;45727:3:::1;:16:::0;;-1:-1:-1;;;;;;45727:16:0::1;::::0;;45667:84::o;22779:175::-;22865:4;22882:42;267:10;22906:9;22917:6;22882:9;:42::i;35163:277::-;26201:6;;-1:-1:-1;;;;;26201:6:0;267:10;26201:22;26193:67;;;;-1:-1:-1;;;26193:67:0;;;;;;;:::i;:::-;35270:9:::1;35266:167;35285:19:::0;;::::1;35266:167;;;35355:8;35325:14;:27;35340:8;;35349:1;35340:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;35325:27:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;35325:27:0;:38;;-1:-1:-1;;35325:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;35399:8;;35408:1;35399:11;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;35383:38:0::1;;35412:8;35383:38;;;;1707:14:1::0;1700:22;1682:41;;1670:2;1655:18;;1542:187;35383:38:0::1;;;;;;;;35306:3:::0;::::1;::::0;::::1;:::i;:::-;;;;35266:167;;42571:449:::0;26201:6;;-1:-1:-1;;;;;26201:6:0;267:10;26201:22;26193:67;;;;-1:-1:-1;;;26193:67:0;;;;;;;:::i;:::-;42663:24:::1;::::0;::::1;;42662:25;42654:87;;;::::0;-1:-1:-1;;;42654:87:0;;19580:2:1;42654:87:0::1;::::0;::::1;19562:21:1::0;19619:2;19599:18;;;19592:30;19658:34;19638:18;;;19631:62;-1:-1:-1;;;19709:18:1;;;19702:47;19766:19;;42654:87:0::1;19378:413:1::0;42654:87:0::1;42778:3;42760:14;:21;;:43;;;;;42802:1;42785:14;:18;42760:43;42752:82;;;::::0;-1:-1:-1;;;42752:82:0;;19998:2:1;42752:82:0::1;::::0;::::1;19980:21:1::0;20037:2;20017:18;;;20010:30;20076:28;20056:18;;;20049:56;20122:18;;42752:82:0::1;19796:350:1::0;42752:82:0::1;42874:15;42845:26;:44:::0;42900:24:::1;:31:::0;;-1:-1:-1;;42900:31:0::1;42927:4;42900:31;::::0;;42942:16:::1;:33:::0;;;42991:21:::1;::::0;::::1;::::0;42900:24:::1;::::0;42991:21:::1;42571:449:::0;:::o;43821:220::-;26201:6;;-1:-1:-1;;;;;26201:6:0;267:10;26201:22;26193:67;;;;-1:-1:-1;;;26193:67:0;;;;;;;:::i;:::-;43886:24:::1;:32:::0;;-1:-1:-1;;43886:32:0::1;::::0;;43913:5:::1;43929:16;:20:::0;;;43960:26:::1;:30:::0;;;44006:27:::1;::::0;::::1;::::0;43913:5;44006:27:::1;43821:220::o:0;44887:334::-;45624:3;;-1:-1:-1;;;;;45624:3:0;45610:10;:17;45602:37;;;;-1:-1:-1;;;45602:37:0;;;;;;;:::i;:::-;44947:13:::1;::::0;::::1;::::0;::::1;;;44939:48;;;;-1:-1:-1::0;;;44939:48:0::1;;;;;;;:::i;:::-;45027:9;::::0;:16:::1;::::0;;-1:-1:-1;;;45027:16:0;;;;44998:19:::1;::::0;-1:-1:-1;;;;;45027:9:0::1;::::0;:14:::1;::::0;:16:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:9;:16:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45020:49;::::0;-1:-1:-1;;;45020:49:0;;45063:4:::1;45020:49;::::0;::::1;1024:51:1::0;-1:-1:-1;;;;;45020:34:0;;;::::1;::::0;::::1;::::0;997:18:1;;45020:49:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44998:71;;45102:1;45088:11;:15;45080:35;;;::::0;-1:-1:-1;;;45080:35:0;;20960:2:1;45080:35:0::1;::::0;::::1;20942:21:1::0;20999:1;20979:18;;;20972:29;-1:-1:-1;;;21017:18:1;;;21010:37;21064:18;;45080:35:0::1;20758:330:1::0;45080:35:0::1;45133:9;;;;;;;;;-1:-1:-1::0;;;;;45133:9:0::1;-1:-1:-1::0;;;;;45133:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45168:6;::::0;45126:63:::1;::::0;-1:-1:-1;;;45126:63:0;;-1:-1:-1;;;;;45168:6:0;;::::1;45126:63;::::0;::::1;17324:51:1::0;17391:18;;;17384:34;;;45126:33:0;::::1;::::0;::::1;::::0;17297:18:1;;45126:63:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;45200:6;;;;;;;;;-1:-1:-1::0;;;;;45200:6:0::1;-1:-1:-1::0;;;;;45200:11:0::1;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;44928:293;44887:334::o:0;45229:336::-;45624:3;;-1:-1:-1;;;;;45624:3:0;45610:10;:17;45602:37;;;;-1:-1:-1;;;45602:37:0;;;;;;;:::i;:::-;45293:13:::1;::::0;::::1;::::0;::::1;;;45285:48;;;;-1:-1:-1::0;;;45285:48:0::1;;;;;;;:::i;:::-;45373:11;::::0;45366:44:::1;::::0;-1:-1:-1;;;45366:44:0;;45404:4:::1;45366:44;::::0;::::1;1024:51:1::0;45344:19:0::1;::::0;-1:-1:-1;;;;;45373:11:0::1;::::0;45366:29:::1;::::0;997:18:1;;45366:44:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45344:66;;45443:1;45429:11;:15;45421:35;;;::::0;-1:-1:-1;;;45421:35:0;;21295:2:1;45421:35:0::1;::::0;::::1;21277:21:1::0;21334:1;21314:18;;;21307:29;-1:-1:-1;;;21352:18:1;;;21345:37;21399:18;;45421:35:0::1;21093:330:1::0;45421:35:0::1;45474:11;::::0;45504:10:::1;::::0;45467:62:::1;::::0;-1:-1:-1;;;45467:62:0;;-1:-1:-1;;;;;45504:10:0;;::::1;45467:62;::::0;::::1;17324:51:1::0;17391:18;;;17384:34;;;45474:11:0;::::1;::::0;45467:28:::1;::::0;17297:18:1;;45467:62:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;45540:10;;;;;;;;;-1:-1:-1::0;;;;;45540:10:0::1;-1:-1:-1::0;;;;;45540:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;26446:244:::0;26201:6;;-1:-1:-1;;;;;26201:6:0;267:10;26201:22;26193:67;;;;-1:-1:-1;;;26193:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26535:22:0;::::1;26527:73;;;::::0;-1:-1:-1;;;26527:73:0;;21630:2:1;26527:73:0::1;::::0;::::1;21612:21:1::0;21669:2;21649:18;;;21642:30;21708:34;21688:18;;;21681:62;-1:-1:-1;;;21759:18:1;;;21752:36;21805:19;;26527:73:0::1;21428:402:1::0;26527:73:0::1;26637:6;::::0;26616:38:::1;::::0;-1:-1:-1;;;;;26616:38:0;;::::1;::::0;26637:6:::1;::::0;26616:38:::1;::::0;26637:6:::1;::::0;26616:38:::1;26665:6;:17:::0;;-1:-1:-1;;;;;;26665:17:0::1;-1:-1:-1::0;;;;;26665:17:0;;;::::1;::::0;;;::::1;::::0;;26446:244::o;38563:158::-;45624:3;;-1:-1:-1;;;;;45624:3:0;45610:10;:17;45602:37;;;;-1:-1:-1;;;45602:37:0;;;;;;;:::i;:::-;38655:58:::1;::::0;38619:12:::1;::::0;38663:10:::1;::::0;38687:21:::1;::::0;38619:12;38655:58;38619:12;38655:58;38687:21;38663:10;38655:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35448:171:::0;26201:6;;-1:-1:-1;;;;;26201:6:0;267:10;26201:22;26193:67;;;;-1:-1:-1;;;26193:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35527:23:0;::::1;;::::0;;;:14:::1;:23;::::0;;;;;;;;:34;;-1:-1:-1;;35527:34:0::1;::::0;::::1;;::::0;;::::1;::::0;;;35577;;1682:41:1;;;35577:34:0::1;::::0;1655:18:1;35577:34:0::1;;;;;;;35448:171:::0;;:::o;38729:287::-;45624:3;;-1:-1:-1;;;;;45624:3:0;45610:10;:17;45602:37;;;;-1:-1:-1;;;45602:37:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38821:31:0;::::1;38813:81;;;::::0;-1:-1:-1;;;38813:81:0;;22247:2:1;38813:81:0::1;::::0;::::1;22229:21:1::0;22286:2;22266:18;;;22259:30;22325:34;22305:18;;;22298:62;-1:-1:-1;;;22376:18:1;;;22369:35;22421:19;;38813:81:0::1;22045:401:1::0;38813:81:0::1;38905:16;:45:::0;;-1:-1:-1;;;;;;38905:45:0::1;-1:-1:-1::0;;;;;38905:45:0;::::1;::::0;;::::1;::::0;;;38966:42:::1;::::0;::::1;::::0;-1:-1:-1;;38966:42:0::1;38729:287:::0;:::o;37613:398::-;37686:6;37696:1;37686:11;37683:23;;37613:398;;:::o;37683:23::-;37716:76;37750:5;37758:10;37778:4;37785:6;37716:26;:76::i;:::-;37803:26;37856:9;;37841:12;;37832:6;:21;;;;:::i;:::-;:33;;;;:::i;:::-;37803:62;-1:-1:-1;37879:22:0;;37876:128;;37955:16;;37917:75;;37947:5;;-1:-1:-1;;;;;37955:16:0;37973:18;37917:22;:75::i;40759:1414::-;45624:3;;-1:-1:-1;;;;;45624:3:0;45610:10;:17;45602:37;;;;-1:-1:-1;;;45602:37:0;;;;;;;:::i;:::-;40861:4:::1;40851:7;:14;;40843:80;;;::::0;-1:-1:-1;;;40843:80:0;;22653:2:1;40843:80:0::1;::::0;::::1;22635:21:1::0;22692:2;22672:18;;;22665:30;22731:34;22711:18;;;22704:62;-1:-1:-1;;;22782:18:1;;;22775:51;22843:19;;40843:80:0::1;22451:417:1::0;40843:80:0::1;40984:19;::::0;40966:37:::1;::::0;:15:::1;:37;:::i;:::-;40942:20;;:61;;40934:87;;;::::0;-1:-1:-1;;;40934:87:0;;23208:2:1;40934:87:0::1;::::0;::::1;23190:21:1::0;23247:2;23227:18;;;23220:30;-1:-1:-1;;;23266:18:1;;;23259:43;23319:18;;40934:87:0::1;23006:337:1::0;40934:87:0::1;41055:15;41032:20;:38:::0;41116:6:::1;::::0;41101:48:::1;::::0;-1:-1:-1;;;41101:48:0;;41143:4:::1;41101:48;::::0;::::1;1024:51:1::0;41081:17:0::1;::::0;-1:-1:-1;;;;;41116:6:0::1;::::0;41101:33:::1;::::0;997:18:1;;41101:48:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41081:68;;41160:20;41183:24;41201:4;41183:9;:24::i;:::-;41160:47:::0;-1:-1:-1;41218:16:0::1;41259:5;41237:19;41249:7:::0;41237:9;:19:::1;:::i;:::-;:27;;;;:::i;:::-;41419:6;::::0;41444:9:::1;::::0;41404:61:::1;::::0;-1:-1:-1;;;41404:61:0;;-1:-1:-1;;;;;41444:9:0;;::::1;41404:61;::::0;::::1;17324:51:1::0;17391:18;;;17384:34;;;41218:46:0;;-1:-1:-1;41303:21:0::1;::::0;41419:6;::::1;::::0;41404:31:::1;::::0;17297:18:1;;41404:61:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;41511:9:0::1;::::0;:234:::1;::::0;-1:-1:-1;;;41511:234:0;;-1:-1:-1;;;;;41511:9:0;;::::1;::::0;:28:::1;::::0;:234:::1;::::0;41562:4:::1;::::0;41582:8;;41511:9;;;;41562:4;;41719:15:::1;::::0;41511:234:::1;;;:::i;:::-;;::::0;::::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;41758:25;41813:12;41786:24;41804:4;41786:9;:24::i;:::-;:39;;;;:::i;:::-;41758:67:::0;-1:-1:-1;41839:21:0;;41836:118:::1;;41876:66;41900:4;41915:6;41924:17;41876:15;:66::i;:::-;41966:23;41992:41;42016:17:::0;41992:21:::1;:41;:::i;:::-;41966:67:::0;-1:-1:-1;42049:19:0;;42046:80:::1;;42084:30;42098:15;42084:13;:30::i;:::-;42143:22;::::0;42156:8;;42143:22:::1;::::0;;;::::1;40832:1341;;;;;;40759:1414:::0;:::o;25363:380::-;-1:-1:-1;;;;;25499:19:0;;25491:68;;;;-1:-1:-1;;;25491:68:0;;23800:2:1;25491:68:0;;;23782:21:1;23839:2;23819:18;;;23812:30;23878:34;23858:18;;;23851:62;-1:-1:-1;;;23929:18:1;;;23922:34;23973:19;;25491:68:0;23598:400:1;25491:68:0;-1:-1:-1;;;;;25578:21:0;;25570:68;;;;-1:-1:-1;;;25570:68:0;;24205:2:1;25570:68:0;;;24187:21:1;24244:2;24224:18;;;24217:30;24283:34;24263:18;;;24256:62;-1:-1:-1;;;24334:18:1;;;24327:32;24376:19;;25570:68:0;24003:398:1;25570:68:0;-1:-1:-1;;;;;25651:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;25703:32;;160:25:1;;;25703:32:0;;133:18:1;25703:32:0;;;;;;;25363:380;;;:::o;24442:614::-;-1:-1:-1;;;;;24582:20:0;;24574:70;;;;-1:-1:-1;;;24574:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24663:23:0;;24655:71;;;;-1:-1:-1;;;24655:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24763:17:0;;24739:21;24763:17;;;;;;;;;;;24799:23;;;;24791:74;;;;-1:-1:-1;;;24791:74:0;;25418:2:1;24791:74:0;;;25400:21:1;25457:2;25437:18;;;25430:30;25496:34;25476:18;;;25469:62;-1:-1:-1;;;25547:18:1;;;25540:36;25593:19;;24791:74:0;25216:402:1;24791:74:0;-1:-1:-1;;;;;24901:17:0;;;:9;:17;;;;;;;;;;;24921:22;;;24901:42;;24965:20;;;;;;;;:30;;24937:6;;24901:9;24965:30;;24937:6;;24965:30;:::i;:::-;;;;;;;;25030:9;-1:-1:-1;;;;;25013:35:0;25022:6;-1:-1:-1;;;;;25013:35:0;;25041:6;25013:35;;;;160:25:1;;148:2;133:18;;14:177;25013:35:0;;;;;;;;24563:493;24442:614;;;:::o;36293:1312::-;-1:-1:-1;;;;;36393:18:0;;36385:68;;;;-1:-1:-1;;;36385:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36472:16:0;;36464:64;;;;-1:-1:-1;;;36464:64:0;;;;;;;:::i;:::-;36556:1;36547:6;:10;36539:52;;;;-1:-1:-1;;;36539:52:0;;25825:2:1;36539:52:0;;;25807:21:1;25864:2;25844:18;;;25837:30;25903:31;25883:18;;;25876:59;25952:18;;36539:52:0;25623:353:1;36539:52:0;36616:13;;;;;;;36612:122;;-1:-1:-1;;;;;36653:20:0;;;;;;:14;:20;;;;;;;;;:42;;-1:-1:-1;;;;;;36677:18:0;;;;;;:14;:18;;;;;;;;36653:42;36645:77;;;;-1:-1:-1;;;36645:77:0;;;;;;;:::i;:::-;36749:14;;;;36746:608;;;-1:-1:-1;;;;;36784:20:0;;;;;;:14;:20;;;;;;;;36783:21;:44;;;;-1:-1:-1;;;;;;36809:18:0;;;;;;:14;:18;;;;;;;;36808:19;36783:44;36779:564;;;-1:-1:-1;;;;;36879:31:0;;;;;;:25;:31;;;;;;;;36875:453;;;36953:12;;36943:6;:22;;36935:75;;;;-1:-1:-1;;;36935:75:0;;26183:2:1;36935:75:0;;;26165:21:1;26222:2;26202:18;;;26195:30;26261:34;26241:18;;;26234:62;-1:-1:-1;;;26312:18:1;;;26305:38;26360:19;;36935:75:0;25981:404:1;36935:75:0;37067:9;;37050:13;37060:2;37050:9;:13::i;:::-;37041:22;;:6;:22;:::i;:::-;:35;;37033:67;;;;-1:-1:-1;;;37033:67:0;;26592:2:1;37033:67:0;;;26574:21:1;26631:2;26611:18;;;26604:30;-1:-1:-1;;;26650:18:1;;;26643:49;26709:18;;37033:67:0;26390:343:1;37033:67:0;36875:453;;;-1:-1:-1;;;;;37177:29:0;;;;;;:25;:29;;;;;;;;37173:155;;;37249:12;;37239:6;:22;;37231:77;;;;-1:-1:-1;;;37231:77:0;;26940:2:1;37231:77:0;;;26922:21:1;26979:2;26959:18;;;26952:30;27018:34;26998:18;;;26991:62;-1:-1:-1;;;27069:18:1;;;27062:40;27119:19;;37231:77:0;26738:406:1;37231:77:0;-1:-1:-1;;;;;37369:29:0;;;;;;:25;:29;;;;;;;;:46;;;;-1:-1:-1;37402:13:0;;;;37369:46;:101;;;;;37455:15;;37438:14;;:32;;;;:::i;:::-;37419:15;:51;;37369:101;:126;;;;-1:-1:-1;;;;;;37475:20:0;;;;;;:14;:20;;;;;;;;37474:21;37369:126;37366:186;;;37511:29;:27;:29::i;:::-;37564:33;37580:4;37586:2;37590:6;37564:15;:33::i;9962:211::-;10106:58;;-1:-1:-1;;;;;17342:32:1;;10106:58:0;;;17324:51:1;17391:18;;;17384:34;;;10079:86:0;;10099:5;;-1:-1:-1;;;10129:23:0;17297:18:1;;10106:58:0;;;;-1:-1:-1;;10106:58:0;;;;;;;;;;;;;;-1:-1:-1;;;;;10106:58:0;-1:-1:-1;;;;;;10106:58:0;;;;;;;;;;10079:19;:86::i;34570:186::-;-1:-1:-1;;;;;34653:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;34653:39:0;;;;;;;;;;34708:40;;34653:39;;:31;34708:40;;;34570:186;;:::o;10181:248::-;10352:68;;-1:-1:-1;;;;;27407:15:1;;;10352:68:0;;;27389:34:1;27459:15;;27439:18;;;27432:43;27491:18;;;27484:34;;;10325:96:0;;10345:5;;-1:-1:-1;;;10375:27:0;27324:18:1;;10352:68:0;27149:375:1;42181:382:0;42269:16;;;42283:1;42269:16;;;;;;;;42245:21;;42269:16;;;;;;;;-1:-1:-1;;42306:9:0;;:16;;;-1:-1:-1;;;42306:16:0;;;;42245:40;;-1:-1:-1;;;;;;42306:9:0;;;;:14;;-1:-1:-1;42306:16:0;;;;;;;;;;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42296:4;42301:1;42296:7;;;;;;;;:::i;:::-;;;;;;:26;-1:-1:-1;;;;;42296:26:0;;;-1:-1:-1;;;;;42296:26:0;;;;;42351:4;42333;42338:1;42333:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;42333:23:0;;;:7;;;;;;;;;:23;42369:9;;:186;;-1:-1:-1;;;42369:186:0;;:9;;;:60;;42437:11;;42369:186;;:9;;42480:4;;42507:6;;42529:15;;42369:186;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42234:329;42181:382;:::o;39481:1270::-;39567:15;39550:14;:32;;;39603:20;:38;39687:6;;39672:48;;-1:-1:-1;;;39672:48:0;;39714:4;39672:48;;;1024:51:1;-1:-1:-1;;;;;;;39687:6:0;;39672:33;;997:18:1;;39672:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39652:68;;39731:20;39754:24;39772:4;39754:9;:24::i;:::-;39731:47;;39789:16;39839:5;39820:16;;39808:9;:28;;;;:::i;:::-;:36;;;;:::i;:::-;39999:6;;40024:9;;39984:61;;-1:-1:-1;;;39984:61:0;;-1:-1:-1;;;;;40024:9:0;;;39984:61;;;17324:51:1;17391:18;;;17384:34;;;39789:55:0;;-1:-1:-1;39883:21:0;;39999:6;;;39984:31;;17297:18:1;;39984:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;40091:9:0;;:234;;-1:-1:-1;;;40091:234:0;;-1:-1:-1;;;;;40091:9:0;;;;:28;;:234;;40142:4;;40162:8;;40091:9;;;;40142:4;;40299:15;;40091:234;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;40338:25;40393:12;40366:24;40384:4;40366:9;:24::i;:::-;:39;;;;:::i;:::-;40338:67;-1:-1:-1;40419:21:0;;40416:118;;40456:66;40480:4;40495:6;40504:17;40456:15;:66::i;:::-;40546:23;40572:41;40596:17;40572:21;:41;:::i;:::-;40546:67;-1:-1:-1;40629:19:0;;40626:80;;40664:30;40678:15;40664:13;:30::i;:::-;40723:20;;40734:8;;40723:20;;;;;39529:1222;;;;;;39481:1270::o;13029:716::-;13453:23;13479:69;13507:4;13479:69;;;;;;;;;;;;;;;;;13487:5;-1:-1:-1;;;;;13479:27:0;;;:69;;;;;:::i;:::-;13563:17;;13453:95;;-1:-1:-1;13563:21:0;13559:179;;13660:10;13649:30;;;;;;;;;;;;:::i;:::-;13641:85;;;;-1:-1:-1;;;13641:85:0;;28644:2:1;13641:85:0;;;28626:21:1;28683:2;28663:18;;;28656:30;28722:34;28702:18;;;28695:62;-1:-1:-1;;;28773:18:1;;;28766:40;28823:19;;13641:85:0;28442:406:1;4465:229:0;4602:12;4634:52;4656:6;4664:4;4670:1;4673:12;4634:21;:52::i;:::-;4627:59;4465:229;-1:-1:-1;;;;4465:229:0:o;5585:455::-;5755:12;5813:5;5788:21;:30;;5780:81;;;;-1:-1:-1;;;5780:81:0;;29055:2:1;5780:81:0;;;29037:21:1;29094:2;29074:18;;;29067:30;29133:34;29113:18;;;29106:62;-1:-1:-1;;;29184:18:1;;;29177:36;29230:19;;5780:81:0;28853:402:1;5780:81:0;5873:12;5887:23;5914:6;-1:-1:-1;;;;;5914:11:0;5933:5;5940:4;5914:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5872:73;;;;5963:69;5990:6;5998:7;6007:10;6019:12;5963:26;:69::i;:::-;5956:76;5585:455;-1:-1:-1;;;;;;;5585:455:0:o;8158:644::-;8343:12;8372:7;8368:427;;;8400:10;:17;8421:1;8400:22;8396:290;;-1:-1:-1;;;;;2004:19:0;;;8610:60;;;;-1:-1:-1;;;8610:60:0;;29754:2:1;8610:60:0;;;29736:21:1;29793:2;29773:18;;;29766:30;29832:31;29812:18;;;29805:59;29881:18;;8610:60:0;29552:353:1;8610:60:0;-1:-1:-1;8707:10:0;8700:17;;8368:427;8750:33;8758:10;8770:12;9505:17;;:21;9501:388;;9737:10;9731:17;9794:15;9781:10;9777:2;9773:19;9766:44;9501:388;9864:12;9857:20;;-1:-1:-1;;;9857:20:0;;;;;;;;:::i;196:250:1:-;281:1;291:113;305:6;302:1;299:13;291:113;;;381:11;;;375:18;362:11;;;355:39;327:2;320:10;291:113;;;-1:-1:-1;;438:1:1;420:16;;413:27;196:250::o;451:396::-;600:2;589:9;582:21;563:4;632:6;626:13;675:6;670:2;659:9;655:18;648:34;691:79;763:6;758:2;747:9;743:18;738:2;730:6;726:15;691:79;:::i;:::-;831:2;810:15;-1:-1:-1;;806:29:1;791:45;;;;838:2;787:54;;451:396;-1:-1:-1;;451:396:1:o;1086:131::-;-1:-1:-1;;;;;1161:31:1;;1151:42;;1141:70;;1207:1;1204;1197:12;1141:70;1086:131;:::o;1222:315::-;1290:6;1298;1351:2;1339:9;1330:7;1326:23;1322:32;1319:52;;;1367:1;1364;1357:12;1319:52;1406:9;1393:23;1425:31;1450:5;1425:31;:::i;:::-;1475:5;1527:2;1512:18;;;;1499:32;;-1:-1:-1;;;1222:315:1:o;1963:180::-;2022:6;2075:2;2063:9;2054:7;2050:23;2046:32;2043:52;;;2091:1;2088;2081:12;2043:52;-1:-1:-1;2114:23:1;;1963:180;-1:-1:-1;1963:180:1:o;2148:127::-;2209:10;2204:3;2200:20;2197:1;2190:31;2240:4;2237:1;2230:15;2264:4;2261:1;2254:15;2280:275;2351:2;2345:9;2416:2;2397:13;;-1:-1:-1;;2393:27:1;2381:40;;2451:18;2436:34;;2472:22;;;2433:62;2430:88;;;2498:18;;:::i;:::-;2534:2;2527:22;2280:275;;-1:-1:-1;2280:275:1:o;2560:183::-;2620:4;2653:18;2645:6;2642:30;2639:56;;;2675:18;;:::i;:::-;-1:-1:-1;2720:1:1;2716:14;2732:4;2712:25;;2560:183::o;2748:662::-;2802:5;2855:3;2848:4;2840:6;2836:17;2832:27;2822:55;;2873:1;2870;2863:12;2822:55;2909:6;2896:20;2935:4;2959:60;2975:43;3015:2;2975:43;:::i;:::-;2959:60;:::i;:::-;3053:15;;;3139:1;3135:10;;;;3123:23;;3119:32;;;3084:12;;;;3163:15;;;3160:35;;;3191:1;3188;3181:12;3160:35;3227:2;3219:6;3215:15;3239:142;3255:6;3250:3;3247:15;3239:142;;;3321:17;;3309:30;;3359:12;;;;3272;;3239:142;;;-1:-1:-1;3399:5:1;2748:662;-1:-1:-1;;;;;;2748:662:1:o;3415:1215::-;3533:6;3541;3594:2;3582:9;3573:7;3569:23;3565:32;3562:52;;;3610:1;3607;3600:12;3562:52;3650:9;3637:23;3679:18;3720:2;3712:6;3709:14;3706:34;;;3736:1;3733;3726:12;3706:34;3774:6;3763:9;3759:22;3749:32;;3819:7;3812:4;3808:2;3804:13;3800:27;3790:55;;3841:1;3838;3831:12;3790:55;3877:2;3864:16;3899:4;3923:60;3939:43;3979:2;3939:43;:::i;3923:60::-;4017:15;;;4099:1;4095:10;;;;4087:19;;4083:28;;;4048:12;;;;4123:19;;;4120:39;;;4155:1;4152;4145:12;4120:39;4179:11;;;;4199:217;4215:6;4210:3;4207:15;4199:217;;;4295:3;4282:17;4312:31;4337:5;4312:31;:::i;:::-;4356:18;;4232:12;;;;4394;;;;4199:217;;;4435:5;-1:-1:-1;;4478:18:1;;4465:32;;-1:-1:-1;;4509:16:1;;;4506:36;;;4538:1;4535;4528:12;4506:36;;4561:63;4616:7;4605:8;4594:9;4590:24;4561:63;:::i;:::-;4551:73;;;3415:1215;;;;;:::o;4635:456::-;4712:6;4720;4728;4781:2;4769:9;4760:7;4756:23;4752:32;4749:52;;;4797:1;4794;4787:12;4749:52;4836:9;4823:23;4855:31;4880:5;4855:31;:::i;:::-;4905:5;-1:-1:-1;4962:2:1;4947:18;;4934:32;4975:33;4934:32;4975:33;:::i;:::-;4635:456;;5027:7;;-1:-1:-1;;;5081:2:1;5066:18;;;;5053:32;;4635:456::o;5724:248::-;5792:6;5800;5853:2;5841:9;5832:7;5828:23;5824:32;5821:52;;;5869:1;5866;5859:12;5821:52;-1:-1:-1;;5892:23:1;;;5962:2;5947:18;;;5934:32;;-1:-1:-1;5724:248:1:o;5977:247::-;6036:6;6089:2;6077:9;6068:7;6064:23;6060:32;6057:52;;;6105:1;6102;6095:12;6057:52;6144:9;6131:23;6163:31;6188:5;6163:31;:::i;:::-;6213:5;5977:247;-1:-1:-1;;;5977:247:1:o;6229:118::-;6315:5;6308:13;6301:21;6294:5;6291:32;6281:60;;6337:1;6334;6327:12;6352:377;6426:6;6434;6442;6495:2;6483:9;6474:7;6470:23;6466:32;6463:52;;;6511:1;6508;6501:12;6463:52;6547:9;6534:23;6524:33;;6604:2;6593:9;6589:18;6576:32;6566:42;;6658:2;6647:9;6643:18;6630:32;6671:28;6693:5;6671:28;:::i;:::-;6718:5;6708:15;;;6352:377;;;;;:::o;6734:388::-;6802:6;6810;6863:2;6851:9;6842:7;6838:23;6834:32;6831:52;;;6879:1;6876;6869:12;6831:52;6918:9;6905:23;6937:31;6962:5;6937:31;:::i;:::-;6987:5;-1:-1:-1;7044:2:1;7029:18;;7016:32;7057:33;7016:32;7057:33;:::i;:::-;7109:7;7099:17;;;6734:388;;;;;:::o;7127:382::-;7192:6;7200;7253:2;7241:9;7232:7;7228:23;7224:32;7221:52;;;7269:1;7266;7259:12;7221:52;7308:9;7295:23;7327:31;7352:5;7327:31;:::i;:::-;7377:5;-1:-1:-1;7434:2:1;7419:18;;7406:32;7447:30;7406:32;7447:30;:::i;7514:750::-;7606:6;7614;7622;7675:2;7663:9;7654:7;7650:23;7646:32;7643:52;;;7691:1;7688;7681:12;7643:52;7731:9;7718:23;7760:18;7801:2;7793:6;7790:14;7787:34;;;7817:1;7814;7807:12;7787:34;7855:6;7844:9;7840:22;7830:32;;7900:7;7893:4;7889:2;7885:13;7881:27;7871:55;;7922:1;7919;7912:12;7871:55;7962:2;7949:16;7988:2;7980:6;7977:14;7974:34;;;8004:1;8001;7994:12;7974:34;8059:7;8052:4;8042:6;8039:1;8035:14;8031:2;8027:23;8023:34;8020:47;8017:67;;;8080:1;8077;8070:12;8017:67;8111:4;8103:13;;;;-1:-1:-1;8135:6:1;-1:-1:-1;;8176:20:1;;8163:34;8206:28;8163:34;8206:28;:::i;8269:315::-;8337:6;8345;8398:2;8386:9;8377:7;8373:23;8369:32;8366:52;;;8414:1;8411;8404:12;8366:52;8450:9;8437:23;8427:33;;8510:2;8499:9;8495:18;8482:32;8523:31;8548:5;8523:31;:::i;8589:380::-;8668:1;8664:12;;;;8711;;;8732:61;;8786:4;8778:6;8774:17;8764:27;;8732:61;8839:2;8831:6;8828:14;8808:18;8805:38;8802:161;;8885:10;8880:3;8876:20;8873:1;8866:31;8920:4;8917:1;8910:15;8948:4;8945:1;8938:15;8802:161;;8589:380;;;:::o;8974:356::-;9176:2;9158:21;;;9195:18;;;9188:30;9254:34;9249:2;9234:18;;9227:62;9321:2;9306:18;;8974:356::o;9335:127::-;9396:10;9391:3;9387:20;9384:1;9377:31;9427:4;9424:1;9417:15;9451:4;9448:1;9441:15;9467:168;9507:7;9573:1;9569;9565:6;9561:14;9558:1;9555:21;9550:1;9543:9;9536:17;9532:45;9529:71;;;9580:18;;:::i;:::-;-1:-1:-1;9620:9:1;;9467:168::o;9640:217::-;9680:1;9706;9696:132;;9750:10;9745:3;9741:20;9738:1;9731:31;9785:4;9782:1;9775:15;9813:4;9810:1;9803:15;9696:132;-1:-1:-1;9842:9:1;;9640:217::o;11465:127::-;11526:10;11521:3;11517:20;11514:1;11507:31;11557:4;11554:1;11547:15;11581:4;11578:1;11571:15;11597:135;11636:3;11657:17;;;11654:43;;11677:18;;:::i;:::-;-1:-1:-1;11724:1:1;11713:13;;11597:135::o;12146:125::-;12211:9;;;12232:10;;;12229:36;;;12245:18;;:::i;13907:607::-;-1:-1:-1;;;;;14266:15:1;;;14248:34;;14313:2;14298:18;;14291:34;;;;14356:2;14341:18;;14334:34;;;;14399:2;14384:18;;14377:34;;;;14448:15;;;14442:3;14427:19;;14420:44;14228:3;14480:19;;14473:35;;;;14197:3;14182:19;;13907:607::o;14519:306::-;14607:6;14615;14623;14676:2;14664:9;14655:7;14651:23;14647:32;14644:52;;;14692:1;14689;14682:12;14644:52;14721:9;14715:16;14705:26;;14771:2;14760:9;14756:18;14750:25;14740:35;;14815:2;14804:9;14800:18;14794:25;14784:35;;14519:306;;;;;:::o;14830:330::-;15032:2;15014:21;;;15071:1;15051:18;;;15044:29;-1:-1:-1;;;15104:2:1;15089:18;;15082:37;15151:2;15136:18;;14830:330::o;15165:245::-;15232:6;15285:2;15273:9;15264:7;15260:23;15256:32;15253:52;;;15301:1;15298;15291:12;15253:52;15333:9;15327:16;15352:28;15374:5;15352:28;:::i;16961:184::-;17031:6;17084:2;17072:9;17063:7;17059:23;17055:32;17052:52;;;17100:1;17097;17090:12;17052:52;-1:-1:-1;17123:16:1;;16961:184;-1:-1:-1;16961:184:1:o;20151:346::-;20353:2;20335:21;;;20392:2;20372:18;;;20365:30;-1:-1:-1;;;20426:2:1;20411:18;;20404:52;20488:2;20473:18;;20151:346::o;20502:251::-;20572:6;20625:2;20613:9;20604:7;20600:23;20596:32;20593:52;;;20641:1;20638;20631:12;20593:52;20673:9;20667:16;20692:31;20717:5;20692:31;:::i;22873:128::-;22940:9;;;22961:11;;;22958:37;;;22975:18;;:::i;23348:245::-;23427:6;23435;23488:2;23476:9;23467:7;23463:23;23459:32;23456:52;;;23504:1;23501;23494:12;23456:52;-1:-1:-1;;23527:16:1;;23583:2;23568:18;;;23562:25;23527:16;;23562:25;;-1:-1:-1;23348:245:1:o;24406:401::-;24608:2;24590:21;;;24647:2;24627:18;;;24620:30;24686:34;24681:2;24666:18;;24659:62;-1:-1:-1;;;24752:2:1;24737:18;;24730:35;24797:3;24782:19;;24406:401::o;24812:399::-;25014:2;24996:21;;;25053:2;25033:18;;;25026:30;25092:34;25087:2;25072:18;;25065:62;-1:-1:-1;;;25158:2:1;25143:18;;25136:33;25201:3;25186:19;;24812:399::o;27529:908::-;27763:4;27811:3;27800:9;27796:19;27842:6;27831:9;27824:25;27868:2;27906:3;27901:2;27890:9;27886:18;27879:31;27930:6;27965;27959:13;27996:6;27988;27981:22;28034:3;28023:9;28019:19;28012:26;;28073:2;28065:6;28061:15;28047:29;;28094:1;28104:195;28118:6;28115:1;28112:13;28104:195;;;28183:13;;-1:-1:-1;;;;;28179:39:1;28167:52;;28274:15;;;;28239:12;;;;28215:1;28133:9;28104:195;;;-1:-1:-1;;;;;;;28355:32:1;;;;28350:2;28335:18;;28328:60;-1:-1:-1;;;28419:2:1;28404:18;28397:34;28316:3;27529:908;-1:-1:-1;;27529:908:1:o;29260:287::-;29389:3;29427:6;29421:13;29443:66;29502:6;29497:3;29490:4;29482:6;29478:17;29443:66;:::i;:::-;29525:16;;;;;29260:287;-1:-1:-1;;29260:287:1:o

Swarm Source

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