ETH Price: $2,950.94 (+0.34%)

Token

TND (TND)

Overview

Max Total Supply

9,930,932.195349190275593435 TND

Holders

2,686 (0.00%)

Market

Price

$3.53 @ 0.001196 ETH

Onchain Market Cap

$35,056,190.65

Circulating Supply Market Cap

$3,642,142.00

Other Info

Token Contract (WITH 18 Decimals)

Balance
38.753550815171928165 TND

Value
$136.80 ( ~0.0463580773326373 ETH) [0.0004%]
0xA2dCB52F5cF34a84A2eBFb7D937f7051ae4C697B
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Tender.fi is an innovative decentralized open-source protocol for borrowing and lending.

Market

Volume (24H):$30,230.00
Market Capitalization:$3,642,142.00
Circulating Supply:1,031,402.00 TND
Market Data Source: Coinmarketcap

Contract Source Code Verified (Exact Match)

Contract Name:
TND

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// File: contracts/tokens/interfaces/IMintable.sol



pragma solidity 0.6.12;

interface IMintable {
    function isMinter(address _account) external returns (bool);
    function setMinter(address _minter, bool _isActive) external;
    function mint(address _account, uint256 _amount) external;
    function burn(address _account, uint256 _amount) external;
}

// File: contracts/tokens/interfaces/IBaseToken.sol



pragma solidity 0.6.12;

interface IBaseToken {
    function totalStaked() external view returns (uint256);
    function stakedBalance(address _account) external view returns (uint256);
    function removeAdmin(address _account) external;
    function setInPrivateTransferMode(bool _inPrivateTransferMode) external;
    function withdrawToken(address _token, address _account, uint256 _amount) external;
}

// File: contracts/tokens/interfaces/IYieldTracker.sol



pragma solidity 0.6.12;

interface IYieldTracker {
    function claim(address _account, address _receiver) external returns (uint256);
    function updateRewards(address _account) external;
    function getTokensPerInterval() external view returns (uint256);
    function claimable(address _account) external view returns (uint256);
}

// File: contracts/libraries/utils/Address.sol



pragma solidity ^0.6.2;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        assembly { size := extcodesize(account) }
        return size > 0;
    }

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

        // 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");
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: value }(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

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

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

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

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.3._
     */
    function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

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

// File: contracts/libraries/token/IERC20.sol



pragma solidity 0.6.12;

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

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

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

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

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

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

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

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

// File: contracts/libraries/math/SafeMath.sol



pragma solidity 0.6.12;

/**
 * @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.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

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

        return c;
    }

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

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

        return c;
    }

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

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

// File: contracts/libraries/token/SafeERC20.sol



pragma solidity 0.6.12;




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

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

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

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

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

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

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

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

// File: contracts/tokens/BaseToken.sol



pragma solidity 0.6.12;






contract BaseToken is IERC20, IBaseToken {
    using SafeMath for uint256;
    using SafeERC20 for IERC20;

    string public name;
    string public symbol;
    uint8 public constant decimals = 18;

    uint256 public override totalSupply;
    uint256 public nonStakingSupply;

    uint256 public MAX_Supply = 10000000*1e18;

    address public gov;

    mapping (address => uint256) public balances;
    mapping (address => mapping (address => uint256)) public allowances;

    address[] public yieldTrackers;
    mapping (address => bool) public nonStakingAccounts;
    mapping (address => bool) public admins;

    bool public inPrivateTransferMode;
    mapping (address => bool) public isHandler;

    modifier onlyGov() {
        require(msg.sender == gov, "BaseToken: forbidden");
        _;
    }

    modifier onlyAdmin() {
        require(admins[msg.sender], "BaseToken: forbidden");
        _;
    }

    constructor(string memory _name, string memory _symbol, uint256 _initialSupply) public {
        name = _name;
        symbol = _symbol;
        gov = msg.sender;
        _mint(msg.sender, _initialSupply);
    }

    function setGov(address _gov) external onlyGov {
        gov = _gov;
    }

    function setInfo(string memory _name, string memory _symbol) external onlyGov {
        name = _name;
        symbol = _symbol;
    }

    function setYieldTrackers(address[] memory _yieldTrackers) external onlyGov {
        yieldTrackers = _yieldTrackers;
    }

    function addAdmin(address _account) external onlyGov {
        admins[_account] = true;
    }

    function removeAdmin(address _account) external override onlyGov {
        admins[_account] = false;
    }

    // to help users who accidentally send their tokens to this contract
    function withdrawToken(address _token, address _account, uint256 _amount) external override onlyGov {
        IERC20(_token).safeTransfer(_account, _amount);
    }

    function setInPrivateTransferMode(bool _inPrivateTransferMode) external override onlyGov {
        inPrivateTransferMode = _inPrivateTransferMode;
    }

    function setHandler(address _handler, bool _isActive) external onlyGov {
        isHandler[_handler] = _isActive;
    }

    function addNonStakingAccount(address _account) external onlyAdmin {
        require(!nonStakingAccounts[_account], "BaseToken: _account already marked");
        _updateRewards(_account);
        nonStakingAccounts[_account] = true;
        nonStakingSupply = nonStakingSupply.add(balances[_account]);
    }

    function removeNonStakingAccount(address _account) external onlyAdmin {
        require(nonStakingAccounts[_account], "BaseToken: _account not marked");
        _updateRewards(_account);
        nonStakingAccounts[_account] = false;
        nonStakingSupply = nonStakingSupply.sub(balances[_account]);
    }

    function recoverClaim(address _account, address _receiver) external onlyAdmin {
        for (uint256 i = 0; i < yieldTrackers.length; i++) {
            address yieldTracker = yieldTrackers[i];
            IYieldTracker(yieldTracker).claim(_account, _receiver);
        }
    }

    function claim(address _receiver) external {
        for (uint256 i = 0; i < yieldTrackers.length; i++) {
            address yieldTracker = yieldTrackers[i];
            IYieldTracker(yieldTracker).claim(msg.sender, _receiver);
        }
    }

    function totalStaked() external view override returns (uint256) {
        return totalSupply.sub(nonStakingSupply);
    }

    function balanceOf(address _account) external view override returns (uint256) {
        return balances[_account];
    }

    function stakedBalance(address _account) external view override returns (uint256) {
        if (nonStakingAccounts[_account]) {
            return 0;
        }
        return balances[_account];
    }

    function transfer(address _recipient, uint256 _amount) external override returns (bool) {
        _transfer(msg.sender, _recipient, _amount);
        return true;
    }

    function allowance(address _owner, address _spender) external view override returns (uint256) {
        return allowances[_owner][_spender];
    }

    function approve(address _spender, uint256 _amount) external override returns (bool) {
        _approve(msg.sender, _spender, _amount);
        return true;
    }

    function transferFrom(address _sender, address _recipient, uint256 _amount) external override returns (bool) {
        if (isHandler[msg.sender]) {
            _transfer(_sender, _recipient, _amount);
            return true;
        }
        uint256 nextAllowance = allowances[_sender][msg.sender].sub(_amount, "BaseToken: transfer amount exceeds allowance");
        _approve(_sender, msg.sender, nextAllowance);
        _transfer(_sender, _recipient, _amount);
        return true;
    }

    function _mint(address _account, uint256 _amount) internal {
        require(_account != address(0), "BaseToken: mint to the zero address");
        require(totalSupply < MAX_Supply, "supply cap reached");

        _updateRewards(_account);

        totalSupply = totalSupply.add(_amount);
        balances[_account] = balances[_account].add(_amount);

        if (nonStakingAccounts[_account]) {
            nonStakingSupply = nonStakingSupply.add(_amount);
        }

        emit Transfer(address(0), _account, _amount);
    }

    function _burn(address _account, uint256 _amount) internal {
        require(_account != address(0), "BaseToken: burn from the zero address");

        _updateRewards(_account);

        balances[_account] = balances[_account].sub(_amount, "BaseToken: burn amount exceeds balance");
        totalSupply = totalSupply.sub(_amount);

        if (nonStakingAccounts[_account]) {
            nonStakingSupply = nonStakingSupply.sub(_amount);
        }

        emit Transfer(_account, address(0), _amount);
    }

    function _transfer(address _sender, address _recipient, uint256 _amount) private {
        require(_sender != address(0), "BaseToken: transfer from the zero address");
        require(_recipient != address(0), "BaseToken: transfer to the zero address");

        if (inPrivateTransferMode) {
            require(isHandler[msg.sender], "BaseToken: msg.sender not whitelisted");
        }

        _updateRewards(_sender);
        _updateRewards(_recipient);

        balances[_sender] = balances[_sender].sub(_amount, "BaseToken: transfer amount exceeds balance");
        balances[_recipient] = balances[_recipient].add(_amount);

        if (nonStakingAccounts[_sender]) {
            nonStakingSupply = nonStakingSupply.sub(_amount);
        }
        if (nonStakingAccounts[_recipient]) {
            nonStakingSupply = nonStakingSupply.add(_amount);
        }

        emit Transfer(_sender, _recipient,_amount);
    }

    function _approve(address _owner, address _spender, uint256 _amount) private {
        require(_owner != address(0), "BaseToken: approve from the zero address");
        require(_spender != address(0), "BaseToken: approve to the zero address");

        allowances[_owner][_spender] = _amount;

        emit Approval(_owner, _spender, _amount);
    }

    function _updateRewards(address _account) private {
        for (uint256 i = 0; i < yieldTrackers.length; i++) {
            address yieldTracker = yieldTrackers[i];
            IYieldTracker(yieldTracker).updateRewards(_account);
        }
    }
}

// File: contracts/tokens/MintableBaseToken.sol



pragma solidity 0.6.12;



contract MintableBaseToken is BaseToken, IMintable {

    mapping (address => bool) public override isMinter;

    constructor(string memory _name, string memory _symbol, uint256 _initialSupply) public BaseToken(_name, _symbol, _initialSupply) {
    }

    modifier onlyMinter() {
        require(isMinter[msg.sender], "MintableBaseToken: forbidden");
        _;
    }

    function setMinter(address _minter, bool _isActive) external override onlyGov {
        isMinter[_minter] = _isActive;
    }

    function mint(address _account, uint256 _amount) external override onlyMinter {
        _mint(_account, _amount);
    }

    function burn(address _account, uint256 _amount) external override onlyMinter {
        _burn(_account, _amount);
    }
}

// File: contracts/tnd/TND.sol



pragma solidity 0.6.12;


contract TND is MintableBaseToken {
    constructor() public MintableBaseToken("TND", "TND", MAX_Supply) {
    }

    function id() external pure returns (string memory _name) {
        return "TND";
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_Supply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"addAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"addNonStakingAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"admins","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowances","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":[{"internalType":"address","name":"","type":"address"}],"name":"balances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_receiver","type":"address"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gov","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"id","outputs":[{"internalType":"string","name":"_name","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"inPrivateTransferMode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isHandler","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isMinter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonStakingAccounts","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nonStakingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"address","name":"_receiver","type":"address"}],"name":"recoverClaim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"removeAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"removeNonStakingAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_gov","type":"address"}],"name":"setGov","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_handler","type":"address"},{"internalType":"bool","name":"_isActive","type":"bool"}],"name":"setHandler","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_inPrivateTransferMode","type":"bool"}],"name":"setInPrivateTransferMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"}],"name":"setInfo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_minter","type":"address"},{"internalType":"bool","name":"_isActive","type":"bool"}],"name":"setMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_yieldTrackers","type":"address[]"}],"name":"setYieldTrackers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"stakedBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"_token","type":"address"},{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"yieldTrackers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

60806040526a084595161401484a0000006004553480156200002057600080fd5b506040518060400160405280600381526020017f544e4400000000000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f544e4400000000000000000000000000000000000000000000000000000000008152506004548282828260009080519060200190620000ab92919062000542565b508160019080519060200190620000c492919062000542565b5033600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200011833826200012460201b60201c565b505050505050620005e8565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620001ac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180620042ab6023913960400191505060405180910390fd5b6004546002541062000226576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f737570706c79206361702072656163686564000000000000000000000000000081525060200191505060405180910390fd5b6200023782620003d560201b60201c565b6200025381600254620004b960201b620027681790919060201c565b600281905550620002b281600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054620004b960201b620027681790919060201c565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156200036b576200036481600354620004b960201b620027681790919060201c565b6003819055505b8173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b60005b600880549050811015620004b557600060088281548110620003f657fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff16635fd61965846040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b1580156200048d57600080fd5b505af1158015620004a2573d6000803e3d6000fd5b50505050508080600101915050620003d8565b5050565b60008082840190508381101562000538576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200058557805160ff1916838001178555620005b6565b82800160010185558215620005b6579182015b82811115620005b557825182559160200191906001019062000598565b5b509050620005c59190620005c9565b5090565b5b80821115620005e4576000816000905550600101620005ca565b5090565b613cb380620005f86000396000f3fe608060405234801561001057600080fd5b50600436106102325760003560e01c80636228907711610130578063a9059cbb116100b8578063cf456ae71161007c578063cf456ae714610e21578063cfad57a214610e71578063dd62ed3e14610eb5578063dfbaefb114610f2d578063fb30d91614610f4d57610232565b8063a9059cbb14610b70578063a923fc4014610bd4578063aa271e1a14610d26578063af640d0f14610d80578063c93be63614610e0357610232565b80639554381a116100ff5780639554381a1461099157806395d89b41146109eb578063996f11ee14610a6e5780639cb7de4b14610ad25780639dc29fac14610b2257610232565b8063622890771461089357806370480275146108d757806370a082311461091b578063817b1cd21461097357610232565b8063276eab4e116101be57806346ea87af1161018257806346ea87af146106e157806352cd38d91461073b57806355b6ed5c146107935780635a47a1a71461080b578063602172671461083b57610232565b8063276eab4e1461050857806327e235e3146105c0578063313ce5671461061857806340c10f1914610639578063429b62e51461068757610232565b806312d43a511161020557806312d43a51146103aa5780631785f53c146103de57806318160ddd146104225780631e83409a1461044057806323b872dd1461048457610232565b806301e336671461023757806306fdde03146102a5578063095ea7b3146103285780630b1913141461038c575b600080fd5b6102a36004803603606081101561024d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610f91565b005b6102ad611084565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102ed5780820151818401526020810190506102d2565b50505050905090810190601f16801561031a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6103746004803603604081101561033e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611122565b60405180821515815260200191505060405180910390f35b610394611139565b6040518082815260200191505060405180910390f35b6103b261113f565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610420600480360360208110156103f457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611165565b005b61042a611283565b6040518082815260200191505060405180910390f35b6104826004803603602081101561045657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611289565b005b6104f06004803603606081101561049a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506113aa565b60405180821515815260200191505060405180910390f35b6105be6004803603602081101561051e57600080fd5b810190808035906020019064010000000081111561053b57600080fd5b82018360208201111561054d57600080fd5b8035906020019184602083028401116401000000008311171561056f57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192905050506114e2565b005b610602600480360360208110156105d657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506115bf565b6040518082815260200191505060405180910390f35b6106206115d7565b604051808260ff16815260200191505060405180910390f35b6106856004803603604081101561064f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506115dc565b005b6106c96004803603602081101561069d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506116a9565b60405180821515815260200191505060405180910390f35b610723600480360360208110156106f757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506116c9565b60405180821515815260200191505060405180910390f35b6107676004803603602081101561075157600080fd5b81019080803590602001909291905050506116e9565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6107f5600480360360408110156107a957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611725565b6040518082815260200191505060405180910390f35b6108396004803603602081101561082157600080fd5b8101908080351515906020019092919050505061174a565b005b61087d6004803603602081101561085157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061182a565b6040518082815260200191505060405180910390f35b6108d5600480360360208110156108a957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506118cf565b005b610919600480360360208110156108ed57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611aef565b005b61095d6004803603602081101561093157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c0d565b6040518082815260200191505060405180910390f35b61097b611c56565b6040518082815260200191505060405180910390f35b6109d3600480360360208110156109a757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c74565b60405180821515815260200191505060405180910390f35b6109f3611c94565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610a33578082015181840152602081019050610a18565b50505050905090810190601f168015610a605780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610ad060048036036040811015610a8457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d32565b005b610b2060048036036040811015610ae857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611f13565b005b610b6e60048036036040811015610b3857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612031565b005b610bbc60048036036040811015610b8657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506120fe565b60405180821515815260200191505060405180910390f35b610d2460048036036040811015610bea57600080fd5b8101908080359060200190640100000000811115610c0757600080fd5b820183602082011115610c1957600080fd5b80359060200191846001830284011164010000000083111715610c3b57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610c9e57600080fd5b820183602082011115610cb057600080fd5b80359060200191846001830284011164010000000083111715610cd257600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050612115565b005b610d6860048036036020811015610d3c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061220a565b60405180821515815260200191505060405180910390f35b610d8861222a565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610dc8578082015181840152602081019050610dad565b50505050905090810190601f168015610df55780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610e0b612267565b6040518082815260200191505060405180910390f35b610e6f60048036036040811015610e3757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080351515906020019092919050505061226d565b005b610eb360048036036020811015610e8757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061238b565b005b610f1760048036036040811015610ecb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612492565b6040518082815260200191505060405180910390f35b610f35612519565b60405180821515815260200191505060405180910390f35b610f8f60048036036020811015610f6357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061252c565b005b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611054576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f42617365546f6b656e3a20666f7262696464656e00000000000000000000000081525060200191505060405180910390fd5b61107f82828573ffffffffffffffffffffffffffffffffffffffff166127f09092919063ffffffff16565b505050565b60008054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561111a5780601f106110ef5761010080835404028352916020019161111a565b820191906000526020600020905b8154815290600101906020018083116110fd57829003601f168201915b505050505081565b600061112f338484612892565b6001905092915050565b60045481565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611228576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f42617365546f6b656e3a20666f7262696464656e00000000000000000000000081525060200191505060405180910390fd5b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60025481565b60005b6008805490508110156113a6576000600882815481106112a857fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff166321c0b34233856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b15801561135c57600080fd5b505af1158015611370573d6000803e3d6000fd5b505050506040513d602081101561138657600080fd5b81019080805190602001909291905050505050808060010191505061128c565b5050565b6000600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561141257611409848484612a89565b600190506114db565b60006114bd836040518060600160405280602c8152602001613b1a602c9139600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ee99092919063ffffffff16565b90506114ca853383612892565b6114d5858585612a89565b60019150505b9392505050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146115a5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f42617365546f6b656e3a20666f7262696464656e00000000000000000000000081525060200191505060405180910390fd5b80600890805190602001906115bb929190613922565b5050565b60066020528060005260406000206000915090505481565b601281565b600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661169b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4d696e7461626c6542617365546f6b656e3a20666f7262696464656e0000000081525060200191505060405180910390fd5b6116a58282612fa9565b5050565b600a6020528060005260406000206000915054906101000a900460ff1681565b600c6020528060005260406000206000915054906101000a900460ff1681565b600881815481106116f657fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6007602052816000526040600020602052806000526040600020600091509150505481565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461180d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f42617365546f6b656e3a20666f7262696464656e00000000000000000000000081525060200191505060405180910390fd5b80600b60006101000a81548160ff02191690831515021790555050565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561188757600090506118ca565b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490505b919050565b600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661198e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f42617365546f6b656e3a20666f7262696464656e00000000000000000000000081525060200191505060405180910390fd5b600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611a31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180613bbe6022913960400191505060405180910390fd5b611a3a81613239565b6001600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611ae6600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460035461276890919063ffffffff16565b60038190555050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611bb2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f42617365546f6b656e3a20666f7262696464656e00000000000000000000000081525060200191505060405180910390fd5b6001600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000611c6f60035460025461331890919063ffffffff16565b905090565b60096020528060005260406000206000915054906101000a900460ff1681565b60018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611d2a5780601f10611cff57610100808354040283529160200191611d2a565b820191906000526020600020905b815481529060010190602001808311611d0d57829003601f168201915b505050505081565b600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611df1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f42617365546f6b656e3a20666f7262696464656e00000000000000000000000081525060200191505060405180910390fd5b60005b600880549050811015611f0e57600060088281548110611e1057fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff166321c0b34285856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b158015611ec457600080fd5b505af1158015611ed8573d6000803e3d6000fd5b505050506040513d6020811015611eee57600080fd5b810190808051906020019092919050505050508080600101915050611df4565b505050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611fd6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f42617365546f6b656e3a20666f7262696464656e00000000000000000000000081525060200191505060405180910390fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166120f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4d696e7461626c6542617365546f6b656e3a20666f7262696464656e0000000081525060200191505060405180910390fd5b6120fa8282613362565b5050565b600061210b338484612a89565b6001905092915050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146121d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f42617365546f6b656e3a20666f7262696464656e00000000000000000000000081525060200191505060405180910390fd5b81600090805190602001906121ee9291906139ac565b5080600190805190602001906122059291906139ac565b505050565b600d6020528060005260406000206000915054906101000a900460ff1681565b60606040518060400160405280600381526020017f544e440000000000000000000000000000000000000000000000000000000000815250905090565b60035481565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612330576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f42617365546f6b656e3a20666f7262696464656e00000000000000000000000081525060200191505060405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461244e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f42617365546f6b656e3a20666f7262696464656e00000000000000000000000081525060200191505060405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600b60009054906101000a900460ff1681565b600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166125eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f42617365546f6b656e3a20666f7262696464656e00000000000000000000000081525060200191505060405180910390fd5b600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166126aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f42617365546f6b656e3a205f6163636f756e74206e6f74206d61726b6564000081525060200191505060405180910390fd5b6126b381613239565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061275f600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460035461331890919063ffffffff16565b60038190555050565b6000808284019050838110156127e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b61288d8363a9059cbb60e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050613593565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612918576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180613b6c6028913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561299e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613af46026913960400191505060405180910390fd5b80600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180613c556029913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180613aaa6027913960400191505060405180910390fd5b600b60009054906101000a900460ff1615612c4d57600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612c4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180613a856025913960400191505060405180910390fd5b5b612c5683613239565b612c5f82613239565b612ccb816040518060600160405280602a8152602001613b94602a9139600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ee99092919063ffffffff16565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612d6081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461276890919063ffffffff16565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612e1157612e0a8160035461331890919063ffffffff16565b6003819055505b600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612e7f57612e788160035461276890919063ffffffff16565b6003819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b6000838311158290612f96576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612f5b578082015181840152602081019050612f40565b50505050905090810190601f168015612f885780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561302f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180613ad16023913960400191505060405180910390fd5b600454600254106130a8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f737570706c79206361702072656163686564000000000000000000000000000081525060200191505060405180910390fd5b6130b182613239565b6130c68160025461276890919063ffffffff16565b60028190555061311e81600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461276890919063ffffffff16565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156131cf576131c88160035461276890919063ffffffff16565b6003819055505b8173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b60005b6008805490508110156133145760006008828154811061325857fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff16635fd61965846040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b1580156132ee57600080fd5b505af1158015613302573d6000803e3d6000fd5b5050505050808060010191505061323c565b5050565b600061335a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612ee9565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156133e8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180613c306025913960400191505060405180910390fd5b6133f182613239565b61345d81604051806060016040528060268152602001613be060269139600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ee99092919063ffffffff16565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506134b58160025461331890919063ffffffff16565b600281905550600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613529576135228160035461331890919063ffffffff16565b6003819055505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b60606135f5826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166136829092919063ffffffff16565b905060008151111561367d5780806020019051602081101561361657600080fd5b810190808051906020019092919050505061367c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180613c06602a913960400191505060405180910390fd5b5b505050565b6060613691848460008561369a565b90509392505050565b6060824710156136f5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613b466026913960400191505060405180910390fd5b6136fe85613843565b613770576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000081525060200191505060405180910390fd5b600060608673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b602083106137c0578051825260208201915060208101905060208303925061379d565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613822576040519150601f19603f3d011682016040523d82523d6000602084013e613827565b606091505b5091509150613837828286613856565b92505050949350505050565b600080823b905060008111915050919050565b606083156138665782905061391b565b6000835111156138795782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156138e05780820151818401526020810190506138c5565b50505050905090810190601f16801561390d5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b9392505050565b82805482825590600052602060002090810192821561399b579160200282015b8281111561399a5782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190613942565b5b5090506139a89190613a2c565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106139ed57805160ff1916838001178555613a1b565b82800160010185558215613a1b579182015b82811115613a1a5782518255916020019190600101906139ff565b5b509050613a289190613a67565b5090565b5b80821115613a6357600081816101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905550600101613a2d565b5090565b5b80821115613a80576000816000905550600101613a68565b509056fe42617365546f6b656e3a206d73672e73656e646572206e6f742077686974656c697374656442617365546f6b656e3a207472616e7366657220746f20746865207a65726f206164647265737342617365546f6b656e3a206d696e7420746f20746865207a65726f206164647265737342617365546f6b656e3a20617070726f766520746f20746865207a65726f206164647265737342617365546f6b656e3a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c42617365546f6b656e3a20617070726f76652066726f6d20746865207a65726f206164647265737342617365546f6b656e3a207472616e7366657220616d6f756e7420657863656564732062616c616e636542617365546f6b656e3a205f6163636f756e7420616c7265616479206d61726b656442617365546f6b656e3a206275726e20616d6f756e7420657863656564732062616c616e63655361666545524332303a204552433230206f7065726174696f6e20646964206e6f74207375636365656442617365546f6b656e3a206275726e2066726f6d20746865207a65726f206164647265737342617365546f6b656e3a207472616e736665722066726f6d20746865207a65726f2061646472657373a2646970667358221220092a7869e34fc0bfb1eb4f0f917cb9ee9d8133a201eea5f4972fb2569012e6da64736f6c634300060c003342617365546f6b656e3a206d696e7420746f20746865207a65726f2061646472657373

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106102325760003560e01c80636228907711610130578063a9059cbb116100b8578063cf456ae71161007c578063cf456ae714610e21578063cfad57a214610e71578063dd62ed3e14610eb5578063dfbaefb114610f2d578063fb30d91614610f4d57610232565b8063a9059cbb14610b70578063a923fc4014610bd4578063aa271e1a14610d26578063af640d0f14610d80578063c93be63614610e0357610232565b80639554381a116100ff5780639554381a1461099157806395d89b41146109eb578063996f11ee14610a6e5780639cb7de4b14610ad25780639dc29fac14610b2257610232565b8063622890771461089357806370480275146108d757806370a082311461091b578063817b1cd21461097357610232565b8063276eab4e116101be57806346ea87af1161018257806346ea87af146106e157806352cd38d91461073b57806355b6ed5c146107935780635a47a1a71461080b578063602172671461083b57610232565b8063276eab4e1461050857806327e235e3146105c0578063313ce5671461061857806340c10f1914610639578063429b62e51461068757610232565b806312d43a511161020557806312d43a51146103aa5780631785f53c146103de57806318160ddd146104225780631e83409a1461044057806323b872dd1461048457610232565b806301e336671461023757806306fdde03146102a5578063095ea7b3146103285780630b1913141461038c575b600080fd5b6102a36004803603606081101561024d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610f91565b005b6102ad611084565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102ed5780820151818401526020810190506102d2565b50505050905090810190601f16801561031a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6103746004803603604081101561033e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611122565b60405180821515815260200191505060405180910390f35b610394611139565b6040518082815260200191505060405180910390f35b6103b261113f565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610420600480360360208110156103f457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611165565b005b61042a611283565b6040518082815260200191505060405180910390f35b6104826004803603602081101561045657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611289565b005b6104f06004803603606081101561049a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506113aa565b60405180821515815260200191505060405180910390f35b6105be6004803603602081101561051e57600080fd5b810190808035906020019064010000000081111561053b57600080fd5b82018360208201111561054d57600080fd5b8035906020019184602083028401116401000000008311171561056f57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192905050506114e2565b005b610602600480360360208110156105d657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506115bf565b6040518082815260200191505060405180910390f35b6106206115d7565b604051808260ff16815260200191505060405180910390f35b6106856004803603604081101561064f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506115dc565b005b6106c96004803603602081101561069d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506116a9565b60405180821515815260200191505060405180910390f35b610723600480360360208110156106f757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506116c9565b60405180821515815260200191505060405180910390f35b6107676004803603602081101561075157600080fd5b81019080803590602001909291905050506116e9565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6107f5600480360360408110156107a957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611725565b6040518082815260200191505060405180910390f35b6108396004803603602081101561082157600080fd5b8101908080351515906020019092919050505061174a565b005b61087d6004803603602081101561085157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061182a565b6040518082815260200191505060405180910390f35b6108d5600480360360208110156108a957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506118cf565b005b610919600480360360208110156108ed57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611aef565b005b61095d6004803603602081101561093157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c0d565b6040518082815260200191505060405180910390f35b61097b611c56565b6040518082815260200191505060405180910390f35b6109d3600480360360208110156109a757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c74565b60405180821515815260200191505060405180910390f35b6109f3611c94565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610a33578082015181840152602081019050610a18565b50505050905090810190601f168015610a605780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610ad060048036036040811015610a8457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d32565b005b610b2060048036036040811015610ae857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611f13565b005b610b6e60048036036040811015610b3857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612031565b005b610bbc60048036036040811015610b8657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506120fe565b60405180821515815260200191505060405180910390f35b610d2460048036036040811015610bea57600080fd5b8101908080359060200190640100000000811115610c0757600080fd5b820183602082011115610c1957600080fd5b80359060200191846001830284011164010000000083111715610c3b57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610c9e57600080fd5b820183602082011115610cb057600080fd5b80359060200191846001830284011164010000000083111715610cd257600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050612115565b005b610d6860048036036020811015610d3c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061220a565b60405180821515815260200191505060405180910390f35b610d8861222a565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610dc8578082015181840152602081019050610dad565b50505050905090810190601f168015610df55780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610e0b612267565b6040518082815260200191505060405180910390f35b610e6f60048036036040811015610e3757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080351515906020019092919050505061226d565b005b610eb360048036036020811015610e8757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061238b565b005b610f1760048036036040811015610ecb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612492565b6040518082815260200191505060405180910390f35b610f35612519565b60405180821515815260200191505060405180910390f35b610f8f60048036036020811015610f6357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061252c565b005b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611054576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f42617365546f6b656e3a20666f7262696464656e00000000000000000000000081525060200191505060405180910390fd5b61107f82828573ffffffffffffffffffffffffffffffffffffffff166127f09092919063ffffffff16565b505050565b60008054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561111a5780601f106110ef5761010080835404028352916020019161111a565b820191906000526020600020905b8154815290600101906020018083116110fd57829003601f168201915b505050505081565b600061112f338484612892565b6001905092915050565b60045481565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611228576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f42617365546f6b656e3a20666f7262696464656e00000000000000000000000081525060200191505060405180910390fd5b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60025481565b60005b6008805490508110156113a6576000600882815481106112a857fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff166321c0b34233856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b15801561135c57600080fd5b505af1158015611370573d6000803e3d6000fd5b505050506040513d602081101561138657600080fd5b81019080805190602001909291905050505050808060010191505061128c565b5050565b6000600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561141257611409848484612a89565b600190506114db565b60006114bd836040518060600160405280602c8152602001613b1a602c9139600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ee99092919063ffffffff16565b90506114ca853383612892565b6114d5858585612a89565b60019150505b9392505050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146115a5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f42617365546f6b656e3a20666f7262696464656e00000000000000000000000081525060200191505060405180910390fd5b80600890805190602001906115bb929190613922565b5050565b60066020528060005260406000206000915090505481565b601281565b600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661169b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4d696e7461626c6542617365546f6b656e3a20666f7262696464656e0000000081525060200191505060405180910390fd5b6116a58282612fa9565b5050565b600a6020528060005260406000206000915054906101000a900460ff1681565b600c6020528060005260406000206000915054906101000a900460ff1681565b600881815481106116f657fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6007602052816000526040600020602052806000526040600020600091509150505481565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461180d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f42617365546f6b656e3a20666f7262696464656e00000000000000000000000081525060200191505060405180910390fd5b80600b60006101000a81548160ff02191690831515021790555050565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561188757600090506118ca565b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490505b919050565b600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661198e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f42617365546f6b656e3a20666f7262696464656e00000000000000000000000081525060200191505060405180910390fd5b600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611a31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180613bbe6022913960400191505060405180910390fd5b611a3a81613239565b6001600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611ae6600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460035461276890919063ffffffff16565b60038190555050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611bb2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f42617365546f6b656e3a20666f7262696464656e00000000000000000000000081525060200191505060405180910390fd5b6001600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000611c6f60035460025461331890919063ffffffff16565b905090565b60096020528060005260406000206000915054906101000a900460ff1681565b60018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611d2a5780601f10611cff57610100808354040283529160200191611d2a565b820191906000526020600020905b815481529060010190602001808311611d0d57829003601f168201915b505050505081565b600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611df1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f42617365546f6b656e3a20666f7262696464656e00000000000000000000000081525060200191505060405180910390fd5b60005b600880549050811015611f0e57600060088281548110611e1057fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff166321c0b34285856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b158015611ec457600080fd5b505af1158015611ed8573d6000803e3d6000fd5b505050506040513d6020811015611eee57600080fd5b810190808051906020019092919050505050508080600101915050611df4565b505050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611fd6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f42617365546f6b656e3a20666f7262696464656e00000000000000000000000081525060200191505060405180910390fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166120f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4d696e7461626c6542617365546f6b656e3a20666f7262696464656e0000000081525060200191505060405180910390fd5b6120fa8282613362565b5050565b600061210b338484612a89565b6001905092915050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146121d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f42617365546f6b656e3a20666f7262696464656e00000000000000000000000081525060200191505060405180910390fd5b81600090805190602001906121ee9291906139ac565b5080600190805190602001906122059291906139ac565b505050565b600d6020528060005260406000206000915054906101000a900460ff1681565b60606040518060400160405280600381526020017f544e440000000000000000000000000000000000000000000000000000000000815250905090565b60035481565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612330576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f42617365546f6b656e3a20666f7262696464656e00000000000000000000000081525060200191505060405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461244e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f42617365546f6b656e3a20666f7262696464656e00000000000000000000000081525060200191505060405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600b60009054906101000a900460ff1681565b600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166125eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f42617365546f6b656e3a20666f7262696464656e00000000000000000000000081525060200191505060405180910390fd5b600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166126aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f42617365546f6b656e3a205f6163636f756e74206e6f74206d61726b6564000081525060200191505060405180910390fd5b6126b381613239565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061275f600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460035461331890919063ffffffff16565b60038190555050565b6000808284019050838110156127e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b61288d8363a9059cbb60e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050613593565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612918576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180613b6c6028913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561299e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613af46026913960400191505060405180910390fd5b80600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180613c556029913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180613aaa6027913960400191505060405180910390fd5b600b60009054906101000a900460ff1615612c4d57600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612c4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180613a856025913960400191505060405180910390fd5b5b612c5683613239565b612c5f82613239565b612ccb816040518060600160405280602a8152602001613b94602a9139600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ee99092919063ffffffff16565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612d6081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461276890919063ffffffff16565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612e1157612e0a8160035461331890919063ffffffff16565b6003819055505b600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612e7f57612e788160035461276890919063ffffffff16565b6003819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b6000838311158290612f96576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612f5b578082015181840152602081019050612f40565b50505050905090810190601f168015612f885780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561302f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180613ad16023913960400191505060405180910390fd5b600454600254106130a8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f737570706c79206361702072656163686564000000000000000000000000000081525060200191505060405180910390fd5b6130b182613239565b6130c68160025461276890919063ffffffff16565b60028190555061311e81600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461276890919063ffffffff16565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156131cf576131c88160035461276890919063ffffffff16565b6003819055505b8173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b60005b6008805490508110156133145760006008828154811061325857fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff16635fd61965846040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b1580156132ee57600080fd5b505af1158015613302573d6000803e3d6000fd5b5050505050808060010191505061323c565b5050565b600061335a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612ee9565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156133e8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180613c306025913960400191505060405180910390fd5b6133f182613239565b61345d81604051806060016040528060268152602001613be060269139600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ee99092919063ffffffff16565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506134b58160025461331890919063ffffffff16565b600281905550600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613529576135228160035461331890919063ffffffff16565b6003819055505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b60606135f5826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166136829092919063ffffffff16565b905060008151111561367d5780806020019051602081101561361657600080fd5b810190808051906020019092919050505061367c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180613c06602a913960400191505060405180910390fd5b5b505050565b6060613691848460008561369a565b90509392505050565b6060824710156136f5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613b466026913960400191505060405180910390fd5b6136fe85613843565b613770576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000081525060200191505060405180910390fd5b600060608673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b602083106137c0578051825260208201915060208101905060208303925061379d565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613822576040519150601f19603f3d011682016040523d82523d6000602084013e613827565b606091505b5091509150613837828286613856565b92505050949350505050565b600080823b905060008111915050919050565b606083156138665782905061391b565b6000835111156138795782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156138e05780820151818401526020810190506138c5565b50505050905090810190601f16801561390d5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b9392505050565b82805482825590600052602060002090810192821561399b579160200282015b8281111561399a5782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190613942565b5b5090506139a89190613a2c565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106139ed57805160ff1916838001178555613a1b565b82800160010185558215613a1b579182015b82811115613a1a5782518255916020019190600101906139ff565b5b509050613a289190613a67565b5090565b5b80821115613a6357600081816101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905550600101613a2d565b5090565b5b80821115613a80576000816000905550600101613a68565b509056fe42617365546f6b656e3a206d73672e73656e646572206e6f742077686974656c697374656442617365546f6b656e3a207472616e7366657220746f20746865207a65726f206164647265737342617365546f6b656e3a206d696e7420746f20746865207a65726f206164647265737342617365546f6b656e3a20617070726f766520746f20746865207a65726f206164647265737342617365546f6b656e3a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c42617365546f6b656e3a20617070726f76652066726f6d20746865207a65726f206164647265737342617365546f6b656e3a207472616e7366657220616d6f756e7420657863656564732062616c616e636542617365546f6b656e3a205f6163636f756e7420616c7265616479206d61726b656442617365546f6b656e3a206275726e20616d6f756e7420657863656564732062616c616e63655361666545524332303a204552433230206f7065726174696f6e20646964206e6f74207375636365656442617365546f6b656e3a206275726e2066726f6d20746865207a65726f206164647265737342617365546f6b656e3a207472616e736665722066726f6d20746865207a65726f2061646472657373a2646970667358221220092a7869e34fc0bfb1eb4f0f917cb9ee9d8133a201eea5f4972fb2569012e6da64736f6c634300060c0033

Deployed Bytecode Sourcemap

29813:214:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23086:165;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21373:18;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25547:165;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;21551:41;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21601:18;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;22896:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21469:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;24481:249;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25720:500;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;22660:125;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21628:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21425:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;29489:121;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21850:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;21938:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;21755:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;21679:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23259:154;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24999:205;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23550:313;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22793:95;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24869:122;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;24738:123;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21792:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;21398:20;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24191:282;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23421:121;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29618;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25212:171;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;22516:136;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29029:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;29935:89;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21511:31;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29355:126;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22432:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25391:148;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21898:33;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;23871:312;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23086:165;22041:3;;;;;;;;;;;22027:17;;:10;:17;;;22019:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23197:46:::1;23225:8;23235:7;23204:6;23197:27;;;;:46;;;;;:::i;:::-;23086:165:::0;;;:::o;21373:18::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;25547:165::-;25626:4;25643:39;25652:10;25664:8;25674:7;25643:8;:39::i;:::-;25700:4;25693:11;;25547:165;;;;:::o;21551:41::-;;;;:::o;21601:18::-;;;;;;;;;;;;;:::o;22896:108::-;22041:3;;;;;;;;;;;22027:17;;:10;:17;;;22019:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22991:5:::1;22972:6;:16;22979:8;22972:16;;;;;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;22896:108:::0;:::o;21469:35::-;;;;:::o;24481:249::-;24540:9;24535:188;24559:13;:20;;;;24555:1;:24;24535:188;;;24601:20;24624:13;24638:1;24624:16;;;;;;;;;;;;;;;;;;;;;;;;;24601:39;;24669:12;24655:33;;;24689:10;24701:9;24655:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24535:188;24581:3;;;;;;;24535:188;;;;24481:249;:::o;25720:500::-;25823:4;25844:9;:21;25854:10;25844:21;;;;;;;;;;;;;;;;;;;;;;;;;25840:119;;;25882:39;25892:7;25901:10;25913:7;25882:9;:39::i;:::-;25943:4;25936:11;;;;25840:119;25969:21;25993:92;26029:7;25993:92;;;;;;;;;;;;;;;;;:10;:19;26004:7;25993:19;;;;;;;;;;;;;;;:31;26013:10;25993:31;;;;;;;;;;;;;;;;:35;;:92;;;;;:::i;:::-;25969:116;;26096:44;26105:7;26114:10;26126:13;26096:8;:44::i;:::-;26151:39;26161:7;26170:10;26182:7;26151:9;:39::i;:::-;26208:4;26201:11;;;25720:500;;;;;;:::o;22660:125::-;22041:3;;;;;;;;;;;22027:17;;:10;:17;;;22019:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22763:14:::1;22747:13;:30;;;;;;;;;;;;:::i;:::-;;22660:125:::0;:::o;21628:44::-;;;;;;;;;;;;;;;;;:::o;21425:35::-;21458:2;21425:35;:::o;29489:121::-;29274:8;:20;29283:10;29274:20;;;;;;;;;;;;;;;;;;;;;;;;;29266:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29578:24:::1;29584:8;29594:7;29578:5;:24::i;:::-;29489:121:::0;;:::o;21850:39::-;;;;;;;;;;;;;;;;;;;;;;:::o;21938:42::-;;;;;;;;;;;;;;;;;;;;;;:::o;21755:30::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;21679:67::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23259:154::-;22041:3;;;;;;;;;;;22027:17;;:10;:17;;;22019:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23383:22:::1;23359:21;;:46;;;;;;;;;;;;;;;;;;23259:154:::0;:::o;24999:205::-;25072:7;25096:18;:28;25115:8;25096:28;;;;;;;;;;;;;;;;;;;;;;;;;25092:69;;;25148:1;25141:8;;;;25092:69;25178:8;:18;25187:8;25178:18;;;;;;;;;;;;;;;;25171:25;;24999:205;;;;:::o;23550:313::-;22137:6;:18;22144:10;22137:18;;;;;;;;;;;;;;;;;;;;;;;;;22129:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23637:18:::1;:28;23656:8;23637:28;;;;;;;;;;;;;;;;;;;;;;;;;23636:29;23628:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23715:24;23730:8;23715:14;:24::i;:::-;23781:4;23750:18;:28;23769:8;23750:28;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;23815:40;23836:8;:18;23845:8;23836:18;;;;;;;;;;;;;;;;23815:16;;:20;;:40;;;;:::i;:::-;23796:16;:59;;;;23550:313:::0;:::o;22793:95::-;22041:3;;;;;;;;;;;22027:17;;:10;:17;;;22019:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22876:4:::1;22857:6;:16;22864:8;22857:16;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;22793:95:::0;:::o;24869:122::-;24938:7;24965:8;:18;24974:8;24965:18;;;;;;;;;;;;;;;;24958:25;;24869:122;;;:::o;24738:123::-;24793:7;24820:33;24836:16;;24820:11;;:15;;:33;;;;:::i;:::-;24813:40;;24738:123;:::o;21792:51::-;;;;;;;;;;;;;;;;;;;;;;:::o;21398:20::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;24191:282::-;22137:6;:18;22144:10;22137:18;;;;;;;;;;;;;;;;;;;;;;;;;22129:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24285:9:::1;24280:186;24304:13;:20;;;;24300:1;:24;24280:186;;;24346:20;24369:13;24383:1;24369:16;;;;;;;;;;;;;;;;;;;;;;;;;24346:39;;24414:12;24400:33;;;24434:8;24444:9;24400:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;24280:186;24326:3;;;;;;;24280:186;;;;24191:282:::0;;:::o;23421:121::-;22041:3;;;;;;;;;;;22027:17;;:10;:17;;;22019:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23525:9:::1;23503;:19;23513:8;23503:19;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;23421:121:::0;;:::o;29618:::-;29274:8;:20;29283:10;29274:20;;;;;;;;;;;;;;;;;;;;;;;;;29266:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29707:24:::1;29713:8;29723:7;29707:5;:24::i;:::-;29618:121:::0;;:::o;25212:171::-;25294:4;25311:42;25321:10;25333;25345:7;25311:9;:42::i;:::-;25371:4;25364:11;;25212:171;;;;:::o;22516:136::-;22041:3;;;;;;;;;;;22027:17;;:10;:17;;;22019:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22612:5:::1;22605:4;:12;;;;;;;;;;;;:::i;:::-;;22637:7;22628:6;:16;;;;;;;;;;;;:::i;:::-;;22516:136:::0;;:::o;29029:50::-;;;;;;;;;;;;;;;;;;;;;;:::o;29935:89::-;29972:19;30004:12;;;;;;;;;;;;;;;;;;;29935:89;:::o;21511:31::-;;;;:::o;29355:126::-;22041:3;;;;;;;;;;;22027:17;;:10;:17;;;22019:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29464:9:::1;29444:8;:17;29453:7;29444:17;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;29355:126:::0;;:::o;22432:76::-;22041:3;;;;;;;;;;;22027:17;;:10;:17;;;22019:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22496:4:::1;22490:3;;:10;;;;;;;;;;;;;;;;;;22432:76:::0;:::o;25391:148::-;25476:7;25503:10;:18;25514:6;25503:18;;;;;;;;;;;;;;;:28;25522:8;25503:28;;;;;;;;;;;;;;;;25496:35;;25391:148;;;;:::o;21898:33::-;;;;;;;;;;;;;:::o;23871:312::-;22137:6;:18;22144:10;22137:18;;;;;;;;;;;;;;;;;;;;;;;;;22129:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23960:18:::1;:28;23979:8;23960:28;;;;;;;;;;;;;;;;;;;;;;;;;23952:71;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;24034:24;24049:8;24034:14;:24::i;:::-;24100:5;24069:18;:28;24088:8;24069:28;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;24135:40;24156:8;:18;24165:8;24156:18;;;;;;;;;;;;;;;;24135:16;;:20;;:40;;;;:::i;:::-;24116:16;:59;;;;23871:312:::0;:::o;12992:181::-;13050:7;13070:9;13086:1;13082;:5;13070:17;;13111:1;13106;:6;;13098:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13164:1;13157:8;;;12992:181;;;;:::o;18100:177::-;18183:86;18203:5;18233:23;;;18258:2;18262:5;18210:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18183:19;:86::i;:::-;18100:177;;;:::o;28260:357::-;28374:1;28356:20;;:6;:20;;;;28348:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28460:1;28440:22;;:8;:22;;;;28432:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28549:7;28518:10;:18;28529:6;28518:18;;;;;;;;;;;;;;;:28;28537:8;28518:28;;;;;;;;;;;;;;;:38;;;;28591:8;28574:35;;28583:6;28574:35;;;28601:7;28574:35;;;;;;;;;;;;;;;;;;28260:357;;;:::o;27308:944::-;27427:1;27408:21;;:7;:21;;;;27400:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27516:1;27494:24;;:10;:24;;;;27486:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27579:21;;;;;;;;;;;27575:125;;;27625:9;:21;27635:10;27625:21;;;;;;;;;;;;;;;;;;;;;;;;;27617:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27575:125;27712:23;27727:7;27712:14;:23::i;:::-;27746:26;27761:10;27746:14;:26::i;:::-;27805:76;27827:7;27805:76;;;;;;;;;;;;;;;;;:8;:17;27814:7;27805:17;;;;;;;;;;;;;;;;:21;;:76;;;;;:::i;:::-;27785:8;:17;27794:7;27785:17;;;;;;;;;;;;;;;:96;;;;27915:33;27940:7;27915:8;:20;27924:10;27915:20;;;;;;;;;;;;;;;;:24;;:33;;;;:::i;:::-;27892:8;:20;27901:10;27892:20;;;;;;;;;;;;;;;:56;;;;27965:18;:27;27984:7;27965:27;;;;;;;;;;;;;;;;;;;;;;;;;27961:108;;;28028:29;28049:7;28028:16;;:20;;:29;;;;:::i;:::-;28009:16;:48;;;;27961:108;28083:18;:30;28102:10;28083:30;;;;;;;;;;;;;;;;;;;;;;;;;28079:111;;;28149:29;28170:7;28149:16;;:20;;:29;;;;:::i;:::-;28130:16;:48;;;;28079:111;28225:10;28207:37;;28216:7;28207:37;;;28236:7;28207:37;;;;;;;;;;;;;;;;;;27308:944;;;:::o;13895:192::-;13981:7;14014:1;14009;:6;;14017:12;14001:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14041:9;14057:1;14053;:5;14041:17;;14078:1;14071:8;;;13895:192;;;;;:::o;26228:543::-;26326:1;26306:22;;:8;:22;;;;26298:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26401:10;;26387:11;;:24;26379:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26447:24;26462:8;26447:14;:24::i;:::-;26498;26514:7;26498:11;;:15;;:24;;;;:::i;:::-;26484:11;:38;;;;26554:31;26577:7;26554:8;:18;26563:8;26554:18;;;;;;;;;;;;;;;;:22;;:31;;;;:::i;:::-;26533:8;:18;26542:8;26533:18;;;;;;;;;;;;;;;:52;;;;26602:18;:28;26621:8;26602:28;;;;;;;;;;;;;;;;;;;;;;;;;26598:109;;;26666:29;26687:7;26666:16;;:20;;:29;;;;:::i;:::-;26647:16;:48;;;;26598:109;26745:8;26724:39;;26741:1;26724:39;;;26755:7;26724:39;;;;;;;;;;;;;;;;;;26228:543;;:::o;28625:251::-;28691:9;28686:183;28710:13;:20;;;;28706:1;:24;28686:183;;;28752:20;28775:13;28789:1;28775:16;;;;;;;;;;;;;;;;;;;;;;;;;28752:39;;28820:12;28806:41;;;28848:8;28806:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28686:183;28732:3;;;;;;;28686:183;;;;28625:251;:::o;13456:136::-;13514:7;13541:43;13545:1;13548;13541:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;13534:50;;13456:136;;;;:::o;26779:521::-;26877:1;26857:22;;:8;:22;;;;26849:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26934:24;26949:8;26934:14;:24::i;:::-;26992:73;27015:7;26992:73;;;;;;;;;;;;;;;;;:8;:18;27001:8;26992:18;;;;;;;;;;;;;;;;:22;;:73;;;;;:::i;:::-;26971:8;:18;26980:8;26971:18;;;;;;;;;;;;;;;:94;;;;27090:24;27106:7;27090:11;;:15;;:24;;;;:::i;:::-;27076:11;:38;;;;27131:18;:28;27150:8;27131:28;;;;;;;;;;;;;;;;;;;;;;;;;27127:109;;;27195:29;27216:7;27195:16;;:20;;:29;;;;:::i;:::-;27176:16;:48;;;;27127:109;27280:1;27253:39;;27262:8;27253:39;;;27284:7;27253:39;;;;;;;;;;;;;;;;;;26779:521;;:::o;20405:761::-;20829:23;20855:69;20883:4;20855:69;;;;;;;;;;;;;;;;;20863:5;20855:27;;;;:69;;;;;:::i;:::-;20829:95;;20959:1;20939:10;:17;:21;20935:224;;;21081:10;21070:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21062:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20935:224;20405:761;;;:::o;4937:195::-;5040:12;5072:52;5094:6;5102:4;5108:1;5111:12;5072:21;:52::i;:::-;5065:59;;4937:195;;;;;:::o;5989:530::-;6116:12;6174:5;6149:21;:30;;6141:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6241:18;6252:6;6241:10;:18::i;:::-;6233:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6367:12;6381:23;6408:6;:11;;6428:5;6436:4;6408:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6366:75;;;;6459:52;6477:7;6486:10;6498:12;6459:17;:52::i;:::-;6452:59;;;;5989:530;;;;;;:::o;2019:422::-;2079:4;2287:12;2398:7;2386:20;2378:28;;2432:1;2425:4;:8;2418:15;;;2019:422;;;:::o;8529:742::-;8644:12;8673:7;8669:595;;;8704:10;8697:17;;;;8669:595;8838:1;8818:10;:17;:21;8814:439;;;9081:10;9075:17;9142:15;9129:10;9125:2;9121:19;9114:44;9029:148;9224:12;9217:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8529:742;;;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o

Swarm Source

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