ETH Price: $2,930.96 (-9.56%)
Gas: 49 Gwei

Token

Gambler Shiba (GSHIBA)
 

Overview

Max Total Supply

1,000,000,000,000 GSHIBA

Holders

1,243 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
17,780,312.553081047102212203 GSHIBA

Value
$0.00
0x2978903810bfb20f8528a2239e2bad3aad2a5f45
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Gambler Shiba is a gambling token to give fair rewards to holders based on their commitment to GSHIBA.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
GamblerShiba

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 9999 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-07-21
*/

// SPDX-License-Identifier: Unlicensed

pragma solidity ^0.6.12;


// 
/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with GSN meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address payable) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

// 
/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () internal {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

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

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

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

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

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

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

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

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

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

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

// 
/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
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) {
        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) {
        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) {
        // 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) {
        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) {
        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) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b <= a, "SafeMath: subtraction overflow");
        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) {
        if (a == 0) return 0;
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b > 0, "SafeMath: division by zero");
        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) {
        require(b > 0, "SafeMath: modulo by zero");
        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) {
        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.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryDiv}.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        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) {
        require(b > 0, errorMessage);
        return a % b;
    }
}

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

interface IUniswapV2Router02 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

// 
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) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

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

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (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");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        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

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

// 
/**
 * @dev Library for managing
 * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive
 * types.
 *
 * Sets have the following properties:
 *
 * - Elements are added, removed, and checked for existence in constant time
 * (O(1)).
 * - Elements are enumerated in O(n). No guarantees are made on the ordering.
 *
 * ```
 * contract Example {
 *     // Add the library methods
 *     using EnumerableSet for EnumerableSet.AddressSet;
 *
 *     // Declare a set state variable
 *     EnumerableSet.AddressSet private mySet;
 * }
 * ```
 *
 * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`)
 * and `uint256` (`UintSet`) are supported.
 */
library EnumerableSet {
    // To implement this library for multiple types with as little code
    // repetition as possible, we write it in terms of a generic Set type with
    // bytes32 values.
    // The Set implementation uses private functions, and user-facing
    // implementations (such as AddressSet) are just wrappers around the
    // underlying Set.
    // This means that we can only create new EnumerableSets for types that fit
    // in bytes32.

    struct Set {
        // Storage of set values
        bytes32[] _values;
        // Position of the value in the `values` array, plus 1 because index 0
        // means a value is not in the set.
        mapping(bytes32 => uint256) _indexes;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function _add(Set storage set, bytes32 value) private returns (bool) {
        if (!_contains(set, value)) {
            set._values.push(value);
            // The value is stored at length-1, but we add 1 to all indexes
            // and use 0 as a sentinel value
            set._indexes[value] = set._values.length;
            return true;
        } else {
            return false;
        }
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function _remove(Set storage set, bytes32 value) private returns (bool) {
        // We read and store the value's index to prevent multiple reads from the same storage slot
        uint256 valueIndex = set._indexes[value];

        if (valueIndex != 0) {
            // Equivalent to contains(set, value)
            // To delete an element from the _values array in O(1), we swap the element to delete with the last one in
            // the array, and then remove the last element (sometimes called as 'swap and pop').
            // This modifies the order of the array, as noted in {at}.

            uint256 toDeleteIndex = valueIndex - 1;
            uint256 lastIndex = set._values.length - 1;

            if (lastIndex != toDeleteIndex) {
                bytes32 lastvalue = set._values[lastIndex];

                // Move the last value to the index where the value to delete is
                set._values[toDeleteIndex] = lastvalue;
                // Update the index for the moved value
                set._indexes[lastvalue] = valueIndex; // Replace lastvalue's index to valueIndex
            }

            // Delete the slot where the moved value was stored
            set._values.pop();

            // Delete the index for the deleted slot
            delete set._indexes[value];

            return true;
        } else {
            return false;
        }
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function _contains(Set storage set, bytes32 value) private view returns (bool) {
        return set._indexes[value] != 0;
    }

    /**
     * @dev Returns the number of values on the set. O(1).
     */
    function _length(Set storage set) private view returns (uint256) {
        return set._values.length;
    }

    /**
     * @dev Returns the value stored at position `index` in the set. O(1).
     *
     * Note that there are no guarantees on the ordering of values inside the
     * array, and it may change when more values are added or removed.
     *
     * Requirements:
     *
     * - `index` must be strictly less than {length}.
     */
    function _at(Set storage set, uint256 index) private view returns (bytes32) {
        return set._values[index];
    }

    /**
     * @dev Return the entire set in an array
     *
     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed
     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that
     * this function has an unbounded cost, and using it as part of a state-changing function may render the function
     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.
     */
    function _values(Set storage set) private view returns (bytes32[] memory) {
        return set._values;
    }

    // Bytes32Set

    struct Bytes32Set {
        Set _inner;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _add(set._inner, value);
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _remove(set._inner, value);
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {
        return _contains(set._inner, value);
    }

    /**
     * @dev Returns the number of values in the set. O(1).
     */
    function length(Bytes32Set storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    /**
     * @dev Returns the value stored at position `index` in the set. O(1).
     *
     * Note that there are no guarantees on the ordering of values inside the
     * array, and it may change when more values are added or removed.
     *
     * Requirements:
     *
     * - `index` must be strictly less than {length}.
     */
    function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {
        return _at(set._inner, index);
    }

    /**
     * @dev Return the entire set in an array
     *
     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed
     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that
     * this function has an unbounded cost, and using it as part of a state-changing function may render the function
     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.
     */
    function values(Bytes32Set storage set) internal view returns (bytes32[] memory) {
        return _values(set._inner);
    }

    // AddressSet

    struct AddressSet {
        Set _inner;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function add(AddressSet storage set, address value) internal returns (bool) {
        return _add(set._inner, bytes32(uint256(uint160(value))));
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function remove(AddressSet storage set, address value) internal returns (bool) {
        return _remove(set._inner, bytes32(uint256(uint160(value))));
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function contains(AddressSet storage set, address value) internal view returns (bool) {
        return _contains(set._inner, bytes32(uint256(uint160(value))));
    }

    /**
     * @dev Returns the number of values in the set. O(1).
     */
    function length(AddressSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    /**
     * @dev Returns the value stored at position `index` in the set. O(1).
     *
     * Note that there are no guarantees on the ordering of values inside the
     * array, and it may change when more values are added or removed.
     *
     * Requirements:
     *
     * - `index` must be strictly less than {length}.
     */
    function at(AddressSet storage set, uint256 index) internal view returns (address) {
        return address(uint160(uint256(_at(set._inner, index))));
    }

    /**
     * @dev Return the entire set in an array
     *
     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed
     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that
     * this function has an unbounded cost, and using it as part of a state-changing function may render the function
     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.
     */
    function values(AddressSet storage set) internal view returns (address[] memory) {
        bytes32[] memory store = _values(set._inner);
        address[] memory result;

        assembly {
            result := store
        }

        return result;
    }

    // UintSet

    struct UintSet {
        Set _inner;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function add(UintSet storage set, uint256 value) internal returns (bool) {
        return _add(set._inner, bytes32(value));
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function remove(UintSet storage set, uint256 value) internal returns (bool) {
        return _remove(set._inner, bytes32(value));
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function contains(UintSet storage set, uint256 value) internal view returns (bool) {
        return _contains(set._inner, bytes32(value));
    }

    /**
     * @dev Returns the number of values on the set. O(1).
     */
    function length(UintSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    /**
     * @dev Returns the value stored at position `index` in the set. O(1).
     *
     * Note that there are no guarantees on the ordering of values inside the
     * array, and it may change when more values are added or removed.
     *
     * Requirements:
     *
     * - `index` must be strictly less than {length}.
     */
    function at(UintSet storage set, uint256 index) internal view returns (uint256) {
        return uint256(_at(set._inner, index));
    }

    /**
     * @dev Return the entire set in an array
     *
     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed
     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that
     * this function has an unbounded cost, and using it as part of a state-changing function may render the function
     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.
     */
    function values(UintSet storage set) internal view returns (uint256[] memory) {
        bytes32[] memory store = _values(set._inner);
        uint256[] memory result;

        assembly {
            result := store
        }

        return result;
    }
}

// 
abstract contract GShibaRNG is Ownable {
    /**
    * Tiers
    * 0 - Platinum
    * 1 - Gold
    * 2 - Silver
    * 3 - Bronze
     */
    using SafeMath for uint256;
    using EnumerableSet for EnumerableSet.AddressSet;

    address payable public platinumWinner;
    address payable public goldWinner;
    address payable public silverWinner;
    address payable public bronzeWinner;
    
    EnumerableSet.AddressSet platinumSet;
    EnumerableSet.AddressSet goldSet;
    EnumerableSet.AddressSet silverSet;
    EnumerableSet.AddressSet bronzeSet;

    EnumerableSet.AddressSet[] gamblingWallets;

    uint256 public platinumMinWeight = 2 * 10 ** 5;
    uint256 public goldMinWeight = 10 ** 5;
    uint256 public silverMinWeight = 5 * 10 ** 4;

    mapping(address => uint256) public gamblingWeights;
    mapping(address => uint256) public ethAmounts;
    mapping(address => bool) public excludedFromGambling;
    mapping(address => bool) public isEthAmountNegative;

    IUniswapV2Router02 public uniswapV2Router;

    uint256 public feeMin = 0.1 * 10 ** 18;
    uint256 public feeMax = 0.3 * 10 ** 18;
    uint256 internal lastTotalFee;

    uint256 public ethWeight = 10 ** 10;

    mapping(address => bool) isGoverner;
    address[] governers;

    event newWinnersSelected(uint256 timestamp, address platinumWinner, address goldWinner, address silverWinner, address bronzeWinner, 
        uint256 platinumEthAmount, uint256 goldEthAmount, uint256 silverEthAmount, uint256 bronzeEthAmount,
        uint256 platinumGShibaAmount, uint256 goldGShibaAmount, uint256 silverGShibaAmount, uint256 bronzeGShibaAmount,
        uint256 lastTotalFee);

    modifier onlyGoverner() {
        require(isGoverner[_msgSender()], "Not governer");
        _;
    }

    constructor(address payable _initialWinner) public
    {
        platinumWinner = _initialWinner;
        goldWinner = _initialWinner;
        silverWinner = _initialWinner;
        bronzeWinner = _initialWinner;
        
        platinumSet.add(_initialWinner);
        goldSet.add(_initialWinner);
        silverSet.add(_initialWinner);
        bronzeSet.add(_initialWinner);

        gamblingWallets.push(platinumSet);
        gamblingWallets.push(goldSet);
        gamblingWallets.push(silverSet);
        gamblingWallets.push(bronzeSet);

        uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); // UniswapV2 for Ethereum network

        isGoverner[owner()] = true;
        governers.push(owner());
    }

    function checkTierFromWeight(uint256 weight)
        public
        view
        returns(uint256)
    {
        if (weight > platinumMinWeight) {
            return 0;
        }
        if (weight > goldMinWeight) {
            return 1;
        }
        if (weight > silverMinWeight) {
            return 2;
        }
        return 3;
    }

    function calcWeight(uint256 ethAmount, uint256 gShibaAmount) public view returns(uint256) {
        return ethAmount.div(10 ** 13) + gShibaAmount.div(10 ** 13).div(ethWeight);
    }

    function addNewWallet(address _account, uint256 tier) internal {
        gamblingWallets[tier].add(_account);
    }

    function removeWallet(address _account, uint256 tier) internal {
        gamblingWallets[tier].remove(_account);
    }

    function addWalletToGamblingList(address _account, uint256 _amount) internal {
        if (!excludedFromGambling[_account]) {
            address[] memory path = new address[](2);
            path[0] = uniswapV2Router.WETH();
            path[1] = address(this);
            
            uint256 ethAmount = uniswapV2Router.getAmountsIn(_amount, path)[0];
            
            uint256 oldWeight = gamblingWeights[_account];

            if (isEthAmountNegative[_account]) {
                if (ethAmount > ethAmounts[_account]) {
                    ethAmounts[_account] = ethAmount - ethAmounts[_account];
                    isEthAmountNegative[_account] = false;

                    gamblingWeights[_account] = calcWeight(ethAmounts[_account], IERC20(address(this)).balanceOf(_account) + _amount);
                } else {
                    ethAmounts[_account] = ethAmounts[_account] - ethAmount;
                    gamblingWeights[_account] = 0;
                }
            } else {
                ethAmounts[_account] += ethAmount;

                gamblingWeights[_account] = calcWeight(ethAmounts[_account], IERC20(address(this)).balanceOf(_account) + _amount);
            }

            if (!isEthAmountNegative[_account]) {
                uint256 oldTier = checkTierFromWeight(oldWeight);
                uint256 newTier = checkTierFromWeight(gamblingWeights[_account]);

                if (oldTier != newTier) {
                    removeWallet(_account, oldTier);
                }

                addNewWallet(_account, newTier);
            }
        }
    }

    function removeWalletFromGamblingList(address _account, uint256 _amount) internal {
        if (!excludedFromGambling[_account]) {
            address[] memory path = new address[](2);
            path[0] = uniswapV2Router.WETH();
            path[1] = address(this);
            
            uint256 ethAmount = uniswapV2Router.getAmountsIn(_amount, path)[0];

            uint256 oldWeight = gamblingWeights[_account];

            if (isEthAmountNegative[_account]) {
                ethAmounts[_account] += ethAmount;
                gamblingWeights[_account] = 0;
            } else if (ethAmounts[_account] >= ethAmount) {
                ethAmounts[_account] -= ethAmount;
                gamblingWeights[_account] = calcWeight(ethAmounts[_account], IERC20(address(this)).balanceOf(_account));
            } else {
                ethAmounts[_account] = ethAmount - ethAmounts[_account];
                isEthAmountNegative[_account] = true;
                gamblingWeights[_account] = 0;
            }

            uint256 oldTier = checkTierFromWeight(oldWeight);
            removeWallet(_account, oldTier);
        }
    }

    function rand(uint256 max)
        private
        view
        returns(uint256)
    {
        if (max == 1) {
            return 0;
        }

        uint256 seed = uint256(keccak256(abi.encodePacked(
            block.timestamp + block.difficulty +
            ((uint256(keccak256(abi.encodePacked(block.coinbase)))) / (now)) +
            block.gaslimit +
            ((uint256(keccak256(abi.encodePacked(msg.sender)))) / (now)) +
            block.number
        )));

        return (seed - ((seed / (max - 1)) * (max - 1))) + 1;
    }

    function checkAndChangeGamblingWinner() internal {
        uint256 randFee = rand(feeMax - feeMin) + feeMin;

        if (lastTotalFee >= randFee) {
            uint256 platinumWinnerIndex = rand(gamblingWallets[0].length());
            uint256 goldWinnerIndex = rand(gamblingWallets[1].length());
            uint256 silverWinnerIndex = rand(gamblingWallets[2].length());
            uint256 bronzeWinnerIndex = rand(gamblingWallets[3].length());

            platinumWinner = payable(gamblingWallets[0].at(platinumWinnerIndex));
            goldWinner = payable(gamblingWallets[1].at(goldWinnerIndex));
            silverWinner = payable(gamblingWallets[2].at(silverWinnerIndex));
            bronzeWinner = payable(gamblingWallets[3].at(bronzeWinnerIndex));

            emit newWinnersSelected(
                block.timestamp, platinumWinner, goldWinner, silverWinner, bronzeWinner, 
                ethAmounts[platinumWinner], ethAmounts[goldWinner], ethAmounts[silverWinner], ethAmounts[bronzeWinner],
                IERC20(address(this)).balanceOf(platinumWinner), IERC20(address(this)).balanceOf(goldWinner), IERC20(address(this)).balanceOf(silverWinner), IERC20(address(this)).balanceOf(bronzeWinner),
                lastTotalFee
            );
        }
    }

    /**
    * Mutations
     */

    function setEthWeight(uint256 _ethWeight) external onlyGoverner {
        ethWeight = _ethWeight;
    }

    function setTierWeights(uint256 _platinumMin, uint256 _goldMin, uint256 _silverMin) external onlyGoverner {
        require(_platinumMin > _goldMin && _goldMin > _silverMin, "Weights should be descending order");

        platinumMinWeight = _platinumMin;
        goldMinWeight = _goldMin;
        silverMinWeight = _silverMin;
    }

    function setFeeMinMax(uint256 _feeMin, uint256 _feeMax) external onlyGoverner {
        require(_feeMin < _feeMax, "feeMin should be smaller than feeMax");

        feeMin = _feeMin;
        feeMax = _feeMax;
    }

    function addGoverner(address _governer) public onlyGoverner {
        if (!isGoverner[_governer]) {
            isGoverner[_governer] = true;
            governers.push(_governer);
        }
    }

    function removeGoverner(address _governer) external onlyGoverner {
        if (isGoverner[_governer]) {
            isGoverner[_governer] = false;

            for (uint i = 0; i < governers.length; i ++) {
                if (governers[i] == _governer) {
                    governers[i] = governers[governers.length - 1];
                    governers.pop();
                    break;
                }
            }
        }
    }

    function addV1Users(address[] memory _users) external onlyOwner {
        uint256 len = _users.length;

        for (uint i = 0; i < len; i ++) {
            address user = _users[i];

            uint256 gShibabalance = IERC20(address(this)).balanceOf(user);
            uint256 ethAmount = gShibabalance.div(10 ** 10);

            uint256 weight = calcWeight(ethAmount, gShibabalance);
            uint256 tier = checkTierFromWeight(weight);

            gamblingWallets[tier].add(user);
            ethAmounts[user] = ethAmount;
            gamblingWeights[user] = weight;
        }
    }
}

/*                                                                                                                                                                                       
Gambler Shiba
https://t.me/gshiba_official

More info:

    * Instead of giving equal weights to all users, we give weights based on their purchase token amount and contributed ETH amount
    * If you sell or transfer tokens to other wallets, you lose your ticket, but as soon as you buy again you regain your ticket
    * There's no min eligible amount. Even if you buy 1 token, you have the very little chance to get rewarded.
*/
// 
// Contract implementation
contract GamblerShiba is IERC20, Ownable, GShibaRNG {
    using SafeMath for uint256;
    using Address for address;

    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => uint256) public timestamp;

    uint256 private eligibleRNG = block.timestamp;

    mapping (address => bool) private _isExcludedFromFee;

    mapping (address => bool) private _isBlackListedBot;

    uint256 private _tTotal = 1000000000000 * 10 ** 18;  //1,000,000,000,000

    uint256 public _coolDown = 30 seconds;

    string private _name = 'Gambler Shiba';
    string private _symbol = 'GSHIBA';
    uint8 private _decimals = 18;
    
    uint256 public _devFee = 12;
    uint256 private _previousdevFee = _devFee;

    address payable private _feeWalletAddress;
    
    address public uniswapV2Pair;

    bool inSwap = false;
    bool public swapEnabled = true;
    bool public feeEnabled = true;
    
    bool public tradingEnabled = false;
    bool public cooldownEnabled = true;

    uint256 public _maxTxAmount = _tTotal / 400;
    uint256 private _numOfTokensToExchangeFordev = 5000000000000000;

    address public migrator;

    event SwapEnabledUpdated(bool enabled);

    modifier lockTheSwap {
        inSwap = true;
        _;
        inSwap = false;
    }

    constructor (address payable feeWalletAddress)
        GShibaRNG(feeWalletAddress)
        public
    {
        _feeWalletAddress = feeWalletAddress;
        _tOwned[_msgSender()] = _tTotal;

        // Create a uniswap pair for this new token
        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory())
            .createPair(address(this), uniswapV2Router.WETH());

        // Exclude owner and this contract from fee
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;

        // Excluded gshiba, pair, owner from gambling list
        excludedFromGambling[address(this)] = true;
        excludedFromGambling[uniswapV2Pair] = true;
        excludedFromGambling[owner()] = true;

        emit Transfer(address(0), _msgSender(), _tTotal);
    }

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

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

    function decimals() public view returns (uint8) {
        return _decimals;
    }

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

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

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

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

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

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }
    
    function isBlackListed(address account) public view returns (bool) {
        return _isBlackListedBot[account];
    }

    function setExcludeFromFee(address account, bool excluded) external onlyGoverner {
        _isExcludedFromFee[account] = excluded;
    }

    function addBotToBlackList(address account) external onlyOwner() {
        require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not blacklist Uniswap router.');
        require(!_isBlackListedBot[account], "Account is already blacklisted");
        _isBlackListedBot[account] = true;
    }
    
    function addBotsToBlackList(address[] memory bots) external onlyOwner() {
        for (uint i = 0; i < bots.length; i++) {
            _isBlackListedBot[bots[i]] = true;
        }
    }

    function removeBotFromBlackList(address account) external onlyOwner() {
        require(_isBlackListedBot[account], "Account is not blacklisted");
        _isBlackListedBot[account] = false;
    }

    function removeAllFee() private {
        if(_devFee == 0) return;
        _previousdevFee = _devFee;
        _devFee = 0;
    }

    function restoreAllFee() private {
        _devFee = _previousdevFee;
    }

    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }
    
    function setMaxTxPercent(uint256 maxTxPercent) external onlyOwner() {
        _maxTxAmount = _tTotal.mul(maxTxPercent).div(
            10**2
        );
    }
    
    function setMaxTxAmount(uint256 maxTx) external onlyOwner() {
        _maxTxAmount = maxTx;
    }

    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

    function _transfer(address sender, address recipient, uint256 amount) private {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(!_isBlackListedBot[recipient], "Go away");
        require(!_isBlackListedBot[sender], "Go away");

        if(sender != owner() && recipient != owner() && sender != migrator && recipient != migrator) {
            require(amount <= _maxTxAmount, "Transfer amount exceeds the max amount.");

            // You can't trade this yet until trading enabled, be patient 
            if (sender == uniswapV2Pair || recipient == uniswapV2Pair) {
                require(tradingEnabled, "Trading is not enabled");
            }
        }

        // Cooldown
        if(cooldownEnabled) {
            if (sender == uniswapV2Pair ) {
                // They just bought so add cooldown
                timestamp[recipient] = block.timestamp.add(_coolDown);
            }

            // exclude owner and uniswap
            if(sender != owner() && sender != uniswapV2Pair) {
                require(block.timestamp >= timestamp[sender], "Cooldown");
            }
        }

        if (sender == uniswapV2Pair) {
            if (recipient != owner() && feeEnabled) {
                addWalletToGamblingList(recipient, amount);
            }
        }

        // rest of the standard shit below

        uint256 contractTokenBalance = balanceOf(address(this));

        if (contractTokenBalance >= _maxTxAmount) {
            contractTokenBalance = _maxTxAmount;
        }

        bool overMinTokenBalance = contractTokenBalance >= _numOfTokensToExchangeFordev;
        if (!inSwap && swapEnabled && overMinTokenBalance && sender != uniswapV2Pair) {
            // We need to swap the current tokens to ETH and send to the dev wallet
            swapTokensForEth(contractTokenBalance);

            uint256 contractETHBalance = address(this).balance;
            if(contractETHBalance > 0) {
                sendETHTodev(address(this).balance);
            }
        }
        
        //indicates if fee should be deducted from transfer
        bool takeFee = true;

        //if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFee[sender] || _isExcludedFromFee[recipient]){
            takeFee = false;
        }

        // transfer amount, it will take tax and dev fee
        _tokenTransfer(sender, recipient, amount, takeFee);
    }

    function swapTokensForEth(uint256 tokenAmount) private lockTheSwap {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }
    
    function sendETHTodev(uint256 amount) private {
        if (block.timestamp >= eligibleRNG) {
            checkAndChangeGamblingWinner();
        }

        uint256 winnerReward = amount.div(30);

        lastTotalFee += winnerReward;

        platinumWinner.transfer(winnerReward.mul(4));
        goldWinner.transfer(winnerReward.mul(3));
        silverWinner.transfer(winnerReward.mul(2));
        bronzeWinner.transfer(winnerReward.mul(1));

        _feeWalletAddress.transfer(amount.mul(2).div(3));
    }
    
    // We are exposing these functions to be able to manual swap and send
    // in case the token is highly valued and 5M becomes too much
    function manualSwap() external onlyGoverner {
        uint256 contractBalance = balanceOf(address(this));
        swapTokensForEth(contractBalance);
    }
    
    function manualSend() external onlyGoverner {
        uint256 contractETHBalance = address(this).balance;
        sendETHTodev(contractETHBalance);
    }

    function setSwapEnabled(bool enabled) external onlyOwner(){
        swapEnabled = enabled;
        emit SwapEnabledUpdated(enabled);
    }    
    
    function _tokenTransfer(address sender, address recipient, uint256 amount, bool takeFee) private {
        if(!takeFee)
            removeAllFee();

        _transferStandard(sender, recipient, amount);

        if(!takeFee)
            restoreAllFee();
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        uint256 tdev = tAmount.mul(_devFee).div(100);
        uint256 transferAmount = tAmount.sub(tdev);

        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _tOwned[recipient] = _tOwned[recipient].add(transferAmount);
        
        // Stop wallets from trying to stay in gambling by transferring to other wallets
        removeWalletFromGamblingList(sender, tAmount);
        
        _takedev(tdev); 
        emit Transfer(sender, recipient, transferAmount);
    }

    function _takedev(uint256 tdev) private {
        _tOwned[address(this)] = _tOwned[address(this)].add(tdev);
    }

        //to recieve ETH from uniswapV2Router when swaping
    receive() external payable {}

    function _getMaxTxAmount() private view returns(uint256) {
        return _maxTxAmount;
    }

    function _getETHBalance() public view returns(uint256 balance) {
        return address(this).balance;
    }
    
    function allowDex(bool _tradingEnabled) external onlyOwner() {
        tradingEnabled = _tradingEnabled;
        eligibleRNG = block.timestamp + 25 minutes;
    }
    
    function toggleCoolDown(bool _cooldownEnabled) external onlyOwner() {
        cooldownEnabled = _cooldownEnabled;
    }
    
    function toggleFeeEnabled(bool _feeEnabled) external onlyOwner() {
        // this is a failsafe if something breaks with mappings we can turn off so no-one gets rekt and can still trade
        feeEnabled = _feeEnabled;
    }

    function setMigrationContract(address _migrator) external onlyGoverner {
        excludedFromGambling[_migrator] = true;
        _isExcludedFromFee[_migrator] = true;
        addGoverner(_migrator);
        migrator = _migrator;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address payable","name":"feeWalletAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"},{"indexed":false,"internalType":"address","name":"platinumWinner","type":"address"},{"indexed":false,"internalType":"address","name":"goldWinner","type":"address"},{"indexed":false,"internalType":"address","name":"silverWinner","type":"address"},{"indexed":false,"internalType":"address","name":"bronzeWinner","type":"address"},{"indexed":false,"internalType":"uint256","name":"platinumEthAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"goldEthAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"silverEthAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bronzeEthAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"platinumGShibaAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"goldGShibaAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"silverGShibaAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bronzeGShibaAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lastTotalFee","type":"uint256"}],"name":"newWinnersSelected","type":"event"},{"inputs":[],"name":"_coolDown","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_devFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_getETHBalance","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addBotToBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"bots","type":"address[]"}],"name":"addBotsToBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_governer","type":"address"}],"name":"addGoverner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"}],"name":"addV1Users","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_tradingEnabled","type":"bool"}],"name":"allowDex","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bronzeWinner","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"ethAmount","type":"uint256"},{"internalType":"uint256","name":"gShibaAmount","type":"uint256"}],"name":"calcWeight","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"weight","type":"uint256"}],"name":"checkTierFromWeight","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cooldownEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"ethAmounts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ethWeight","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"excludedFromGambling","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeMin","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"gamblingWeights","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"goldMinWeight","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"goldWinner","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isBlackListed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isEthAmountNegative","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"migrator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"platinumMinWeight","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"platinumWinner","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeBotFromBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_governer","type":"address"}],"name":"removeGoverner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_ethWeight","type":"uint256"}],"name":"setEthWeight","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setExcludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_feeMin","type":"uint256"},{"internalType":"uint256","name":"_feeMax","type":"uint256"}],"name":"setFeeMinMax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTx","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxPercent","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_migrator","type":"address"}],"name":"setMigrationContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_platinumMin","type":"uint256"},{"internalType":"uint256","name":"_goldMin","type":"uint256"},{"internalType":"uint256","name":"_silverMin","type":"uint256"}],"name":"setTierWeights","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"silverMinWeight","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"silverWinner","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"timestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_cooldownEnabled","type":"bool"}],"name":"toggleCoolDown","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_feeEnabled","type":"bool"}],"name":"toggleFeeEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

62030d40600e55620186a0600f5561c35060105567016345785d8a0000601655670429d069189e00006017556402540be40060195542601f556c0c9f2c9cd04674edea40000000602255601e60235560c0604052600d60808190526c47616d626c657220536869626160981b60a09081526200007f91602491906200077b565b506040805180820190915260068082526547534849424160d01b6020909201918252620000af916025916200077b565b506026805460ff19166012179055600c6027819055602855602a805461ffff60b81b1960ff60b01b1961ffff60a01b19909216600160a81b1791909116600160b01b1716600160c01b1790556022546101909004602b556611c37937e08000602c553480156200011e57600080fd5b5060405162004ff338038062004ff3833981810160405260208110156200014457600080fd5b505180600062000153620006e1565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600180546001600160a01b03199081166001600160a01b0384169081179092556002805482168317905560038054821683179055600480549091169091179055620001f6600582620006e5602090811b6200267717901c565b5062000212816007620006e560201b620026771790919060201c565b506200022e816009620006e560201b620026771790919060201c565b506200024a81600b620006e560201b620026771790919060201c565b50600d805460018101825560009190915260058054909160020260008051602062004fd383398151915201908290829062000289908290849062000800565b5050600d805460018101825560009190915260078054909450600290910260008051602062004fd38339815191520192508391508290620002ce908290849062000800565b5050600d805460018101825560009190915260098054909450600290910260008051602062004fd3833981519152019250839150829062000313908290849062000800565b5050600d8054600181018255600091909152600b8054909450600290910260008051602062004fd3833981519152019250839150829062000358908290849062000800565b5050601580546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d1790555060019150601a905060006200039562000705565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055601b620003c962000705565b81546001810183556000928352602083200180546001600160a01b03199081166001600160a01b0393841617909155602980549091169185169190911790556022549150601c906200041a620006e1565b6001600160a01b03166001600160a01b0316815260200190815260200160002081905550601560009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200048d57600080fd5b505afa158015620004a2573d6000803e3d6000fd5b505050506040513d6020811015620004b957600080fd5b5051601554604080516315ab88c960e31b815290516001600160a01b039384169363c9c6539693309391169163ad5c464891600480820192602092909190829003018186803b1580156200050c57600080fd5b505afa15801562000521573d6000803e3d6000fd5b505050506040513d60208110156200053857600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301525160448083019260209291908290030181600087803b1580156200058b57600080fd5b505af1158015620005a0573d6000803e3d6000fd5b505050506040513d6020811015620005b757600080fd5b5051602a80546001600160a01b0319166001600160a01b03909216919091179055600160206000620005e862000705565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790553081528380528281208054861660019081179091556013948590528382208054871682179055602a549092168152918220805490941681179093556200065b62000705565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556200068d620006e1565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6022546040518082815260200191505060405180910390a3506200085a565b3390565b6000620006fc836001600160a01b03841662000714565b90505b92915050565b6000546001600160a01b031690565b600062000722838362000763565b6200075a57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155620006ff565b506000620006ff565b60009081526001919091016020526040902054151590565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620007be57805160ff1916838001178555620007ee565b82800160010185558215620007ee579182015b82811115620007ee578251825591602001919060010190620007d1565b50620007fc92915062000843565b5090565b828054828255906000526020600020908101928215620007ee5760005260206000209182015b82811115620007ee57825482559160010191906001019062000826565b5b80821115620007fc576000815560010162000844565b614769806200086a6000396000f3fe6080604052600436106103bc5760003560e01c806396362920116101f2578063d543dbeb1161010d578063f2fde38b116100a0578063f815a8421161006f578063f815a84214610e3b578063faa651cf14610e50578063fc10805714610e65578063ffbe9f1e14610e98576103c3565b8063f2fde38b14610d17578063f429389014610d4a578063f42f31bb14610d5f578063f698c04f14610e0f576103c3565b8063e47d6060116100dc578063e47d606014610c79578063e99fb70214610cac578063ec28438a14610cc1578063ee8627a714610ceb576103c3565b8063d543dbeb14610bbe578063dd62ed3e14610be8578063e01af92c14610c23578063e15434ed14610c4f576103c3565b8063aab7c4b511610185578063bd68b1e711610154578063bd68b1e714610b1c578063bd9c4ed614610b4f578063d067603a14610b64578063d457ae2114610b94576103c3565b8063aab7c4b514610a63578063ab1f510614610a78578063af9549e014610aae578063bcdd822d14610ae9576103c3565b8063a771ebc7116101c1578063a771ebc7146109eb578063a9059cbb14610a00578063a985ceef14610a39578063aa45026b14610a4e576103c3565b806396362920146108d85780639e43f3c3146108ed578063a3898bb71461099d578063a457c2d7146109b2576103c3565b806349bd5a5e116102e25780637302dacf1161027557806388b79cec1161024457806388b79cec146108485780638940fd0f1461087b5780638da5cb5b146108ae57806395d89b41146108c3576103c3565b80637302dacf146107b85780637cd07e47146107eb5780637d1db4a5146108005780637ded4d6a14610815576103c3565b80635e14f794116102b15780635e14f794146107285780636ddd17131461075b57806370a0823114610770578063715018a6146107a3576103c3565b806349bd5a5e146106b65780634ada218b146106cb57806351bc3c85146106e05780635342acb4146106f5576103c3565b806320a94f941161035a578063395093511161032957806339509351146105eb5780634303443d14610624578063441603d71461065757806345df94d614610683576103c3565b806320a94f941461055357806323b872dd146105685780632af8bfa6146105ab578063313ce567146105c0576103c3565b8063095ea7b311610396578063095ea7b31461049857806312eabeb1146104e55780631694505e1461051757806318160ddd1461052c576103c3565b806303bd1898146103c857806306fdde03146103f95780630875d81514610483576103c3565b366103c357005b600080fd5b3480156103d457600080fd5b506103dd610ead565b604080516001600160a01b039092168252519081900360200190f35b34801561040557600080fd5b5061040e610ebc565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610448578181015183820152602001610430565b50505050905090810190601f1680156104755780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561048f57600080fd5b506103dd610f52565b3480156104a457600080fd5b506104d1600480360360408110156104bb57600080fd5b506001600160a01b038135169060200135610f61565b604080519115158252519081900360200190f35b3480156104f157600080fd5b506105156004803603604081101561050857600080fd5b5080359060200135610f7f565b005b34801561052357600080fd5b506103dd611042565b34801561053857600080fd5b50610541611051565b60408051918252519081900360200190f35b34801561055f57600080fd5b50610541611057565b34801561057457600080fd5b506104d16004803603606081101561058b57600080fd5b506001600160a01b0381358116916020810135909116906040013561105d565b3480156105b757600080fd5b506105416110e4565b3480156105cc57600080fd5b506105d56110ea565b6040805160ff9092168252519081900360200190f35b3480156105f757600080fd5b506104d16004803603604081101561060e57600080fd5b506001600160a01b0381351690602001356110f3565b34801561063057600080fd5b506105156004803603602081101561064757600080fd5b50356001600160a01b0316611141565b34801561066357600080fd5b506105156004803603602081101561067a57600080fd5b503515156112a3565b34801561068f57600080fd5b50610541600480360360208110156106a657600080fd5b50356001600160a01b031661136c565b3480156106c257600080fd5b506103dd61137e565b3480156106d757600080fd5b506104d161138d565b3480156106ec57600080fd5b506105156113b1565b34801561070157600080fd5b506104d16004803603602081101561071857600080fd5b50356001600160a01b0316611444565b34801561073457600080fd5b506105156004803603602081101561074b57600080fd5b50356001600160a01b0316611465565b34801561076757600080fd5b506104d1611619565b34801561077c57600080fd5b506105416004803603602081101561079357600080fd5b50356001600160a01b031661163b565b3480156107af57600080fd5b50610515611656565b3480156107c457600080fd5b50610541600480360360208110156107db57600080fd5b50356001600160a01b031661172c565b3480156107f757600080fd5b506103dd61173e565b34801561080c57600080fd5b5061054161174d565b34801561082157600080fd5b506105156004803603602081101561083857600080fd5b50356001600160a01b0316611753565b34801561085457600080fd5b506105156004803603602081101561086b57600080fd5b50356001600160a01b0316611855565b34801561088757600080fd5b506104d16004803603602081101561089e57600080fd5b50356001600160a01b031661194b565b3480156108ba57600080fd5b506103dd611960565b3480156108cf57600080fd5b5061040e61196f565b3480156108e457600080fd5b506105416119d0565b3480156108f957600080fd5b506105156004803603602081101561091057600080fd5b81019060208101813564010000000081111561092b57600080fd5b82018360208201111561093d57600080fd5b8035906020019184602083028401116401000000008311171561095f57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506119d6945050505050565b3480156109a957600080fd5b506103dd611b80565b3480156109be57600080fd5b506104d1600480360360408110156109d557600080fd5b506001600160a01b038135169060200135611b8f565b3480156109f757600080fd5b506104d1611bf7565b348015610a0c57600080fd5b506104d160048036036040811015610a2357600080fd5b506001600160a01b038135169060200135611c1a565b348015610a4557600080fd5b506104d1611c2e565b348015610a5a57600080fd5b50610541611c53565b348015610a6f57600080fd5b50610541611c59565b348015610a8457600080fd5b5061051560048036036060811015610a9b57600080fd5b5080359060208101359060400135611c5f565b348015610aba57600080fd5b5061051560048036036040811015610ad157600080fd5b506001600160a01b0381351690602001351515611d30565b348015610af557600080fd5b506104d160048036036020811015610b0c57600080fd5b50356001600160a01b0316611dd4565b348015610b2857600080fd5b5061051560048036036020811015610b3f57600080fd5b50356001600160a01b0316611de9565b348015610b5b57600080fd5b506103dd611f01565b348015610b7057600080fd5b5061054160048036036040811015610b8757600080fd5b5080359060200135611f10565b348015610ba057600080fd5b5061054160048036036020811015610bb757600080fd5b5035611f48565b348015610bca57600080fd5b5061051560048036036020811015610be157600080fd5b5035611f88565b348015610bf457600080fd5b5061054160048036036040811015610c0b57600080fd5b506001600160a01b038135811691602001351661201c565b348015610c2f57600080fd5b5061051560048036036020811015610c4657600080fd5b50351515612047565b348015610c5b57600080fd5b5061051560048036036020811015610c7257600080fd5b503561213b565b348015610c8557600080fd5b506104d160048036036020811015610c9c57600080fd5b50356001600160a01b03166121ba565b348015610cb857600080fd5b506105416121d8565b348015610ccd57600080fd5b5061051560048036036020811015610ce457600080fd5b50356121de565b348015610cf757600080fd5b5061051560048036036020811015610d0e57600080fd5b50351515612257565b348015610d2357600080fd5b5061051560048036036020811015610d3a57600080fd5b50356001600160a01b0316612319565b348015610d5657600080fd5b50610515612445565b348015610d6b57600080fd5b5061051560048036036020811015610d8257600080fd5b810190602081018135640100000000811115610d9d57600080fd5b820183602082011115610daf57600080fd5b80359060200191846020830284011164010000000083111715610dd157600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506124c9945050505050565b348015610e1b57600080fd5b5061051560048036036020811015610e3257600080fd5b50351515612595565b348015610e4757600080fd5b50610541612655565b348015610e5c57600080fd5b50610541612659565b348015610e7157600080fd5b5061054160048036036020811015610e8857600080fd5b50356001600160a01b031661265f565b348015610ea457600080fd5b50610541612671565b6001546001600160a01b031681565b60248054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610f485780601f10610f1d57610100808354040283529160200191610f48565b820191906000526020600020905b815481529060010190602001808311610f2b57829003601f168201915b5050505050905090565b6003546001600160a01b031681565b6000610f75610f6e612693565b8484612697565b5060015b92915050565b601a6000610f8b612693565b6001600160a01b0316815260208101919091526040016000205460ff16610ff9576040805162461bcd60e51b815260206004820152600c60248201527f4e6f7420676f7665726e65720000000000000000000000000000000000000000604482015290519081900360640190fd5b8082106110375760405162461bcd60e51b81526004018080602001828103825260248152602001806146c46024913960400191505060405180910390fd5b601691909155601755565b6015546001600160a01b031681565b60225490565b60165481565b600061106a848484612783565b6110da84611076612693565b6110d585604051806060016040528060288152602001614606602891396001600160a01b038a166000908152601d60205260408120906110b4612693565b6001600160a01b031681526020810191909152604001600020549190612d05565b612697565b5060019392505050565b60195481565b60265460ff1690565b6000610f75611100612693565b846110d585601d6000611111612693565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490612d9c565b611149612693565b6001600160a01b031661115a611960565b6001600160a01b0316146111b5576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03821614156112115760405162461bcd60e51b81526004018080602001828103825260248152602001806146576024913960400191505060405180910390fd5b6001600160a01b03811660009081526021602052604090205460ff161561127f576040805162461bcd60e51b815260206004820152601e60248201527f4163636f756e7420697320616c726561647920626c61636b6c69737465640000604482015290519081900360640190fd5b6001600160a01b03166000908152602160205260409020805460ff19166001179055565b6112ab612693565b6001600160a01b03166112bc611960565b6001600160a01b031614611317576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b602a805491151577010000000000000000000000000000000000000000000000027fffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffff9092169190911790556105dc4201601f55565b60116020526000908152604090205481565b602a546001600160a01b031681565b602a5477010000000000000000000000000000000000000000000000900460ff1681565b601a60006113bd612693565b6001600160a01b0316815260208101919091526040016000205460ff1661142b576040805162461bcd60e51b815260206004820152600c60248201527f4e6f7420676f7665726e65720000000000000000000000000000000000000000604482015290519081900360640190fd5b60006114363061163b565b905061144181612df6565b50565b6001600160a01b038116600090815260208052604090205460ff165b919050565b601a6000611471612693565b6001600160a01b0316815260208101919091526040016000205460ff166114df576040805162461bcd60e51b815260206004820152600c60248201527f4e6f7420676f7665726e65720000000000000000000000000000000000000000604482015290519081900360640190fd5b6001600160a01b0381166000908152601a602052604090205460ff1615611441576001600160a01b0381166000908152601a60205260408120805460ff191690555b601b5481101561161557816001600160a01b0316601b828154811061154257fe5b6000918252602090912001546001600160a01b0316141561160d57601b8054600019810190811061156f57fe5b600091825260209091200154601b80546001600160a01b03909216918390811061159557fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550601b8054806115ce57fe5b600082815260209020810160001990810180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055019055611615565b600101611521565b5050565b602a547501000000000000000000000000000000000000000000900460ff1681565b6001600160a01b03166000908152601c602052604090205490565b61165e612693565b6001600160a01b031661166f611960565b6001600160a01b0316146116ca576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b601e6020526000908152604090205481565b602d546001600160a01b031681565b602b5481565b61175b612693565b6001600160a01b031661176c611960565b6001600160a01b0316146117c7576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b03811660009081526021602052604090205460ff16611834576040805162461bcd60e51b815260206004820152601a60248201527f4163636f756e74206973206e6f7420626c61636b6c6973746564000000000000604482015290519081900360640190fd5b6001600160a01b03166000908152602160205260409020805460ff19169055565b601a6000611861612693565b6001600160a01b0316815260208101919091526040016000205460ff166118cf576040805162461bcd60e51b815260206004820152600c60248201527f4e6f7420676f7665726e65720000000000000000000000000000000000000000604482015290519081900360640190fd5b6001600160a01b03811660009081526013602090815260408083208054600160ff19918216811790925592805292208054909116909117905561191181611de9565b602d80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60136020526000908152604090205460ff1681565b6000546001600160a01b031690565b60258054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610f485780601f10610f1d57610100808354040283529160200191610f48565b60235481565b6119de612693565b6001600160a01b03166119ef611960565b6001600160a01b031614611a4a576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b805160005b81811015611b7b576000838281518110611a6557fe5b602002602001015190506000306001600160a01b03166370a08231836040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015611abe57600080fd5b505afa158015611ad2573d6000803e3d6000fd5b505050506040513d6020811015611ae857600080fd5b505190506000611afd826402540be40061303d565b90506000611b0b8284611f10565b90506000611b1882611f48565b9050611b4785600d8381548110611b2b57fe5b906000526020600020906002020161267790919063ffffffff16565b50506001600160a01b0390931660009081526012602090815260408083209390935560119052209190915550600101611a4f565b505050565b6004546001600160a01b031681565b6000610f75611b9c612693565b846110d58560405180606001604052806025815260200161470f60259139601d6000611bc6612693565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190612d05565b602a54760100000000000000000000000000000000000000000000900460ff1681565b6000610f75611c27612693565b8484612783565b602a547801000000000000000000000000000000000000000000000000900460ff1681565b60275481565b600f5481565b601a6000611c6b612693565b6001600160a01b0316815260208101919091526040016000205460ff16611cd9576040805162461bcd60e51b815260206004820152600c60248201527f4e6f7420676f7665726e65720000000000000000000000000000000000000000604482015290519081900360640190fd5b8183118015611ce757508082115b611d225760405162461bcd60e51b815260040180806020018281038252602281526020018061457b6022913960400191505060405180910390fd5b600e92909255600f55601055565b601a6000611d3c612693565b6001600160a01b0316815260208101919091526040016000205460ff16611daa576040805162461bcd60e51b815260206004820152600c60248201527f4e6f7420676f7665726e65720000000000000000000000000000000000000000604482015290519081900360640190fd5b6001600160a01b039190911660009081526020805260409020805460ff1916911515919091179055565b60146020526000908152604090205460ff1681565b601a6000611df5612693565b6001600160a01b0316815260208101919091526040016000205460ff16611e63576040805162461bcd60e51b815260206004820152600c60248201527f4e6f7420676f7665726e65720000000000000000000000000000000000000000604482015290519081900360640190fd5b6001600160a01b0381166000908152601a602052604090205460ff16611441576001600160a01b03166000818152601a60205260408120805460ff19166001908117909155601b805491820181559091527f3ad8aa4f87544323a9d1e5dd902f40c356527a7955687113db5f9a85ad579dc10180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169091179055565b6002546001600160a01b031681565b601954600090611f3090611f2a846509184e72a00061303d565b9061303d565b611f40846509184e72a00061303d565b019392505050565b6000600e54821115611f5c57506000611460565b600f54821115611f6e57506001611460565b601054821115611f8057506002611460565b506003919050565b611f90612693565b6001600160a01b0316611fa1611960565b6001600160a01b031614611ffc576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6120166064611f2a836022546130a490919063ffffffff16565b602b5550565b6001600160a01b039182166000908152601d6020908152604080832093909416825291909152205490565b61204f612693565b6001600160a01b0316612060611960565b6001600160a01b0316146120bb576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b602a8054821515750100000000000000000000000000000000000000000081027fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff9092169190911790915560408051918252517f436b6cf978c7b6998fcce43dfe4d37e3a0dc2bb780144a2eb55d7138201e8a129181900360200190a150565b601a6000612147612693565b6001600160a01b0316815260208101919091526040016000205460ff166121b5576040805162461bcd60e51b815260206004820152600c60248201527f4e6f7420676f7665726e65720000000000000000000000000000000000000000604482015290519081900360640190fd5b601955565b6001600160a01b031660009081526021602052604090205460ff1690565b600e5481565b6121e6612693565b6001600160a01b03166121f7611960565b6001600160a01b031614612252576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b602b55565b61225f612693565b6001600160a01b0316612270611960565b6001600160a01b0316146122cb576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b602a80549115157801000000000000000000000000000000000000000000000000027fffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff909216919091179055565b612321612693565b6001600160a01b0316612332611960565b6001600160a01b03161461238d576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166123d25760405162461bcd60e51b815260040180806020018281038252602681526020018061459d6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b601a6000612451612693565b6001600160a01b0316815260208101919091526040016000205460ff166124bf576040805162461bcd60e51b815260206004820152600c60248201527f4e6f7420676f7665726e65720000000000000000000000000000000000000000604482015290519081900360640190fd5b47611441816130fd565b6124d1612693565b6001600160a01b03166124e2611960565b6001600160a01b03161461253d576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b60005b81518110156116155760016021600084848151811061255b57fe5b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055600101612540565b61259d612693565b6001600160a01b03166125ae611960565b6001600160a01b031614612609576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b602a8054911515760100000000000000000000000000000000000000000000027fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff909216919091179055565b4790565b60105481565b60126020526000908152604090205481565b60175481565b600061268c836001600160a01b038416613279565b9392505050565b3390565b6001600160a01b0383166126dc5760405162461bcd60e51b81526004018080602001828103825260248152602001806146a06024913960400191505060405180910390fd5b6001600160a01b0382166127215760405162461bcd60e51b81526004018080602001828103825260228152602001806145c36022913960400191505060405180910390fd5b6001600160a01b038084166000818152601d6020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166127c85760405162461bcd60e51b815260040180806020018281038252602581526020018061467b6025913960400191505060405180910390fd5b6001600160a01b03821661280d5760405162461bcd60e51b81526004018080602001828103825260238152602001806145586023913960400191505060405180910390fd5b6000811161284c5760405162461bcd60e51b815260040180806020018281038252602981526020018061462e6029913960400191505060405180910390fd5b6001600160a01b03821660009081526021602052604090205460ff16156128ba576040805162461bcd60e51b815260206004820152600760248201527f476f206177617900000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6001600160a01b03831660009081526021602052604090205460ff1615612928576040805162461bcd60e51b815260206004820152600760248201527f476f206177617900000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b612930611960565b6001600160a01b0316836001600160a01b03161415801561296a5750612954611960565b6001600160a01b0316826001600160a01b031614155b80156129845750602d546001600160a01b03848116911614155b801561299e5750602d546001600160a01b03838116911614155b15612a8457602b548111156129e45760405162461bcd60e51b81526004018080602001828103825260278152602001806146e86027913960400191505060405180910390fd5b602a546001600160a01b0384811691161480612a0d5750602a546001600160a01b038381169116145b15612a8457602a5477010000000000000000000000000000000000000000000000900460ff16612a84576040805162461bcd60e51b815260206004820152601660248201527f54726164696e67206973206e6f7420656e61626c656400000000000000000000604482015290519081900360640190fd5b602a547801000000000000000000000000000000000000000000000000900460ff1615612b9257602a546001600160a01b0384811691161415612ae957602354612acf904290612d9c565b6001600160a01b0383166000908152601e60205260409020555b612af1611960565b6001600160a01b0316836001600160a01b031614158015612b205750602a546001600160a01b03848116911614155b15612b92576001600160a01b0383166000908152601e6020526040902054421015612b92576040805162461bcd60e51b815260206004820152600860248201527f436f6f6c646f776e000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b602a546001600160a01b0384811691161415612bfc57612bb0611960565b6001600160a01b0316826001600160a01b031614158015612bed5750602a54760100000000000000000000000000000000000000000000900460ff165b15612bfc57612bfc82826132c3565b6000612c073061163b565b9050602b548110612c175750602b545b602c54602a54908210159074010000000000000000000000000000000000000000900460ff16158015612c655750602a547501000000000000000000000000000000000000000000900460ff165b8015612c6e5750805b8015612c885750602a546001600160a01b03868116911614155b15612ca857612c9682612df6565b478015612ca657612ca6476130fd565b505b6001600160a01b038516600090815260208052604090205460019060ff1680612ce857506001600160a01b038516600090815260208052604090205460ff165b15612cf1575060005b612cfd868686846137ee565b505050505050565b60008184841115612d945760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612d59578181015183820152602001612d41565b50505050905090810190601f168015612d865780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008282018381101561268c576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b602a80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000017905560408051600280825260608083018452926020830190803683370190505090503081600081518110612e6357fe5b6001600160a01b03928316602091820292909201810191909152601554604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c4648926004808301939192829003018186803b158015612ed057600080fd5b505afa158015612ee4573d6000803e3d6000fd5b505050506040513d6020811015612efa57600080fd5b5051815182906001908110612f0b57fe5b6001600160a01b039283166020918202929092010152601554612f319130911684612697565b6015546040517f791ac947000000000000000000000000000000000000000000000000000000008152600481018481526000602483018190523060648401819052426084850181905260a060448601908152875160a487015287516001600160a01b039097169663791ac947968a968a9594939092909160c40190602080880191028083838b5b83811015612fd0578181015183820152602001612fb8565b505050509050019650505050505050600060405180830381600087803b158015612ff957600080fd5b505af115801561300d573d6000803e3d6000fd5b5050602a80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16905550505050565b6000808211613093576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161309c57fe5b049392505050565b6000826130b357506000610f79565b828202828482816130c057fe5b041461268c5760405162461bcd60e51b81526004018080602001828103825260218152602001806145e56021913960400191505060405180910390fd5b601f54421061310e5761310e613819565b600061311b82601e61303d565b60188054820190556001549091506001600160a01b03166108fc6131408360046130a4565b6040518115909202916000818181858888f19350505050158015613168573d6000803e3d6000fd5b506002546001600160a01b03166108fc6131838360036130a4565b6040518115909202916000818181858888f193505050501580156131ab573d6000803e3d6000fd5b506003546001600160a01b03166108fc6131c68360026130a4565b6040518115909202916000818181858888f193505050501580156131ee573d6000803e3d6000fd5b506004546001600160a01b03166108fc6132098360016130a4565b6040518115909202916000818181858888f19350505050158015613231573d6000803e3d6000fd5b506029546001600160a01b03166108fc6132516003611f2a8660026130a4565b6040518115909202916000818181858888f19350505050158015611b7b573d6000803e3d6000fd5b60006132858383613d03565b6132bb57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610f79565b506000610f79565b6001600160a01b03821660009081526013602052604090205460ff166116155760408051600280825260608083018452926020830190803683375050601554604080517fad5c464800000000000000000000000000000000000000000000000000000000815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b15801561336057600080fd5b505afa158015613374573d6000803e3d6000fd5b505050506040513d602081101561338a57600080fd5b50518151829060009061339957fe5b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106133c757fe5b6001600160a01b03928316602091820292909201810191909152601554604080517f1f00ca7400000000000000000000000000000000000000000000000000000000815260048101878152602482019283528651604483015286516000969490941694631f00ca749489948994909260649091019185820191028083838c5b8381101561345e578181015183820152602001613446565b50505050905001935050505060006040518083038186803b15801561348257600080fd5b505afa158015613496573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405260208110156134dd57600080fd5b81019080805160405193929190846401000000008211156134fd57600080fd5b90830190602082018581111561351257600080fd5b825186602082028301116401000000008211171561352f57600080fd5b82525081516020918201928201910280838360005b8381101561355c578181015183820152602001613544565b5050505090500160405250505060008151811061357557fe5b6020908102919091018101516001600160a01b038616600090815260118352604080822054601490945290205490925060ff16156136df576001600160a01b0385166000908152601260205260409020548211156136af576001600160a01b03851660008181526012602081815260408084208054880381556014835293819020805460ff19169055918152915481517f70a0823100000000000000000000000000000000000000000000000000000000815260048101949094529051613691939192889230926370a0823192602480840193919291829003018186803b15801561365f57600080fd5b505afa158015613673573d6000803e3d6000fd5b505050506040513d602081101561368957600080fd5b505101611f10565b6001600160a01b0386166000908152601160205260409020556136da565b6001600160a01b03851660009081526012602090815260408083208054869003905560119091528120555b613776565b6001600160a01b038516600081815260126020908152604091829020805486019081905582517f70a082310000000000000000000000000000000000000000000000000000000081526004810194909452915161375c93889230926370a08231926024808201939291829003018186803b15801561365f57600080fd5b6001600160a01b0386166000908152601160205260409020555b6001600160a01b03851660009081526014602052604090205460ff166137e75760006137a182611f48565b6001600160a01b038716600090815260116020526040812054919250906137c790611f48565b90508082146137da576137da8783613d1b565b6137e48782613d48565b50505b5050505050565b806137fb576137fb613d59565b613806848484613d73565b8061381357613813613e70565b50505050565b600060165461382d60165460175403613e78565b0190508060185410611441576000613867613862600d60008154811061384f57fe5b9060005260206000209060020201613f5e565b613e78565b9050600061387f613862600d60018154811061384f57fe5b90506000613897613862600d60028154811061384f57fe5b905060006138af613862600d60038154811061384f57fe5b90506138df84600d6000815481106138c357fe5b9060005260206000209060020201613f6990919063ffffffff16565b600160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555061391783600d6001815481106138c357fe5b600260006101000a8154816001600160a01b0302191690836001600160a01b0316021790555061394f82600d6002815481106138c357fe5b600360006101000a8154816001600160a01b0302191690836001600160a01b0316021790555061398781600d6003815481106138c357fe5b600480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161780825560015460025460035491851660008181526012602090815260408083205494891680845281842054968a168085528285205498909a16808552938290205482517f70a08231000000000000000000000000000000000000000000000000000000008152998a0186905291517fcf6a823b3436846680f79054a7512354af07f077ae2efb646a05db1fa429640e9a429a9699929890979596909492939230926370a08231926024808201939291829003018186803b158015613a7c57600080fd5b505afa158015613a90573d6000803e3d6000fd5b505050506040513d6020811015613aa657600080fd5b5051600254604080517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0390921660048301525130916370a08231916024808301926020929190829003018186803b158015613b0a57600080fd5b505afa158015613b1e573d6000803e3d6000fd5b505050506040513d6020811015613b3457600080fd5b5051600354604080517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0390921660048301525130916370a08231916024808301926020929190829003018186803b158015613b9857600080fd5b505afa158015613bac573d6000803e3d6000fd5b505050506040513d6020811015613bc257600080fd5b505160048054604080517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0390921692820192909252905130916370a08231916024808301926020929190829003018186803b158015613c2a57600080fd5b505afa158015613c3e573d6000803e3d6000fd5b505050506040513d6020811015613c5457600080fd5b8101908080519060200190929190505050601854604051808f81526020018e6001600160a01b031681526020018d6001600160a01b031681526020018c6001600160a01b031681526020018b6001600160a01b031681526020018a81526020018981526020018881526020018781526020018681526020018581526020018481526020018381526020018281526020019e50505050505050505050505050505060405180910390a15050505050565b60009081526001919091016020526040902054151590565b611b7b82600d8381548110613d2c57fe5b9060005260206000209060020201613f7590919063ffffffff16565b611b7b82600d8381548110611b2b57fe5b602754613d6557613d71565b60278054602855600090555b565b6000613d8f6064611f2a602754856130a490919063ffffffff16565b90506000613d9d8383613f8a565b6001600160a01b0386166000908152601c6020526040902054909150613dc39084613f8a565b6001600160a01b038087166000908152601c60205260408082209390935590861681522054613df29082612d9c565b6001600160a01b0385166000908152601c6020526040902055613e158584613fe7565b613e1e8261443a565b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050505050565b602854602755565b60008160011415613e8b57506000611460565b600043423360405160200180826001600160a01b031660601b81526014019150506040516020818303038152906040528051906020012060001c81613ecc57fe5b0445424160405160200180826001600160a01b031660601b81526014019150506040516020818303038152906040528051906020012060001c81613f0c57fe5b0444420101010101604051602001808281526020019150506040516020818303038152906040528051906020012060001c905060018303600184038281613f4f57fe5b04028103600101915050919050565b6000610f7982614467565b600061268c838361446b565b600061268c836001600160a01b03841661448f565b600082821115613fe1576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6001600160a01b03821660009081526013602052604090205460ff166116155760408051600280825260608083018452926020830190803683375050601554604080517fad5c464800000000000000000000000000000000000000000000000000000000815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b15801561408457600080fd5b505afa158015614098573d6000803e3d6000fd5b505050506040513d60208110156140ae57600080fd5b5051815182906000906140bd57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106140eb57fe5b6001600160a01b03928316602091820292909201810191909152601554604080517f1f00ca7400000000000000000000000000000000000000000000000000000000815260048101878152602482019283528651604483015286516000969490941694631f00ca749489948994909260649091019185820191028083838c5b8381101561418257818101518382015260200161416a565b50505050905001935050505060006040518083038186803b1580156141a657600080fd5b505afa1580156141ba573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052602081101561420157600080fd5b810190808051604051939291908464010000000082111561422157600080fd5b90830190602082018581111561423657600080fd5b825186602082028301116401000000008211171561425357600080fd5b82525081516020918201928201910280838360005b83811015614280578181015183820152602001614268565b5050505090500160405250505060008151811061429957fe5b6020908102919091018101516001600160a01b038616600090815260118352604080822054601490945290205490925060ff16156142ff576001600160a01b03851660009081526012602090815260408083208054860190556011909152812055614423565b6001600160a01b03851660009081526012602052604090205482116143e7576001600160a01b03851660008181526012602090815260409182902080548690039081905582517f70a08231000000000000000000000000000000000000000000000000000000008152600481019490945291516143c99330926370a0823192602480840193829003018186803b15801561439857600080fd5b505afa1580156143ac573d6000803e3d6000fd5b505050506040513d60208110156143c257600080fd5b5051611f10565b6001600160a01b038616600090815260116020526040902055614423565b6001600160a01b038516600090815260126020908152604080832080548603905560148252808320805460ff1916600117905560119091528120555b600061442e82611f48565b9050612cfd8682613d1b565b306000908152601c60205260409020546144549082612d9c565b306000908152601c602052604090205550565b5490565b600082600001828154811061447c57fe5b9060005260206000200154905092915050565b6000818152600183016020526040812054801561454d57835460001980830191018082146145075760008660000182815481106144c857fe5b90600052602060002001549050808760000184815481106144e557fe5b6000918252602080832090910192909255918252600188019052604090208390555b855486908061451257fe5b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610f79565b6000915050610f7956fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373576569676874732073686f756c642062652064657363656e64696e67206f726465724f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f57652063616e206e6f7420626c61636b6c69737420556e697377617020726f757465722e45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573736665654d696e2073686f756c6420626520736d616c6c6572207468616e206665654d61785472616e7366657220616d6f756e74206578636565647320746865206d617820616d6f756e742e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212205ba57b375580eb726456ee3d7c3e751b1126f05783f19fb462d7f4dea959d31f64736f6c634300060c0033d7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb5000000000000000000000000cb89c87775a2c2ea854400fc8b1f03b35b0267fa

Deployed Bytecode

0x6080604052600436106103bc5760003560e01c806396362920116101f2578063d543dbeb1161010d578063f2fde38b116100a0578063f815a8421161006f578063f815a84214610e3b578063faa651cf14610e50578063fc10805714610e65578063ffbe9f1e14610e98576103c3565b8063f2fde38b14610d17578063f429389014610d4a578063f42f31bb14610d5f578063f698c04f14610e0f576103c3565b8063e47d6060116100dc578063e47d606014610c79578063e99fb70214610cac578063ec28438a14610cc1578063ee8627a714610ceb576103c3565b8063d543dbeb14610bbe578063dd62ed3e14610be8578063e01af92c14610c23578063e15434ed14610c4f576103c3565b8063aab7c4b511610185578063bd68b1e711610154578063bd68b1e714610b1c578063bd9c4ed614610b4f578063d067603a14610b64578063d457ae2114610b94576103c3565b8063aab7c4b514610a63578063ab1f510614610a78578063af9549e014610aae578063bcdd822d14610ae9576103c3565b8063a771ebc7116101c1578063a771ebc7146109eb578063a9059cbb14610a00578063a985ceef14610a39578063aa45026b14610a4e576103c3565b806396362920146108d85780639e43f3c3146108ed578063a3898bb71461099d578063a457c2d7146109b2576103c3565b806349bd5a5e116102e25780637302dacf1161027557806388b79cec1161024457806388b79cec146108485780638940fd0f1461087b5780638da5cb5b146108ae57806395d89b41146108c3576103c3565b80637302dacf146107b85780637cd07e47146107eb5780637d1db4a5146108005780637ded4d6a14610815576103c3565b80635e14f794116102b15780635e14f794146107285780636ddd17131461075b57806370a0823114610770578063715018a6146107a3576103c3565b806349bd5a5e146106b65780634ada218b146106cb57806351bc3c85146106e05780635342acb4146106f5576103c3565b806320a94f941161035a578063395093511161032957806339509351146105eb5780634303443d14610624578063441603d71461065757806345df94d614610683576103c3565b806320a94f941461055357806323b872dd146105685780632af8bfa6146105ab578063313ce567146105c0576103c3565b8063095ea7b311610396578063095ea7b31461049857806312eabeb1146104e55780631694505e1461051757806318160ddd1461052c576103c3565b806303bd1898146103c857806306fdde03146103f95780630875d81514610483576103c3565b366103c357005b600080fd5b3480156103d457600080fd5b506103dd610ead565b604080516001600160a01b039092168252519081900360200190f35b34801561040557600080fd5b5061040e610ebc565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610448578181015183820152602001610430565b50505050905090810190601f1680156104755780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561048f57600080fd5b506103dd610f52565b3480156104a457600080fd5b506104d1600480360360408110156104bb57600080fd5b506001600160a01b038135169060200135610f61565b604080519115158252519081900360200190f35b3480156104f157600080fd5b506105156004803603604081101561050857600080fd5b5080359060200135610f7f565b005b34801561052357600080fd5b506103dd611042565b34801561053857600080fd5b50610541611051565b60408051918252519081900360200190f35b34801561055f57600080fd5b50610541611057565b34801561057457600080fd5b506104d16004803603606081101561058b57600080fd5b506001600160a01b0381358116916020810135909116906040013561105d565b3480156105b757600080fd5b506105416110e4565b3480156105cc57600080fd5b506105d56110ea565b6040805160ff9092168252519081900360200190f35b3480156105f757600080fd5b506104d16004803603604081101561060e57600080fd5b506001600160a01b0381351690602001356110f3565b34801561063057600080fd5b506105156004803603602081101561064757600080fd5b50356001600160a01b0316611141565b34801561066357600080fd5b506105156004803603602081101561067a57600080fd5b503515156112a3565b34801561068f57600080fd5b50610541600480360360208110156106a657600080fd5b50356001600160a01b031661136c565b3480156106c257600080fd5b506103dd61137e565b3480156106d757600080fd5b506104d161138d565b3480156106ec57600080fd5b506105156113b1565b34801561070157600080fd5b506104d16004803603602081101561071857600080fd5b50356001600160a01b0316611444565b34801561073457600080fd5b506105156004803603602081101561074b57600080fd5b50356001600160a01b0316611465565b34801561076757600080fd5b506104d1611619565b34801561077c57600080fd5b506105416004803603602081101561079357600080fd5b50356001600160a01b031661163b565b3480156107af57600080fd5b50610515611656565b3480156107c457600080fd5b50610541600480360360208110156107db57600080fd5b50356001600160a01b031661172c565b3480156107f757600080fd5b506103dd61173e565b34801561080c57600080fd5b5061054161174d565b34801561082157600080fd5b506105156004803603602081101561083857600080fd5b50356001600160a01b0316611753565b34801561085457600080fd5b506105156004803603602081101561086b57600080fd5b50356001600160a01b0316611855565b34801561088757600080fd5b506104d16004803603602081101561089e57600080fd5b50356001600160a01b031661194b565b3480156108ba57600080fd5b506103dd611960565b3480156108cf57600080fd5b5061040e61196f565b3480156108e457600080fd5b506105416119d0565b3480156108f957600080fd5b506105156004803603602081101561091057600080fd5b81019060208101813564010000000081111561092b57600080fd5b82018360208201111561093d57600080fd5b8035906020019184602083028401116401000000008311171561095f57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506119d6945050505050565b3480156109a957600080fd5b506103dd611b80565b3480156109be57600080fd5b506104d1600480360360408110156109d557600080fd5b506001600160a01b038135169060200135611b8f565b3480156109f757600080fd5b506104d1611bf7565b348015610a0c57600080fd5b506104d160048036036040811015610a2357600080fd5b506001600160a01b038135169060200135611c1a565b348015610a4557600080fd5b506104d1611c2e565b348015610a5a57600080fd5b50610541611c53565b348015610a6f57600080fd5b50610541611c59565b348015610a8457600080fd5b5061051560048036036060811015610a9b57600080fd5b5080359060208101359060400135611c5f565b348015610aba57600080fd5b5061051560048036036040811015610ad157600080fd5b506001600160a01b0381351690602001351515611d30565b348015610af557600080fd5b506104d160048036036020811015610b0c57600080fd5b50356001600160a01b0316611dd4565b348015610b2857600080fd5b5061051560048036036020811015610b3f57600080fd5b50356001600160a01b0316611de9565b348015610b5b57600080fd5b506103dd611f01565b348015610b7057600080fd5b5061054160048036036040811015610b8757600080fd5b5080359060200135611f10565b348015610ba057600080fd5b5061054160048036036020811015610bb757600080fd5b5035611f48565b348015610bca57600080fd5b5061051560048036036020811015610be157600080fd5b5035611f88565b348015610bf457600080fd5b5061054160048036036040811015610c0b57600080fd5b506001600160a01b038135811691602001351661201c565b348015610c2f57600080fd5b5061051560048036036020811015610c4657600080fd5b50351515612047565b348015610c5b57600080fd5b5061051560048036036020811015610c7257600080fd5b503561213b565b348015610c8557600080fd5b506104d160048036036020811015610c9c57600080fd5b50356001600160a01b03166121ba565b348015610cb857600080fd5b506105416121d8565b348015610ccd57600080fd5b5061051560048036036020811015610ce457600080fd5b50356121de565b348015610cf757600080fd5b5061051560048036036020811015610d0e57600080fd5b50351515612257565b348015610d2357600080fd5b5061051560048036036020811015610d3a57600080fd5b50356001600160a01b0316612319565b348015610d5657600080fd5b50610515612445565b348015610d6b57600080fd5b5061051560048036036020811015610d8257600080fd5b810190602081018135640100000000811115610d9d57600080fd5b820183602082011115610daf57600080fd5b80359060200191846020830284011164010000000083111715610dd157600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506124c9945050505050565b348015610e1b57600080fd5b5061051560048036036020811015610e3257600080fd5b50351515612595565b348015610e4757600080fd5b50610541612655565b348015610e5c57600080fd5b50610541612659565b348015610e7157600080fd5b5061054160048036036020811015610e8857600080fd5b50356001600160a01b031661265f565b348015610ea457600080fd5b50610541612671565b6001546001600160a01b031681565b60248054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610f485780601f10610f1d57610100808354040283529160200191610f48565b820191906000526020600020905b815481529060010190602001808311610f2b57829003601f168201915b5050505050905090565b6003546001600160a01b031681565b6000610f75610f6e612693565b8484612697565b5060015b92915050565b601a6000610f8b612693565b6001600160a01b0316815260208101919091526040016000205460ff16610ff9576040805162461bcd60e51b815260206004820152600c60248201527f4e6f7420676f7665726e65720000000000000000000000000000000000000000604482015290519081900360640190fd5b8082106110375760405162461bcd60e51b81526004018080602001828103825260248152602001806146c46024913960400191505060405180910390fd5b601691909155601755565b6015546001600160a01b031681565b60225490565b60165481565b600061106a848484612783565b6110da84611076612693565b6110d585604051806060016040528060288152602001614606602891396001600160a01b038a166000908152601d60205260408120906110b4612693565b6001600160a01b031681526020810191909152604001600020549190612d05565b612697565b5060019392505050565b60195481565b60265460ff1690565b6000610f75611100612693565b846110d585601d6000611111612693565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490612d9c565b611149612693565b6001600160a01b031661115a611960565b6001600160a01b0316146111b5576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03821614156112115760405162461bcd60e51b81526004018080602001828103825260248152602001806146576024913960400191505060405180910390fd5b6001600160a01b03811660009081526021602052604090205460ff161561127f576040805162461bcd60e51b815260206004820152601e60248201527f4163636f756e7420697320616c726561647920626c61636b6c69737465640000604482015290519081900360640190fd5b6001600160a01b03166000908152602160205260409020805460ff19166001179055565b6112ab612693565b6001600160a01b03166112bc611960565b6001600160a01b031614611317576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b602a805491151577010000000000000000000000000000000000000000000000027fffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffff9092169190911790556105dc4201601f55565b60116020526000908152604090205481565b602a546001600160a01b031681565b602a5477010000000000000000000000000000000000000000000000900460ff1681565b601a60006113bd612693565b6001600160a01b0316815260208101919091526040016000205460ff1661142b576040805162461bcd60e51b815260206004820152600c60248201527f4e6f7420676f7665726e65720000000000000000000000000000000000000000604482015290519081900360640190fd5b60006114363061163b565b905061144181612df6565b50565b6001600160a01b038116600090815260208052604090205460ff165b919050565b601a6000611471612693565b6001600160a01b0316815260208101919091526040016000205460ff166114df576040805162461bcd60e51b815260206004820152600c60248201527f4e6f7420676f7665726e65720000000000000000000000000000000000000000604482015290519081900360640190fd5b6001600160a01b0381166000908152601a602052604090205460ff1615611441576001600160a01b0381166000908152601a60205260408120805460ff191690555b601b5481101561161557816001600160a01b0316601b828154811061154257fe5b6000918252602090912001546001600160a01b0316141561160d57601b8054600019810190811061156f57fe5b600091825260209091200154601b80546001600160a01b03909216918390811061159557fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550601b8054806115ce57fe5b600082815260209020810160001990810180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055019055611615565b600101611521565b5050565b602a547501000000000000000000000000000000000000000000900460ff1681565b6001600160a01b03166000908152601c602052604090205490565b61165e612693565b6001600160a01b031661166f611960565b6001600160a01b0316146116ca576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b601e6020526000908152604090205481565b602d546001600160a01b031681565b602b5481565b61175b612693565b6001600160a01b031661176c611960565b6001600160a01b0316146117c7576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b03811660009081526021602052604090205460ff16611834576040805162461bcd60e51b815260206004820152601a60248201527f4163636f756e74206973206e6f7420626c61636b6c6973746564000000000000604482015290519081900360640190fd5b6001600160a01b03166000908152602160205260409020805460ff19169055565b601a6000611861612693565b6001600160a01b0316815260208101919091526040016000205460ff166118cf576040805162461bcd60e51b815260206004820152600c60248201527f4e6f7420676f7665726e65720000000000000000000000000000000000000000604482015290519081900360640190fd5b6001600160a01b03811660009081526013602090815260408083208054600160ff19918216811790925592805292208054909116909117905561191181611de9565b602d80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60136020526000908152604090205460ff1681565b6000546001600160a01b031690565b60258054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610f485780601f10610f1d57610100808354040283529160200191610f48565b60235481565b6119de612693565b6001600160a01b03166119ef611960565b6001600160a01b031614611a4a576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b805160005b81811015611b7b576000838281518110611a6557fe5b602002602001015190506000306001600160a01b03166370a08231836040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015611abe57600080fd5b505afa158015611ad2573d6000803e3d6000fd5b505050506040513d6020811015611ae857600080fd5b505190506000611afd826402540be40061303d565b90506000611b0b8284611f10565b90506000611b1882611f48565b9050611b4785600d8381548110611b2b57fe5b906000526020600020906002020161267790919063ffffffff16565b50506001600160a01b0390931660009081526012602090815260408083209390935560119052209190915550600101611a4f565b505050565b6004546001600160a01b031681565b6000610f75611b9c612693565b846110d58560405180606001604052806025815260200161470f60259139601d6000611bc6612693565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190612d05565b602a54760100000000000000000000000000000000000000000000900460ff1681565b6000610f75611c27612693565b8484612783565b602a547801000000000000000000000000000000000000000000000000900460ff1681565b60275481565b600f5481565b601a6000611c6b612693565b6001600160a01b0316815260208101919091526040016000205460ff16611cd9576040805162461bcd60e51b815260206004820152600c60248201527f4e6f7420676f7665726e65720000000000000000000000000000000000000000604482015290519081900360640190fd5b8183118015611ce757508082115b611d225760405162461bcd60e51b815260040180806020018281038252602281526020018061457b6022913960400191505060405180910390fd5b600e92909255600f55601055565b601a6000611d3c612693565b6001600160a01b0316815260208101919091526040016000205460ff16611daa576040805162461bcd60e51b815260206004820152600c60248201527f4e6f7420676f7665726e65720000000000000000000000000000000000000000604482015290519081900360640190fd5b6001600160a01b039190911660009081526020805260409020805460ff1916911515919091179055565b60146020526000908152604090205460ff1681565b601a6000611df5612693565b6001600160a01b0316815260208101919091526040016000205460ff16611e63576040805162461bcd60e51b815260206004820152600c60248201527f4e6f7420676f7665726e65720000000000000000000000000000000000000000604482015290519081900360640190fd5b6001600160a01b0381166000908152601a602052604090205460ff16611441576001600160a01b03166000818152601a60205260408120805460ff19166001908117909155601b805491820181559091527f3ad8aa4f87544323a9d1e5dd902f40c356527a7955687113db5f9a85ad579dc10180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169091179055565b6002546001600160a01b031681565b601954600090611f3090611f2a846509184e72a00061303d565b9061303d565b611f40846509184e72a00061303d565b019392505050565b6000600e54821115611f5c57506000611460565b600f54821115611f6e57506001611460565b601054821115611f8057506002611460565b506003919050565b611f90612693565b6001600160a01b0316611fa1611960565b6001600160a01b031614611ffc576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6120166064611f2a836022546130a490919063ffffffff16565b602b5550565b6001600160a01b039182166000908152601d6020908152604080832093909416825291909152205490565b61204f612693565b6001600160a01b0316612060611960565b6001600160a01b0316146120bb576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b602a8054821515750100000000000000000000000000000000000000000081027fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff9092169190911790915560408051918252517f436b6cf978c7b6998fcce43dfe4d37e3a0dc2bb780144a2eb55d7138201e8a129181900360200190a150565b601a6000612147612693565b6001600160a01b0316815260208101919091526040016000205460ff166121b5576040805162461bcd60e51b815260206004820152600c60248201527f4e6f7420676f7665726e65720000000000000000000000000000000000000000604482015290519081900360640190fd5b601955565b6001600160a01b031660009081526021602052604090205460ff1690565b600e5481565b6121e6612693565b6001600160a01b03166121f7611960565b6001600160a01b031614612252576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b602b55565b61225f612693565b6001600160a01b0316612270611960565b6001600160a01b0316146122cb576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b602a80549115157801000000000000000000000000000000000000000000000000027fffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff909216919091179055565b612321612693565b6001600160a01b0316612332611960565b6001600160a01b03161461238d576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166123d25760405162461bcd60e51b815260040180806020018281038252602681526020018061459d6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b601a6000612451612693565b6001600160a01b0316815260208101919091526040016000205460ff166124bf576040805162461bcd60e51b815260206004820152600c60248201527f4e6f7420676f7665726e65720000000000000000000000000000000000000000604482015290519081900360640190fd5b47611441816130fd565b6124d1612693565b6001600160a01b03166124e2611960565b6001600160a01b03161461253d576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b60005b81518110156116155760016021600084848151811061255b57fe5b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055600101612540565b61259d612693565b6001600160a01b03166125ae611960565b6001600160a01b031614612609576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b602a8054911515760100000000000000000000000000000000000000000000027fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff909216919091179055565b4790565b60105481565b60126020526000908152604090205481565b60175481565b600061268c836001600160a01b038416613279565b9392505050565b3390565b6001600160a01b0383166126dc5760405162461bcd60e51b81526004018080602001828103825260248152602001806146a06024913960400191505060405180910390fd5b6001600160a01b0382166127215760405162461bcd60e51b81526004018080602001828103825260228152602001806145c36022913960400191505060405180910390fd5b6001600160a01b038084166000818152601d6020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166127c85760405162461bcd60e51b815260040180806020018281038252602581526020018061467b6025913960400191505060405180910390fd5b6001600160a01b03821661280d5760405162461bcd60e51b81526004018080602001828103825260238152602001806145586023913960400191505060405180910390fd5b6000811161284c5760405162461bcd60e51b815260040180806020018281038252602981526020018061462e6029913960400191505060405180910390fd5b6001600160a01b03821660009081526021602052604090205460ff16156128ba576040805162461bcd60e51b815260206004820152600760248201527f476f206177617900000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6001600160a01b03831660009081526021602052604090205460ff1615612928576040805162461bcd60e51b815260206004820152600760248201527f476f206177617900000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b612930611960565b6001600160a01b0316836001600160a01b03161415801561296a5750612954611960565b6001600160a01b0316826001600160a01b031614155b80156129845750602d546001600160a01b03848116911614155b801561299e5750602d546001600160a01b03838116911614155b15612a8457602b548111156129e45760405162461bcd60e51b81526004018080602001828103825260278152602001806146e86027913960400191505060405180910390fd5b602a546001600160a01b0384811691161480612a0d5750602a546001600160a01b038381169116145b15612a8457602a5477010000000000000000000000000000000000000000000000900460ff16612a84576040805162461bcd60e51b815260206004820152601660248201527f54726164696e67206973206e6f7420656e61626c656400000000000000000000604482015290519081900360640190fd5b602a547801000000000000000000000000000000000000000000000000900460ff1615612b9257602a546001600160a01b0384811691161415612ae957602354612acf904290612d9c565b6001600160a01b0383166000908152601e60205260409020555b612af1611960565b6001600160a01b0316836001600160a01b031614158015612b205750602a546001600160a01b03848116911614155b15612b92576001600160a01b0383166000908152601e6020526040902054421015612b92576040805162461bcd60e51b815260206004820152600860248201527f436f6f6c646f776e000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b602a546001600160a01b0384811691161415612bfc57612bb0611960565b6001600160a01b0316826001600160a01b031614158015612bed5750602a54760100000000000000000000000000000000000000000000900460ff165b15612bfc57612bfc82826132c3565b6000612c073061163b565b9050602b548110612c175750602b545b602c54602a54908210159074010000000000000000000000000000000000000000900460ff16158015612c655750602a547501000000000000000000000000000000000000000000900460ff165b8015612c6e5750805b8015612c885750602a546001600160a01b03868116911614155b15612ca857612c9682612df6565b478015612ca657612ca6476130fd565b505b6001600160a01b038516600090815260208052604090205460019060ff1680612ce857506001600160a01b038516600090815260208052604090205460ff165b15612cf1575060005b612cfd868686846137ee565b505050505050565b60008184841115612d945760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612d59578181015183820152602001612d41565b50505050905090810190601f168015612d865780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008282018381101561268c576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b602a80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000017905560408051600280825260608083018452926020830190803683370190505090503081600081518110612e6357fe5b6001600160a01b03928316602091820292909201810191909152601554604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c4648926004808301939192829003018186803b158015612ed057600080fd5b505afa158015612ee4573d6000803e3d6000fd5b505050506040513d6020811015612efa57600080fd5b5051815182906001908110612f0b57fe5b6001600160a01b039283166020918202929092010152601554612f319130911684612697565b6015546040517f791ac947000000000000000000000000000000000000000000000000000000008152600481018481526000602483018190523060648401819052426084850181905260a060448601908152875160a487015287516001600160a01b039097169663791ac947968a968a9594939092909160c40190602080880191028083838b5b83811015612fd0578181015183820152602001612fb8565b505050509050019650505050505050600060405180830381600087803b158015612ff957600080fd5b505af115801561300d573d6000803e3d6000fd5b5050602a80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16905550505050565b6000808211613093576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161309c57fe5b049392505050565b6000826130b357506000610f79565b828202828482816130c057fe5b041461268c5760405162461bcd60e51b81526004018080602001828103825260218152602001806145e56021913960400191505060405180910390fd5b601f54421061310e5761310e613819565b600061311b82601e61303d565b60188054820190556001549091506001600160a01b03166108fc6131408360046130a4565b6040518115909202916000818181858888f19350505050158015613168573d6000803e3d6000fd5b506002546001600160a01b03166108fc6131838360036130a4565b6040518115909202916000818181858888f193505050501580156131ab573d6000803e3d6000fd5b506003546001600160a01b03166108fc6131c68360026130a4565b6040518115909202916000818181858888f193505050501580156131ee573d6000803e3d6000fd5b506004546001600160a01b03166108fc6132098360016130a4565b6040518115909202916000818181858888f19350505050158015613231573d6000803e3d6000fd5b506029546001600160a01b03166108fc6132516003611f2a8660026130a4565b6040518115909202916000818181858888f19350505050158015611b7b573d6000803e3d6000fd5b60006132858383613d03565b6132bb57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610f79565b506000610f79565b6001600160a01b03821660009081526013602052604090205460ff166116155760408051600280825260608083018452926020830190803683375050601554604080517fad5c464800000000000000000000000000000000000000000000000000000000815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b15801561336057600080fd5b505afa158015613374573d6000803e3d6000fd5b505050506040513d602081101561338a57600080fd5b50518151829060009061339957fe5b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106133c757fe5b6001600160a01b03928316602091820292909201810191909152601554604080517f1f00ca7400000000000000000000000000000000000000000000000000000000815260048101878152602482019283528651604483015286516000969490941694631f00ca749489948994909260649091019185820191028083838c5b8381101561345e578181015183820152602001613446565b50505050905001935050505060006040518083038186803b15801561348257600080fd5b505afa158015613496573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405260208110156134dd57600080fd5b81019080805160405193929190846401000000008211156134fd57600080fd5b90830190602082018581111561351257600080fd5b825186602082028301116401000000008211171561352f57600080fd5b82525081516020918201928201910280838360005b8381101561355c578181015183820152602001613544565b5050505090500160405250505060008151811061357557fe5b6020908102919091018101516001600160a01b038616600090815260118352604080822054601490945290205490925060ff16156136df576001600160a01b0385166000908152601260205260409020548211156136af576001600160a01b03851660008181526012602081815260408084208054880381556014835293819020805460ff19169055918152915481517f70a0823100000000000000000000000000000000000000000000000000000000815260048101949094529051613691939192889230926370a0823192602480840193919291829003018186803b15801561365f57600080fd5b505afa158015613673573d6000803e3d6000fd5b505050506040513d602081101561368957600080fd5b505101611f10565b6001600160a01b0386166000908152601160205260409020556136da565b6001600160a01b03851660009081526012602090815260408083208054869003905560119091528120555b613776565b6001600160a01b038516600081815260126020908152604091829020805486019081905582517f70a082310000000000000000000000000000000000000000000000000000000081526004810194909452915161375c93889230926370a08231926024808201939291829003018186803b15801561365f57600080fd5b6001600160a01b0386166000908152601160205260409020555b6001600160a01b03851660009081526014602052604090205460ff166137e75760006137a182611f48565b6001600160a01b038716600090815260116020526040812054919250906137c790611f48565b90508082146137da576137da8783613d1b565b6137e48782613d48565b50505b5050505050565b806137fb576137fb613d59565b613806848484613d73565b8061381357613813613e70565b50505050565b600060165461382d60165460175403613e78565b0190508060185410611441576000613867613862600d60008154811061384f57fe5b9060005260206000209060020201613f5e565b613e78565b9050600061387f613862600d60018154811061384f57fe5b90506000613897613862600d60028154811061384f57fe5b905060006138af613862600d60038154811061384f57fe5b90506138df84600d6000815481106138c357fe5b9060005260206000209060020201613f6990919063ffffffff16565b600160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555061391783600d6001815481106138c357fe5b600260006101000a8154816001600160a01b0302191690836001600160a01b0316021790555061394f82600d6002815481106138c357fe5b600360006101000a8154816001600160a01b0302191690836001600160a01b0316021790555061398781600d6003815481106138c357fe5b600480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161780825560015460025460035491851660008181526012602090815260408083205494891680845281842054968a168085528285205498909a16808552938290205482517f70a08231000000000000000000000000000000000000000000000000000000008152998a0186905291517fcf6a823b3436846680f79054a7512354af07f077ae2efb646a05db1fa429640e9a429a9699929890979596909492939230926370a08231926024808201939291829003018186803b158015613a7c57600080fd5b505afa158015613a90573d6000803e3d6000fd5b505050506040513d6020811015613aa657600080fd5b5051600254604080517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0390921660048301525130916370a08231916024808301926020929190829003018186803b158015613b0a57600080fd5b505afa158015613b1e573d6000803e3d6000fd5b505050506040513d6020811015613b3457600080fd5b5051600354604080517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0390921660048301525130916370a08231916024808301926020929190829003018186803b158015613b9857600080fd5b505afa158015613bac573d6000803e3d6000fd5b505050506040513d6020811015613bc257600080fd5b505160048054604080517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0390921692820192909252905130916370a08231916024808301926020929190829003018186803b158015613c2a57600080fd5b505afa158015613c3e573d6000803e3d6000fd5b505050506040513d6020811015613c5457600080fd5b8101908080519060200190929190505050601854604051808f81526020018e6001600160a01b031681526020018d6001600160a01b031681526020018c6001600160a01b031681526020018b6001600160a01b031681526020018a81526020018981526020018881526020018781526020018681526020018581526020018481526020018381526020018281526020019e50505050505050505050505050505060405180910390a15050505050565b60009081526001919091016020526040902054151590565b611b7b82600d8381548110613d2c57fe5b9060005260206000209060020201613f7590919063ffffffff16565b611b7b82600d8381548110611b2b57fe5b602754613d6557613d71565b60278054602855600090555b565b6000613d8f6064611f2a602754856130a490919063ffffffff16565b90506000613d9d8383613f8a565b6001600160a01b0386166000908152601c6020526040902054909150613dc39084613f8a565b6001600160a01b038087166000908152601c60205260408082209390935590861681522054613df29082612d9c565b6001600160a01b0385166000908152601c6020526040902055613e158584613fe7565b613e1e8261443a565b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050505050565b602854602755565b60008160011415613e8b57506000611460565b600043423360405160200180826001600160a01b031660601b81526014019150506040516020818303038152906040528051906020012060001c81613ecc57fe5b0445424160405160200180826001600160a01b031660601b81526014019150506040516020818303038152906040528051906020012060001c81613f0c57fe5b0444420101010101604051602001808281526020019150506040516020818303038152906040528051906020012060001c905060018303600184038281613f4f57fe5b04028103600101915050919050565b6000610f7982614467565b600061268c838361446b565b600061268c836001600160a01b03841661448f565b600082821115613fe1576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6001600160a01b03821660009081526013602052604090205460ff166116155760408051600280825260608083018452926020830190803683375050601554604080517fad5c464800000000000000000000000000000000000000000000000000000000815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b15801561408457600080fd5b505afa158015614098573d6000803e3d6000fd5b505050506040513d60208110156140ae57600080fd5b5051815182906000906140bd57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106140eb57fe5b6001600160a01b03928316602091820292909201810191909152601554604080517f1f00ca7400000000000000000000000000000000000000000000000000000000815260048101878152602482019283528651604483015286516000969490941694631f00ca749489948994909260649091019185820191028083838c5b8381101561418257818101518382015260200161416a565b50505050905001935050505060006040518083038186803b1580156141a657600080fd5b505afa1580156141ba573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052602081101561420157600080fd5b810190808051604051939291908464010000000082111561422157600080fd5b90830190602082018581111561423657600080fd5b825186602082028301116401000000008211171561425357600080fd5b82525081516020918201928201910280838360005b83811015614280578181015183820152602001614268565b5050505090500160405250505060008151811061429957fe5b6020908102919091018101516001600160a01b038616600090815260118352604080822054601490945290205490925060ff16156142ff576001600160a01b03851660009081526012602090815260408083208054860190556011909152812055614423565b6001600160a01b03851660009081526012602052604090205482116143e7576001600160a01b03851660008181526012602090815260409182902080548690039081905582517f70a08231000000000000000000000000000000000000000000000000000000008152600481019490945291516143c99330926370a0823192602480840193829003018186803b15801561439857600080fd5b505afa1580156143ac573d6000803e3d6000fd5b505050506040513d60208110156143c257600080fd5b5051611f10565b6001600160a01b038616600090815260116020526040902055614423565b6001600160a01b038516600090815260126020908152604080832080548603905560148252808320805460ff1916600117905560119091528120555b600061442e82611f48565b9050612cfd8682613d1b565b306000908152601c60205260409020546144549082612d9c565b306000908152601c602052604090205550565b5490565b600082600001828154811061447c57fe5b9060005260206000200154905092915050565b6000818152600183016020526040812054801561454d57835460001980830191018082146145075760008660000182815481106144c857fe5b90600052602060002001549050808760000184815481106144e557fe5b6000918252602080832090910192909255918252600188019052604090208390555b855486908061451257fe5b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610f79565b6000915050610f7956fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373576569676874732073686f756c642062652064657363656e64696e67206f726465724f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f57652063616e206e6f7420626c61636b6c69737420556e697377617020726f757465722e45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573736665654d696e2073686f756c6420626520736d616c6c6572207468616e206665654d61785472616e7366657220616d6f756e74206578636565647320746865206d617820616d6f756e742e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212205ba57b375580eb726456ee3d7c3e751b1126f05783f19fb462d7f4dea959d31f64736f6c634300060c0033

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

000000000000000000000000cb89c87775a2c2ea854400fc8b1f03b35b0267fa

-----Decoded View---------------
Arg [0] : feeWalletAddress (address): 0xCB89c87775a2c2ea854400Fc8B1f03B35B0267Fa

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000cb89c87775a2c2ea854400fc8b1f03b35b0267fa


Deployed Bytecode Sourcemap

43352:12603:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32863:37;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;32863:37:0;;;;;;;;;;;;;;45576:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32947:35;;;;;;;;;;;;;:::i;46407:161::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;46407:161:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;41185:219;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;41185:219:0;;;;;;;:::i;:::-;;33633:41;;;;;;;;;;;;;:::i;45853:95::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;33683:38;;;;;;;;;;;;;:::i;46576:313::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;46576:313:0;;;;;;;;;;;;;;;;;:::i;33811:35::-;;;;;;;;;;;;;:::i;45762:83::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;46897:218;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;46897:218:0;;;;;;;;:::i;47677:311::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47677:311:0;-1:-1:-1;;;;;47677:311:0;;:::i;55166:165::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;55166:165:0;;;;:::i;33405:50::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33405:50:0;-1:-1:-1;;;;;33405:50:0;;:::i;44224:28::-;;;;;;;;;;;;;:::i;44366:34::-;;;;;;;;;;;;;:::i;53364:157::-;;;;;;;;;;;;;:::i;48629:123::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;48629:123:0;-1:-1:-1;;;;;48629:123:0;;:::i;41621:447::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;41621:447:0;-1:-1:-1;;;;;41621:447:0;;:::i;44287:30::-;;;;;;;;;;;;;:::i;45956:117::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45956:117:0;-1:-1:-1;;;;;45956:117:0;;:::i;2647:148::-;;;;;;;;;;;;;:::i;43605:45::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;43605:45:0;-1:-1:-1;;;;;43605:45:0;;:::i;44572:23::-;;;;;;;;;;;;;:::i;44450:43::-;;;;;;;;;;;;;:::i;48197:199::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;48197:199:0;-1:-1:-1;;;;;48197:199:0;;:::i;55713:239::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;55713:239:0;-1:-1:-1;;;;;55713:239:0;;:::i;33514:52::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33514:52:0;-1:-1:-1;;;;;33514:52:0;;:::i;1996:87::-;;;;;;;;;;;;;:::i;45667:::-;;;;;;;;;;;;;:::i;43914:37::-;;;;;;;;;;;;;:::i;42076:608::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42076:608:0;;-1:-1:-1;42076:608:0;;-1:-1:-1;;;;;42076:608:0:i;32989:35::-;;;;;;;;;;;;;:::i;47123:269::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;47123:269:0;;;;;;;;:::i;44324:29::-;;;;;;;;;;;;;:::i;46081:167::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;46081:167:0;;;;;;;;:::i;44407:34::-;;;;;;;;;;;;;:::i;44086:27::-;;;;;;;;;;;;;:::i;33307:38::-;;;;;;;;;;;;;:::i;40838:339::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;40838:339:0;;;;;;;;;;;;:::i;47531:138::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;47531:138:0;;;;;;;;;;:::i;33573:51::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33573:51:0;-1:-1:-1;;;;;33573:51:0;;:::i;41412:201::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;41412:201:0;-1:-1:-1;;;;;41412:201:0;;:::i;32907:33::-;;;;;;;;;;;;;:::i;35577:183::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35577:183:0;;;;;;;:::i;35211:358::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35211:358:0;;:::i;48764:162::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;48764:162:0;;:::i;46256:143::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;46256:143:0;;;;;;;;;;:::i;53697:141::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53697:141:0;;;;:::i;40725:105::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;40725:105:0;;:::i;47404:119::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47404:119:0;-1:-1:-1;;;;;47404:119:0;;:::i;33254:46::-;;;;;;;;;;;;;:::i;48938:99::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;48938:99:0;;:::i;55343:121::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;55343:121:0;;;;:::i;2950:244::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2950:244:0;-1:-1:-1;;;;;2950:244:0;;:::i;53533:156::-;;;;;;;;;;;;;:::i;48000:189::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;48000:189:0;;-1:-1:-1;48000:189:0;;-1:-1:-1;;;;;48000:189:0:i;55476:229::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;55476:229:0;;;;:::i;55044:110::-;;;;;;;;;;;;;:::i;33352:44::-;;;;;;;;;;;;;:::i;33462:45::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33462:45:0;-1:-1:-1;;;;;33462:45:0;;:::i;33728:38::-;;;;;;;;;;;;;:::i;32863:37::-;;;-1:-1:-1;;;;;32863:37:0;;:::o;45576:83::-;45646:5;45639:12;;;;;;;;-1:-1:-1;;45639:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45613:13;;45639:12;;45646:5;;45639:12;;45646:5;45639:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45576:83;:::o;32947:35::-;;;-1:-1:-1;;;;;32947:35:0;;:::o;46407:161::-;46482:4;46499:39;46508:12;:10;:12::i;:::-;46522:7;46531:6;46499:8;:39::i;:::-;-1:-1:-1;46556:4:0;46407:161;;;;;:::o;41185:219::-;34370:10;:24;34381:12;:10;:12::i;:::-;-1:-1:-1;;;;;34370:24:0;;;;;;;;;;;;-1:-1:-1;34370:24:0;;;;34362:49;;;;;-1:-1:-1;;;34362:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;41292:7:::1;41282;:17;41274:66;;;;-1:-1:-1::0;;;41274:66:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41353:6;:16:::0;;;;41380:6:::1;:16:::0;41185:219::o;33633:41::-;;;-1:-1:-1;;;;;33633:41:0;;:::o;45853:95::-;45933:7;;45853:95;:::o;33683:38::-;;;;:::o;46576:313::-;46674:4;46691:36;46701:6;46709:9;46720:6;46691:9;:36::i;:::-;46738:121;46747:6;46755:12;:10;:12::i;:::-;46769:89;46807:6;46769:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;46769:19:0;;;;;;:11;:19;;;;;;46789:12;:10;:12::i;:::-;-1:-1:-1;;;;;46769:33:0;;;;;;;;;;;;-1:-1:-1;46769:33:0;;;:89;:37;:89::i;:::-;46738:8;:121::i;:::-;-1:-1:-1;46877:4:0;46576:313;;;;;:::o;33811:35::-;;;;:::o;45762:83::-;45828:9;;;;45762:83;:::o;46897:218::-;46985:4;47002:83;47011:12;:10;:12::i;:::-;47025:7;47034:50;47073:10;47034:11;:25;47046:12;:10;:12::i;:::-;-1:-1:-1;;;;;47034:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;47034:25:0;;;:34;;;;;;;;;;;:38;:50::i;47677:311::-;2227:12;:10;:12::i;:::-;-1:-1:-1;;;;;2216:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2216:23:0;;2208:68;;;;;-1:-1:-1;;;2208:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47772:42:::1;-1:-1:-1::0;;;;;47761:53:0;::::1;;;47753:102;;;;-1:-1:-1::0;;;47753:102:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;47875:26:0;::::1;;::::0;;;:17:::1;:26;::::0;;;;;::::1;;47874:27;47866:70;;;::::0;;-1:-1:-1;;;47866:70:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;47947:26:0::1;;::::0;;;:17:::1;:26;::::0;;;;:33;;-1:-1:-1;;47947:33:0::1;47976:4;47947:33;::::0;;47677:311::o;55166:165::-;2227:12;:10;:12::i;:::-;-1:-1:-1;;;;;2216:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2216:23:0;;2208:68;;;;;-1:-1:-1;;;2208:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55238:14:::1;:32:::0;;;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;55313:10:::1;55295:15;:28;55281:11;:42:::0;55166:165::o;33405:50::-;;;;;;;;;;;;;:::o;44224:28::-;;;-1:-1:-1;;;;;44224:28:0;;:::o;44366:34::-;;;;;;;;;:::o;53364:157::-;34370:10;:24;34381:12;:10;:12::i;:::-;-1:-1:-1;;;;;34370:24:0;;;;;;;;;;;;-1:-1:-1;34370:24:0;;;;34362:49;;;;;-1:-1:-1;;;34362:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;53419:23:::1;53445:24;53463:4;53445:9;:24::i;:::-;53419:50;;53480:33;53497:15;53480:16;:33::i;:::-;34422:1;53364:157::o:0;48629:123::-;-1:-1:-1;;;;;48717:27:0;;48693:4;48717:27;;;:18;:27;;;;;;;;48629:123;;;;:::o;41621:447::-;34370:10;:24;34381:12;:10;:12::i;:::-;-1:-1:-1;;;;;34370:24:0;;;;;;;;;;;;-1:-1:-1;34370:24:0;;;;34362:49;;;;;-1:-1:-1;;;34362:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;41701:21:0;::::1;;::::0;;;:10:::1;:21;::::0;;;;;::::1;;41697:364;;;-1:-1:-1::0;;;;;41739:21:0;::::1;41763:5;41739:21:::0;;;:10:::1;:21;::::0;;;;:29;;-1:-1:-1;;41739:29:0::1;::::0;;41785:265:::1;41806:9;:16:::0;41802:20;::::1;41785:265;;;41869:9;-1:-1:-1::0;;;;;41853:25:0::1;:9;41863:1;41853:12;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;41853:12:0::1;:25;41849:186;;;41918:9;41928:16:::0;;-1:-1:-1;;41928:20:0;;;41918:31;::::1;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;41903:9:::1;:12:::0;;-1:-1:-1;;;;;41918:31:0;;::::1;::::0;41913:1;;41903:12;::::1;;;;;;;;;;;;;:46;;;;;-1:-1:-1::0;;;;;41903:46:0::1;;;;;-1:-1:-1::0;;;;;41903:46:0::1;;;;;;41972:9;:15;;;;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;41972:15:0;;;;;;::::1;::::0;;;;;42010:5:::1;;41849:186;41824:4;;41785:265;;;;41621:447:::0;:::o;44287:30::-;;;;;;;;;:::o;45956:117::-;-1:-1:-1;;;;;46049:16:0;46022:7;46049:16;;;:7;:16;;;;;;;45956:117::o;2647:148::-;2227:12;:10;:12::i;:::-;-1:-1:-1;;;;;2216:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2216:23:0;;2208:68;;;;;-1:-1:-1;;;2208:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2754:1:::1;2738:6:::0;;2717:40:::1;::::0;-1:-1:-1;;;;;2738:6:0;;::::1;::::0;2717:40:::1;::::0;2754:1;;2717:40:::1;2785:1;2768:19:::0;;;::::1;::::0;;2647:148::o;43605:45::-;;;;;;;;;;;;;:::o;44572:23::-;;;-1:-1:-1;;;;;44572:23:0;;:::o;44450:43::-;;;;:::o;48197:199::-;2227:12;:10;:12::i;:::-;-1:-1:-1;;;;;2216:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2216:23:0;;2208:68;;;;;-1:-1:-1;;;2208:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;48286:26:0;::::1;;::::0;;;:17:::1;:26;::::0;;;;;::::1;;48278:65;;;::::0;;-1:-1:-1;;;48278:65:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;48354:26:0::1;48383:5;48354:26:::0;;;:17:::1;:26;::::0;;;;:34;;-1:-1:-1;;48354:34:0::1;::::0;;48197:199::o;55713:239::-;34370:10;:24;34381:12;:10;:12::i;:::-;-1:-1:-1;;;;;34370:24:0;;;;;;;;;;;;-1:-1:-1;34370:24:0;;;;34362:49;;;;;-1:-1:-1;;;34362:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;55795:31:0;::::1;;::::0;;;:20:::1;:31;::::0;;;;;;;:38;;55829:4:::1;-1:-1:-1::0;;55795:38:0;;::::1;::::0;::::1;::::0;;;55844:29;;;;;:36;;;;::::1;::::0;;::::1;::::0;;55891:22:::1;55795:31:::0;55891:11:::1;:22::i;:::-;55924:8;:20:::0;;;::::1;-1:-1:-1::0;;;;;55924:20:0;;;::::1;::::0;;;::::1;::::0;;55713:239::o;33514:52::-;;;;;;;;;;;;;;;:::o;1996:87::-;2042:7;2069:6;-1:-1:-1;;;;;2069:6:0;1996:87;:::o;45667:::-;45739:7;45732:14;;;;;;;;-1:-1:-1;;45732:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45706:13;;45732:14;;45739:7;;45732:14;;45739:7;45732:14;;;;;;;;;;;;;;;;;;;;;;;;43914:37;;;;:::o;42076:608::-;2227:12;:10;:12::i;:::-;-1:-1:-1;;;;;2216:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2216:23:0;;2208:68;;;;;-1:-1:-1;;;2208:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42165:13;;42151:11:::1;42191:486;42212:3;42208:1;:7;42191:486;;;42238:12;42253:6;42260:1;42253:9;;;;;;;;;;;;;;42238:24;;42279:21;42318:4;-1:-1:-1::0;;;;;42303:31:0::1;;42335:4;42303:37;;;;;;;;;;;;;-1:-1:-1::0;;;;;42303:37:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;42303:37:0;;-1:-1:-1;42355:17:0::1;42375:27;42303:37:::0;42393:8:::1;42375:17;:27::i;:::-;42355:47;;42419:14;42436:36;42447:9;42458:13;42436:10;:36::i;:::-;42419:53;;42487:12;42502:27;42522:6;42502:19;:27::i;:::-;42487:42;;42546:31;42572:4;42546:15;42562:4;42546:21;;;;;;;;;;;;;;;;;;:25;;:31;;;;:::i;:::-;-1:-1:-1::0;;;;;;;42592:16:0;;::::1;;::::0;;;:10:::1;:16;::::0;;;;;;;:28;;;;42635:15:::1;:21:::0;;;:30;;;;-1:-1:-1;42217:4:0::1;;42191:486;;;;2287:1;42076:608:::0;:::o;32989:35::-;;;-1:-1:-1;;;;;32989:35:0;;:::o;47123:269::-;47216:4;47233:129;47242:12;:10;:12::i;:::-;47256:7;47265:96;47304:15;47265:96;;;;;;;;;;;;;;;;;:11;:25;47277:12;:10;:12::i;:::-;-1:-1:-1;;;;;47265:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;47265:25:0;;;:34;;;;;;;;;;;:96;:38;:96::i;44324:29::-;;;;;;;;;:::o;46081:167::-;46159:4;46176:42;46186:12;:10;:12::i;:::-;46200:9;46211:6;46176:9;:42::i;44407:34::-;;;;;;;;;:::o;44086:27::-;;;;:::o;33307:38::-;;;;:::o;40838:339::-;34370:10;:24;34381:12;:10;:12::i;:::-;-1:-1:-1;;;;;34370:24:0;;;;;;;;;;;;-1:-1:-1;34370:24:0;;;;34362:49;;;;;-1:-1:-1;;;34362:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;40978:8:::1;40963:12;:23;:48;;;;;41001:10;40990:8;:21;40963:48;40955:95;;;;-1:-1:-1::0;;;40955:95:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41063:17;:32:::0;;;;41106:13:::1;:24:::0;41141:15:::1;:28:::0;40838:339::o;47531:138::-;34370:10;:24;34381:12;:10;:12::i;:::-;-1:-1:-1;;;;;34370:24:0;;;;;;;;;;;;-1:-1:-1;34370:24:0;;;;34362:49;;;;;-1:-1:-1;;;34362:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;47623:27:0;;;::::1;;::::0;;;:18:::1;:27:::0;;;;;:38;;-1:-1:-1;;47623:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;47531:138::o;33573:51::-;;;;;;;;;;;;;;;:::o;41412:201::-;34370:10;:24;34381:12;:10;:12::i;:::-;-1:-1:-1;;;;;34370:24:0;;;;;;;;;;;;-1:-1:-1;34370:24:0;;;;34362:49;;;;;-1:-1:-1;;;34362:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;41488:21:0;::::1;;::::0;;;:10:::1;:21;::::0;;;;;::::1;;41483:123;;-1:-1:-1::0;;;;;41526:21:0::1;;::::0;;;:10:::1;:21;::::0;;;;:28;;-1:-1:-1;;41526:28:0::1;41550:4;41526:28:::0;;::::1;::::0;;;41569:9:::1;:25:::0;;;;::::1;::::0;;;;;;::::1;::::0;;;::::1;::::0;;::::1;::::0;;41412:201::o;32907:33::-;;;-1:-1:-1;;;;;32907:33:0;;:::o;35577:183::-;35742:9;;35658:7;;35711:41;;:26;:12;35728:8;35711:16;:26::i;:::-;:30;;:41::i;:::-;35685:23;:9;35699:8;35685:13;:23::i;:::-;:67;;35577:183;-1:-1:-1;;;35577:183:0:o;35211:358::-;35303:7;35341:17;;35332:6;:26;35328:67;;;-1:-1:-1;35382:1:0;35375:8;;35328:67;35418:13;;35409:6;:22;35405:63;;;-1:-1:-1;35455:1:0;35448:8;;35405:63;35491:15;;35482:6;:24;35478:65;;;-1:-1:-1;35530:1:0;35523:8;;35478:65;-1:-1:-1;35560:1:0;35211:358;;;:::o;48764:162::-;2227:12;:10;:12::i;:::-;-1:-1:-1;;;;;2216:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2216:23:0;;2208:68;;;;;-1:-1:-1;;;2208:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48858:60:::1;48902:5;48858:25;48870:12;48858:7;;:11;;:25;;;;:::i;:60::-;48843:12;:75:::0;-1:-1:-1;48764:162:0:o;46256:143::-;-1:-1:-1;;;;;46364:18:0;;;46337:7;46364:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;46256:143::o;53697:141::-;2227:12;:10;:12::i;:::-;-1:-1:-1;;;;;2216:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2216:23:0;;2208:68;;;;;-1:-1:-1;;;2208:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53766:11:::1;:21:::0;;;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;;53803:27:::1;::::0;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;53697:141:::0;:::o;40725:105::-;34370:10;:24;34381:12;:10;:12::i;:::-;-1:-1:-1;;;;;34370:24:0;;;;;;;;;;;;-1:-1:-1;34370:24:0;;;;34362:49;;;;;-1:-1:-1;;;34362:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;40800:9:::1;:22:::0;40725:105::o;47404:119::-;-1:-1:-1;;;;;47489:26:0;47465:4;47489:26;;;:17;:26;;;;;;;;;47404:119::o;33254:46::-;;;;:::o;48938:99::-;2227:12;:10;:12::i;:::-;-1:-1:-1;;;;;2216:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2216:23:0;;2208:68;;;;;-1:-1:-1;;;2208:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49009:12:::1;:20:::0;48938:99::o;55343:121::-;2227:12;:10;:12::i;:::-;-1:-1:-1;;;;;2216:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2216:23:0;;2208:68;;;;;-1:-1:-1;;;2208:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55422:15:::1;:34:::0;;;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;55343:121::o;2950:244::-;2227:12;:10;:12::i;:::-;-1:-1:-1;;;;;2216:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2216:23:0;;2208:68;;;;;-1:-1:-1;;;2208:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3039:22:0;::::1;3031:73;;;;-1:-1:-1::0;;;3031:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3141:6;::::0;;3120:38:::1;::::0;-1:-1:-1;;;;;3120:38:0;;::::1;::::0;3141:6;::::1;::::0;3120:38:::1;::::0;::::1;3169:6;:17:::0;;;::::1;-1:-1:-1::0;;;;;3169:17:0;;;::::1;::::0;;;::::1;::::0;;2950:244::o;53533:156::-;34370:10;:24;34381:12;:10;:12::i;:::-;-1:-1:-1;;;;;34370:24:0;;;;;;;;;;;;-1:-1:-1;34370:24:0;;;;34362:49;;;;;-1:-1:-1;;;34362:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;53617:21:::1;53649:32;53617:21:::0;53649:12:::1;:32::i;48000:189::-:0;2227:12;:10;:12::i;:::-;-1:-1:-1;;;;;2216:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2216:23:0;;2208:68;;;;;-1:-1:-1;;;2208:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48088:6:::1;48083:99;48104:4;:11;48100:1;:15;48083:99;;;48166:4;48137:17;:26;48155:4;48160:1;48155:7;;;;;;;;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;48137:26:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;48137:26:0;:33;;-1:-1:-1;;48137:33:0::1;::::0;::::1;;::::0;;;::::1;::::0;;-1:-1:-1;48117:3:0::1;48083:99;;55476:229:::0;2227:12;:10;:12::i;:::-;-1:-1:-1;;;;;2216:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2216:23:0;;2208:68;;;;;-1:-1:-1;;;2208:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55673:10:::1;:24:::0;;;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;55476:229::o;55044:110::-;55125:21;55044:110;:::o;33352:44::-;;;;:::o;33462:45::-;;;;;;;;;;;;;:::o;33728:38::-;;;;:::o;27914:152::-;27984:4;28008:50;28013:3;-1:-1:-1;;;;;28033:23:0;;28008:4;:50::i;:::-;28001:57;27914:152;-1:-1:-1;;;27914:152:0:o;620:106::-;708:10;620:106;:::o;49045:337::-;-1:-1:-1;;;;;49138:19:0;;49130:68;;;;-1:-1:-1;;;49130:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;49217:21:0;;49209:68;;;;-1:-1:-1;;;49209:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;49290:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;49342:32;;;;;;;;;;;;;;;;;49045:337;;;:::o;49390:2676::-;-1:-1:-1;;;;;49487:20:0;;49479:70;;;;-1:-1:-1;;;49479:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;49568:23:0;;49560:71;;;;-1:-1:-1;;;49560:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49659:1;49650:6;:10;49642:64;;;;-1:-1:-1;;;49642:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;49726:28:0;;;;;;:17;:28;;;;;;;;49725:29;49717:49;;;;;-1:-1:-1;;;49717:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;49786:25:0;;;;;;:17;:25;;;;;;;;49785:26;49777:46;;;;;-1:-1:-1;;;49777:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;49849:7;:5;:7::i;:::-;-1:-1:-1;;;;;49839:17:0;:6;-1:-1:-1;;;;;49839:17:0;;;:41;;;;;49873:7;:5;:7::i;:::-;-1:-1:-1;;;;;49860:20:0;:9;-1:-1:-1;;;;;49860:20:0;;;49839:41;:63;;;;-1:-1:-1;49894:8:0;;-1:-1:-1;;;;;49884:18:0;;;49894:8;;49884:18;;49839:63;:88;;;;-1:-1:-1;49919:8:0;;-1:-1:-1;;;;;49906:21:0;;;49919:8;;49906:21;;49839:88;49836:429;;;49962:12;;49952:6;:22;;49944:74;;;;-1:-1:-1;;;49944:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50125:13;;-1:-1:-1;;;;;50115:23:0;;;50125:13;;50115:23;;:53;;-1:-1:-1;50155:13:0;;-1:-1:-1;;;;;50142:26:0;;;50155:13;;50142:26;50115:53;50111:143;;;50197:14;;;;;;;50189:49;;;;;-1:-1:-1;;;50189:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;50301:15;;;;;;;50298:416;;;50347:13;;-1:-1:-1;;;;;50337:23:0;;;50347:13;;50337:23;50333:171;;;50478:9;;50458:30;;:15;;:19;:30::i;:::-;-1:-1:-1;;;;;50435:20:0;;;;;;:9;:20;;;;;:53;50333:171;50575:7;:5;:7::i;:::-;-1:-1:-1;;;;;50565:17:0;:6;-1:-1:-1;;;;;50565:17:0;;;:44;;;;-1:-1:-1;50596:13:0;;-1:-1:-1;;;;;50586:23:0;;;50596:13;;50586:23;;50565:44;50562:141;;;-1:-1:-1;;;;;50657:17:0;;;;;;:9;:17;;;;;;50638:15;:36;;50630:57;;;;;-1:-1:-1;;;50630:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;50740:13;;-1:-1:-1;;;;;50730:23:0;;;50740:13;;50730:23;50726:172;;;50787:7;:5;:7::i;:::-;-1:-1:-1;;;;;50774:20:0;:9;-1:-1:-1;;;;;50774:20:0;;;:34;;;;-1:-1:-1;50798:10:0;;;;;;;50774:34;50770:117;;;50829:42;50853:9;50864:6;50829:23;:42::i;:::-;50956:28;50987:24;51005:4;50987:9;:24::i;:::-;50956:55;;51052:12;;51028:20;:36;51024:104;;-1:-1:-1;51104:12:0;;51024:104;51191:28;;51235:6;;51167:52;;;;;51235:6;;;;;51234:7;:22;;;;-1:-1:-1;51245:11:0;;;;;;;51234:22;:45;;;;;51260:19;51234:45;:72;;;;-1:-1:-1;51293:13:0;;-1:-1:-1;;;;;51283:23:0;;;51293:13;;51283:23;;51234:72;51230:406;;;51408:38;51425:20;51408:16;:38::i;:::-;51492:21;51531:22;;51528:97;;51574:35;51587:21;51574:12;:35::i;:::-;51230:406;;-1:-1:-1;;;;;51836:26:0;;51717:12;51836:26;;;:18;:26;;;;;;51732:4;;51836:26;;;:59;;-1:-1:-1;;;;;;51866:29:0;;;;;;:18;:29;;;;;;;;51836:59;51833:105;;;-1:-1:-1;51921:5:0;51833:105;52008:50;52023:6;52031:9;52042:6;52050:7;52008:14;:50::i;:::-;49390:2676;;;;;;:::o;11455:166::-;11541:7;11577:12;11569:6;;;;11561:29;;;;-1:-1:-1;;;11561:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11608:5:0;;;11455:166::o;8628:179::-;8686:7;8718:5;;;8742:6;;;;8734:46;;;;;-1:-1:-1;;;8734:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;52074:601;44683:6;:13;;;;;;;;52236:16:::1;::::0;;52250:1:::1;52236:16:::0;;;52212:21:::1;52236:16:::0;;::::1;::::0;;52212:21;52236:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;52236:16:0::1;52212:40;;52281:4;52263;52268:1;52263:7;;;;;;;;-1:-1:-1::0;;;;;52263:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;52307:15:::1;::::0;:22:::1;::::0;;;;;;;:15;;;::::1;::::0;:20:::1;::::0;:22:::1;::::0;;::::1;::::0;52263:7;;52307:22;;;;;:15;:22;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;52307:22:0;52297:7;;:4;;52302:1:::1;::::0;52297:7;::::1;;;;;-1:-1:-1::0;;;;;52297:32:0;;::::1;:7;::::0;;::::1;::::0;;;;;:32;52374:15:::1;::::0;52342:62:::1;::::0;52359:4:::1;::::0;52374:15:::1;52392:11:::0;52342:8:::1;:62::i;:::-;52443:15;::::0;:224:::1;::::0;;;;::::1;::::0;::::1;::::0;;;:15:::1;:224:::0;;;;;;52621:4:::1;52443:224:::0;;;;;;52641:15:::1;52443:224:::0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;52443:15:0;;::::1;::::0;:66:::1;::::0;52524:11;;52594:4;;52621;52641:15;52443:224;;;;;;;::::1;::::0;;::::1;::::0;::::1;::::0;;;:15;:224:::1;;;;;;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;44719:6:0;:14;;;;;;-1:-1:-1;;;;52074:601:0:o;10205:153::-;10263:7;10295:1;10291;:5;10283:44;;;;;-1:-1:-1;;;10283:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10349:1;10345;:5;;;;;;;10205:153;-1:-1:-1;;;10205:153:0:o;9507:220::-;9565:7;9589:6;9585:20;;-1:-1:-1;9604:1:0;9597:8;;9585:20;9628:5;;;9632:1;9628;:5;:1;9652:5;;;;;:10;9644:56;;;;-1:-1:-1;;;9644:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52687:523;52767:11;;52748:15;:30;52744:93;;52795:30;:28;:30::i;:::-;52849:20;52872:14;:6;52883:2;52872:10;:14::i;:::-;52899:12;:28;;;;;;-1:-1:-1;52940:14:0;52849:37;;-1:-1:-1;;;;;;52940:14:0;:44;52964:19;52849:37;52981:1;52964:16;:19::i;:::-;52940:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;52995:10:0;;-1:-1:-1;;;;;52995:10:0;:40;53015:19;:12;53032:1;53015:16;:19::i;:::-;52995:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53046:12:0;;-1:-1:-1;;;;;53046:12:0;:42;53068:19;:12;53085:1;53068:16;:19::i;:::-;53046:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53099:12:0;;-1:-1:-1;;;;;53099:12:0;:42;53121:19;:12;53099;53121:16;:19::i;:::-;53099:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53154:17:0;;-1:-1:-1;;;;;53154:17:0;:48;53181:20;53199:1;53181:13;:6;53192:1;53181:10;:13::i;:20::-;53154:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21829:414;21892:4;21914:21;21924:3;21929:5;21914:9;:21::i;:::-;21909:327;;-1:-1:-1;21952:23:0;;;;;;;;:11;:23;;;;;;;;;;;;;22135:18;;22113:19;;;:12;;;:19;;;;;;:40;;;;22168:11;;21909:327;-1:-1:-1;22219:5:0;22212:12;;36021:1624;-1:-1:-1;;;;;36114:30:0;;;;;;:20;:30;;;;;;;;36109:1529;;36185:16;;;36199:1;36185:16;;;36161:21;36185:16;;;;;36161:21;36185:16;;;;;;;;-1:-1:-1;;36226:15:0;;:22;;;;;;;;36161:40;;-1:-1:-1;;;;;;36226:15:0;;;;:20;;-1:-1:-1;36226:22:0;;;;;;;;;;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36226:22:0;36216:7;;:4;;36221:1;;36216:7;;;;;;;;;:32;-1:-1:-1;;;;;36216:32:0;;;-1:-1:-1;;;;;36216:32:0;;;;;36281:4;36263;36268:1;36263:7;;;;;;;;-1:-1:-1;;;;;36263:23:0;;;:7;;;;;;;;;;:23;;;;36335:15;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;36315:17;;36335:15;;;;;:28;;36364:7;;36373:4;;36335:43;;;;;;;;;;;;;;;36315:17;36335:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36335:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36379:1;36335:46;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;36430:25:0;;36410:17;36430:25;;;:15;:25;;;;;;;36476:19;:29;;;;;;36335:46;;-1:-1:-1;36476:29:0;;36472:767;;;-1:-1:-1;;;;;36542:20:0;;;;;;:10;:20;;;;;;36530:32;;36526:490;;;-1:-1:-1;;;;;36622:20:0;;;;;;:10;:20;;;;;;;;;;36610:32;;36587:55;;36665:19;:29;;;;;;:37;;-1:-1:-1;;36665:37:0;;;36766:20;;;;;36788:41;;;;;;;;;;;;;;36755:85;;36766:20;;36832:7;;36803:4;;36788:31;;:41;;;;;36622:20;;36788:41;;;;;;36803:4;36788:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36788:41:0;:51;36755:10;:85::i;:::-;-1:-1:-1;;;;;36727:25:0;;;;;;:15;:25;;;;;:113;36526:490;;;-1:-1:-1;;;;;36912:20:0;;;;;;:10;:20;;;;;;;;;;:32;;;36889:55;;36967:15;:25;;;;;:29;36526:490;36472:767;;;-1:-1:-1;;;;;37056:20:0;;;;;;:10;:20;;;;;;;;;:33;;;;;;;;37171:41;;;;;;;;;;;;;;37138:85;;37215:7;;37186:4;;37171:31;;:41;;;;;37056:20;37171:41;;;;;;37186:4;37171:41;;;;;;;;;;37138:85;-1:-1:-1;;;;;37110:25:0;;;;;;:15;:25;;;;;:113;36472:767;-1:-1:-1;;;;;37260:29:0;;;;;;:19;:29;;;;;;;;37255:372;;37310:15;37328:30;37348:9;37328:19;:30::i;:::-;-1:-1:-1;;;;;37415:25:0;;37377:15;37415:25;;;:15;:25;;;;;;37310:48;;-1:-1:-1;37377:15:0;37395:46;;:19;:46::i;:::-;37377:64;;37477:7;37466;:18;37462:98;;37509:31;37522:8;37532:7;37509:12;:31::i;:::-;37580;37593:8;37603:7;37580:12;:31::i;:::-;37255:372;;;36109:1529;;;36021:1624;;:::o;53854:267::-;53966:7;53962:40;;53988:14;:12;:14::i;:::-;54015:44;54033:6;54041:9;54052:6;54015:17;:44::i;:::-;54076:7;54072:41;;54098:15;:13;:15::i;:::-;53854:267;;;;:::o;39386:1294::-;39446:15;39488:6;;39464:21;39478:6;;39469;;:15;39464:4;:21::i;:::-;:30;39446:48;;39527:7;39511:12;;:23;39507:1166;;39551:27;39581:33;39586:27;:15;39602:1;39586:18;;;;;;;;;;;;;;;;;;:25;:27::i;:::-;39581:4;:33::i;:::-;39551:63;;39629:23;39655:33;39660:27;:15;39676:1;39660:18;;;;;;;39655:33;39629:59;;39703:25;39731:33;39736:27;:15;39752:1;39736:18;;;;;;;39731:33;39703:61;;39779:25;39807:33;39812:27;:15;39828:1;39812:18;;;;;;;39807:33;39779:61;;39882:42;39904:19;39882:15;39898:1;39882:18;;;;;;;;;;;;;;;;;;:21;;:42;;;;:::i;:::-;39857:14;;:68;;;;;-1:-1:-1;;;;;39857:68:0;;;;;-1:-1:-1;;;;;39857:68:0;;;;;;39961:38;39983:15;39961;39977:1;39961:18;;;;;;;:38;39940:10;;:60;;;;;-1:-1:-1;;;;;39940:60:0;;;;;-1:-1:-1;;;;;39940:60:0;;;;;;40038:40;40060:17;40038:15;40054:1;40038:18;;;;;;;:40;40015:12;;:64;;;;;-1:-1:-1;;;;;40015:64:0;;;;;-1:-1:-1;;;;;40015:64:0;;;;;;40117:40;40139:17;40117:15;40133:1;40117:18;;;;;;;:40;40094:12;:64;;;;-1:-1:-1;;;;;40094:64:0;;;;;;;-1:-1:-1;40234:14:0;40250:10;;40262:12;;40234:14;;;-1:-1:-1;40308:26:0;;;:10;:26;;;;;;;;;40250:10;;;40336:22;;;;;;;40262:12;;;40360:24;;;;;;;40276:12;;;;40386:24;;;;;;;;40429:47;;;;;;;;;;;;;40180:481;;40217:15;;40234:14;;40250:10;;40262:12;;40276;;40336:22;;40360:24;;40386;40444:4;;40429:31;;:47;;;;;40308:26;40429:47;;;;;;40444:4;40429:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;40429:47:0;40510:10;;40478:43;;;;;;-1:-1:-1;;;;;40510:10:0;;;40478:43;;;;;40493:4;;40478:31;;:43;;;;;40429:47;;40478:43;;;;;;;40493:4;40478:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;40478:43:0;40555:12;;40523:45;;;;;;-1:-1:-1;;;;;40555:12:0;;;40523:45;;;;;40538:4;;40523:31;;:45;;;;;40478:43;;40523:45;;;;;;;40538:4;40523:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;40523:45:0;40602:12;;;40570:45;;;;;;-1:-1:-1;;;;;40602:12:0;;;40570:45;;;;;;;;;40585:4;;40570:31;;:45;;;;;40523;;40570;;;;;;;40585:4;40570:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40634:12;;40180:481;;;;;;;;;-1:-1:-1;;;;;40180:481:0;;;;;;-1:-1:-1;;;;;40180:481:0;;;;;;-1:-1:-1;;;;;40180:481:0;;;;;;-1:-1:-1;;;;;40180:481:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39507:1166;;;;39386:1294;:::o;23925:129::-;23998:4;24022:19;;;:12;;;;;:19;;;;;;:24;;;23925:129::o;35893:120::-;35967:38;35996:8;35967:15;35983:4;35967:21;;;;;;;;;;;;;;;;;;:28;;:38;;;;:::i;35768:117::-;35842:35;35868:8;35842:15;35858:4;35842:21;;;;;;;48404:132;48450:7;;48447:24;;48464:7;;48447:24;48499:7;;;48481:15;:25;-1:-1:-1;48517:11:0;;48404:132;:::o;54129:583::-;54227:12;54242:29;54267:3;54242:20;54254:7;;54242;:11;;:20;;;;:::i;:29::-;54227:44;-1:-1:-1;54282:22:0;54307:17;:7;54227:44;54307:11;:17::i;:::-;-1:-1:-1;;;;;54355:15:0;;;;;;:7;:15;;;;;;54282:42;;-1:-1:-1;54355:28:0;;54375:7;54355:19;:28::i;:::-;-1:-1:-1;;;;;54337:15:0;;;;;;;:7;:15;;;;;;:46;;;;54415:18;;;;;;;:38;;54438:14;54415:22;:38::i;:::-;-1:-1:-1;;;;;54394:18:0;;;;;;:7;:18;;;;;:59;54564:45;54593:6;54601:7;54564:28;:45::i;:::-;54630:14;54639:4;54630:8;:14::i;:::-;54678:9;-1:-1:-1;;;;;54661:43:0;54670:6;-1:-1:-1;;;;;54661:43:0;;54689:14;54661:43;;;;;;;;;;;;;;;;;;54129:583;;;;;:::o;48544:77::-;48598:15;;48588:7;:25;48544:77::o;38819:559::-;38894:7;38923:3;38930:1;38923:8;38919:49;;;-1:-1:-1;38955:1:0;38948:8;;38919:49;38980:12;39280;39259:3;39241:10;39224:28;;;;;;-1:-1:-1;;;;;39224:28:0;;;;;;;;;;;;;;;;;;;;;;39214:39;;;;;;39206:48;;39205:58;;;;;;39174:14;39153:3;39131:14;39114:32;;;;;;-1:-1:-1;;;;;39114:32:0;;;;;;;;;;;;;;;;;;;;;;39104:43;;;;;;39096:52;;39095:62;;;;;;39062:16;39044:15;:34;:114;:144;:220;:248;39013:290;;;;;;;;;;;;;;;;;;;;;;;;;39003:301;;;;;;38995:310;;38980:325;;39362:1;39356:3;:7;39349:1;39343:3;:7;39335:4;:16;;;;;;39334:30;39326:4;:39;39369:1;39325:45;39318:52;;;38819:559;;;:::o;28739:117::-;28802:7;28829:19;28837:3;28829:7;:19::i;29210:158::-;29284:7;29335:22;29339:3;29351:5;29335:3;:22::i;28242:158::-;28315:4;28339:53;28347:3;-1:-1:-1;;;;;28367:23:0;;28339:7;:53::i;9090:158::-;9148:7;9181:1;9176;:6;;9168:49;;;;;-1:-1:-1;;;9168:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9235:5:0;;;9090:158::o;37653:1158::-;-1:-1:-1;;;;;37751:30:0;;;;;;:20;:30;;;;;;;;37746:1058;;37822:16;;;37836:1;37822:16;;;37798:21;37822:16;;;;;37798:21;37822:16;;;;;;;;-1:-1:-1;;37863:15:0;;:22;;;;;;;;37798:40;;-1:-1:-1;;;;;;37863:15:0;;;;:20;;-1:-1:-1;37863:22:0;;;;;;;;;;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37863:22:0;37853:7;;:4;;37858:1;;37853:7;;;;;;;;;:32;-1:-1:-1;;;;;37853:32:0;;;-1:-1:-1;;;;;37853:32:0;;;;;37918:4;37900;37905:1;37900:7;;;;;;;;-1:-1:-1;;;;;37900:23:0;;;:7;;;;;;;;;;:23;;;;37972:15;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;37952:17;;37972:15;;;;;:28;;38001:7;;38010:4;;37972:43;;;;;;;;;;;;;;;37952:17;37972:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37972:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38016:1;37972:46;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;38055:25:0;;38035:17;38055:25;;;:15;:25;;;;;;;38101:19;:29;;;;;;37972:46;;-1:-1:-1;38101:29:0;;38097:585;;;-1:-1:-1;;;;;38151:20:0;;;;;;:10;:20;;;;;;;;:33;;;;;;38203:15;:25;;;;;:29;38097:585;;;-1:-1:-1;;;;;38258:20:0;;;;;;:10;:20;;;;;;:33;-1:-1:-1;38254:428:0;;-1:-1:-1;;;;;38312:20:0;;;;;;:10;:20;;;;;;;;;:33;;;;;;;;;38425:41;;;;;;;;;;;;;;38392:75;;38440:4;;38425:31;;:41;;;;;;;;;;38440:4;38425:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38425:41:0;38392:10;:75::i;:::-;-1:-1:-1;;;;;38364:25:0;;;;;;:15;:25;;;;;:103;38254:428;;;-1:-1:-1;;;;;38543:20:0;;;;;;:10;:20;;;;;;;;;;38531:32;;38508:55;;38582:19;:29;;;;;:36;;-1:-1:-1;;38582:36:0;-1:-1:-1;38582:36:0;;;38637:15;:25;;;;;:29;38254:428;38698:15;38716:30;38736:9;38716:19;:30::i;:::-;38698:48;;38761:31;38774:8;38784:7;38761:12;:31::i;54720:116::-;54812:4;54796:22;;;;:7;:22;;;;;;:32;;54823:4;54796:26;:32::i;:::-;54787:4;54771:22;;;;:7;:22;;;;;:57;-1:-1:-1;54720:116:0:o;24140:109::-;24223:18;;24140:109::o;24603:120::-;24670:7;24697:3;:11;;24709:5;24697:18;;;;;;;;;;;;;;;;24690:25;;24603:120;;;;:::o;22419:1420::-;22485:4;22624:19;;;:12;;;:19;;;;;;22660:15;;22656:1176;;23108:18;;-1:-1:-1;;23059:14:0;;;;23108:22;23151:26;;;23147:405;;23198:17;23218:3;:11;;23230:9;23218:22;;;;;;;;;;;;;;;;23198:42;;23372:9;23343:3;:11;;23355:13;23343:26;;;;;;;;;;;;;;;;;;;:38;;;;23457:23;;;:12;;;:23;;;;;:36;;;23147:405;23633:17;;:3;;:17;;;;;;;;;;;;;;;;;;;;;;23728:3;:12;;:19;23741:5;23728:19;;;;;;;;;;;23721:26;;;23771:4;23764:11;;;;;;;22656:1176;23815:5;23808:12;;;;

Swarm Source

ipfs://5ba57b375580eb726456ee3d7c3e751b1126f05783f19fb462d7f4dea959d31f
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.