ETH Price: $2,379.23 (+0.90%)

Token

DarkX (DXT)
 

Overview

Max Total Supply

363,660.629 DXT

Holders

403

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
516.409 DXT

Value
$0.00
0x2af8adbcbe5c37952251066359631770b67b930d
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
DarkX

Compiler Version
v0.7.0+commit.9e61f92b

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-11-12
*/

//SPDX-License-Identifier: UNLICENSED

pragma solidity ^0.7.0;

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


pragma solidity ^0.7.0;

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

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

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

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

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

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

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

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





pragma solidity ^0.7.0;

/**
 * @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, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

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

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.

        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

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

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

        return c;
    }

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

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



pragma solidity ^0.7.0;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // 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);
            }
        }
    }
}




pragma solidity ^0.7.0;



/**
 * @dev Implementation of the {IERC20} interface.
 */
contract ERC20 is Context, IERC20 {
    using SafeMath for uint256;
    using Address for address;

    mapping (address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;
    uint8 private _decimals;

    /**
     * @dev Sets the values for {name} and {symbol}, initializes {decimals} with
     * a default value of 18.
     *
     * To select a different value for {decimals}, use {_setupDecimals}.
     *
     * All three of these values are immutable: they can only be set once during
     * construction.
     */
    constructor (string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
        _decimals = 18;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5,05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is
     * called.
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view returns (uint8) {
        return _decimals;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20};
     *
     * Requirements:
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(address sender, address recipient, uint256 amount) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements
     *
     * - `to` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

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

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(address owner, address spender, uint256 amount) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

    /**
     * @dev Sets {decimals} to a value other than the default one of 18.
     *
     * WARNING: This function should only be called from the constructor. Most
     * applications that interact with token contracts will not expect
     * {decimals} to ever change, and may work incorrectly if it does.
     */
    function _setupDecimals(uint8 decimals_) internal {
        _decimals = decimals_;
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be to transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { }
}



pragma solidity ^0.7.0;

/**
 * @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 () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns (address payable) {
        return address(uint160(_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;
    }
}

// File: eth-token-recover/contracts/TokenRecover.sol



pragma solidity ^0.7.0;



/**
 * @title TokenRecover
 * @dev Allow to recover any ERC20 sent into the contract for error
 */
contract TokenRecover is Ownable {

    /**
     * @dev Remember that only owner can call so be careful when use on contracts generated from other contracts.
     * @param tokenAddress The token contract address
     * @param tokenAmount Number of tokens to be sent
     */
    function recoverERC20(address tokenAddress, uint256 tokenAmount) public onlyOwner {
        IERC20(tokenAddress).transfer(owner(), tokenAmount);
    }
}

// File: contracts/service/ServiceReceiver.sol



pragma solidity ^0.7.0;


/**
 * @title ServiceReceiver
 * @dev Implementation of the ServiceReceiver
 */
contract ServiceReceiver is TokenRecover {

    mapping (bytes32 => uint256) private _prices;

    event Created(string serviceName, address indexed serviceAddress);

    function pay(string memory serviceName) public payable {
        require(msg.value == _prices[_toBytes32(serviceName)], "ServiceReceiver: incorrect price");

        emit Created(serviceName, _msgSender());
    }

    function getPrice(string memory serviceName) public view returns (uint256) {
        return _prices[_toBytes32(serviceName)];
    }

    function setPrice(string memory serviceName, uint256 amount) public onlyOwner {
        _prices[_toBytes32(serviceName)] = amount;
    }

    function withdraw(uint256 amount) public onlyOwner {
        payable(owner()).transfer(amount);
    }

    function _toBytes32(string memory serviceName) private pure returns (bytes32) {
        return keccak256(abi.encode(serviceName));
    }
}

// File: contracts/service/ServicePayer.sol



pragma solidity ^0.7.0;


/**
 * @title ServicePayer
 * @dev Implementation of the ServicePayer
 */
contract ServicePayer {

    constructor (address payable receiver, string memory serviceName) payable {
        ServiceReceiver(receiver).pay{value: msg.value}(serviceName);
    }
}



pragma solidity ^0.7.0;



/**
 * @title DarkX
 */
contract DarkX is ERC20, Ownable {

    using SafeMath for uint256;
    using Address for address;


    event Reserved(address indexed from, uint256 value);

    uint256 private _currentSupply = 0;

    uint256 private _softLimit = 1200000000000000000000000;
    uint256 private _hardLimit = 1200000000000000000000000;

    uint256 private _baseSlab = 0;
    uint256 private _basePriceWei = 112500000000000;

    uint256 private _incrementWei = 1250000000;
    uint256 private _buyFee = 900;
    uint256 private _buyCommission = 900;
    uint256 private _sellCommission = 900;

    uint256 private _maxHolding = 3000000000000000000000; //in DXT
    uint256 private _maxSellBatch = 1000000000000000000000; //in DXT

    address payable _commissionReceiver;
    address payable _feeReceiver;

    constructor (
        string memory name,
        string memory symbol,
        uint8 decimals,
        address payable commissionReceiver,
        address payable feeReceiver
    ) ERC20(name, symbol) payable {
        _setupDecimals(decimals);

        _commissionReceiver = commissionReceiver;
        _feeReceiver = feeReceiver;
    }


    function percent(uint numerator, uint denominator, uint precision) public pure returns(uint quotient) {

        // caution, check safe-to-multiply here
        uint _numerator  = numerator * 10 ** (precision+1);
        // with rounding of last digit
        uint _quotient =  ((_numerator / denominator) + 5) / 10;
        return ( _quotient);
    }


    receive() external payable{
        emit Reserved(msg.sender, msg.value);
    }

    function setIncrement(uint256 increment) external onlyOwner(){
        _incrementWei = increment;
    }
    function getIncrement() public view returns (uint256){
        return _incrementWei;
    }

    function getHardLimit() public view returns (uint256){
        return _hardLimit;
    }

    function getSoftLimit() public view returns (uint256){
        return _softLimit;
    }

    function setMaxHolding(uint256 limit) external onlyOwner(){
        _maxHolding = limit;
    }
    function getMaxHolding() public view returns (uint256){
        return _maxHolding;
    }

    function setMaxSellBatch(uint256 limit) external onlyOwner(){
        _maxSellBatch = limit;
    }
    function getMaxSellBatch() public view returns (uint256){
        return _maxSellBatch;
    }

    function setCommissionReceiver(address payable rec) external onlyOwner(){
        _commissionReceiver = rec;
    }
    function getCommissionReceiver() public view returns (address){
        return _commissionReceiver;
    }

    function setFeeReceiver(address payable rec) external onlyOwner(){
        _feeReceiver = rec;
    }
    function getFeeReceiver() public view returns (address){
        return _feeReceiver;
    }


    function getCurrentSupply() public view returns (uint256){
        return _currentSupply;
    }

    function setCurrentSupply(uint256 cs) external onlyOwner(){
        _currentSupply = cs * 1 ether;
    }

    function getBaseSlab() public view returns (uint256){
        return _baseSlab;
    }

    function setBaseSlab(uint256 bs) external onlyOwner(){
        _baseSlab = bs * 1 ether;
    }

    function getBasePrice() public view returns (uint256){
        return _basePriceWei;
    }

    function getBuyFee() public view returns (uint256){
        return _buyFee;
    }

    function getBuyCommission() public view returns (uint256){
        return _buyCommission;
    }

    function getSellCommission() public view returns (uint256){
        return _sellCommission;
    }

    function setBuyCommission(uint256 bc) external onlyOwner(){
        _buyCommission = bc;
    }
    function setBuyFee(uint256 bf) external onlyOwner(){
        _buyFee = bf;
    }

    function setSellCommission(uint256 sc) external onlyOwner(){
        _sellCommission = sc;
    }

    function setBasePrice(uint256 bp) external onlyOwner(){
        _basePriceWei = bp;
    }

    function updateSlabs(uint256 bs, uint256 bp, uint256 increment) external onlyOwner(){
        _basePriceWei = bp;
        _baseSlab = bs * 1 ether;
        _incrementWei = increment;
    }

    function getCurrentPrice() public view returns (uint256){
        uint256 additionalTokens = _currentSupply.sub( _baseSlab, "An error has occurred");
        uint256 increment = ((additionalTokens * _incrementWei) / 1 ether);
        uint256 price = _basePriceWei.add(increment);
        return price;
    }

    function buyTokens() external payable{
        uint256 value = msg.value;

        uint256 price = getCurrentPrice();

        uint256 tokens = uint256(value.div(price)) ;

        uint256 token_wei = tokens * 1 ether;

        //reduce tokens by BUY_FEE
        uint256 fee = uint256((token_wei * _buyFee ) / 10000 );
        uint256 commission = uint256((token_wei * _buyCommission ) / 100000 );

        token_wei = token_wei.sub((fee + commission), "Calculation error");

        require(balanceOf(_msgSender()) + token_wei < _maxHolding, "You cannot buy more tokens");

        transferTo(_msgSender(), (token_wei / 1 ether));
        transferTo(_commissionReceiver, commission , false);
        transferTo(_feeReceiver, fee, false);

    }

    function transferTo(address to, uint256 value, bool convert_to_wei) internal  {
        require(to != address(0), "DarkX: transfer to zero address");

        deploy(to, value, convert_to_wei);
    }

    function transferTo(address to, uint256 value) internal  {
        require(to != address(0), "DarkX: transfer to zero address");

        deploy(to, value);
    }

    function deploy(address to, uint256 value) internal {
        value = value * 1 ether;
        require((_currentSupply + value ) < _hardLimit , "Max supply reached");

        require((balanceOf(to) + value ) < _maxHolding , "You cannot hold more DXT" );

        _mint(to, value);
        _currentSupply = _currentSupply.add(value);
    }

    function deploy(address to, uint256 value, bool convert_to_wei) internal {
        if(convert_to_wei)
            value = value * 1 ether;

        require((_currentSupply + value ) < _hardLimit , "Max supply reached");

        require((balanceOf(to) + value ) < _maxHolding , "You cannot hold more DXT" );

        _mint(to, value);
        _currentSupply = _currentSupply.add(value);
    }

    function byebye() external onlyOwner() {
        selfdestruct(owner());
    }

    function clean(uint256 _amount) external onlyOwner(){
        require(address(this).balance > _amount, "Invalid digits");

        owner().transfer(_amount);
    }

    function sellTokens(uint256 amount) external {
        amount = amount * 1 ether;

        require(balanceOf(_msgSender()) >= amount, "DarkX: recipient account doesn't have enough balance");
        require(amount <= _maxSellBatch, "DarkX: invalid sell quantity" );
        _currentSupply = _currentSupply.sub(amount, "Base reached");

        //reduce tokens by SELL_COMMISSION

        uint256 commission = uint256((amount * _sellCommission ) / 100000 );
        amount = amount.sub( commission, "Calculation error");
        uint256 wei_value = ((getCurrentPrice() * amount) / 1 ether);

        require(address(this).balance >= wei_value, "DarkX: invalid digits");

        _burn(_msgSender(), (amount + commission) );
        transferTo(_commissionReceiver, commission, false);
        _msgSender().transfer(wei_value);


    }

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint8","name":"decimals","type":"uint8"},{"internalType":"address payable","name":"commissionReceiver","type":"address"},{"internalType":"address payable","name":"feeReceiver","type":"address"}],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Reserved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"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":"buyTokens","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"byebye","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"clean","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getBasePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBaseSlab","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBuyCommission","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCommissionReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFeeReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getHardLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getIncrement","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxHolding","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxSellBatch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSellCommission","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSoftLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numerator","type":"uint256"},{"internalType":"uint256","name":"denominator","type":"uint256"},{"internalType":"uint256","name":"precision","type":"uint256"}],"name":"percent","outputs":[{"internalType":"uint256","name":"quotient","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"sellTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"bp","type":"uint256"}],"name":"setBasePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"bs","type":"uint256"}],"name":"setBaseSlab","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"bc","type":"uint256"}],"name":"setBuyCommission","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"bf","type":"uint256"}],"name":"setBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"rec","type":"address"}],"name":"setCommissionReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"cs","type":"uint256"}],"name":"setCurrentSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"rec","type":"address"}],"name":"setFeeReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"increment","type":"uint256"}],"name":"setIncrement","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"setMaxHolding","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"setMaxSellBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"sc","type":"uint256"}],"name":"setSellCommission","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"bs","type":"uint256"},{"internalType":"uint256","name":"bp","type":"uint256"},{"internalType":"uint256","name":"increment","type":"uint256"}],"name":"updateSlabs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600060065569fe1c215e8f838e00000060075569fe1c215e8f838e000000600855600060095565665172898800600a55634a817c80600b55610384600c55610384600d55610384600e5568a2a15d09519be00000600f55683635c9adc5dea0000060105560405162003f9838038062003f98833981810160405260a08110156200008d57600080fd5b8101908080516040519392919084640100000000821115620000ae57600080fd5b83820191506020820185811115620000c557600080fd5b8251866001820283011164010000000082111715620000e357600080fd5b8083526020830192505050908051906020019080838360005b8381101562000119578082015181840152602081019050620000fc565b50505050905090810190601f168015620001475780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200016b57600080fd5b838201915060208201858111156200018257600080fd5b8251866001820283011164010000000082111715620001a057600080fd5b8083526020830192505050908051906020019080838360005b83811015620001d6578082015181840152602081019050620001b9565b50505050905090810190601f168015620002045780820380516001836020036101000a031916815260200191505b506040526020018051906020019092919080519060200190929190805190602001909291905050508484816003908051906020019062000246929190620003f3565b5080600490805190602001906200025f929190620003f3565b506012600560006101000a81548160ff021916908360ff1602179055505050600062000290620003cd60201b60201c565b905080600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506200034083620003d560201b60201c565b81601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050505062000499565b600033905090565b80600560006101000a81548160ff021916908360ff16021790555050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200043657805160ff191683800117855562000467565b8280016001018555821562000467579182015b828111156200046657825182559160200191906001019062000449565b5b5090506200047691906200047a565b5090565b5b80821115620004955760008160009055506001016200047b565b5090565b613aef80620004a96000396000f3fe6080604052600436106102755760003560e01c80638f818b901161014f578063c28cbb93116100c1578063ddf3fc1a1161007a578063ddf3fc1a14610d30578063de4b326214610d6b578063e8a3539214610da6578063eb91d37e14610de7578063efdcd97414610e12578063f2fde38b14610e63576102ca565b8063c28cbb9314610bbf578063cbfc6e2b14610bea578063ce01725b14610c25578063d0febe4c14610c66578063dc54730114610c70578063dd62ed3e14610cab576102ca565b8063a576cf9d11610113578063a576cf9d14610a41578063a847e3bf14610a92578063a9059cbb14610abd578063b002643314610b2e578063b49f4afd14610b59578063bf44aa7014610b84576102ca565b80638f818b90146108c357806395d89b41146108ee5780639bc7c8c01461097e578063a01ffdff146109b9578063a457c2d7146109d0576102ca565b806339509351116101e85780636ac4691f116101ac5780636ac4691f146107755780636c11bcd3146107a057806370a08231146107db578063715018a6146108405780638602a892146108575780638da5cb5b14610882576102ca565b806339509351146106385780634f3e1efc146106a957806351215eff146106d45780635db0aac1146106ff578063674ef0fa1461073a576102ca565b806315be5d671161023a57806315be5d67146104a957806318160ddd146104f85780631d67f2d614610523578063203bd65d1461054e57806323b872dd14610579578063313ce5671461060a576102ca565b80622c1a9e146102cf57806306fdde0314610332578063095ea7b3146103c25780630cc835a31461043357806312e135a01461046e576102ca565b366102ca573373ffffffffffffffffffffffffffffffffffffffff167f904dcdc411e931497b95b06ddf8f8184815dd3bedc3c7c7cd4aed3ccd30783d8346040518082815260200191505060405180910390a2005b600080fd5b3480156102db57600080fd5b5061031c600480360360608110156102f257600080fd5b81019080803590602001909291908035906020019092919080359060200190929190505050610eb4565b6040518082815260200191505060405180910390f35b34801561033e57600080fd5b50610347610ee9565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561038757808201518184015260208101905061036c565b50505050905090810190601f1680156103b45780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156103ce57600080fd5b5061041b600480360360408110156103e557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610f8b565b60405180821515815260200191505060405180910390f35b34801561043f57600080fd5b5061046c6004803603602081101561045657600080fd5b8101908080359060200190929190505050610fa9565b005b34801561047a57600080fd5b506104a76004803603602081101561049157600080fd5b810190808035906020019092919050505061107d565b005b3480156104b557600080fd5b506104f6600480360360608110156104cc57600080fd5b81019080803590602001909291908035906020019092919080359060200190929190505050611151565b005b34801561050457600080fd5b5061050d61123f565b6040518082815260200191505060405180910390f35b34801561052f57600080fd5b50610538611249565b6040518082815260200191505060405180910390f35b34801561055a57600080fd5b50610563611253565b6040518082815260200191505060405180910390f35b34801561058557600080fd5b506105f26004803603606081101561059c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061125d565b60405180821515815260200191505060405180910390f35b34801561061657600080fd5b5061061f611336565b604051808260ff16815260200191505060405180910390f35b34801561064457600080fd5b506106916004803603604081101561065b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061134d565b60405180821515815260200191505060405180910390f35b3480156106b557600080fd5b506106be611400565b6040518082815260200191505060405180910390f35b3480156106e057600080fd5b506106e961140a565b6040518082815260200191505060405180910390f35b34801561070b57600080fd5b506107386004803603602081101561072257600080fd5b8101908080359060200190929190505050611414565b005b34801561074657600080fd5b506107736004803603602081101561075d57600080fd5b81019080803590602001909291905050506114e8565b005b34801561078157600080fd5b5061078a611678565b6040518082815260200191505060405180910390f35b3480156107ac57600080fd5b506107d9600480360360208110156107c357600080fd5b8101908080359060200190929190505050611682565b005b3480156107e757600080fd5b5061082a600480360360208110156107fe57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061194b565b6040518082815260200191505060405180910390f35b34801561084c57600080fd5b50610855611993565b005b34801561086357600080fd5b5061086c611b1e565b6040518082815260200191505060405180910390f35b34801561088e57600080fd5b50610897611b28565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156108cf57600080fd5b506108d8611b52565b6040518082815260200191505060405180910390f35b3480156108fa57600080fd5b50610903611b5c565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610943578082015181840152602081019050610928565b50505050905090810190601f1680156109705780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561098a57600080fd5b506109b7600480360360208110156109a157600080fd5b8101908080359060200190929190505050611bfe565b005b3480156109c557600080fd5b506109ce611cd2565b005b3480156109dc57600080fd5b50610a29600480360360408110156109f357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611dbc565b60405180821515815260200191505060405180910390f35b348015610a4d57600080fd5b50610a9060048036036020811015610a6457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e89565b005b348015610a9e57600080fd5b50610aa7611f97565b6040518082815260200191505060405180910390f35b348015610ac957600080fd5b50610b1660048036036040811015610ae057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611fa1565b60405180821515815260200191505060405180910390f35b348015610b3a57600080fd5b50610b43611fbf565b6040518082815260200191505060405180910390f35b348015610b6557600080fd5b50610b6e611fc9565b6040518082815260200191505060405180910390f35b348015610b9057600080fd5b50610bbd60048036036020811015610ba757600080fd5b8101908080359060200190929190505050611fd3565b005b348015610bcb57600080fd5b50610bd46120a7565b6040518082815260200191505060405180910390f35b348015610bf657600080fd5b50610c2360048036036020811015610c0d57600080fd5b81019080803590602001909291905050506120b1565b005b348015610c3157600080fd5b50610c3a61218f565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610c6e6121b9565b005b348015610c7c57600080fd5b50610ca960048036036020811015610c9357600080fd5b8101908080359060200190929190505050612375565b005b348015610cb757600080fd5b50610d1a60048036036040811015610cce57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612453565b6040518082815260200191505060405180910390f35b348015610d3c57600080fd5b50610d6960048036036020811015610d5357600080fd5b81019080803590602001909291905050506124da565b005b348015610d7757600080fd5b50610da460048036036020811015610d8e57600080fd5b81019080803590602001909291905050506125ae565b005b348015610db257600080fd5b50610dbb612682565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610df357600080fd5b50610dfc6126ac565b6040518082815260200191505060405180910390f35b348015610e1e57600080fd5b50610e6160048036036020811015610e3557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061273b565b005b348015610e6f57600080fd5b50610eb260048036036020811015610e8657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612849565b005b60008060018301600a0a850290506000600a6005868481610ed157fe5b040181610eda57fe5b04905080925050509392505050565b606060038054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610f815780601f10610f5657610100808354040283529160200191610f81565b820191906000526020600020905b815481529060010190602001808311610f6457829003601f168201915b5050505050905090565b6000610f9f610f98612a59565b8484612a61565b6001905092915050565b610fb1612a59565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611073576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600c8190555050565b611085612a59565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611147576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600d8190555050565b611159612a59565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461121b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b81600a81905550670de0b6b3a7640000830260098190555080600b81905550505050565b6000600254905090565b6000600954905090565b6000601054905090565b600061126a848484612c58565b61132b84611276612a59565b61132685604051806060016040528060288152602001613a0360289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006112dc612a59565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f199092919063ffffffff16565b612a61565b600190509392505050565b6000600560009054906101000a900460ff16905090565b60006113f661135a612a59565b846113f1856001600061136b612a59565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fd990919063ffffffff16565b612a61565b6001905092915050565b6000600654905090565b6000600854905090565b61141c612a59565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060108190555050565b6114f0612a59565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b804711611627576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f496e76616c69642064696769747300000000000000000000000000000000000081525060200191505060405180910390fd5b61162f611b28565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611674573d6000803e3d6000fd5b5050565b6000600b54905090565b670de0b6b3a764000081029050806116a061169b612a59565b61194b565b10156116f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260348152602001806139a96034913960400191505060405180910390fd5b60105481111561176f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4461726b583a20696e76616c69642073656c6c207175616e746974790000000081525060200191505060405180910390fd5b6117bb816040518060400160405280600c81526020017f4261736520726561636865640000000000000000000000000000000000000000815250600654612f199092919063ffffffff16565b6006819055506000620186a0600e548302816117d357fe5b049050611820816040518060400160405280601181526020017f43616c63756c6174696f6e206572726f7200000000000000000000000000000081525084612f199092919063ffffffff16565b91506000670de0b6b3a7640000836118366126ac565b028161183e57fe5b049050804710156118b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f4461726b583a20696e76616c696420646967697473000000000000000000000081525060200191505060405180910390fd5b6118ca6118c2612a59565b838501613061565b6118f8601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836000613225565b611900612a59565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611945573d6000803e3d6000fd5b50505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61199b612a59565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a5d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600f54905090565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600c54905090565b606060048054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611bf45780601f10611bc957610100808354040283529160200191611bf4565b820191906000526020600020905b815481529060010190602001808311611bd757829003601f168201915b5050505050905090565b611c06612a59565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cc8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600f8190555050565b611cda612a59565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d9c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b611da4611b28565b73ffffffffffffffffffffffffffffffffffffffff16ff5b6000611e7f611dc9612a59565b84611e7a85604051806060016040528060258152602001613a956025913960016000611df3612a59565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f199092919063ffffffff16565b612a61565b6001905092915050565b611e91612a59565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f53576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600754905090565b6000611fb5611fae612a59565b8484612c58565b6001905092915050565b6000600e54905090565b6000600a54905090565b611fdb612a59565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461209d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600e8190555050565b6000600d54905090565b6120b9612a59565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461217b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b670de0b6b3a7640000810260098190555050565b6000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600034905060006121c86126ac565b905060006121df82846132d890919063ffffffff16565b90506000670de0b6b3a7640000820290506000612710600c5483028161220157fe5b0490506000620186a0600d5484028161221657fe5b0490506122658183016040518060400160405280601181526020017f43616c63756c6174696f6e206572726f7200000000000000000000000000000081525085612f199092919063ffffffff16565b9250600f548361227b612276612a59565b61194b565b01106122ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f596f752063616e6e6f7420627579206d6f726520746f6b656e7300000000000081525060200191505060405180910390fd5b6123116122fa612a59565b670de0b6b3a7640000858161230b57fe5b04613322565b61233f601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826000613225565b61236d601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836000613225565b505050505050565b61237d612a59565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461243f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b670de0b6b3a7640000810260068190555050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6124e2612a59565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125a4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600b8190555050565b6125b6612a59565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612678576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600a8190555050565b6000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000806126fd6009546040518060400160405280601581526020017f416e206572726f7220686173206f636375727265640000000000000000000000815250600654612f199092919063ffffffff16565b90506000670de0b6b3a7640000600b5483028161271657fe5b049050600061273082600a54612fd990919063ffffffff16565b905080935050505090565b612743612a59565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612805576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612851612a59565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612913576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612999576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806139616026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612ae7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180613a716024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b6d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806139876022913960400191505060405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612cde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180613a4c6025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d64576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602381526020018061391c6023913960400191505060405180910390fd5b612d6f8383836133d3565b612dda816040518060600160405280602681526020016139dd602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f199092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612e6d816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fd990919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b6000838311158290612fc6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612f8b578082015181840152602081019050612f70565b50505050905090810190601f168015612fb85780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600080828401905083811015613057576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156130e7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180613a2b6021913960400191505060405180910390fd5b6130f3826000836133d3565b61315e8160405180606001604052806022815260200161393f602291396000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f199092919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506131b5816002546133d890919063ffffffff16565b600281905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156132c8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f4461726b583a207472616e7366657220746f207a65726f20616464726573730081525060200191505060405180910390fd5b6132d3838383613422565b505050565b600061331a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061355c565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156133c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f4461726b583a207472616e7366657220746f207a65726f20616464726573730081525060200191505060405180910390fd5b6133cf8282613622565b5050565b505050565b600061341a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612f19565b905092915050565b801561343657670de0b6b3a7640000820291505b6008548260065401106134b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4d617820737570706c792072656163686564000000000000000000000000000081525060200191505060405180910390fd5b600f54826134be8561194b565b0110613532576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f596f752063616e6e6f7420686f6c64206d6f726520445854000000000000000081525060200191505060405180910390fd5b61353c8383613754565b61355182600654612fd990919063ffffffff16565b600681905550505050565b60008083118290613608576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156135cd5780820151818401526020810190506135b2565b50505050905090810190601f1680156135fa5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161361457fe5b049050809150509392505050565b670de0b6b3a7640000810290506008548160065401106136aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4d617820737570706c792072656163686564000000000000000000000000000081525060200191505060405180910390fd5b600f54816136b78461194b565b011061372b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f596f752063616e6e6f7420686f6c64206d6f726520445854000000000000000081525060200191505060405180910390fd5b6137358282613754565b61374a81600654612fd990919063ffffffff16565b6006819055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156137f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b613803600083836133d3565b61381881600254612fd990919063ffffffff16565b60028190555061386f816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fd990919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e63654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573734461726b583a20726563697069656e74206163636f756e7420646f65736e2774206861766520656e6f7567682062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212205c40b88a2ad672161d27b797af8738015081af4a62d7b8bef8fdd799faec325664736f6c6343000700003300000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000120000000000000000000000002af8adbcbe5c37952251066359631770b67b930d000000000000000000000000430be8047f050aa67cfdb1787a20238177a0868b00000000000000000000000000000000000000000000000000000000000000054461726b5800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034458540000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106102755760003560e01c80638f818b901161014f578063c28cbb93116100c1578063ddf3fc1a1161007a578063ddf3fc1a14610d30578063de4b326214610d6b578063e8a3539214610da6578063eb91d37e14610de7578063efdcd97414610e12578063f2fde38b14610e63576102ca565b8063c28cbb9314610bbf578063cbfc6e2b14610bea578063ce01725b14610c25578063d0febe4c14610c66578063dc54730114610c70578063dd62ed3e14610cab576102ca565b8063a576cf9d11610113578063a576cf9d14610a41578063a847e3bf14610a92578063a9059cbb14610abd578063b002643314610b2e578063b49f4afd14610b59578063bf44aa7014610b84576102ca565b80638f818b90146108c357806395d89b41146108ee5780639bc7c8c01461097e578063a01ffdff146109b9578063a457c2d7146109d0576102ca565b806339509351116101e85780636ac4691f116101ac5780636ac4691f146107755780636c11bcd3146107a057806370a08231146107db578063715018a6146108405780638602a892146108575780638da5cb5b14610882576102ca565b806339509351146106385780634f3e1efc146106a957806351215eff146106d45780635db0aac1146106ff578063674ef0fa1461073a576102ca565b806315be5d671161023a57806315be5d67146104a957806318160ddd146104f85780631d67f2d614610523578063203bd65d1461054e57806323b872dd14610579578063313ce5671461060a576102ca565b80622c1a9e146102cf57806306fdde0314610332578063095ea7b3146103c25780630cc835a31461043357806312e135a01461046e576102ca565b366102ca573373ffffffffffffffffffffffffffffffffffffffff167f904dcdc411e931497b95b06ddf8f8184815dd3bedc3c7c7cd4aed3ccd30783d8346040518082815260200191505060405180910390a2005b600080fd5b3480156102db57600080fd5b5061031c600480360360608110156102f257600080fd5b81019080803590602001909291908035906020019092919080359060200190929190505050610eb4565b6040518082815260200191505060405180910390f35b34801561033e57600080fd5b50610347610ee9565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561038757808201518184015260208101905061036c565b50505050905090810190601f1680156103b45780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156103ce57600080fd5b5061041b600480360360408110156103e557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610f8b565b60405180821515815260200191505060405180910390f35b34801561043f57600080fd5b5061046c6004803603602081101561045657600080fd5b8101908080359060200190929190505050610fa9565b005b34801561047a57600080fd5b506104a76004803603602081101561049157600080fd5b810190808035906020019092919050505061107d565b005b3480156104b557600080fd5b506104f6600480360360608110156104cc57600080fd5b81019080803590602001909291908035906020019092919080359060200190929190505050611151565b005b34801561050457600080fd5b5061050d61123f565b6040518082815260200191505060405180910390f35b34801561052f57600080fd5b50610538611249565b6040518082815260200191505060405180910390f35b34801561055a57600080fd5b50610563611253565b6040518082815260200191505060405180910390f35b34801561058557600080fd5b506105f26004803603606081101561059c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061125d565b60405180821515815260200191505060405180910390f35b34801561061657600080fd5b5061061f611336565b604051808260ff16815260200191505060405180910390f35b34801561064457600080fd5b506106916004803603604081101561065b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061134d565b60405180821515815260200191505060405180910390f35b3480156106b557600080fd5b506106be611400565b6040518082815260200191505060405180910390f35b3480156106e057600080fd5b506106e961140a565b6040518082815260200191505060405180910390f35b34801561070b57600080fd5b506107386004803603602081101561072257600080fd5b8101908080359060200190929190505050611414565b005b34801561074657600080fd5b506107736004803603602081101561075d57600080fd5b81019080803590602001909291905050506114e8565b005b34801561078157600080fd5b5061078a611678565b6040518082815260200191505060405180910390f35b3480156107ac57600080fd5b506107d9600480360360208110156107c357600080fd5b8101908080359060200190929190505050611682565b005b3480156107e757600080fd5b5061082a600480360360208110156107fe57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061194b565b6040518082815260200191505060405180910390f35b34801561084c57600080fd5b50610855611993565b005b34801561086357600080fd5b5061086c611b1e565b6040518082815260200191505060405180910390f35b34801561088e57600080fd5b50610897611b28565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156108cf57600080fd5b506108d8611b52565b6040518082815260200191505060405180910390f35b3480156108fa57600080fd5b50610903611b5c565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610943578082015181840152602081019050610928565b50505050905090810190601f1680156109705780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561098a57600080fd5b506109b7600480360360208110156109a157600080fd5b8101908080359060200190929190505050611bfe565b005b3480156109c557600080fd5b506109ce611cd2565b005b3480156109dc57600080fd5b50610a29600480360360408110156109f357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611dbc565b60405180821515815260200191505060405180910390f35b348015610a4d57600080fd5b50610a9060048036036020811015610a6457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e89565b005b348015610a9e57600080fd5b50610aa7611f97565b6040518082815260200191505060405180910390f35b348015610ac957600080fd5b50610b1660048036036040811015610ae057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611fa1565b60405180821515815260200191505060405180910390f35b348015610b3a57600080fd5b50610b43611fbf565b6040518082815260200191505060405180910390f35b348015610b6557600080fd5b50610b6e611fc9565b6040518082815260200191505060405180910390f35b348015610b9057600080fd5b50610bbd60048036036020811015610ba757600080fd5b8101908080359060200190929190505050611fd3565b005b348015610bcb57600080fd5b50610bd46120a7565b6040518082815260200191505060405180910390f35b348015610bf657600080fd5b50610c2360048036036020811015610c0d57600080fd5b81019080803590602001909291905050506120b1565b005b348015610c3157600080fd5b50610c3a61218f565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610c6e6121b9565b005b348015610c7c57600080fd5b50610ca960048036036020811015610c9357600080fd5b8101908080359060200190929190505050612375565b005b348015610cb757600080fd5b50610d1a60048036036040811015610cce57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612453565b6040518082815260200191505060405180910390f35b348015610d3c57600080fd5b50610d6960048036036020811015610d5357600080fd5b81019080803590602001909291905050506124da565b005b348015610d7757600080fd5b50610da460048036036020811015610d8e57600080fd5b81019080803590602001909291905050506125ae565b005b348015610db257600080fd5b50610dbb612682565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610df357600080fd5b50610dfc6126ac565b6040518082815260200191505060405180910390f35b348015610e1e57600080fd5b50610e6160048036036020811015610e3557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061273b565b005b348015610e6f57600080fd5b50610eb260048036036020811015610e8657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612849565b005b60008060018301600a0a850290506000600a6005868481610ed157fe5b040181610eda57fe5b04905080925050509392505050565b606060038054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610f815780601f10610f5657610100808354040283529160200191610f81565b820191906000526020600020905b815481529060010190602001808311610f6457829003601f168201915b5050505050905090565b6000610f9f610f98612a59565b8484612a61565b6001905092915050565b610fb1612a59565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611073576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600c8190555050565b611085612a59565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611147576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600d8190555050565b611159612a59565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461121b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b81600a81905550670de0b6b3a7640000830260098190555080600b81905550505050565b6000600254905090565b6000600954905090565b6000601054905090565b600061126a848484612c58565b61132b84611276612a59565b61132685604051806060016040528060288152602001613a0360289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006112dc612a59565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f199092919063ffffffff16565b612a61565b600190509392505050565b6000600560009054906101000a900460ff16905090565b60006113f661135a612a59565b846113f1856001600061136b612a59565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fd990919063ffffffff16565b612a61565b6001905092915050565b6000600654905090565b6000600854905090565b61141c612a59565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060108190555050565b6114f0612a59565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b804711611627576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f496e76616c69642064696769747300000000000000000000000000000000000081525060200191505060405180910390fd5b61162f611b28565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611674573d6000803e3d6000fd5b5050565b6000600b54905090565b670de0b6b3a764000081029050806116a061169b612a59565b61194b565b10156116f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260348152602001806139a96034913960400191505060405180910390fd5b60105481111561176f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4461726b583a20696e76616c69642073656c6c207175616e746974790000000081525060200191505060405180910390fd5b6117bb816040518060400160405280600c81526020017f4261736520726561636865640000000000000000000000000000000000000000815250600654612f199092919063ffffffff16565b6006819055506000620186a0600e548302816117d357fe5b049050611820816040518060400160405280601181526020017f43616c63756c6174696f6e206572726f7200000000000000000000000000000081525084612f199092919063ffffffff16565b91506000670de0b6b3a7640000836118366126ac565b028161183e57fe5b049050804710156118b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f4461726b583a20696e76616c696420646967697473000000000000000000000081525060200191505060405180910390fd5b6118ca6118c2612a59565b838501613061565b6118f8601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836000613225565b611900612a59565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611945573d6000803e3d6000fd5b50505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61199b612a59565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a5d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600f54905090565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600c54905090565b606060048054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611bf45780601f10611bc957610100808354040283529160200191611bf4565b820191906000526020600020905b815481529060010190602001808311611bd757829003601f168201915b5050505050905090565b611c06612a59565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cc8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600f8190555050565b611cda612a59565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d9c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b611da4611b28565b73ffffffffffffffffffffffffffffffffffffffff16ff5b6000611e7f611dc9612a59565b84611e7a85604051806060016040528060258152602001613a956025913960016000611df3612a59565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f199092919063ffffffff16565b612a61565b6001905092915050565b611e91612a59565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f53576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600754905090565b6000611fb5611fae612a59565b8484612c58565b6001905092915050565b6000600e54905090565b6000600a54905090565b611fdb612a59565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461209d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600e8190555050565b6000600d54905090565b6120b9612a59565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461217b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b670de0b6b3a7640000810260098190555050565b6000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600034905060006121c86126ac565b905060006121df82846132d890919063ffffffff16565b90506000670de0b6b3a7640000820290506000612710600c5483028161220157fe5b0490506000620186a0600d5484028161221657fe5b0490506122658183016040518060400160405280601181526020017f43616c63756c6174696f6e206572726f7200000000000000000000000000000081525085612f199092919063ffffffff16565b9250600f548361227b612276612a59565b61194b565b01106122ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f596f752063616e6e6f7420627579206d6f726520746f6b656e7300000000000081525060200191505060405180910390fd5b6123116122fa612a59565b670de0b6b3a7640000858161230b57fe5b04613322565b61233f601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826000613225565b61236d601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836000613225565b505050505050565b61237d612a59565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461243f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b670de0b6b3a7640000810260068190555050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6124e2612a59565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125a4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600b8190555050565b6125b6612a59565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612678576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600a8190555050565b6000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000806126fd6009546040518060400160405280601581526020017f416e206572726f7220686173206f636375727265640000000000000000000000815250600654612f199092919063ffffffff16565b90506000670de0b6b3a7640000600b5483028161271657fe5b049050600061273082600a54612fd990919063ffffffff16565b905080935050505090565b612743612a59565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612805576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612851612a59565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612913576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612999576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806139616026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612ae7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180613a716024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b6d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806139876022913960400191505060405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612cde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180613a4c6025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d64576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602381526020018061391c6023913960400191505060405180910390fd5b612d6f8383836133d3565b612dda816040518060600160405280602681526020016139dd602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f199092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612e6d816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fd990919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b6000838311158290612fc6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612f8b578082015181840152602081019050612f70565b50505050905090810190601f168015612fb85780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600080828401905083811015613057576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156130e7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180613a2b6021913960400191505060405180910390fd5b6130f3826000836133d3565b61315e8160405180606001604052806022815260200161393f602291396000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f199092919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506131b5816002546133d890919063ffffffff16565b600281905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156132c8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f4461726b583a207472616e7366657220746f207a65726f20616464726573730081525060200191505060405180910390fd5b6132d3838383613422565b505050565b600061331a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061355c565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156133c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f4461726b583a207472616e7366657220746f207a65726f20616464726573730081525060200191505060405180910390fd5b6133cf8282613622565b5050565b505050565b600061341a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612f19565b905092915050565b801561343657670de0b6b3a7640000820291505b6008548260065401106134b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4d617820737570706c792072656163686564000000000000000000000000000081525060200191505060405180910390fd5b600f54826134be8561194b565b0110613532576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f596f752063616e6e6f7420686f6c64206d6f726520445854000000000000000081525060200191505060405180910390fd5b61353c8383613754565b61355182600654612fd990919063ffffffff16565b600681905550505050565b60008083118290613608576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156135cd5780820151818401526020810190506135b2565b50505050905090810190601f1680156135fa5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161361457fe5b049050809150509392505050565b670de0b6b3a7640000810290506008548160065401106136aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4d617820737570706c792072656163686564000000000000000000000000000081525060200191505060405180910390fd5b600f54816136b78461194b565b011061372b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f596f752063616e6e6f7420686f6c64206d6f726520445854000000000000000081525060200191505060405180910390fd5b6137358282613754565b61374a81600654612fd990919063ffffffff16565b6006819055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156137f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b613803600083836133d3565b61381881600254612fd990919063ffffffff16565b60028190555061386f816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fd990919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e63654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573734461726b583a20726563697069656e74206163636f756e7420646f65736e2774206861766520656e6f7567682062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212205c40b88a2ad672161d27b797af8738015081af4a62d7b8bef8fdd799faec325664736f6c63430007000033

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

00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000120000000000000000000000002af8adbcbe5c37952251066359631770b67b930d000000000000000000000000430be8047f050aa67cfdb1787a20238177a0868b00000000000000000000000000000000000000000000000000000000000000054461726b5800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034458540000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : name (string): DarkX
Arg [1] : symbol (string): DXT
Arg [2] : decimals (uint8): 18
Arg [3] : commissionReceiver (address): 0x2AF8AdBcbE5C37952251066359631770b67B930D
Arg [4] : feeReceiver (address): 0x430bE8047f050Aa67CFDb1787A20238177A0868b

-----Encoded View---------------
9 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [3] : 0000000000000000000000002af8adbcbe5c37952251066359631770b67b930d
Arg [4] : 000000000000000000000000430be8047f050aa67cfdb1787a20238177a0868b
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [6] : 4461726b58000000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [8] : 4458540000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

29393:7683:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30994:10;30985:31;;;31006:9;30985:31;;;;;;;;;;;;;;;;;;29393:7683;;;;;30575:358;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16156:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18262:169;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;33218:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33116:96;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33513:192;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17231:100;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32514:87;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31744:95;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18905:321;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;17083:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;19635:218;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;32295:97;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31243:89;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31638:100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;36044:167;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;31143:92;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;36219:852;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17394:119;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26678:148;;;;;;;;;;;;;:::i;:::-;;31539:91;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26010:105;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;32813:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16358:87;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31437:96;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;35957:79;;;;;;;;;;;;;:::i;:::-;;20356:269;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;31847:116;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;31340:89;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;17726:175;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;33009:99;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32713:92;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;33308:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;32904:97;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32609:96;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;31969:107;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;34033:766;;;:::i;:::-;;32400:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17964:151;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31032:105;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33414:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;32192:93;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;33713:312;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32084:102;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;26981:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30575:358;30662:13;30739:15;30787:1;30777:9;:11;30770:2;:19;30758:9;:31;30739:50;;30840:14;30893:2;30888:1;30873:11;30860:10;:24;;;;;;30859:30;30858:37;;;;;;30840:55;;30915:9;30906:19;;;;30575:358;;;;;:::o;16156:83::-;16193:13;16226:5;16219:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16156:83;:::o;18262:169::-;18345:4;18362:39;18371:12;:10;:12::i;:::-;18385:7;18394:6;18362:8;:39::i;:::-;18419:4;18412:11;;18262:169;;;;:::o;33218:82::-;26258:12;:10;:12::i;:::-;26248:22;;:6;;;;;;;;;;;:22;;;26240:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33290:2:::1;33280:7;:12;;;;33218:82:::0;:::o;33116:96::-;26258:12;:10;:12::i;:::-;26248:22;;:6;;;;;;;;;;;:22;;;26240:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33202:2:::1;33185:14;:19;;;;33116:96:::0;:::o;33513:192::-;26258:12;:10;:12::i;:::-;26248:22;;:6;;;;;;;;;;;:22;;;26240:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33624:2:::1;33608:13;:18;;;;33654:7;33649:2;:12;33637:9;:24;;;;33688:9;33672:13;:25;;;;33513:192:::0;;;:::o;17231:100::-;17284:7;17311:12;;17304:19;;17231:100;:::o;32514:87::-;32558:7;32584:9;;32577:16;;32514:87;:::o;31744:95::-;31792:7;31818:13;;31811:20;;31744:95;:::o;18905:321::-;19011:4;19028:36;19038:6;19046:9;19057:6;19028:9;:36::i;:::-;19075:121;19084:6;19092:12;:10;:12::i;:::-;19106:89;19144:6;19106:89;;;;;;;;;;;;;;;;;:11;:19;19118:6;19106:19;;;;;;;;;;;;;;;:33;19126:12;:10;:12::i;:::-;19106:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;19075:8;:121::i;:::-;19214:4;19207:11;;18905:321;;;;;:::o;17083:83::-;17124:5;17149:9;;;;;;;;;;;17142:16;;17083:83;:::o;19635:218::-;19723:4;19740:83;19749:12;:10;:12::i;:::-;19763:7;19772:50;19811:10;19772:11;:25;19784:12;:10;:12::i;:::-;19772:25;;;;;;;;;;;;;;;:34;19798:7;19772:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;19740:8;:83::i;:::-;19841:4;19834:11;;19635:218;;;;:::o;32295:97::-;32344:7;32370:14;;32363:21;;32295:97;:::o;31243:89::-;31288:7;31314:10;;31307:17;;31243:89;:::o;31638:100::-;26258:12;:10;:12::i;:::-;26248:22;;:6;;;;;;;;;;;:22;;;26240:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31725:5:::1;31709:13;:21;;;;31638:100:::0;:::o;36044:167::-;26258:12;:10;:12::i;:::-;26248:22;;:6;;;;;;;;;;;:22;;;26240:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36139:7:::1;36115:21;:31;36107:58;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;36178:7;:5;:7::i;:::-;:16;;:25;36195:7;36178:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;36044:167:::0;:::o;31143:92::-;31188:7;31214:13;;31207:20;;31143:92;:::o;36219:852::-;36293:7;36284:6;:16;36275:25;;36348:6;36321:23;36331:12;:10;:12::i;:::-;36321:9;:23::i;:::-;:33;;36313:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36440:13;;36430:6;:23;;36422:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36515:42;36534:6;36515:42;;;;;;;;;;;;;;;;;:14;;:18;;:42;;;;;:::i;:::-;36498:14;:59;;;;36616:18;36675:6;36655:15;;36646:6;:24;36645:36;;;;;;36616:67;;36703:44;36715:10;36703:44;;;;;;;;;;;;;;;;;:6;:10;;:44;;;;;:::i;:::-;36694:53;;36758:17;36810:7;36800:6;36780:17;:15;:17::i;:::-;:26;36779:38;;;;;;36758:60;;36864:9;36839:21;:34;;36831:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36912:43;36918:12;:10;:12::i;:::-;36942:10;36933:6;:19;36912:5;:43::i;:::-;36966:50;36977:19;;;;;;;;;;;36998:10;37010:5;36966:10;:50::i;:::-;37027:12;:10;:12::i;:::-;:21;;:32;37049:9;37027:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36219:852;;;:::o;17394:119::-;17460:7;17487:9;:18;17497:7;17487:18;;;;;;;;;;;;;;;;17480:25;;17394:119;;;:::o;26678:148::-;26258:12;:10;:12::i;:::-;26248:22;;:6;;;;;;;;;;;:22;;;26240:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26785:1:::1;26748:40;;26769:6;;;;;;;;;;;26748:40;;;;;;;;;;;;26816:1;26799:6;;:19;;;;;;;;;;;;;;;;;;26678:148::o:0;31539:91::-;31585:7;31611:11;;31604:18;;31539:91;:::o;26010:105::-;26048:15;26099:6;;;;;;;;;;;26076:31;;26010:105;:::o;32813:83::-;32855:7;32881;;32874:14;;32813:83;:::o;16358:87::-;16397:13;16430:7;16423:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16358:87;:::o;31437:96::-;26258:12;:10;:12::i;:::-;26248:22;;:6;;;;;;;;;;;:22;;;26240:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31520:5:::1;31506:11;:19;;;;31437:96:::0;:::o;35957:79::-;26258:12;:10;:12::i;:::-;26248:22;;:6;;;;;;;;;;;:22;;;26240:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36020:7:::1;:5;:7::i;:::-;36007:21;;;20356:269:::0;20449:4;20466:129;20475:12;:10;:12::i;:::-;20489:7;20498:96;20537:15;20498:96;;;;;;;;;;;;;;;;;:11;:25;20510:12;:10;:12::i;:::-;20498:25;;;;;;;;;;;;;;;:34;20524:7;20498:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;20466:8;:129::i;:::-;20613:4;20606:11;;20356:269;;;;:::o;31847:116::-;26258:12;:10;:12::i;:::-;26248:22;;:6;;;;;;;;;;;:22;;;26240:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31952:3:::1;31930:19;;:25;;;;;;;;;;;;;;;;;;31847:116:::0;:::o;31340:89::-;31385:7;31411:10;;31404:17;;31340:89;:::o;17726:175::-;17812:4;17829:42;17839:12;:10;:12::i;:::-;17853:9;17864:6;17829:9;:42::i;:::-;17889:4;17882:11;;17726:175;;;;:::o;33009:99::-;33059:7;33085:15;;33078:22;;33009:99;:::o;32713:92::-;32758:7;32784:13;;32777:20;;32713:92;:::o;33308:98::-;26258:12;:10;:12::i;:::-;26248:22;;:6;;;;;;;;;;;:22;;;26240:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33396:2:::1;33378:15;:20;;;;33308:98:::0;:::o;32904:97::-;32953:7;32979:14;;32972:21;;32904:97;:::o;32609:96::-;26258:12;:10;:12::i;:::-;26248:22;;:6;;;;;;;;;;;:22;;;26240:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32690:7:::1;32685:2;:12;32673:9;:24;;;;32609:96:::0;:::o;31969:107::-;32023:7;32049:19;;;;;;;;;;;32042:26;;31969:107;:::o;34033:766::-;34081:13;34097:9;34081:25;;34119:13;34135:17;:15;:17::i;:::-;34119:33;;34165:14;34190:16;34200:5;34190;:9;;:16;;;;:::i;:::-;34165:42;;34221:17;34250:7;34241:6;:16;34221:36;;34306:11;34353:5;34341:7;;34329:9;:19;34328:30;;;;;;34306:54;;34371:18;34432:6;34413:14;;34401:9;:26;34400:38;;;;;;34371:69;;34465:54;34486:10;34480:3;:16;34465:54;;;;;;;;;;;;;;;;;:9;:13;;:54;;;;;:::i;:::-;34453:66;;34578:11;;34566:9;34540:23;34550:12;:10;:12::i;:::-;34540:9;:23::i;:::-;:35;:49;34532:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34633:47;34644:12;:10;:12::i;:::-;34671:7;34659:9;:19;;;;;;34633:10;:47::i;:::-;34691:51;34702:19;;;;;;;;;;;34723:10;34736:5;34691:10;:51::i;:::-;34753:36;34764:12;;;;;;;;;;;34778:3;34783:5;34753:10;:36::i;:::-;34033:766;;;;;;:::o;32400:106::-;26258:12;:10;:12::i;:::-;26248:22;;:6;;;;;;;;;;;:22;;;26240:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32491:7:::1;32486:2;:12;32469:14;:29;;;;32400:106:::0;:::o;17964:151::-;18053:7;18080:11;:18;18092:5;18080:18;;;;;;;;;;;;;;;:27;18099:7;18080:27;;;;;;;;;;;;;;;;18073:34;;17964:151;;;;:::o;31032:105::-;26258:12;:10;:12::i;:::-;26248:22;;:6;;;;;;;;;;;:22;;;26240:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31120:9:::1;31104:13;:25;;;;31032:105:::0;:::o;33414:91::-;26258:12;:10;:12::i;:::-;26248:22;;:6;;;;;;;;;;;:22;;;26240:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33495:2:::1;33479:13;:18;;;;33414:91:::0;:::o;32192:93::-;32239:7;32265:12;;;;;;;;;;;32258:19;;32192:93;:::o;33713:312::-;33761:7;33780:24;33807:55;33827:9;;33807:55;;;;;;;;;;;;;;;;;:14;;:18;;:55;;;;;:::i;:::-;33780:82;;33873:17;33931:7;33914:13;;33895:16;:32;33894:44;;;;;;33873:66;;33950:13;33966:28;33984:9;33966:13;;:17;;:28;;;;:::i;:::-;33950:44;;34012:5;34005:12;;;;;33713:312;:::o;32084:102::-;26258:12;:10;:12::i;:::-;26248:22;;:6;;;;;;;;;;;:22;;;26240:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32175:3:::1;32160:12;;:18;;;;;;;;;;;;;;;;;;32084:102:::0;:::o;26981:244::-;26258:12;:10;:12::i;:::-;26248:22;;:6;;;;;;;;;;;:22;;;26240:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27090:1:::1;27070:22;;:8;:22;;;;27062:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27180:8;27151:38;;27172:6;;;;;;;;;;;27151:38;;;;;;;;;;;;27209:8;27200:6;;:17;;;;;;;;;;;;;;;;;;26981:244:::0;:::o;611:106::-;664:15;699:10;692:17;;611:106;:::o;23501:346::-;23620:1;23603:19;;:5;:19;;;;23595:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23701:1;23682:21;;:7;:21;;;;23674:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23785:6;23755:11;:18;23767:5;23755:18;;;;;;;;;;;;;;;:27;23774:7;23755:27;;;;;;;;;;;;;;;:36;;;;23823:7;23807:32;;23816:5;23807:32;;;23832:6;23807:32;;;;;;;;;;;;;;;;;;23501:346;;;:::o;21115:539::-;21239:1;21221:20;;:6;:20;;;;21213:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21323:1;21302:23;;:9;:23;;;;21294:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21378:47;21399:6;21407:9;21418:6;21378:20;:47::i;:::-;21458:71;21480:6;21458:71;;;;;;;;;;;;;;;;;:9;:17;21468:6;21458:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;21438:9;:17;21448:6;21438:17;;;;;;;;;;;;;;;:91;;;;21563:32;21588:6;21563:9;:20;21573:9;21563:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;21540:9;:20;21550:9;21540:20;;;;;;;;;;;;;;;:55;;;;21628:9;21611:35;;21620:6;21611:35;;;21639:6;21611:35;;;;;;;;;;;;;;;;;;21115:539;;;:::o;5485:192::-;5571:7;5604:1;5599;:6;;5607:12;5591:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5631:9;5647:1;5643;:5;5631:17;;5668:1;5661:8;;;5485:192;;;;;:::o;4582:181::-;4640:7;4660:9;4676:1;4672;:5;4660:17;;4701:1;4696;:6;;4688:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4754:1;4747:8;;;4582:181;;;;:::o;22645:418::-;22748:1;22729:21;;:7;:21;;;;22721:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22801:49;22822:7;22839:1;22843:6;22801:20;:49::i;:::-;22884:68;22907:6;22884:68;;;;;;;;;;;;;;;;;:9;:18;22894:7;22884:18;;;;;;;;;;;;;;;;:22;;:68;;;;;:::i;:::-;22863:9;:18;22873:7;22863:18;;;;;;;;;;;;;;;:89;;;;22978:24;22995:6;22978:12;;:16;;:24;;;;:::i;:::-;22963:12;:39;;;;23044:1;23018:37;;23027:7;23018:37;;;23048:6;23018:37;;;;;;;;;;;;;;;;;;22645:418;;:::o;34807:203::-;34918:1;34904:16;;:2;:16;;;;34896:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34969:33;34976:2;34980:5;34987:14;34969:6;:33::i;:::-;34807:203;;;:::o;6804:132::-;6862:7;6889:39;6893:1;6896;6889:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;6882:46;;6804:132;;;;:::o;35018:166::-;35108:1;35094:16;;:2;:16;;;;35086:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35159:17;35166:2;35170:5;35159:6;:17::i;:::-;35018:166;;:::o;24872:92::-;;;;:::o;5046:136::-;5104:7;5131:43;5135:1;5138;5131:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;5124:50;;5046:136;;;;:::o;35547:402::-;35634:14;35631:55;;;35679:7;35671:5;:15;35663:23;;35631:55;35735:10;;35725:5;35708:14;;:22;35707:38;35699:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35817:11;;35807:5;35791:13;35801:2;35791:9;:13::i;:::-;:21;35790:38;35782:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35872:16;35878:2;35882:5;35872;:16::i;:::-;35916:25;35935:5;35916:14;;:18;;:25;;;;:::i;:::-;35899:14;:42;;;;35547:402;;;:::o;7432:278::-;7518:7;7550:1;7546;:5;7553:12;7538:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7577:9;7593:1;7589;:5;;;;;;7577:17;;7701:1;7694:8;;;7432:278;;;;;:::o;35192:347::-;35271:7;35263:5;:15;35255:23;;35325:10;;35315:5;35298:14;;:22;35297:38;35289:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35407:11;;35397:5;35381:13;35391:2;35381:9;:13::i;:::-;:21;35380:38;35372:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35462:16;35468:2;35472:5;35462;:16::i;:::-;35506:25;35525:5;35506:14;;:18;;:25;;;;:::i;:::-;35489:14;:42;;;;35192:347;;:::o;21935:378::-;22038:1;22019:21;;:7;:21;;;;22011:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22089:49;22118:1;22122:7;22131:6;22089:20;:49::i;:::-;22166:24;22183:6;22166:12;;:16;;:24;;;;:::i;:::-;22151:12;:39;;;;22222:30;22245:6;22222:9;:18;22232:7;22222:18;;;;;;;;;;;;;;;;:22;;:30;;;;:::i;:::-;22201:9;:18;22211:7;22201:18;;;;;;;;;;;;;;;:51;;;;22289:7;22268:37;;22285:1;22268:37;;;22298:6;22268:37;;;;;;;;;;;;;;;;;;21935:378;;:::o

Swarm Source

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