Token CROBOX MYSTERY

Overview CRC20

Price
$0.00 @ 0.000000 CRO
Fully Diluted Market Cap
Total Supply:
100,000,000,000 CROBOX

Holders:
28 addresses
Contract:
0x7769af025823580d130dfa66d7e88b1118aa02460x7769AF025823580D130DFa66D7E88B1118Aa0246

Decimals:
9

Social Profiles:
Not Available, Update ?

Balance
3,439,315,042.237471834 CROBOX

Value
$0.00
0x7dae8fbcc37f67cb1ca02b959fa97c1473bd3a63
Loading
[ Download CSV Export  ] 
Loading
[ Download CSV Export  ] 
Loading

Click here to update the token ICO / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
CROBOX

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at cronoscan.com on 2022-03-05
*/

//   /$$$$$$  /$$$$$$$   /$$$$$$  /$$$$$$$   /$$$$$$  /$$   /$$       /$$      /$$ /$$     /$$ /$$$$$$  /$$$$$$$$ /$$$$$$$$ /$$$$$$$  /$$     /$$
//  /$$__  $$| $$__  $$ /$$__  $$| $$__  $$ /$$__  $$| $$  / $$      | $$$    /$$$|  $$   /$$//$$__  $$|__  $$__/| $$_____/| $$__  $$|  $$   /$$/
// | $$  \__/| $$  \ $$| $$  \ $$| $$  \ $$| $$  \ $$|  $$/ $$/      | $$$$  /$$$$ \  $$ /$$/| $$  \__/   | $$   | $$      | $$  \ $$ \  $$ /$$/ 
// | $$      | $$$$$$$/| $$  | $$| $$$$$$$ | $$  | $$ \  $$$$/       | $$ $$/$$ $$  \  $$$$/ |  $$$$$$    | $$   | $$$$$   | $$$$$$$/  \  $$$$/  
// | $$      | $$__  $$| $$  | $$| $$__  $$| $$  | $$  >$$  $$       | $$  $$$| $$   \  $$/   \____  $$   | $$   | $$__/   | $$__  $$   \  $$/   
// | $$    $$| $$  \ $$| $$  | $$| $$  \ $$| $$  | $$ /$$/\  $$      | $$\  $ | $$    | $$    /$$  \ $$   | $$   | $$      | $$  \ $$    | $$    
// |  $$$$$$/| $$  | $$|  $$$$$$/| $$$$$$$/|  $$$$$$/| $$  \ $$      | $$ \/  | $$    | $$   |  $$$$$$/   | $$   | $$$$$$$$| $$  | $$    | $$    
//  \______/ |__/  |__/ \______/ |_______/  \______/ |__/  |__/      |__/     |__/    |__/    \______/    |__/   |________/|__/  |__/    |__/    

// CROBOX hyper deflationary token & Buyback Mechanism
// Telegram Group : https://t.me/crobox_official 
// Telegram invite link : https://t.me/+zAe6bS8rP_4xYmI9          
// Twitter : https://twitter.com/crobox_official  

// SPDX-License-Identifier: GPL-3.0

// File: @openzeppelin/contracts/utils/Address.sol



pragma solidity ^0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
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
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 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://diligence.consensys.net/posts/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 functionCall(target, data, "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");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return _verifyCallResult(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) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(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) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) private pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // 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

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

// File: contracts/interfaces/IRouter.sol



pragma solidity ^0.8.0;

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

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

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

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

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}
// File: @openzeppelin/contracts/token/ERC20/IERC20.sol



pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

// File: @openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol



pragma solidity ^0.8.0;



/**
 * @title SafeERC20
 * @dev Wrappers around ERC20 operations that throw on failure (when the token
 * contract returns false). Tokens that return no value (and instead revert or
 * throw on failure) are also supported, non-reverting calls are assumed to be
 * successful.
 * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,
 * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
 */
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));
        }
    }

    /**
     * @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");
        }
    }
}

// File: @openzeppelin/contracts/utils/math/SafeMath.sol



pragma solidity ^0.8.0;

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

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

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

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

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

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

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

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

// File: contracts/CROPLAY.sol



pragma solidity ^0.8.0;




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

interface IDividendDistributor {
    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external;
    function setShare(address shareholder, uint256 amount) external;
    function deposit() external payable;
    function process(uint256 gas) external;
}

contract DividendDistributor is IDividendDistributor {

    using SafeMath for uint256;
    address _token;

    struct Share {
        uint256 amount;
        uint256 totalExcluded;
        uint256 totalRealised;
    }

    IUniRouterV2 router;
    address[] shareholders;
    mapping (address => uint256) shareholderIndexes;
    mapping (address => uint256) shareholderClaims;
    mapping (address => Share) public shares;

    uint256 public totalShares;
    uint256 public totalDividends;
    uint256 public totalDistributed;
    uint256 public dividendsPerShare;
    uint256 public dividendsPerShareAccuracyFactor = 10 ** 36;

    uint256 public minPeriod = 1 hours;
    uint256 public minDistribution = 1;

    uint256 currentIndex;

    bool initialized;
    modifier initialization() {
        require(!initialized);
        _;
        initialized = true;
    }

    modifier onlyToken() {
        require(msg.sender == _token); _;
    }

    constructor (IUniRouterV2 _router) {
        router = _router;
        _token = msg.sender;
    }

    function setDistributionCriteria(uint256 newMinPeriod, uint256 newMinDistribution) external override onlyToken {
        minPeriod = newMinPeriod;
        minDistribution = newMinDistribution;
    }

    function setShare(address shareholder, uint256 amount) external override onlyToken {

        if(shares[shareholder].amount > 0){
            distributeDividend(shareholder);
        }

        if(amount > 0 && shares[shareholder].amount == 0){
            addShareholder(shareholder);
        }else if(amount == 0 && shares[shareholder].amount > 0){
            removeShareholder(shareholder);
        }

        totalShares = totalShares.sub(shares[shareholder].amount).add(amount);
        shares[shareholder].amount = amount;
        shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
    }

    function deposit() external payable override onlyToken
    {
        totalDividends = totalDividends.add(msg.value);
        dividendsPerShare = dividendsPerShare.add(dividendsPerShareAccuracyFactor.mul(msg.value).div(totalShares));
    }

    function process(uint256 gas) external override onlyToken {
        uint256 shareholderCount = shareholders.length;

        if(shareholderCount == 0) { return; }

        uint256 iterations = 0;
        uint256 gasUsed = 0;
        uint256 gasLeft = gasleft();

        while(gasUsed < gas && iterations < shareholderCount) {

            if(currentIndex >= shareholderCount){ currentIndex = 0; }

            if(shouldDistribute(shareholders[currentIndex])){
                distributeDividend(shareholders[currentIndex]);
            }

            gasUsed = gasUsed.add(gasLeft.sub(gasleft()));
            gasLeft = gasleft();
            currentIndex++;
            iterations++;
        }
    }
    
    function shouldDistribute(address shareholder) internal view returns (bool) {
        return shareholderClaims[shareholder] + minPeriod < block.timestamp
                && getUnpaidEarnings(shareholder) > minDistribution;
    }

    function distributeDividend(address shareholder) internal {
        if(shares[shareholder].amount == 0){ return; }

        uint256 amount = getUnpaidEarnings(shareholder);
        if(amount > 0){
            totalDistributed = totalDistributed.add(amount);
            (bool success, ) = payable(shareholder).call{value: amount, gas: 30000}("");
            success = false;
            shareholderClaims[shareholder] = block.timestamp;
            shares[shareholder].totalRealised = shares[shareholder].totalRealised.add(amount);
            shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
        }
    }
    
    function claimDividend() external {

        require(shouldDistribute(msg.sender), "Too soon. Need to wait!");
        distributeDividend(msg.sender);
    }

    function getUnpaidEarnings(address shareholder) public view returns (uint256) {
        if(shares[shareholder].amount == 0){ return 0; }

        uint256 shareholderTotalDividends = getCumulativeDividends(shares[shareholder].amount);
        uint256 shareholderTotalExcluded = shares[shareholder].totalExcluded;

        if(shareholderTotalDividends <= shareholderTotalExcluded){ return 0; }

        return shareholderTotalDividends.sub(shareholderTotalExcluded);
    }

    function getCumulativeDividends(uint256 share) internal view returns (uint256) {
        return share.mul(dividendsPerShare).div(dividendsPerShareAccuracyFactor);
    }

    function addShareholder(address shareholder) internal {
        shareholderIndexes[shareholder] = shareholders.length;
        shareholders.push(shareholder);
    }

    function removeShareholder(address shareholder) internal {
        shareholders[shareholderIndexes[shareholder]] = shareholders[shareholders.length-1];
        shareholderIndexes[shareholders[shareholders.length-1]] = shareholderIndexes[shareholder];
        shareholders.pop();
    }
}

abstract contract Auth {
    address internal owner;
    mapping (address => bool) internal authorizations;

    constructor(address _owner) {
        owner = _owner;
        authorizations[_owner] = true;
    }

    /**
     * Function modifier to require caller to be contract owner
     */
    modifier onlyOwner() {
        require(isOwner(msg.sender), "!OWNER"); _;
    }

    /**
     * Function modifier to require caller to be authorized
     */
    modifier authorized() {
        require(isAuthorized(msg.sender), "!AUTHORIZED"); _;
    }

    /**
     * Authorize address. Owner only
     */
    function authorize(address adr) public onlyOwner {
        authorizations[adr] = true;
    }

    /**
     * Remove address' authorization. Owner only
     */
    function unauthorize(address adr) public onlyOwner {
        authorizations[adr] = false;
    }

    /**
     * Check if address is owner
     */
    function isOwner(address account) public view returns (bool) {
        return account == owner;
    }

    /**
     * Return address' authorization status
     */
    function isAuthorized(address adr) public view returns (bool) {
        return authorizations[adr];
    }

    /**
     * Transfer ownership to new address. Caller must be owner. Leaves old owner authorized
     */
    function transferOwnership(address payable adr) public onlyOwner {
        owner = adr;
        authorizations[adr] = true;
        emit OwnershipTransferred(adr);
    }

    event OwnershipTransferred(address owner);
}

contract CROBOX is IERC20, Auth {
    
    using SafeMath for uint256;
    using SafeERC20 for IERC20;

    //general
    string constant _name = "CROBOX MYSTERY";
    string constant _symbol = "CROBOX";
    uint8 constant _decimals = 9;
    //router address needed reward = wcro
    address constant DEAD = 0x000000000000000000000000000000000000dEaD;
    address constant ZERO = 0x0000000000000000000000000000000000000000;

    uint256 _totalSupply = 100 * 10**9 * (10 ** _decimals);
    uint256 public _maxTxAmount = 575 * 10**6 * (10 ** _decimals);
    uint256 public _walletMax = 575 * 10**6 * (10 ** _decimals);
    
    bool public restrictWhales = false;

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

    mapping (address => bool) public isFeeExempt;
    mapping (address => bool) public isTxLimitExempt;
    mapping (address => bool) public isDividendExempt;

    //fees
    uint256 public liquidityFee = 2;
    uint256 public marketingFee0 = 3;
    uint256 public marketingFee1 = 3;
    uint256 public buybackFee = 3;
    uint256 public rewardsFee = 1;
    uint256 public extraFeeOnSell = 0;
    uint256 public totalFee = 0;
    uint256 public totalFeeIfSelling = 0;

    //wallets
    address public autoLiquidityReceiver;
    address public marketingWallet0;
    address public marketingWallet1;
    address public buybackWallet;
    


    IUniRouterV2 public router;
    address public pair;

    uint256 public launchedAt;
    bool public tradingOpen = false;

    DividendDistributor public dividendDistributor;
    uint256 distributorGas = 500000;

    //liquify
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    bool public swapAndLiquifyByLimitOnly = false;
    uint256 public swapThreshold = 1 * 10**6 * (10 ** _decimals);
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    constructor (IUniRouterV2 _router) Auth(msg.sender) {
        
        router = _router;
        pair = IDEXFactory(router.factory()).createPair(router.WETH(), address(this));
        _allowances[address(this)][address(router)] = type(uint256).max;

        dividendDistributor = new DividendDistributor(router);

        isFeeExempt[msg.sender] = true;
        isFeeExempt[address(this)] = true;

        isTxLimitExempt[msg.sender] = true;
        isTxLimitExempt[pair] = true;

        isDividendExempt[pair] = true;
        isDividendExempt[msg.sender] = true;
        isDividendExempt[address(this)] = true;
        isDividendExempt[DEAD] = true;
        isDividendExempt[ZERO] = true;
        isDividendExempt[marketingWallet0] = true;
        isDividendExempt[marketingWallet1] = true;
        //Wallets
        autoLiquidityReceiver = address(this);
        marketingWallet0 = address(0x54f345234928C5297bF5934306153cC1b821449d);
        marketingWallet1 = address(0x289cA1dF4E0B87A697c26158F6dB630098195c45);
        buybackWallet = address(0x289cA1dF4E0B87A697c26158F6dB630098195c45);

        vestingPeriod = 90 days;
        vestedUntil = block.timestamp + vestingPeriod;
        
        totalFee = liquidityFee.add(marketingFee0).add(marketingFee1).add(buybackFee).add(rewardsFee);
        totalFeeIfSelling = totalFee.add(extraFeeOnSell);

        _balances[msg.sender] = _totalSupply;
        emit Transfer(address(0), msg.sender, _totalSupply);
    }

    receive() external payable { }

    function name() external pure returns (string memory) { return _name; }
    function symbol() external pure returns (string memory) { return _symbol; }
    function decimals() external pure returns (uint8) { return _decimals; }
    function totalSupply() external view override returns (uint256) { return _totalSupply; }
    function getOwner() external view returns (address) { return owner; }

    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(ZERO));
    }

    function balanceOf(address account) public view override returns (uint256) { return _balances[account]; }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }

    function approve(address spender, uint256 amount) public override returns (bool) {
        _allowances[msg.sender][spender] = amount;
        emit Approval(msg.sender, spender, amount);
        return true;
    }

    function approveMax(address spender) external returns (bool) {
        return approve(spender, type(uint256).max);
    }

    function launched() internal view returns (bool) {
        return launchedAt != 0;
    }

    function launch() internal {
        launchedAt = block.number;
    }

    function changeTxLimit(uint256 newLimit) external authorized {
        _maxTxAmount = newLimit;
    }

    function changeWalletLimit(uint256 newLimit) external authorized {
        _walletMax  = newLimit;
    }

    function changeRestrictWhales(bool newValue) external authorized {
       restrictWhales = newValue;
    }
    
    function changeIsFeeExempt(address holder, bool exempt) external authorized {
        isFeeExempt[holder] = exempt;
    }

    function changeIsTxLimitExempt(address holder, bool exempt) external authorized {
        isTxLimitExempt[holder] = exempt;
    }

    function changeIsDividendExempt(address holder, bool exempt) external authorized {
        require(holder != address(this) && holder != pair);
        isDividendExempt[holder] = exempt;
        
        if(exempt){
            dividendDistributor.setShare(holder, 0);
        }else{
            dividendDistributor.setShare(holder, _balances[holder]);
        }
    }

    function changeFees(uint256 newLiqFee, uint256 newRewardFee, uint256 newMarketingFee0, uint256 newMarketingFee1, uint256 newBuybackFee, uint256 newExtraSellFee) external authorized {
        liquidityFee = newLiqFee;
        rewardsFee = newRewardFee;
        marketingFee0 = newMarketingFee0;
        marketingFee1 = newMarketingFee1;
        buybackFee = newBuybackFee;
        extraFeeOnSell = newExtraSellFee;
        
        totalFee = liquidityFee.add(marketingFee0).add(marketingFee1).add(buybackFee).add(rewardsFee);
        totalFeeIfSelling = totalFee.add(extraFeeOnSell);
    }

    function changeFeeReceivers(address newLiquidityReceiver, address newMarketingWallet0, address newMarketingWallet1, address newBuybackWallet) external authorized {
        autoLiquidityReceiver = newLiquidityReceiver;
        marketingWallet0 = newMarketingWallet0;
        marketingWallet1 = newMarketingWallet1;
        buybackWallet = newBuybackWallet;
    }

    function changeSwapBackSettings(bool enableSwapBack, uint256 newSwapBackLimit, bool swapByLimitOnly) external authorized {
        swapAndLiquifyEnabled  = enableSwapBack;
        swapThreshold = newSwapBackLimit;
        swapAndLiquifyByLimitOnly = swapByLimitOnly;
    }

    function changeDistributionCriteria(uint256 newinPeriod, uint256 newMinDistribution) external authorized {
        dividendDistributor.setDistributionCriteria(newinPeriod, newMinDistribution);
    }

    function changeDistributorSettings(uint256 gas) external authorized {
        require(gas < 750000);
        distributorGas = gas;
    }
    
    function transfer(address recipient, uint256 amount) external override returns (bool) {
        return _transferFrom(msg.sender, recipient, amount);
    }

    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        
        if(_allowances[sender][msg.sender] != type(uint256).max){
            _allowances[sender][msg.sender] = _allowances[sender][msg.sender].sub(amount, "Insufficient Allowance");
        }
        return _transferFrom(sender, recipient, amount);
    }

    function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {
        
        if(inSwapAndLiquify){ return _basicTransfer(sender, recipient, amount); }

        if(!authorizations[sender] && !authorizations[recipient]){
            require(tradingOpen, "Trading not open yet");
        }

        require(amount <= _maxTxAmount || isTxLimitExempt[sender], "TX Limit Exceeded");

        if(msg.sender != pair
            && !inSwapAndLiquify
            && swapAndLiquifyEnabled
            && _balances[address(this)] >= swapThreshold)
        {
            swapBack();
        }

        if(!launched() && recipient == pair) {
            require(_balances[sender] > 0);
            launch();
        }

        //Exchange tokens
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
        
        if(!isTxLimitExempt[recipient] && restrictWhales)
        {
            require(_balances[recipient].add(amount) <= _walletMax);
        }

        uint256 finalAmount = !isFeeExempt[sender] && !isFeeExempt[recipient] ? takeFee(sender, recipient, amount) : amount;
        _balances[recipient] = _balances[recipient].add(finalAmount);

        // Dividend tracker
        if(!isDividendExempt[sender]) {
            try dividendDistributor.setShare(sender, _balances[sender]) {} catch {}
        }

        if(!isDividendExempt[recipient]) {
            try dividendDistributor.setShare(recipient, _balances[recipient]) {} catch {} 
        }

        try dividendDistributor.process(distributorGas) {} catch {}

        emit Transfer(sender, recipient, finalAmount);
        return true;
    }
    
    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
        return true;
    }

    function takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) {
        
        uint256 feeApplicable = pair == recipient ? totalFeeIfSelling : totalFee;
        uint256 feeAmount = amount.mul(feeApplicable).div(100);

        _balances[address(this)] = _balances[address(this)].add(feeAmount);
        emit Transfer(sender, address(this), feeAmount);

        return amount.sub(feeAmount);
    }

    function tradingStatus(bool newStatus) public onlyOwner {
        tradingOpen = newStatus;
    }

    function swapBack() internal lockTheSwap
    {        
        uint256 tokensToLiquify = _balances[address(this)];
        uint256 amountToLiquify = tokensToLiquify.mul(liquidityFee).div(totalFee).div(2);
        uint256 amountToSwap = tokensToLiquify.sub(amountToLiquify);

        //make swap path from token to ETH
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();

        //swap to ETH
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amountToSwap,
            0,
            path,
            address(this),
            block.timestamp
        );

        //calcute payout shares
        uint256 amountBNB = address(this).balance;
        uint256 totalBNBFee = totalFee.sub(liquidityFee.div(2));        
        uint256 amountBNBLiquidity = amountBNB.mul(liquidityFee).div(totalBNBFee).div(2);
        uint256 amountBNBReflection = amountBNB.mul(rewardsFee).div(totalBNBFee);
        uint256 amountBNBBuyback = amountBNB.mul(marketingFee0).div(totalBNBFee);
        uint256 amountBNBMarketing0 = amountBNB.mul(marketingFee0).div(totalBNBFee);
        uint256 amountBNBMarketing1 = amountBNB.sub(amountBNBLiquidity).sub(amountBNBBuyback).sub(amountBNBReflection).sub(amountBNBMarketing0);

        //distribute to wallets and dividend
        try dividendDistributor.deposit{value: amountBNBReflection}() {} catch {}
        bool success;
        if (amountBNBBuyback > 0) (success, ) = payable(buybackWallet).call{ value: amountBNBBuyback, gas: 30000 }("");
        if (amountBNBMarketing0 > 0) (success, ) = payable(marketingWallet0).call{ value: amountBNBMarketing0, gas: 30000 }("");
        if (amountBNBMarketing1 > 0) (success, ) = payable(marketingWallet1).call{ value: amountBNBMarketing1, gas: 30000 }("");        
        success = false;

        //add liquidity
        if (amountToLiquify > 0)
        {
            router.addLiquidityETH{value: amountBNBLiquidity}(
                address(this),
                amountToLiquify,
                0,
                0,
                autoLiquidityReceiver,
                block.timestamp
            );
            emit AutoLiquify(amountBNBLiquidity, amountToLiquify);
        }
    }

    event AutoLiquify(uint256 amountBNB, uint256 amountBOG);


    function withdrawVestedLiquidity() external onlyOwner {
        require(block.timestamp >= vestedUntil, "Liquidity still locked");
        IERC20(pair).safeTransfer(msg.sender, IERC20(pair).balanceOf(address(this)));
    }

    function increaseVesting() external onlyOwner
    {
        vestedUntil += vestingPeriod;
    }

//vested liquidity
    uint256 public vestedUntil;
    uint256 public vestingPeriod;
   
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"contract IUniRouterV2","name":"_router","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountBNB","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountBOG","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_walletMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","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":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"authorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoLiquidityReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"buybackFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buybackWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newinPeriod","type":"uint256"},{"internalType":"uint256","name":"newMinDistribution","type":"uint256"}],"name":"changeDistributionCriteria","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"changeDistributorSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newLiquidityReceiver","type":"address"},{"internalType":"address","name":"newMarketingWallet0","type":"address"},{"internalType":"address","name":"newMarketingWallet1","type":"address"},{"internalType":"address","name":"newBuybackWallet","type":"address"}],"name":"changeFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiqFee","type":"uint256"},{"internalType":"uint256","name":"newRewardFee","type":"uint256"},{"internalType":"uint256","name":"newMarketingFee0","type":"uint256"},{"internalType":"uint256","name":"newMarketingFee1","type":"uint256"},{"internalType":"uint256","name":"newBuybackFee","type":"uint256"},{"internalType":"uint256","name":"newExtraSellFee","type":"uint256"}],"name":"changeFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"changeIsDividendExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"changeIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"changeIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newValue","type":"bool"}],"name":"changeRestrictWhales","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enableSwapBack","type":"bool"},{"internalType":"uint256","name":"newSwapBackLimit","type":"uint256"},{"internalType":"bool","name":"swapByLimitOnly","type":"bool"}],"name":"changeSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"changeTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"changeWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"dividendDistributor","outputs":[{"internalType":"contract DividendDistributor","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"extraFeeOnSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"increaseVesting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"isAuthorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isDividendExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isTxLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFee0","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFee1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet0","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet1","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"restrictWhales","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniRouterV2","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAndLiquifyByLimitOnly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeeIfSelling","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":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"newStatus","type":"bool"}],"name":"tradingStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"adr","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"unauthorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vestedUntil","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vestingPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawVestedLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052620000126009600a62000667565b620000239064174876e80062000726565b600255620000346009600a62000667565b6200004490632245cdc062000726565b600355620000556009600a62000667565b6200006590632245cdc062000726565b6004556005805460ff199081169091556002600b556003600c819055600d819055600e556001600f55600060108190556011819055601255601a805490911690556207a120601b55601c805462ffff001916610100179055620000cb6009600a62000667565b620000da90620f424062000726565b601d55348015620000ea57600080fd5b5060405162003a1038038062003a108339810160408190526200010d91620005dc565b600080546001600160a01b0319908116339081178355825260016020818152604093849020805460ff1916909217909155601780546001600160a01b038616931683179055825163c45a015560e01b81529251919263c45a01559260048083019392829003018186803b1580156200018457600080fd5b505afa15801562000199573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001bf9190620005dc565b6001600160a01b031663c9c65396601760009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200021c57600080fd5b505afa15801562000231573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002579190620005dc565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604401602060405180830381600087803b1580156200029f57600080fd5b505af1158015620002b4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002da9190620005dc565b601880546001600160a01b0319166001600160a01b03928316179055306000908152600760209081526040808320601780548616855292529182902060001990555490519116906200032c90620005ce565b6001600160a01b039091168152602001604051809103906000f08015801562000359573d6000803e3d6000fd5b50601a8054610100600160a81b0319166101006001600160a01b0393841602179055336000818152600860209081526040808320805460ff199081166001908117909255308086528386208054831684179055868652600985528386208054831684179055601880548916875284872080548416851790555488168652600a9094528285208054821683179055948452818420805486168217905582845281842080548616821790557f20677881080440a9b3c87e826370bb5d9c2f74efd4dede686d52d77a6a09f8bb80548616821790557f13da86008ba1c6922daee3e07db95305ef49ebced9f5467a0b8613fcc6b343e3805486168217905560148054871685528285208054871683179055601580549097168552919093208054909416909217909255601380546001600160a01b0319908116909317905580547354f345234928c5297bf5934306153cc1b821449d908316179055815473289ca1df4e0b87a697c26158f6db630098195c4590821681179092556016805490911690911790556276a700601f819055620004f1904262000603565b601e819055506200053e600f546200052a600e546200052a600d546200052a600c54600b54620005b760201b620014121790919060201c565b620005b760201b620014121790919060201c565b60118190555062000562601054601154620005b760201b620014121790919060201c565b60125560025433600081815260066020908152604080832085905551938452919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35062000777565b6000620005c5828462000603565b90505b92915050565b610b878062002e8983390190565b600060208284031215620005ef57600080fd5b8151620005fc816200075e565b9392505050565b6000821982111562000619576200061962000748565b500190565b600181815b808511156200065f57816000190482111562000643576200064362000748565b808516156200065157918102915b93841c939080029062000623565b509250929050565b6000620005c560ff8416836000826200068357506001620005c8565b816200069257506000620005c8565b8160018114620006ab5760028114620006b657620006d6565b6001915050620005c8565b60ff841115620006ca57620006ca62000748565b50506001821b620005c8565b5060208310610133831016604e8410600b8410161715620006fb575081810a620005c8565b6200070783836200061e565b80600019048211156200071e576200071e62000748565b029392505050565b600081600019048311821515161562000743576200074362000748565b500290565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03811681146200077457600080fd5b50565b61270280620007876000396000f3fe6080604052600436106103905760003560e01c80637db1342c116101dc578063bf56b37111610102578063deab8aea116100a0578063f887ea401161006f578063f887ea4014610aa3578063fabe628314610ac3578063fe9fbb8014610ae3578063ffb54a9914610b0357600080fd5b8063deab8aea14610a23578063e66b1d1e14610a43578063f0b37c0414610a63578063f2fde38b14610a8357600080fd5b8063cb29813c116100dc578063cb29813c1461097d578063d920334e1461099d578063da00097d146109bd578063dd62ed3e146109dd57600080fd5b8063bf56b37114610931578063ca33e64c14610947578063ca987b0e1461096757600080fd5b806398118cb41161017a578063a9f7864b11610149578063a9f7864b146108b6578063b6a5d7de146108d6578063b7491c21146108f6578063bad3ea6a1461090c57600080fd5b806398118cb414610840578063a3a2e89e14610856578063a8aa1b3114610876578063a9059cbb1461089657600080fd5b806388c2b779116101b657806388c2b779146107ad578063893d20e8146107c35780638b42507f146107e157806395d89b411461081157600080fd5b80637db1342c146107575780637e0488f614610777578063807c2d9c1461079757600080fd5b80633f4218e0116102c15780635ada676a1161025f57806370a082311161022e57806370a08231146106d55780637313ee5a1461070b578063773fcb5c146107215780637d1db4a51461074157600080fd5b80635ada676a1461065257806369cf17d4146106725780636aab7f4e146106885780636e4af82c1461069d57600080fd5b8063479f66d81161029b578063479f66d8146105dd5780634a74bb02146105fd5780634dd328e21461061c578063571ac8b01461063257600080fd5b80633f4218e0146105635780634355855a1461059357806344de2e4c146105c357600080fd5b80632b112e491161032e578063313ce56711610308578063313ce567146104fc57806332e875df1461051857806334c708891461052d5780633b2d081c1461054d57600080fd5b80632b112e49146104a25780632bb14e1d146104b75780632f54bf6e146104cd57600080fd5b80630d2959801161036a5780630d2959801461043557806318160ddd146104575780631df4ccfc1461046c57806323b872dd1461048257600080fd5b80630445b6671461039c57806306fdde03146103c5578063095ea7b31461040557600080fd5b3661039757005b600080fd5b3480156103a857600080fd5b506103b2601d5481565b6040519081526020015b60405180910390f35b3480156103d157600080fd5b5060408051808201909152600e81526d43524f424f58204d59535445525960901b60208201525b6040516103bc91906124f1565b34801561041157600080fd5b50610425610420366004612368565b610b1d565b60405190151581526020016103bc565b34801561044157600080fd5b50610455610450366004612394565b610b89565b005b34801561046357600080fd5b506002546103b2565b34801561047857600080fd5b506103b260115481565b34801561048e57600080fd5b5061042561049d3660046122f9565b610bcf565b3480156104ae57600080fd5b506103b2610c91565b3480156104c357600080fd5b506103b2600f5481565b3480156104d957600080fd5b506104256104e836600461222a565b6000546001600160a01b0391821691161490565b34801561050857600080fd5b50604051600981526020016103bc565b34801561052457600080fd5b50610455610d02565b34801561053957600080fd5b506104556105483660046123ce565b610e0d565b34801561055957600080fd5b506103b2600e5481565b34801561056f57600080fd5b5061042561057e36600461222a565b60086020526000908152604090205460ff1681565b34801561059f57600080fd5b506104256105ae36600461222a565b600a6020526000908152604090205460ff1681565b3480156105cf57600080fd5b506005546104259060ff1681565b3480156105e957600080fd5b506104556105f8366004612410565b610e68565b34801561060957600080fd5b50601c5461042590610100900460ff1681565b34801561062857600080fd5b506103b2600c5481565b34801561063e57600080fd5b5061042561064d36600461222a565b610ea1565b34801561065e57600080fd5b5061045561066d36600461229d565b610eb5565b34801561067e57600080fd5b506103b260105481565b34801561069457600080fd5b50610455610f2a565b3480156106a957600080fd5b506015546106bd906001600160a01b031681565b6040516001600160a01b0390911681526020016103bc565b3480156106e157600080fd5b506103b26106f036600461222a565b6001600160a01b031660009081526006602052604090205490565b34801561071757600080fd5b506103b2601f5481565b34801561072d57600080fd5b5061045561073c36600461233a565b610f6f565b34801561074d57600080fd5b506103b260035481565b34801561076357600080fd5b50610455610772366004612410565b6110b0565b34801561078357600080fd5b506014546106bd906001600160a01b031681565b3480156107a357600080fd5b506103b260045481565b3480156107b957600080fd5b506103b2600d5481565b3480156107cf57600080fd5b506000546001600160a01b03166106bd565b3480156107ed57600080fd5b506104256107fc36600461222a565b60096020526000908152604090205460ff1681565b34801561081d57600080fd5b50604080518082019091526006815265086a49e849eb60d31b60208201526103f8565b34801561084c57600080fd5b506103b2600b5481565b34801561086257600080fd5b5061045561087136600461233a565b6110da565b34801561088257600080fd5b506018546106bd906001600160a01b031681565b3480156108a257600080fd5b506104256108b1366004612368565b61112a565b3480156108c257600080fd5b506104556108d1366004612442565b611137565b3480156108e257600080fd5b506104556108f136600461222a565b611198565b34801561090257600080fd5b506103b2601e5481565b34801561091857600080fd5b50601a546106bd9061010090046001600160a01b031681565b34801561093d57600080fd5b506103b260195481565b34801561095357600080fd5b506013546106bd906001600160a01b031681565b34801561097357600080fd5b506103b260125481565b34801561098957600080fd5b50610455610998366004612492565b6111e9565b3480156109a957600080fd5b506104556109b8366004612410565b611261565b3480156109c957600080fd5b50601c546104259062010000900460ff1681565b3480156109e957600080fd5b506103b26109f8366004612264565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205490565b348015610a2f57600080fd5b506016546106bd906001600160a01b031681565b348015610a4f57600080fd5b50610455610a5e366004612394565b61128b565b348015610a6f57600080fd5b50610455610a7e36600461222a565b6112c3565b348015610a8f57600080fd5b50610455610a9e36600461222a565b61130e565b348015610aaf57600080fd5b506017546106bd906001600160a01b031681565b348015610acf57600080fd5b50610455610ade36600461233a565b6113a4565b348015610aef57600080fd5b50610425610afe36600461222a565b6113f4565b348015610b0f57600080fd5b50601a546104259060ff1681565b3360008181526007602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610b789086815260200190565b60405180910390a350600192915050565b6000546001600160a01b03163314610bbc5760405162461bcd60e51b8152600401610bb390612524565b60405180910390fd5b601a805460ff1916911515919091179055565b6001600160a01b038316600090815260076020908152604080832033845290915281205460001914610c7c576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152600782528381203382529091529190912054610c5791849061141e565b6001600160a01b03851660009081526007602090815260408083203384529091529020555b610c8784848461144a565b90505b9392505050565b60066020527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f85461dead60009081527f1aecba4ebe7a4e0673e4891b2b092b2228e4322380b579fb494fad3da8586e22546002549192610cfd929091610cf79190611948565b90611948565b905090565b6000546001600160a01b03163314610d2c5760405162461bcd60e51b8152600401610bb390612524565b601e54421015610d775760405162461bcd60e51b8152602060048201526016602482015275131a5c5d5a591a5d1e481cdd1a5b1b081b1bd8dad95960521b6044820152606401610bb3565b6018546040516370a0823160e01b8152306004820152610e0b9133916001600160a01b03909116906370a082319060240160206040518083038186803b158015610dc057600080fd5b505afa158015610dd4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610df89190612429565b6018546001600160a01b03169190611954565b565b610e16336113f4565b610e325760405162461bcd60e51b8152600401610bb390612544565b601c8054601d93909355901515620100000262ff000019931515610100029390931662ffff001990921691909117919091179055565b610e71336113f4565b610e8d5760405162461bcd60e51b8152600401610bb390612544565b620b71b08110610e9c57600080fd5b601b55565b6000610eaf82600019610b1d565b92915050565b610ebe336113f4565b610eda5760405162461bcd60e51b8152600401610bb390612544565b601380546001600160a01b039586166001600160a01b0319918216179091556014805494861694821694909417909355601580549285169284169290921790915560168054919093169116179055565b6000546001600160a01b03163314610f545760405162461bcd60e51b8152600401610bb390612524565b601f54601e6000828254610f6891906125da565b9091555050565b610f78336113f4565b610f945760405162461bcd60e51b8152600401610bb390612544565b6001600160a01b0382163014801590610fbb57506018546001600160a01b03838116911614155b610fc457600080fd5b6001600160a01b0382166000908152600a60205260409020805460ff1916821580159190911790915561106257601a54604051630a5b654b60e11b81526001600160a01b03848116600483015260006024830152610100909204909116906314b6ca96906044015b600060405180830381600087803b15801561104657600080fd5b505af115801561105a573d6000803e3d6000fd5b505050505050565b601a546001600160a01b0383811660008181526006602052604090819020549051630a5b654b60e11b81526004810192909252602482015261010090920416906314b6ca969060440161102c565b6110b9336113f4565b6110d55760405162461bcd60e51b8152600401610bb390612544565b600455565b6110e3336113f4565b6110ff5760405162461bcd60e51b8152600401610bb390612544565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b6000610c8a33848461144a565b611140336113f4565b61115c5760405162461bcd60e51b8152600401610bb390612544565b601a546040516316a4744b60e11b815260048101849052602481018390526101009091046001600160a01b031690632d48e8969060440161102c565b6000546001600160a01b031633146111c25760405162461bcd60e51b8152600401610bb390612524565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b6111f2336113f4565b61120e5760405162461bcd60e51b8152600401610bb390612544565b600b869055600f859055600c849055600d839055600e82905560108190556112448561123e848187818c8b611412565b90611412565b60118190556010546112569190611412565b601255505050505050565b61126a336113f4565b6112865760405162461bcd60e51b8152600401610bb390612544565b600355565b611294336113f4565b6112b05760405162461bcd60e51b8152600401610bb390612544565b6005805460ff1916911515919091179055565b6000546001600160a01b031633146112ed5760405162461bcd60e51b8152600401610bb390612524565b6001600160a01b03166000908152600160205260409020805460ff19169055565b6000546001600160a01b031633146113385760405162461bcd60e51b8152600401610bb390612524565b600080546001600160a01b0319166001600160a01b038316908117825580825260016020818152604093849020805460ff191690921790915591519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163910160405180910390a150565b6113ad336113f4565b6113c95760405162461bcd60e51b8152600401610bb390612544565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6001600160a01b031660009081526001602052604090205460ff1690565b6000610c8a82846125da565b600081848411156114425760405162461bcd60e51b8152600401610bb391906124f1565b505050900390565b601c5460009060ff161561146a576114638484846119ab565b9050610c8a565b6001600160a01b03841660009081526001602052604090205460ff161580156114ac57506001600160a01b03831660009081526001602052604090205460ff16155b156114fa57601a5460ff166114fa5760405162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b6044820152606401610bb3565b6003548211158061152357506001600160a01b03841660009081526009602052604090205460ff165b6115635760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610bb3565b6018546001600160a01b031633148015906115815750601c5460ff16155b80156115945750601c54610100900460ff165b80156115b15750601d543060009081526006602052604090205410155b156115be576115be611a91565b6019541580156115db57506018546001600160a01b038481169116145b1561160b576001600160a01b03841660009081526006602052604090205461160257600080fd5b61160b43601955565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b03871660009081526006909152919091205461165d91849061141e565b6001600160a01b0380861660009081526006602090815260408083209490945591861681526009909152205460ff1615801561169b575060055460ff165b156116d1576004546001600160a01b0384166000908152600660205260409020546116c69084611412565b11156116d157600080fd5b6001600160a01b03841660009081526008602052604081205460ff1615801561171357506001600160a01b03841660009081526008602052604090205460ff16155b61171d5782611728565b611728858585611f72565b6001600160a01b03851660009081526006602052604090205490915061174e9082611412565b6001600160a01b038086166000908152600660209081526040808320949094559188168152600a909152205460ff166117f757601a546001600160a01b0386811660008181526006602052604090819020549051630a5b654b60e11b81526004810192909252602482015261010090920416906314b6ca9690604401600060405180830381600087803b1580156117e457600080fd5b505af19250505080156117f5575060015b505b6001600160a01b0384166000908152600a602052604090205460ff1661188d57601a546001600160a01b0385811660008181526006602052604090819020549051630a5b654b60e11b81526004810192909252602482015261010090920416906314b6ca9690604401600060405180830381600087803b15801561187a57600080fd5b505af192505050801561188b575060015b505b601a54601b546040516001624d3b8760e01b0319815260048101919091526101009091046001600160a01b03169063ffb2c47990602401600060405180830381600087803b1580156118de57600080fd5b505af19250505080156118ef575060015b50836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161193591815260200190565b60405180910390a3506001949350505050565b6000610c8a8284612633565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526119a6908490612035565b505050565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b03861660009081526006909152918220546119fc91849061141e565b6001600160a01b038086166000908152600660205260408082209390935590851681522054611a2b9083611412565b6001600160a01b0380851660008181526006602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611a7f9086815260200190565b60405180910390a35060019392505050565b601c805460ff1916600117905530600090815260066020526040812054601154600b54919291611ad291600291611acc919082908790612107565b90612113565b90506000611ae08383611948565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110611b1a57611b1a612690565b6001600160a01b03928316602091820292909201810191909152601754604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015611b6e57600080fd5b505afa158015611b82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ba69190612247565b81600181518110611bb957611bb9612690565b6001600160a01b03928316602091820292909201015260175460405163791ac94760e01b815291169063791ac94790611bff908590600090869030904290600401612569565b600060405180830381600087803b158015611c1957600080fd5b505af1158015611c2d573d6000803e3d6000fd5b5050600b5447925060009150611c5190611c48906002612113565b60115490611948565b90506000611c736002611acc84611acc600b548861210790919063ffffffff16565b90506000611c9083611acc600f548761210790919063ffffffff16565b90506000611cad84611acc600c548861210790919063ffffffff16565b90506000611cca85611acc600c548961210790919063ffffffff16565b90506000611ce082610cf7868187818d8c611948565b9050601a60019054906101000a90046001600160a01b03166001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015611d3257600080fd5b505af193505050508015611d44575060015b5060008315611daa576016546040516001600160a01b03909116906175309086906000818181858888f193505050503d8060008114611d9f576040519150601f19603f3d011682016040523d82523d6000602084013e611da4565b606091505b50909150505b8215611e0d576014546040516001600160a01b03909116906175309085906000818181858888f193505050503d8060008114611e02576040519150601f19603f3d011682016040523d82523d6000602084013e611e07565b606091505b50909150505b8115611e70576015546040516001600160a01b03909116906175309084906000818181858888f193505050503d8060008114611e65576040519150601f19603f3d011682016040523d82523d6000602084013e611e6a565b606091505b50909150505b5060008a15611f5a5760175460135460405163f305d71960e01b8152306004820152602481018e905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990889060c4016060604051808303818588803b158015611ee457600080fd5b505af1158015611ef8573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611f1d9190612464565b505060408051888152602081018e90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b5050601c805460ff1916905550505050505050505050565b60185460009081906001600160a01b03858116911614611f9457601154611f98565b6012545b90506000611fab6064611acc8685612107565b30600090815260066020526040902054909150611fc89082611412565b30600081815260066020526040908190209290925590516001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906120199085815260200190565b60405180910390a361202b8482611948565b9695505050505050565b600061208a826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661211f9092919063ffffffff16565b8051909150156119a657808060200190518101906120a891906123b1565b6119a65760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610bb3565b6000610c8a8284612614565b6000610c8a82846125f2565b6060610c87848460008585843b6121785760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610bb3565b600080866001600160a01b0316858760405161219491906124d5565b60006040518083038185875af1925050503d80600081146121d1576040519150601f19603f3d011682016040523d82523d6000602084013e6121d6565b606091505b50915091506121e68282866121f1565b979650505050505050565b60608315612200575081610c8a565b8251156122105782518084602001fd5b8160405162461bcd60e51b8152600401610bb391906124f1565b60006020828403121561223c57600080fd5b8135610c8a816126a6565b60006020828403121561225957600080fd5b8151610c8a816126a6565b6000806040838503121561227757600080fd5b8235612282816126a6565b91506020830135612292816126a6565b809150509250929050565b600080600080608085870312156122b357600080fd5b84356122be816126a6565b935060208501356122ce816126a6565b925060408501356122de816126a6565b915060608501356122ee816126a6565b939692955090935050565b60008060006060848603121561230e57600080fd5b8335612319816126a6565b92506020840135612329816126a6565b929592945050506040919091013590565b6000806040838503121561234d57600080fd5b8235612358816126a6565b91506020830135612292816126be565b6000806040838503121561237b57600080fd5b8235612386816126a6565b946020939093013593505050565b6000602082840312156123a657600080fd5b8135610c8a816126be565b6000602082840312156123c357600080fd5b8151610c8a816126be565b6000806000606084860312156123e357600080fd5b83356123ee816126be565b9250602084013591506040840135612405816126be565b809150509250925092565b60006020828403121561242257600080fd5b5035919050565b60006020828403121561243b57600080fd5b5051919050565b6000806040838503121561245557600080fd5b50508035926020909101359150565b60008060006060848603121561247957600080fd5b8351925060208401519150604084015190509250925092565b60008060008060008060c087890312156124ab57600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b600082516124e781846020870161264a565b9190910192915050565b602081526000825180602084015261251081604085016020870161264a565b601f01601f19169190910160400192915050565b60208082526006908201526510a7aba722a960d11b604082015260600190565b6020808252600b908201526a085055551213d49256915160aa1b604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156125b95784516001600160a01b031683529383019391830191600101612594565b50506001600160a01b03969096166060850152505050608001529392505050565b600082198211156125ed576125ed61267a565b500190565b60008261260f57634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161561262e5761262e61267a565b500290565b6000828210156126455761264561267a565b500390565b60005b8381101561266557818101518382015260200161264d565b83811115612674576000848401525b50505050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b03811681146126bb57600080fd5b50565b80151581146126bb57600080fdfea264697066735822122003dd0dca3087ece4c7c6d520e73a9a1250020714efea80ae174a71d1f771be0464736f6c6343000807003360806040526ec097ce7bc90715b34b9f1000000000600a55610e10600b556001600c5534801561002e57600080fd5b50604051610b87380380610b8783398101604081905261004d9161007b565b600180546001600160a01b039092166001600160a01b031992831617905560008054909116331790556100ab565b60006020828403121561008d57600080fd5b81516001600160a01b03811681146100a457600080fd5b9392505050565b610acd806100ba6000396000f3fe6080604052600436106100dd5760003560e01c8063ce7c2ac21161007f578063efca2eed11610059578063efca2eed14610224578063f0fc6bca1461023a578063ffb2c4791461024f578063ffd49c841461026f57600080fd5b8063ce7c2ac2146101af578063d0e30db014610206578063e2d2e2191461020e57600080fd5b80632d48e896116100bb5780632d48e8961461014d5780633a98ef391461016d5780634fab0ae814610183578063997664d71461019957600080fd5b806311ce023d146100e257806314b6ca961461010b57806328fd31981461012d575b600080fd5b3480156100ee57600080fd5b506100f8600a5481565b6040519081526020015b60405180910390f35b34801561011757600080fd5b5061012b610126366004610965565b610285565b005b34801561013957600080fd5b506100f861014836600461094a565b6103fd565b34801561015957600080fd5b5061012b6101683660046109a8565b610486565b34801561017957600080fd5b506100f860065481565b34801561018f57600080fd5b506100f8600c5481565b3480156101a557600080fd5b506100f860075481565b3480156101bb57600080fd5b506101eb6101ca36600461094a565b60056020526000908152604090208054600182015460029092015490919083565b60408051938452602084019290925290820152606001610102565b61012b6104a8565b34801561021a57600080fd5b506100f860095481565b34801561023057600080fd5b506100f860085481565b34801561024657600080fd5b5061012b6104fb565b34801561025b57600080fd5b5061012b61026a36600461098f565b61055f565b34801561027b57600080fd5b506100f8600b5481565b6000546001600160a01b0316331461029c57600080fd5b6001600160a01b038216600090815260056020526040902054156102c3576102c38261065f565b6000811180156102e957506001600160a01b038216600090815260056020526040902054155b1561034f57600280546001600160a01b0384166000818152600360205260408120839055600183018455929092527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b0319169091179055610382565b8015801561037457506001600160a01b03821660009081526005602052604090205415155b15610382576103828261077a565b6001600160a01b0382166000908152600560205260409020546006546103b39183916103ad9161088f565b906108a2565b6006556001600160a01b03821660009081526005602052604090208190556103da816108ae565b6001600160a01b0390921660009081526005602052604090206001019190915550565b6001600160a01b03811660009081526005602052604081205461042257506000919050565b6001600160a01b038216600090815260056020526040812054610444906108ae565b6001600160a01b038416600090815260056020526040902060010154909150808211610474575060009392505050565b61047e828261088f565b949350505050565b6000546001600160a01b0316331461049d57600080fd5b600b91909155600c55565b6000546001600160a01b031633146104bf57600080fd5b6007546104cc90346108a2565b600755600654600a546104f6916104ed916104e790346108d1565b906108dd565b600954906108a2565b600955565b610504336108e9565b6105545760405162461bcd60e51b815260206004820152601760248201527f546f6f20736f6f6e2e204e65656420746f207761697421000000000000000000604482015260640160405180910390fd5b61055d3361065f565b565b6000546001600160a01b0316331461057657600080fd5b60025480610582575050565b60008060005a90505b848210801561059957508383105b156106585783600d54106105ad576000600d555b6105df6002600d54815481106105c5576105c5610a81565b6000918252602090912001546001600160a01b03166108e9565b15610616576106166002600d54815481106105fc576105fc610a81565b6000918252602090912001546001600160a01b031661065f565b61062b6106245a839061088f565b83906108a2565b91505a600d8054919250600061064083610a3a565b9190505550828061065090610a3a565b93505061058b565b5050505050565b6001600160a01b03811660009081526005602052604090205461067f5750565b600061068a826103fd565b905080156107765760085461069f90826108a2565b6008556040516000906001600160a01b0384169061753090849084818181858888f193505050503d80600081146106f2576040519150601f19603f3d011682016040523d82523d6000602084013e6106f7565b606091505b505050506001600160a01b0382166000908152600460209081526040808320429055600590915281206002015461072e90836108a2565b6001600160a01b0384166000908152600560205260409020600281019190915554610758906108ae565b6001600160a01b038416600090815260056020526040902060010155505b5050565b6002805461078a90600190610a23565b8154811061079a5761079a610a81565b60009182526020808320909101546001600160a01b03848116845260039092526040909220546002805492909316929181106107d8576107d8610a81565b600091825260208083209190910180546001600160a01b0319166001600160a01b0394851617905591831681526003918290526040812054600280549193929161082490600190610a23565b8154811061083457610834610a81565b60009182526020808320909101546001600160a01b03168352820192909252604001902055600280548061086a5761086a610a6b565b600082815260209020810160001990810180546001600160a01b031916905501905550565b600061089b8284610a23565b9392505050565b600061089b82846109ca565b60006108cb600a546104e7600954856108d190919063ffffffff16565b92915050565b600061089b8284610a04565b600061089b82846109e2565b600b546001600160a01b0382166000908152600460205260408120549091429161091391906109ca565b1080156108cb5750600c54610927836103fd565b1192915050565b80356001600160a01b038116811461094557600080fd5b919050565b60006020828403121561095c57600080fd5b61089b8261092e565b6000806040838503121561097857600080fd5b6109818361092e565b946020939093013593505050565b6000602082840312156109a157600080fd5b5035919050565b600080604083850312156109bb57600080fd5b50508035926020909101359150565b600082198211156109dd576109dd610a55565b500190565b6000826109ff57634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615610a1e57610a1e610a55565b500290565b600082821015610a3557610a35610a55565b500390565b6000600019821415610a4e57610a4e610a55565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fdfea264697066735822122095b9d8632f01c084afda7f4cacfe9bb3e11ad996b5281822ad0e379257f013e964736f6c63430008070033000000000000000000000000145677fc4d9b8f19b5d56d1820c48e0443049a30

Deployed Bytecode

0x6080604052600436106103905760003560e01c80637db1342c116101dc578063bf56b37111610102578063deab8aea116100a0578063f887ea401161006f578063f887ea4014610aa3578063fabe628314610ac3578063fe9fbb8014610ae3578063ffb54a9914610b0357600080fd5b8063deab8aea14610a23578063e66b1d1e14610a43578063f0b37c0414610a63578063f2fde38b14610a8357600080fd5b8063cb29813c116100dc578063cb29813c1461097d578063d920334e1461099d578063da00097d146109bd578063dd62ed3e146109dd57600080fd5b8063bf56b37114610931578063ca33e64c14610947578063ca987b0e1461096757600080fd5b806398118cb41161017a578063a9f7864b11610149578063a9f7864b146108b6578063b6a5d7de146108d6578063b7491c21146108f6578063bad3ea6a1461090c57600080fd5b806398118cb414610840578063a3a2e89e14610856578063a8aa1b3114610876578063a9059cbb1461089657600080fd5b806388c2b779116101b657806388c2b779146107ad578063893d20e8146107c35780638b42507f146107e157806395d89b411461081157600080fd5b80637db1342c146107575780637e0488f614610777578063807c2d9c1461079757600080fd5b80633f4218e0116102c15780635ada676a1161025f57806370a082311161022e57806370a08231146106d55780637313ee5a1461070b578063773fcb5c146107215780637d1db4a51461074157600080fd5b80635ada676a1461065257806369cf17d4146106725780636aab7f4e146106885780636e4af82c1461069d57600080fd5b8063479f66d81161029b578063479f66d8146105dd5780634a74bb02146105fd5780634dd328e21461061c578063571ac8b01461063257600080fd5b80633f4218e0146105635780634355855a1461059357806344de2e4c146105c357600080fd5b80632b112e491161032e578063313ce56711610308578063313ce567146104fc57806332e875df1461051857806334c708891461052d5780633b2d081c1461054d57600080fd5b80632b112e49146104a25780632bb14e1d146104b75780632f54bf6e146104cd57600080fd5b80630d2959801161036a5780630d2959801461043557806318160ddd146104575780631df4ccfc1461046c57806323b872dd1461048257600080fd5b80630445b6671461039c57806306fdde03146103c5578063095ea7b31461040557600080fd5b3661039757005b600080fd5b3480156103a857600080fd5b506103b2601d5481565b6040519081526020015b60405180910390f35b3480156103d157600080fd5b5060408051808201909152600e81526d43524f424f58204d59535445525960901b60208201525b6040516103bc91906124f1565b34801561041157600080fd5b50610425610420366004612368565b610b1d565b60405190151581526020016103bc565b34801561044157600080fd5b50610455610450366004612394565b610b89565b005b34801561046357600080fd5b506002546103b2565b34801561047857600080fd5b506103b260115481565b34801561048e57600080fd5b5061042561049d3660046122f9565b610bcf565b3480156104ae57600080fd5b506103b2610c91565b3480156104c357600080fd5b506103b2600f5481565b3480156104d957600080fd5b506104256104e836600461222a565b6000546001600160a01b0391821691161490565b34801561050857600080fd5b50604051600981526020016103bc565b34801561052457600080fd5b50610455610d02565b34801561053957600080fd5b506104556105483660046123ce565b610e0d565b34801561055957600080fd5b506103b2600e5481565b34801561056f57600080fd5b5061042561057e36600461222a565b60086020526000908152604090205460ff1681565b34801561059f57600080fd5b506104256105ae36600461222a565b600a6020526000908152604090205460ff1681565b3480156105cf57600080fd5b506005546104259060ff1681565b3480156105e957600080fd5b506104556105f8366004612410565b610e68565b34801561060957600080fd5b50601c5461042590610100900460ff1681565b34801561062857600080fd5b506103b2600c5481565b34801561063e57600080fd5b5061042561064d36600461222a565b610ea1565b34801561065e57600080fd5b5061045561066d36600461229d565b610eb5565b34801561067e57600080fd5b506103b260105481565b34801561069457600080fd5b50610455610f2a565b3480156106a957600080fd5b506015546106bd906001600160a01b031681565b6040516001600160a01b0390911681526020016103bc565b3480156106e157600080fd5b506103b26106f036600461222a565b6001600160a01b031660009081526006602052604090205490565b34801561071757600080fd5b506103b2601f5481565b34801561072d57600080fd5b5061045561073c36600461233a565b610f6f565b34801561074d57600080fd5b506103b260035481565b34801561076357600080fd5b50610455610772366004612410565b6110b0565b34801561078357600080fd5b506014546106bd906001600160a01b031681565b3480156107a357600080fd5b506103b260045481565b3480156107b957600080fd5b506103b2600d5481565b3480156107cf57600080fd5b506000546001600160a01b03166106bd565b3480156107ed57600080fd5b506104256107fc36600461222a565b60096020526000908152604090205460ff1681565b34801561081d57600080fd5b50604080518082019091526006815265086a49e849eb60d31b60208201526103f8565b34801561084c57600080fd5b506103b2600b5481565b34801561086257600080fd5b5061045561087136600461233a565b6110da565b34801561088257600080fd5b506018546106bd906001600160a01b031681565b3480156108a257600080fd5b506104256108b1366004612368565b61112a565b3480156108c257600080fd5b506104556108d1366004612442565b611137565b3480156108e257600080fd5b506104556108f136600461222a565b611198565b34801561090257600080fd5b506103b2601e5481565b34801561091857600080fd5b50601a546106bd9061010090046001600160a01b031681565b34801561093d57600080fd5b506103b260195481565b34801561095357600080fd5b506013546106bd906001600160a01b031681565b34801561097357600080fd5b506103b260125481565b34801561098957600080fd5b50610455610998366004612492565b6111e9565b3480156109a957600080fd5b506104556109b8366004612410565b611261565b3480156109c957600080fd5b50601c546104259062010000900460ff1681565b3480156109e957600080fd5b506103b26109f8366004612264565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205490565b348015610a2f57600080fd5b506016546106bd906001600160a01b031681565b348015610a4f57600080fd5b50610455610a5e366004612394565b61128b565b348015610a6f57600080fd5b50610455610a7e36600461222a565b6112c3565b348015610a8f57600080fd5b50610455610a9e36600461222a565b61130e565b348015610aaf57600080fd5b506017546106bd906001600160a01b031681565b348015610acf57600080fd5b50610455610ade36600461233a565b6113a4565b348015610aef57600080fd5b50610425610afe36600461222a565b6113f4565b348015610b0f57600080fd5b50601a546104259060ff1681565b3360008181526007602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610b789086815260200190565b60405180910390a350600192915050565b6000546001600160a01b03163314610bbc5760405162461bcd60e51b8152600401610bb390612524565b60405180910390fd5b601a805460ff1916911515919091179055565b6001600160a01b038316600090815260076020908152604080832033845290915281205460001914610c7c576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152600782528381203382529091529190912054610c5791849061141e565b6001600160a01b03851660009081526007602090815260408083203384529091529020555b610c8784848461144a565b90505b9392505050565b60066020527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f85461dead60009081527f1aecba4ebe7a4e0673e4891b2b092b2228e4322380b579fb494fad3da8586e22546002549192610cfd929091610cf79190611948565b90611948565b905090565b6000546001600160a01b03163314610d2c5760405162461bcd60e51b8152600401610bb390612524565b601e54421015610d775760405162461bcd60e51b8152602060048201526016602482015275131a5c5d5a591a5d1e481cdd1a5b1b081b1bd8dad95960521b6044820152606401610bb3565b6018546040516370a0823160e01b8152306004820152610e0b9133916001600160a01b03909116906370a082319060240160206040518083038186803b158015610dc057600080fd5b505afa158015610dd4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610df89190612429565b6018546001600160a01b03169190611954565b565b610e16336113f4565b610e325760405162461bcd60e51b8152600401610bb390612544565b601c8054601d93909355901515620100000262ff000019931515610100029390931662ffff001990921691909117919091179055565b610e71336113f4565b610e8d5760405162461bcd60e51b8152600401610bb390612544565b620b71b08110610e9c57600080fd5b601b55565b6000610eaf82600019610b1d565b92915050565b610ebe336113f4565b610eda5760405162461bcd60e51b8152600401610bb390612544565b601380546001600160a01b039586166001600160a01b0319918216179091556014805494861694821694909417909355601580549285169284169290921790915560168054919093169116179055565b6000546001600160a01b03163314610f545760405162461bcd60e51b8152600401610bb390612524565b601f54601e6000828254610f6891906125da565b9091555050565b610f78336113f4565b610f945760405162461bcd60e51b8152600401610bb390612544565b6001600160a01b0382163014801590610fbb57506018546001600160a01b03838116911614155b610fc457600080fd5b6001600160a01b0382166000908152600a60205260409020805460ff1916821580159190911790915561106257601a54604051630a5b654b60e11b81526001600160a01b03848116600483015260006024830152610100909204909116906314b6ca96906044015b600060405180830381600087803b15801561104657600080fd5b505af115801561105a573d6000803e3d6000fd5b505050505050565b601a546001600160a01b0383811660008181526006602052604090819020549051630a5b654b60e11b81526004810192909252602482015261010090920416906314b6ca969060440161102c565b6110b9336113f4565b6110d55760405162461bcd60e51b8152600401610bb390612544565b600455565b6110e3336113f4565b6110ff5760405162461bcd60e51b8152600401610bb390612544565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b6000610c8a33848461144a565b611140336113f4565b61115c5760405162461bcd60e51b8152600401610bb390612544565b601a546040516316a4744b60e11b815260048101849052602481018390526101009091046001600160a01b031690632d48e8969060440161102c565b6000546001600160a01b031633146111c25760405162461bcd60e51b8152600401610bb390612524565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b6111f2336113f4565b61120e5760405162461bcd60e51b8152600401610bb390612544565b600b869055600f859055600c849055600d839055600e82905560108190556112448561123e848187818c8b611412565b90611412565b60118190556010546112569190611412565b601255505050505050565b61126a336113f4565b6112865760405162461bcd60e51b8152600401610bb390612544565b600355565b611294336113f4565b6112b05760405162461bcd60e51b8152600401610bb390612544565b6005805460ff1916911515919091179055565b6000546001600160a01b031633146112ed5760405162461bcd60e51b8152600401610bb390612524565b6001600160a01b03166000908152600160205260409020805460ff19169055565b6000546001600160a01b031633146113385760405162461bcd60e51b8152600401610bb390612524565b600080546001600160a01b0319166001600160a01b038316908117825580825260016020818152604093849020805460ff191690921790915591519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163910160405180910390a150565b6113ad336113f4565b6113c95760405162461bcd60e51b8152600401610bb390612544565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6001600160a01b031660009081526001602052604090205460ff1690565b6000610c8a82846125da565b600081848411156114425760405162461bcd60e51b8152600401610bb391906124f1565b505050900390565b601c5460009060ff161561146a576114638484846119ab565b9050610c8a565b6001600160a01b03841660009081526001602052604090205460ff161580156114ac57506001600160a01b03831660009081526001602052604090205460ff16155b156114fa57601a5460ff166114fa5760405162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b6044820152606401610bb3565b6003548211158061152357506001600160a01b03841660009081526009602052604090205460ff165b6115635760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610bb3565b6018546001600160a01b031633148015906115815750601c5460ff16155b80156115945750601c54610100900460ff165b80156115b15750601d543060009081526006602052604090205410155b156115be576115be611a91565b6019541580156115db57506018546001600160a01b038481169116145b1561160b576001600160a01b03841660009081526006602052604090205461160257600080fd5b61160b43601955565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b03871660009081526006909152919091205461165d91849061141e565b6001600160a01b0380861660009081526006602090815260408083209490945591861681526009909152205460ff1615801561169b575060055460ff165b156116d1576004546001600160a01b0384166000908152600660205260409020546116c69084611412565b11156116d157600080fd5b6001600160a01b03841660009081526008602052604081205460ff1615801561171357506001600160a01b03841660009081526008602052604090205460ff16155b61171d5782611728565b611728858585611f72565b6001600160a01b03851660009081526006602052604090205490915061174e9082611412565b6001600160a01b038086166000908152600660209081526040808320949094559188168152600a909152205460ff166117f757601a546001600160a01b0386811660008181526006602052604090819020549051630a5b654b60e11b81526004810192909252602482015261010090920416906314b6ca9690604401600060405180830381600087803b1580156117e457600080fd5b505af19250505080156117f5575060015b505b6001600160a01b0384166000908152600a602052604090205460ff1661188d57601a546001600160a01b0385811660008181526006602052604090819020549051630a5b654b60e11b81526004810192909252602482015261010090920416906314b6ca9690604401600060405180830381600087803b15801561187a57600080fd5b505af192505050801561188b575060015b505b601a54601b546040516001624d3b8760e01b0319815260048101919091526101009091046001600160a01b03169063ffb2c47990602401600060405180830381600087803b1580156118de57600080fd5b505af19250505080156118ef575060015b50836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161193591815260200190565b60405180910390a3506001949350505050565b6000610c8a8284612633565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526119a6908490612035565b505050565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b03861660009081526006909152918220546119fc91849061141e565b6001600160a01b038086166000908152600660205260408082209390935590851681522054611a2b9083611412565b6001600160a01b0380851660008181526006602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611a7f9086815260200190565b60405180910390a35060019392505050565b601c805460ff1916600117905530600090815260066020526040812054601154600b54919291611ad291600291611acc919082908790612107565b90612113565b90506000611ae08383611948565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110611b1a57611b1a612690565b6001600160a01b03928316602091820292909201810191909152601754604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015611b6e57600080fd5b505afa158015611b82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ba69190612247565b81600181518110611bb957611bb9612690565b6001600160a01b03928316602091820292909201015260175460405163791ac94760e01b815291169063791ac94790611bff908590600090869030904290600401612569565b600060405180830381600087803b158015611c1957600080fd5b505af1158015611c2d573d6000803e3d6000fd5b5050600b5447925060009150611c5190611c48906002612113565b60115490611948565b90506000611c736002611acc84611acc600b548861210790919063ffffffff16565b90506000611c9083611acc600f548761210790919063ffffffff16565b90506000611cad84611acc600c548861210790919063ffffffff16565b90506000611cca85611acc600c548961210790919063ffffffff16565b90506000611ce082610cf7868187818d8c611948565b9050601a60019054906101000a90046001600160a01b03166001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015611d3257600080fd5b505af193505050508015611d44575060015b5060008315611daa576016546040516001600160a01b03909116906175309086906000818181858888f193505050503d8060008114611d9f576040519150601f19603f3d011682016040523d82523d6000602084013e611da4565b606091505b50909150505b8215611e0d576014546040516001600160a01b03909116906175309085906000818181858888f193505050503d8060008114611e02576040519150601f19603f3d011682016040523d82523d6000602084013e611e07565b606091505b50909150505b8115611e70576015546040516001600160a01b03909116906175309084906000818181858888f193505050503d8060008114611e65576040519150601f19603f3d011682016040523d82523d6000602084013e611e6a565b606091505b50909150505b5060008a15611f5a5760175460135460405163f305d71960e01b8152306004820152602481018e905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990889060c4016060604051808303818588803b158015611ee457600080fd5b505af1158015611ef8573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611f1d9190612464565b505060408051888152602081018e90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b5050601c805460ff1916905550505050505050505050565b60185460009081906001600160a01b03858116911614611f9457601154611f98565b6012545b90506000611fab6064611acc8685612107565b30600090815260066020526040902054909150611fc89082611412565b30600081815260066020526040908190209290925590516001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906120199085815260200190565b60405180910390a361202b8482611948565b9695505050505050565b600061208a826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661211f9092919063ffffffff16565b8051909150156119a657808060200190518101906120a891906123b1565b6119a65760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610bb3565b6000610c8a8284612614565b6000610c8a82846125f2565b6060610c87848460008585843b6121785760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610bb3565b600080866001600160a01b0316858760405161219491906124d5565b60006040518083038185875af1925050503d80600081146121d1576040519150601f19603f3d011682016040523d82523d6000602084013e6121d6565b606091505b50915091506121e68282866121f1565b979650505050505050565b60608315612200575081610c8a565b8251156122105782518084602001fd5b8160405162461bcd60e51b8152600401610bb391906124f1565b60006020828403121561223c57600080fd5b8135610c8a816126a6565b60006020828403121561225957600080fd5b8151610c8a816126a6565b6000806040838503121561227757600080fd5b8235612282816126a6565b91506020830135612292816126a6565b809150509250929050565b600080600080608085870312156122b357600080fd5b84356122be816126a6565b935060208501356122ce816126a6565b925060408501356122de816126a6565b915060608501356122ee816126a6565b939692955090935050565b60008060006060848603121561230e57600080fd5b8335612319816126a6565b92506020840135612329816126a6565b929592945050506040919091013590565b6000806040838503121561234d57600080fd5b8235612358816126a6565b91506020830135612292816126be565b6000806040838503121561237b57600080fd5b8235612386816126a6565b946020939093013593505050565b6000602082840312156123a657600080fd5b8135610c8a816126be565b6000602082840312156123c357600080fd5b8151610c8a816126be565b6000806000606084860312156123e357600080fd5b83356123ee816126be565b9250602084013591506040840135612405816126be565b809150509250925092565b60006020828403121561242257600080fd5b5035919050565b60006020828403121561243b57600080fd5b5051919050565b6000806040838503121561245557600080fd5b50508035926020909101359150565b60008060006060848603121561247957600080fd5b8351925060208401519150604084015190509250925092565b60008060008060008060c087890312156124ab57600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b600082516124e781846020870161264a565b9190910192915050565b602081526000825180602084015261251081604085016020870161264a565b601f01601f19169190910160400192915050565b60208082526006908201526510a7aba722a960d11b604082015260600190565b6020808252600b908201526a085055551213d49256915160aa1b604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156125b95784516001600160a01b031683529383019391830191600101612594565b50506001600160a01b03969096166060850152505050608001529392505050565b600082198211156125ed576125ed61267a565b500190565b60008261260f57634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161561262e5761262e61267a565b500290565b6000828210156126455761264561267a565b500390565b60005b8381101561266557818101518382015260200161264d565b83811115612674576000848401525b50505050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b03811681146126bb57600080fd5b50565b80151581146126bb57600080fdfea264697066735822122003dd0dca3087ece4c7c6d520e73a9a1250020714efea80ae174a71d1f771be0464736f6c63430008070033

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

000000000000000000000000145677fc4d9b8f19b5d56d1820c48e0443049a30

-----Decoded View---------------
Arg [0] : _router (address): 0x145677fc4d9b8f19b5d56d1820c48e0443049a30

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000145677fc4d9b8f19b5d56d1820c48e0443049a30


Deployed ByteCode Sourcemap

35195:13502:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37026:60;;;;;;;;;;;;;;;;;;;11607:25:1;;;11595:2;11580:18;37026:60:0;;;;;;;;38765:71;;;;;;;;;;-1:-1:-1;38828:5:0;;;;;;;;;;;;-1:-1:-1;;;38828:5:0;;;;38765:71;;;;;;;:::i;39573:216::-;;;;;;;;;;-1:-1:-1;39573:216:0;;;;;:::i;:::-;;:::i;:::-;;;7686:14:1;;7679:22;7661:41;;7649:2;7634:18;39573:216:0;7521:187:1;45786:98:0;;;;;;;;;;-1:-1:-1;45786:98:0;;;;;:::i;:::-;;:::i;:::-;;39000:88;;;;;;;;;;-1:-1:-1;39073:12:0;;39000:88;;36400:27;;;;;;;;;;;;;;;;42891:378;;;;;;;;;;-1:-1:-1;42891:378:0;;;;;:::i;:::-;;:::i;39171:142::-;;;;;;;;;;;;;:::i;36324:29::-;;;;;;;;;;;;;;;;34565:103;;;;;;;;;;-1:-1:-1;34565:103:0;;;;;:::i;:::-;34620:4;34655:5;-1:-1:-1;;;;;34644:16:0;;;34655:5;;34644:16;;34565:103;38923:71;;;;;;;;;;-1:-1:-1;38923:71:0;;35438:1;13023:36:1;;13011:2;12996:18;38923:71:0;12881:184:1;48268:225:0;;;;;;;;;;;;;:::i;42084:276::-;;;;;;;;;;-1:-1:-1;42084:276:0;;;;;:::i;:::-;;:::i;36288:29::-;;;;;;;;;;;;;;;;35996:44;;;;;;;;;;-1:-1:-1;35996:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;36102:49;;;;;;;;;;-1:-1:-1;36102:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;35838:34;;;;;;;;;;-1:-1:-1;35838:34:0;;;;;;;;42576:139;;;;;;;;;;-1:-1:-1;42576:139:0;;;;;:::i;:::-;;:::i;36927:40::-;;;;;;;;;;-1:-1:-1;36927:40:0;;;;;;;;;;;36210:32;;;;;;;;;;;;;;;;39797:122;;;;;;;;;;-1:-1:-1;39797:122:0;;;;;:::i;:::-;;:::i;41710:366::-;;;;;;;;;;-1:-1:-1;41710:366:0;;;;;:::i;:::-;;:::i;36360:33::-;;;;;;;;;;;;;;;;48501:98;;;;;;;;;;;;;:::i;36575:31::-;;;;;;;;;;-1:-1:-1;36575:31:0;;;;-1:-1:-1;;;;;36575:31:0;;;;;;-1:-1:-1;;;;;6083:32:1;;;6065:51;;6053:2;6038:18;36575:31:0;5919:203:1;39321:105:0;;;;;;;;;;-1:-1:-1;39321:105:0;;;;;:::i;:::-;-1:-1:-1;;;;;39405:18:0;39387:7;39405:18;;;:9;:18;;;;;;;39321:105;48660:28;;;;;;;;;;;;;;;;40719:376;;;;;;;;;;-1:-1:-1;40719:376:0;;;;;:::i;:::-;;:::i;35698:61::-;;;;;;;;;;;;;;;;40215:106;;;;;;;;;;-1:-1:-1;40215:106:0;;;;;:::i;:::-;;:::i;36537:31::-;;;;;;;;;;-1:-1:-1;36537:31:0;;;;-1:-1:-1;;;;;36537:31:0;;;35766:59;;;;;;;;;;;;;;;;36249:32;;;;;;;;;;;;;;;;39094:69;;;;;;;;;;-1:-1:-1;39137:7:0;39155:5;-1:-1:-1;;;;;39155:5:0;39094:69;;36047:48;;;;;;;;;;-1:-1:-1;36047:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;38842:75;;;;;;;;;;-1:-1:-1;38907:7:0;;;;;;;;;;;;-1:-1:-1;;;38907:7:0;;;;38842:75;;36172:31;;;;;;;;;;;;;;;;40449:123;;;;;;;;;;-1:-1:-1;40449:123:0;;;;;:::i;:::-;;:::i;36691:19::-;;;;;;;;;;-1:-1:-1;36691:19:0;;;;-1:-1:-1;;;;;36691:19:0;;;42727:156;;;;;;;;;;-1:-1:-1;42727:156:0;;;;;:::i;:::-;;:::i;42368:200::-;;;;;;;;;;-1:-1:-1;42368:200:0;;;;;:::i;:::-;;:::i;34238:94::-;;;;;;;;;;-1:-1:-1;34238:94:0;;;;;:::i;:::-;;:::i;48627:26::-;;;;;;;;;;;;;;;;36791:46;;;;;;;;;;-1:-1:-1;36791:46:0;;;;;;;-1:-1:-1;;;;;36791:46:0;;;36719:25;;;;;;;;;;;;;;;;36494:36;;;;;;;;;;-1:-1:-1;36494:36:0;;;;-1:-1:-1;;;;;36494:36:0;;;36434;;;;;;;;;;;;;;;;41103:599;;;;;;;;;;-1:-1:-1;41103:599:0;;;;;:::i;:::-;;:::i;40104:103::-;;;;;;;;;;-1:-1:-1;40104:103:0;;;;;:::i;:::-;;:::i;36974:45::-;;;;;;;;;;-1:-1:-1;36974:45:0;;;;;;;;;;;39432:133;;;;;;;;;;-1:-1:-1;39432:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;39534:19:0;;;39516:7;39534:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;39432:133;36613:28;;;;;;;;;;-1:-1:-1;36613:28:0;;;;-1:-1:-1;;;;;36613:28:0;;;40329:108;;;;;;;;;;-1:-1:-1;40329:108:0;;;;;:::i;:::-;;:::i;34408:97::-;;;;;;;;;;-1:-1:-1;34408:97:0;;;;;:::i;:::-;;:::i;34965:173::-;;;;;;;;;;-1:-1:-1;34965:173:0;;;;;:::i;:::-;;:::i;36658:26::-;;;;;;;;;;-1:-1:-1;36658:26:0;;;;-1:-1:-1;;;;;36658:26:0;;;40580:131;;;;;;;;;;-1:-1:-1;40580:131:0;;;;;:::i;:::-;;:::i;34739:107::-;;;;;;;;;;-1:-1:-1;34739:107:0;;;;;:::i;:::-;;:::i;36751:31::-;;;;;;;;;;-1:-1:-1;36751:31:0;;;;;;;;39573:216;39677:10;39648:4;39665:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;39665:32:0;;;;;;;;;;:41;;;39722:37;39648:4;;39665:32;;39722:37;;;;39700:6;11607:25:1;;11595:2;11580:18;;11461:177;39722:37:0;;;;;;;;-1:-1:-1;39777:4:0;39573:216;;;;:::o;45786:98::-;34620:4;34655:5;-1:-1:-1;;;;;34655:5:0;33962:10;34644:16;33946:38;;;;-1:-1:-1;;;33946:38:0;;;;;;;:::i;:::-;;;;;;;;;45853:11:::1;:23:::0;;-1:-1:-1;;45853:23:0::1;::::0;::::1;;::::0;;;::::1;::::0;;45786:98::o;42891:378::-;-1:-1:-1;;;;;43021:19:0;;42991:4;43021:19;;;:11;:19;;;;;;;;43041:10;43021:31;;;;;;;;-1:-1:-1;;43021:52:0;43018:186;;43123:69;;;;;;;;;;;-1:-1:-1;;;43123:69:0;;;;;;;;-1:-1:-1;;;;;43123:19:0;;-1:-1:-1;43123:19:0;;;:11;:19;;;;;43143:10;43123:31;;;;;;;;;;:69;;43159:6;;43123:35;:69::i;:::-;-1:-1:-1;;;;;43089:19:0;;;;;;:11;:19;;;;;;;;43109:10;43089:31;;;;;;;:103;43018:186;43221:40;43235:6;43243:9;43254:6;43221:13;:40::i;:::-;43214:47;;42891:378;;;;;;:::o;39171:142::-;39405:9;:18;;;;35513:42;39224:7;39405:18;;;;;39251:12;;39224:7;;39251:54;;39405:18;;39251:33;;:12;:16;:33::i;:::-;:37;;:54::i;:::-;39244:61;;39171:142;:::o;48268:225::-;34620:4;34655:5;-1:-1:-1;;;;;34655:5:0;33962:10;34644:16;33946:38;;;;-1:-1:-1;;;33946:38:0;;;;;;;:::i;:::-;48360:11:::1;;48341:15;:30;;48333:65;;;::::0;-1:-1:-1;;;48333:65:0;;9869:2:1;48333:65:0::1;::::0;::::1;9851:21:1::0;9908:2;9888:18;;;9881:30;-1:-1:-1;;;9927:18:1;;;9920:52;9989:18;;48333:65:0::1;9667:346:1::0;48333:65:0::1;48454:4;::::0;48447:37:::1;::::0;-1:-1:-1;;;48447:37:0;;48478:4:::1;48447:37;::::0;::::1;6065:51:1::0;48409:76:0::1;::::0;48435:10:::1;::::0;-1:-1:-1;;;;;48454:4:0;;::::1;::::0;48447:22:::1;::::0;6038:18:1;;48447:37:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48416:4;::::0;-1:-1:-1;;;;;48416:4:0::1;::::0;48409:76;:25:::1;:76::i;:::-;48268:225::o:0;42084:276::-;34123:24;34136:10;34123:12;:24::i;:::-;34115:48;;;;-1:-1:-1;;;34115:48:0;;;;;;;:::i;:::-;42216:21:::1;:39:::0;;42266:13:::1;:32:::0;;;;42309:43;::::1;;::::0;::::1;-1:-1:-1::0;;42216:39:0;::::1;;;;42309:43:::0;;;;-1:-1:-1;;42309:43:0;;;;;;;;;;::::1;::::0;;42084:276::o;42576:139::-;34123:24;34136:10;34123:12;:24::i;:::-;34115:48;;;;-1:-1:-1;;;34115:48:0;;;;;;;:::i;:::-;42669:6:::1;42663:3;:12;42655:21;;;::::0;::::1;;42687:14;:20:::0;42576:139::o;39797:122::-;39852:4;39876:35;39884:7;-1:-1:-1;;39876:7:0;:35::i;:::-;39869:42;39797:122;-1:-1:-1;;39797:122:0:o;41710:366::-;34123:24;34136:10;34123:12;:24::i;:::-;34115:48;;;;-1:-1:-1;;;34115:48:0;;;;;;;:::i;:::-;41883:21:::1;:44:::0;;-1:-1:-1;;;;;41883:44:0;;::::1;-1:-1:-1::0;;;;;;41883:44:0;;::::1;;::::0;;;41938:16:::1;:38:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;41987:16:::1;:38:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;42036:13:::1;:32:::0;;;;;::::1;::::0;::::1;;::::0;;41710:366::o;48501:98::-;34620:4;34655:5;-1:-1:-1;;;;;34655:5:0;33962:10;34644:16;33946:38;;;;-1:-1:-1;;;33946:38:0;;;;;;;:::i;:::-;48578:13:::1;;48563:11;;:28;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;48501:98:0:o;40719:376::-;34123:24;34136:10;34123:12;:24::i;:::-;34115:48;;;;-1:-1:-1;;;34115:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;40819:23:0;::::1;40837:4;40819:23;::::0;::::1;::::0;:41:::1;;-1:-1:-1::0;40856:4:0::1;::::0;-1:-1:-1;;;;;40846:14:0;;::::1;40856:4:::0;::::1;40846:14;;40819:41;40811:50;;;::::0;::::1;;-1:-1:-1::0;;;;;40872:24:0;::::1;;::::0;;;:16:::1;:24;::::0;;;;:33;;-1:-1:-1;;40872:33:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;40926:162:::1;;40951:19;::::0;:39:::1;::::0;-1:-1:-1;;;40951:39:0;;-1:-1:-1;;;;;6543:32:1;;;40951:39:0::1;::::0;::::1;6525:51:1::0;40988:1:0::1;6592:18:1::0;;;6585:34;40951:19:0::1;::::0;;::::1;::::0;;::::1;::::0;:28:::1;::::0;6498:18:1;;40951:39:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;40719:376:::0;;:::o;40926:162::-:1;41021:19;::::0;-1:-1:-1;;;;;41058:17:0;;::::1;;::::0;;;:9:::1;:17;::::0;;;;;;;41021:55;;-1:-1:-1;;;41021:55:0;;::::1;::::0;::::1;6525:51:1::0;;;;6592:18;;;6585:34;41021:19:0::1;::::0;;::::1;;::::0;:28:::1;::::0;6498:18:1;;41021:55:0::1;6343:282:1::0;40215:106:0;34123:24;34136:10;34123:12;:24::i;:::-;34115:48;;;;-1:-1:-1;;;34115:48:0;;;;;;;:::i;:::-;40291:10:::1;:22:::0;40215:106::o;40449:123::-;34123:24;34136:10;34123:12;:24::i;:::-;34115:48;;;;-1:-1:-1;;;34115:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;40536:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:28;;-1:-1:-1;;40536:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;40449:123::o;42727:156::-;42807:4;42831:44;42845:10;42857:9;42868:6;42831:13;:44::i;42368:200::-;34123:24;34136:10;34123:12;:24::i;:::-;34115:48;;;;-1:-1:-1;;;34115:48:0;;;;;;;:::i;:::-;42484:19:::1;::::0;:76:::1;::::0;-1:-1:-1;;;42484:76:0;;::::1;::::0;::::1;12802:25:1::0;;;12843:18;;;12836:34;;;42484:19:0::1;::::0;;::::1;-1:-1:-1::0;;;;;42484:19:0::1;::::0;:43:::1;::::0;12775:18:1;;42484:76:0::1;12628:248:1::0;34238:94:0;34620:4;34655:5;-1:-1:-1;;;;;34655:5:0;33962:10;34644:16;33946:38;;;;-1:-1:-1;;;33946:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34298:19:0::1;;::::0;;;34320:4:::1;34298:19;::::0;;;;;;;:26;;-1:-1:-1;;34298:26:0::1;::::0;;::::1;::::0;;34238:94::o;41103:599::-;34123:24;34136:10;34123:12;:24::i;:::-;34115:48;;;;-1:-1:-1;;;34115:48:0;;;;;;;:::i;:::-;41295:12:::1;:24:::0;;;41330:10:::1;:25:::0;;;41366:13:::1;:32:::0;;;41409:13:::1;:32:::0;;;41452:10:::1;:26:::0;;;41489:14:::1;:32:::0;;;41553:82:::1;41343:12:::0;41553:66:::1;41465:13:::0;41553:66;41425:16;41553:66;41310:9;41382:16;41553::::1;:31::i;:::-;:35:::0;::::1;:50::i;:82::-;41542:8;:93:::0;;;41679:14:::1;::::0;41666:28:::1;::::0;41542:93;41666:12:::1;:28::i;:::-;41646:17;:48:::0;-1:-1:-1;;;;;;41103:599:0:o;40104:103::-;34123:24;34136:10;34123:12;:24::i;:::-;34115:48;;;;-1:-1:-1;;;34115:48:0;;;;;;;:::i;:::-;40176:12:::1;:23:::0;40104:103::o;40329:108::-;34123:24;34136:10;34123:12;:24::i;:::-;34115:48;;;;-1:-1:-1;;;34115:48:0;;;;;;;:::i;:::-;40404:14:::1;:25:::0;;-1:-1:-1;;40404:25:0::1;::::0;::::1;;::::0;;;::::1;::::0;;40329:108::o;34408:97::-;34620:4;34655:5;-1:-1:-1;;;;;34655:5:0;33962:10;34644:16;33946:38;;;;-1:-1:-1;;;33946:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34470:19:0::1;34492:5;34470:19:::0;;;:14:::1;:19;::::0;;;;:27;;-1:-1:-1;;34470:27:0::1;::::0;;34408:97::o;34965:173::-;34620:4;34655:5;-1:-1:-1;;;;;34655:5:0;33962:10;34644:16;33946:38;;;;-1:-1:-1;;;33946:38:0;;;;;;;:::i;:::-;35041:5:::1;:11:::0;;-1:-1:-1;;;;;;35041:11:0::1;-1:-1:-1::0;;;;;35041:11:0;::::1;::::0;;::::1;::::0;;35063:19;;;-1:-1:-1;35063:19:0::1;::::0;;;;;;;;:26;;-1:-1:-1;;35063:26:0::1;::::0;;::::1;::::0;;;35105:25;;6065:51:1;;;35105:25:0::1;::::0;6038:18:1;35105:25:0::1;;;;;;;34965:173:::0;:::o;40580:131::-;34123:24;34136:10;34123:12;:24::i;:::-;34115:48;;;;-1:-1:-1;;;34115:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;40671:23:0;;;::::1;;::::0;;;:15:::1;:23;::::0;;;;:32;;-1:-1:-1;;40671:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;40580:131::o;34739:107::-;-1:-1:-1;;;;;34819:19:0;34795:4;34819:19;;;:14;:19;;;;;;;;;34739:107::o;23799:98::-;23857:7;23884:5;23888:1;23884;:5;:::i;26078:240::-;26198:7;26259:12;26251:6;;;;26243:29;;;;-1:-1:-1;;;26243:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;26294:5:0;;;26078:240::o;43277:1712::-;43399:16;;43369:4;;43399:16;;43396:73;;;43425:41;43440:6;43448:9;43459:6;43425:14;:41::i;:::-;43418:48;;;;43396:73;-1:-1:-1;;;;;43485:22:0;;;;;;:14;:22;;;;;;;;43484:23;:53;;;;-1:-1:-1;;;;;;43512:25:0;;;;;;:14;:25;;;;;;;;43511:26;43484:53;43481:128;;;43561:11;;;;43553:44;;;;-1:-1:-1;;;43553:44:0;;9520:2:1;43553:44:0;;;9502:21:1;9559:2;9539:18;;;9532:30;-1:-1:-1;;;9578:18:1;;;9571:50;9638:18;;43553:44:0;9318:344:1;43553:44:0;43639:12;;43629:6;:22;;:49;;;-1:-1:-1;;;;;;43655:23:0;;;;;;:15;:23;;;;;;;;43629:49;43621:79;;;;-1:-1:-1;;;43621:79:0;;8767:2:1;43621:79:0;;;8749:21:1;8806:2;8786:18;;;8779:30;-1:-1:-1;;;8825:18:1;;;8818:47;8882:18;;43621:79:0;8565:341:1;43621:79:0;43730:4;;-1:-1:-1;;;;;43730:4:0;43716:10;:18;;;;:52;;-1:-1:-1;43752:16:0;;;;43751:17;43716:52;:90;;;;-1:-1:-1;43785:21:0;;;;;;;43716:90;:148;;;;-1:-1:-1;43851:13:0;;43841:4;43823:24;;;;:9;:24;;;;;;:41;;43716:148;43713:199;;;43890:10;:8;:10::i;:::-;39994;;:15;;;43927:32;;-1:-1:-1;43955:4:0;;-1:-1:-1;;;;;43942:17:0;;;43955:4;;43942:17;43927:32;43924:117;;;-1:-1:-1;;;;;43984:17:0;;44004:1;43984:17;;;:9;:17;;;;;;43976:30;;;;;;44021:8;40076:12;40063:10;:25;40025:71;44021:8;44100:53;;;;;;;;;;;-1:-1:-1;;;44100:53:0;;;;;;;;-1:-1:-1;;;;;44100:17:0;;-1:-1:-1;44100:17:0;;;:9;:17;;;;;;;;:53;;44122:6;;44100:21;:53::i;:::-;-1:-1:-1;;;;;44080:17:0;;;;;;;:9;:17;;;;;;;;:73;;;;44178:26;;;;;:15;:26;;;;;;;44177:27;:45;;;;-1:-1:-1;44208:14:0;;;;44177:45;44174:141;;;44292:10;;-1:-1:-1;;;;;44256:20:0;;;;;;:9;:20;;;;;;:32;;44281:6;44256:24;:32::i;:::-;:46;;44248:55;;;;;;-1:-1:-1;;;;;44350:19:0;;44327;44350;;;:11;:19;;;;;;;;44349:20;:47;;;;-1:-1:-1;;;;;;44374:22:0;;;;;;:11;:22;;;;;;;;44373:23;44349:47;:93;;44436:6;44349:93;;;44399:34;44407:6;44415:9;44426:6;44399:7;:34::i;:::-;-1:-1:-1;;;;;44476:20:0;;;;;;:9;:20;;;;;;44327:115;;-1:-1:-1;44476:37:0;;44327:115;44476:24;:37::i;:::-;-1:-1:-1;;;;;44453:20:0;;;;;;;:9;:20;;;;;;;;:60;;;;44559:24;;;;;:16;:24;;;;;;;44555:127;;44604:19;;-1:-1:-1;;;;;44641:17:0;;;;;;;:9;:17;;;;;;;;44604:55;;-1:-1:-1;;;44604:55:0;;;;;6525:51:1;;;;6592:18;;;6585:34;44604:19:0;;;;;;:28;;6498:18:1;;44604:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44600:71;;-1:-1:-1;;;;;44698:27:0;;;;;;:16;:27;;;;;;;;44694:137;;44746:19;;-1:-1:-1;;;;;44786:20:0;;;;;;;:9;:20;;;;;;;;44746:61;;-1:-1:-1;;;44746:61:0;;;;;6525:51:1;;;;6592:18;;;6585:34;44746:19:0;;;;;;:28;;6498:18:1;;44746:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44742:77;;44847:19;;44875:14;;44847:43;;-1:-1:-1;;;;;;44847:43:0;;;;;11607:25:1;;;;44847:19:0;;;;-1:-1:-1;;;;;44847:19:0;;:27;;11580:18:1;;44847:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44843:59;44936:9;-1:-1:-1;;;;;44919:40:0;44928:6;-1:-1:-1;;;;;44919:40:0;;44947:11;44919:40;;;;11607:25:1;;11595:2;11580:18;;11461:177;44919:40:0;;;;;;;;-1:-1:-1;44977:4:0;;43277:1712;-1:-1:-1;;;;43277:1712:0:o;24180:98::-;24238:7;24265:5;24269:1;24265;:5;:::i;17711:211::-;17855:58;;;-1:-1:-1;;;;;6543:32:1;;17855:58:0;;;6525:51:1;6592:18;;;;6585:34;;;17855:58:0;;;;;;;;;;6498:18:1;;;;17855:58:0;;;;;;;;-1:-1:-1;;;;;17855:58:0;-1:-1:-1;;;17855:58:0;;;17828:86;;17848:5;;17828:19;:86::i;:::-;17711:211;;;:::o;45001:330::-;45131:53;;;;;;;;;;;-1:-1:-1;;;45131:53:0;;;;;;;;-1:-1:-1;;;;;45131:17:0;;45094:4;45131:17;;;:9;:17;;;;;;;:53;;45153:6;;45131:21;:53::i;:::-;-1:-1:-1;;;;;45111:17:0;;;;;;;:9;:17;;;;;;:73;;;;45218:20;;;;;;;:32;;45243:6;45218:24;:32::i;:::-;-1:-1:-1;;;;;45195:20:0;;;;;;;:9;:20;;;;;;;:55;;;;45266:35;;;;;;;;;;45294:6;11607:25:1;;11595:2;11580:18;;11461:177;45266:35:0;;;;;;;;-1:-1:-1;45319:4:0;45001:330;;;;;:::o;45892:2302::-;37131:16;:23;;-1:-1:-1;;37131:23:0;37150:4;37131:23;;;46001:4:::1;37131:16:::0;45983:24;;;:9:::1;:24;::::0;;;;;46082:8:::1;::::0;46064:12:::1;::::0;45983:24;;37131:16;46044:54:::1;::::0;46096:1:::1;::::0;46044:47:::1;::::0;46082:8;46044:47;;45983:24;;46044:19:::1;:33::i;:::-;:37:::0;::::1;:47::i;:54::-;46018:80:::0;-1:-1:-1;46109:20:0::1;46132:36;:15:::0;46018:80;46132:19:::1;:36::i;:::-;46249:16;::::0;;46263:1:::1;46249:16:::0;;;;;::::1;::::0;;46109:59;;-1:-1:-1;46225:21:0::1;::::0;46249:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;46249:16:0::1;46225:40;;46294:4;46276;46281:1;46276:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;46276:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;46320:6:::1;::::0;:13:::1;::::0;;-1:-1:-1;;;46320:13:0;;;;:6;;;::::1;::::0;:11:::1;::::0;:13:::1;::::0;;::::1;::::0;46276:7;;46320:13;;;;;:6;:13;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46310:4;46315:1;46310:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;46310:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;46369:6:::1;::::0;:188:::1;::::0;-1:-1:-1;;;46369:188:0;;:6;::::1;::::0;:57:::1;::::0;:188:::1;::::0;46441:12;;46369:6:::1;::::0;46484:4;;46511::::1;::::0;46531:15:::1;::::0;46369:188:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;46690:12:0::1;::::0;46623:21:::1;::::0;-1:-1:-1;46603:17:0::1;::::0;-1:-1:-1;46677:33:0::1;::::0;46690:19:::1;::::0;46707:1:::1;46690:16;:19::i;:::-;46677:8;::::0;;:12:::1;:33::i;:::-;46655:55;;46729:26;46758:51;46807:1;46758:44;46790:11;46758:27;46772:12;;46758:9;:13;;:27;;;;:::i;:51::-;46729:80;;46820:27;46850:42;46880:11;46850:25;46864:10;;46850:9;:13;;:25;;;;:::i;:42::-;46820:72;;46903:24;46930:45;46963:11;46930:28;46944:13;;46930:9;:13;;:28;;;;:::i;:45::-;46903:72;;46986:27;47016:45;47049:11;47016:28;47030:13;;47016:9;:13;;:28;;;;:::i;:45::-;46986:75:::0;-1:-1:-1;47072:27:0::1;47102:105;46986:75:::0;47102:80:::1;47162:19:::0;47102:80;47140:16;47102:80;:9;47116:18;47102:13:::1;:33::i;:105::-;47072:135;;47270:19;;;;;;;;;-1:-1:-1::0;;;;;47270:19:0::1;-1:-1:-1::0;;;;;47270:27:0::1;;47305:19;47270:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;47266:73:::0;47349:12:::1;47376:20:::0;;47372:110:::1;;47420:13;::::0;47412:70:::1;::::0;-1:-1:-1;;;;;47420:13:0;;::::1;::::0;47471:5:::1;::::0;47448:16;;47412:70:::1;::::0;;;47448:16;47420:13;47471:5;47412:70:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;47398:84:0;;-1:-1:-1;;47372:110:0::1;47497:23:::0;;47493:119:::1;;47544:16;::::0;47536:76:::1;::::0;-1:-1:-1;;;;;47544:16:0;;::::1;::::0;47601:5:::1;::::0;47575:19;;47536:76:::1;::::0;;;47575:19;47544:16;47601:5;47536:76:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;47522:90:0;;-1:-1:-1;;47493:119:0::1;47627:23:::0;;47623:119:::1;;47674:16;::::0;47666:76:::1;::::0;-1:-1:-1;;;;;47674:16:0;;::::1;::::0;47731:5:::1;::::0;47705:19;;47666:76:::1;::::0;;;47705:19;47674:16;47731:5;47666:76:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;47652:90:0;;-1:-1:-1;;47623:119:0::1;-1:-1:-1::0;47771:5:0::1;47818:19:::0;;47814:373:::1;;47863:6;::::0;48037:21:::1;::::0;47863:244:::1;::::0;-1:-1:-1;;;47863:244:0;;47939:4:::1;47863:244;::::0;::::1;7250:34:1::0;7300:18;;;7293:34;;;47863:6:0::1;7343:18:1::0;;;7336:34;;;7386:18;;;7379:34;-1:-1:-1;;;;;48037:21:0;;::::1;7429:19:1::0;;;7422:44;48077:15:0::1;7482:19:1::0;;;7475:35;47863:6:0;::::1;::::0;:22:::1;::::0;47893:18;;7184:19:1;;47863:244:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;48127:48:0::1;::::0;;12802:25:1;;;12858:2;12843:18;;12836:34;;;48127:48:0::1;::::0;-1:-1:-1;12775:18:1;48127:48:0::1;;;;;;;47814:373;-1:-1:-1::0;;37177:16:0;:24;;-1:-1:-1;;37177:24:0;;;-1:-1:-1;;;;;;;;;;45892:2302:0:o;45339:439::-;45479:4;;45425:7;;;;-1:-1:-1;;;;;45479:17:0;;;:4;;:17;:48;;45519:8;;45479:48;;;45499:17;;45479:48;45455:72;-1:-1:-1;45538:17:0;45558:34;45588:3;45558:25;:6;45455:72;45558:10;:25::i;:34::-;45650:4;45632:24;;;;:9;:24;;;;;;45538:54;;-1:-1:-1;45632:39:0;;45538:54;45632:28;:39::i;:::-;45623:4;45605:24;;;;:9;:24;;;;;;;:66;;;;45687:42;;-1:-1:-1;;;;;45687:42:0;;;;;;;45719:9;11607:25:1;;11595:2;11580:18;;11461:177;45687:42:0;;;;;;;;45749:21;:6;45760:9;45749:10;:21::i;:::-;45742:28;45339:439;-1:-1:-1;;;;;;45339:439:0:o;20284:716::-;20708:23;20734:69;20762:4;20734:69;;;;;;;;;;;;;;;;;20742:5;-1:-1:-1;;;;;20734:27:0;;;:69;;;;;:::i;:::-;20818:17;;20708:95;;-1:-1:-1;20818:21:0;20814:179;;20915:10;20904:30;;;;;;;;;;;;:::i;:::-;20896:85;;;;-1:-1:-1;;;20896:85:0;;10912:2:1;20896:85:0;;;10894:21:1;10951:2;10931:18;;;10924:30;10990:34;10970:18;;;10963:62;-1:-1:-1;;;11041:18:1;;;11034:40;11091:19;;20896:85:0;10710:406:1;24537:98:0;24595:7;24622:5;24626:1;24622;:5;:::i;24936:98::-;24994:7;25021:5;25025:1;25021;:5;:::i;5018:229::-;5155:12;5187:52;5209:6;5217:4;5223:1;5226:12;5155;2535:20;;6425:60;;;;-1:-1:-1;;;6425:60:0;;10554:2:1;6425:60:0;;;10536:21:1;10593:2;10573:18;;;10566:30;10632:31;10612:18;;;10605:59;10681:18;;6425:60:0;10352:353:1;6425:60:0;6499:12;6513:23;6540:6;-1:-1:-1;;;;;6540:11:0;6559:5;6566:4;6540:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6498:73;;;;6589:52;6607:7;6616:10;6628:12;6589:17;:52::i;:::-;6582:59;6138:511;-1:-1:-1;;;;;;;6138:511:0:o;8607:712::-;8757:12;8786:7;8782:530;;;-1:-1:-1;8817:10:0;8810:17;;8782:530;8931:17;;:21;8927:374;;9129:10;9123:17;9190:15;9177:10;9173:2;9169:19;9162:44;8927:374;9272:12;9265:20;;-1:-1:-1;;;9265:20:0;;;;;;;;:::i;14:247:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;181:9;168:23;200:31;225:5;200:31;:::i;266:251::-;336:6;389:2;377:9;368:7;364:23;360:32;357:52;;;405:1;402;395:12;357:52;437:9;431:16;456:31;481:5;456:31;:::i;782:388::-;850:6;858;911:2;899:9;890:7;886:23;882:32;879:52;;;927:1;924;917:12;879:52;966:9;953:23;985:31;1010:5;985:31;:::i;:::-;1035:5;-1:-1:-1;1092:2:1;1077:18;;1064:32;1105:33;1064:32;1105:33;:::i;:::-;1157:7;1147:17;;;782:388;;;;;:::o;1175:671::-;1261:6;1269;1277;1285;1338:3;1326:9;1317:7;1313:23;1309:33;1306:53;;;1355:1;1352;1345:12;1306:53;1394:9;1381:23;1413:31;1438:5;1413:31;:::i;:::-;1463:5;-1:-1:-1;1520:2:1;1505:18;;1492:32;1533:33;1492:32;1533:33;:::i;:::-;1585:7;-1:-1:-1;1644:2:1;1629:18;;1616:32;1657:33;1616:32;1657:33;:::i;:::-;1709:7;-1:-1:-1;1768:2:1;1753:18;;1740:32;1781:33;1740:32;1781:33;:::i;:::-;1175:671;;;;-1:-1:-1;1175:671:1;;-1:-1:-1;;1175:671:1:o;1851:456::-;1928:6;1936;1944;1997:2;1985:9;1976:7;1972:23;1968:32;1965:52;;;2013:1;2010;2003:12;1965:52;2052:9;2039:23;2071:31;2096:5;2071:31;:::i;:::-;2121:5;-1:-1:-1;2178:2:1;2163:18;;2150:32;2191:33;2150:32;2191:33;:::i;:::-;1851:456;;2243:7;;-1:-1:-1;;;2297:2:1;2282:18;;;;2269:32;;1851:456::o;2312:382::-;2377:6;2385;2438:2;2426:9;2417:7;2413:23;2409:32;2406:52;;;2454:1;2451;2444:12;2406:52;2493:9;2480:23;2512:31;2537:5;2512:31;:::i;:::-;2562:5;-1:-1:-1;2619:2:1;2604:18;;2591:32;2632:30;2591:32;2632:30;:::i;2699:315::-;2767:6;2775;2828:2;2816:9;2807:7;2803:23;2799:32;2796:52;;;2844:1;2841;2834:12;2796:52;2883:9;2870:23;2902:31;2927:5;2902:31;:::i;:::-;2952:5;3004:2;2989:18;;;;2976:32;;-1:-1:-1;;;2699:315:1:o;3019:241::-;3075:6;3128:2;3116:9;3107:7;3103:23;3099:32;3096:52;;;3144:1;3141;3134:12;3096:52;3183:9;3170:23;3202:28;3224:5;3202:28;:::i;3265:245::-;3332:6;3385:2;3373:9;3364:7;3360:23;3356:32;3353:52;;;3401:1;3398;3391:12;3353:52;3433:9;3427:16;3452:28;3474:5;3452:28;:::i;3515:444::-;3586:6;3594;3602;3655:2;3643:9;3634:7;3630:23;3626:32;3623:52;;;3671:1;3668;3661:12;3623:52;3710:9;3697:23;3729:28;3751:5;3729:28;:::i;:::-;3776:5;-1:-1:-1;3828:2:1;3813:18;;3800:32;;-1:-1:-1;3884:2:1;3869:18;;3856:32;3897:30;3856:32;3897:30;:::i;:::-;3946:7;3936:17;;;3515:444;;;;;:::o;3964:180::-;4023:6;4076:2;4064:9;4055:7;4051:23;4047:32;4044:52;;;4092:1;4089;4082:12;4044:52;-1:-1:-1;4115:23:1;;3964:180;-1:-1:-1;3964:180:1:o;4149:184::-;4219:6;4272:2;4260:9;4251:7;4247:23;4243:32;4240:52;;;4288:1;4285;4278:12;4240:52;-1:-1:-1;4311:16:1;;4149:184;-1:-1:-1;4149:184:1:o;4338:248::-;4406:6;4414;4467:2;4455:9;4446:7;4442:23;4438:32;4435:52;;;4483:1;4480;4473:12;4435:52;-1:-1:-1;;4506:23:1;;;4576:2;4561:18;;;4548:32;;-1:-1:-1;4338:248:1:o;4591:306::-;4679:6;4687;4695;4748:2;4736:9;4727:7;4723:23;4719:32;4716:52;;;4764:1;4761;4754:12;4716:52;4793:9;4787:16;4777:26;;4843:2;4832:9;4828:18;4822:25;4812:35;;4887:2;4876:9;4872:18;4866:25;4856:35;;4591:306;;;;;:::o;4902:523::-;5006:6;5014;5022;5030;5038;5046;5099:3;5087:9;5078:7;5074:23;5070:33;5067:53;;;5116:1;5113;5106:12;5067:53;-1:-1:-1;;5139:23:1;;;5209:2;5194:18;;5181:32;;-1:-1:-1;5260:2:1;5245:18;;5232:32;;5311:2;5296:18;;5283:32;;-1:-1:-1;5362:3:1;5347:19;;5334:33;;-1:-1:-1;5414:3:1;5399:19;5386:33;;-1:-1:-1;4902:523:1;-1:-1:-1;4902:523:1:o;5430:274::-;5559:3;5597:6;5591:13;5613:53;5659:6;5654:3;5647:4;5639:6;5635:17;5613:53;:::i;:::-;5682:16;;;;;5430:274;-1:-1:-1;;5430:274:1:o;8177:383::-;8326:2;8315:9;8308:21;8289:4;8358:6;8352:13;8401:6;8396:2;8385:9;8381:18;8374:34;8417:66;8476:6;8471:2;8460:9;8456:18;8451:2;8443:6;8439:15;8417:66;:::i;:::-;8544:2;8523:15;-1:-1:-1;;8519:29:1;8504:45;;;;8551:2;8500:54;;8177:383;-1:-1:-1;;8177:383:1:o;10018:329::-;10220:2;10202:21;;;10259:1;10239:18;;;10232:29;-1:-1:-1;;;10292:2:1;10277:18;;10270:36;10338:2;10323:18;;10018:329::o;11121:335::-;11323:2;11305:21;;;11362:2;11342:18;;;11335:30;-1:-1:-1;;;11396:2:1;11381:18;;11374:41;11447:2;11432:18;;11121:335::o;11643:980::-;11905:4;11953:3;11942:9;11938:19;11984:6;11973:9;11966:25;12010:2;12048:6;12043:2;12032:9;12028:18;12021:34;12091:3;12086:2;12075:9;12071:18;12064:31;12115:6;12150;12144:13;12181:6;12173;12166:22;12219:3;12208:9;12204:19;12197:26;;12258:2;12250:6;12246:15;12232:29;;12279:1;12289:195;12303:6;12300:1;12297:13;12289:195;;;12368:13;;-1:-1:-1;;;;;12364:39:1;12352:52;;12459:15;;;;12424:12;;;;12400:1;12318:9;12289:195;;;-1:-1:-1;;;;;;;12540:32:1;;;;12535:2;12520:18;;12513:60;-1:-1:-1;;;12604:3:1;12589:19;12582:35;12501:3;11643:980;-1:-1:-1;;;11643:980:1:o;13070:128::-;13110:3;13141:1;13137:6;13134:1;13131:13;13128:39;;;13147:18;;:::i;:::-;-1:-1:-1;13183:9:1;;13070:128::o;13203:217::-;13243:1;13269;13259:132;;13313:10;13308:3;13304:20;13301:1;13294:31;13348:4;13345:1;13338:15;13376:4;13373:1;13366:15;13259:132;-1:-1:-1;13405:9:1;;13203:217::o;13425:168::-;13465:7;13531:1;13527;13523:6;13519:14;13516:1;13513:21;13508:1;13501:9;13494:17;13490:45;13487:71;;;13538:18;;:::i;:::-;-1:-1:-1;13578:9:1;;13425:168::o;13598:125::-;13638:4;13666:1;13663;13660:8;13657:34;;;13671:18;;:::i;:::-;-1:-1:-1;13708:9:1;;13598:125::o;13728:258::-;13800:1;13810:113;13824:6;13821:1;13818:13;13810:113;;;13900:11;;;13894:18;13881:11;;;13874:39;13846:2;13839:10;13810:113;;;13941:6;13938:1;13935:13;13932:48;;;13976:1;13967:6;13962:3;13958:16;13951:27;13932:48;;13728:258;;;:::o;13991:127::-;14052:10;14047:3;14043:20;14040:1;14033:31;14083:4;14080:1;14073:15;14107:4;14104:1;14097:15;14123:127;14184:10;14179:3;14175:20;14172:1;14165:31;14215:4;14212:1;14205:15;14239:4;14236:1;14229:15;14387:131;-1:-1:-1;;;;;14462:31:1;;14452:42;;14442:70;;14508:1;14505;14498:12;14442:70;14387:131;:::o;14523:118::-;14609:5;14602:13;14595:21;14588:5;14585:32;14575:60;;14631:1;14628;14621:12

Swarm Source

ipfs://95b9d8632f01c084afda7f4cacfe9bb3e11ad996b5281822ad0e379257f013e9
Loading