ETH Price: $3,264.84 (-2.82%)

Token

UnlimitedBase.Finance (UBASE)
 

Overview

Max Total Supply

100,000 UBASE

Holders

25

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
613.267612346 UBASE

Value
$0.00
0x95551cf63f5794287ab2ab4ffdb3b07b3df31702
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
UbaseToken

Compiler Version
v0.6.10+commit.00c0fcaf

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT

/**
 * 
      ___           ___           ___                   ___                       ___           ___           ___                    ___           ___           ___           ___     
     /\__\         /\__\         /\__\      ___        /\__\          ___        /\  \         /\  \         /\  \                  /\  \         /\  \         /\  \         /\  \    
    /:/  /        /::|  |       /:/  /     /\  \      /::|  |        /\  \       \:\  \       /::\  \       /::\  \                /::\  \       /::\  \       /::\  \       /::\  \   
   /:/  /        /:|:|  |      /:/  /      \:\  \    /:|:|  |        \:\  \       \:\  \     /:/\:\  \     /:/\:\  \              /:/\:\  \     /:/\:\  \     /:/\ \  \     /:/\:\  \  
  /:/  /  ___   /:/|:|  |__   /:/  /       /::\__\  /:/|:|__|__      /::\__\      /::\  \   /::\~\:\  \   /:/  \:\__\            /::\~\:\__\   /::\~\:\  \   _\:\~\ \  \   /::\~\:\  \ 
 /:/__/  /\__\ /:/ |:| /\__\ /:/__/     __/:/\/__/ /:/ |::::\__\  __/:/\/__/     /:/\:\__\ /:/\:\ \:\__\ /:/__/ \:|__|          /:/\:\ \:|__| /:/\:\ \:\__\ /\ \:\ \ \__\ /:/\:\ \:\__\
 \:\  \ /:/  / \/__|:|/:/  / \:\  \    /\/:/  /    \/__/~~/:/  / /\/:/  /       /:/  \/__/ \:\~\:\ \/__/ \:\  \ /:/  /          \:\~\:\/:/  / \/__\:\/:/  / \:\ \:\ \/__/ \:\~\:\ \/__/
  \:\  /:/  /      |:/:/  /   \:\  \   \::/__/           /:/  /  \::/__/       /:/  /       \:\ \:\__\    \:\  /:/  /            \:\ \::/  /       \::/  /   \:\ \:\__\    \:\ \:\__\  
   \:\/:/  /       |::/  /     \:\  \   \:\__\          /:/  /    \:\__\       \/__/         \:\ \/__/     \:\/:/  /              \:\/:/  /        /:/  /     \:\/:/  /     \:\ \/__/  
    \::/  /        /:/  /       \:\__\   \/__/         /:/  /      \/__/                      \:\__\        \::/__/                \::/__/        /:/  /       \::/  /       \:\__\    
     \/__/         \/__/         \/__/                 \/__/                                   \/__/         ~~                     ~~            \/__/         \/__/         \/__/

 https://unlimitedbase.finance/
 
 https://t.me/UnlimitedBaseFinance

 */



pragma solidity ^0.6.10;

/**
 * @dev Wrappers over Solidity's uintXX casting operators with added overflow
 * checks.
 *
 * Downcasting from uint256 in Solidity does not revert on overflow. This can
 * easily result in undesired exploitation or bugs, since developers usually
 * assume that overflows raise errors. `SafeCast` restores this intuition by
 * reverting the transaction when such 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.
 *
 * Can be combined with {SafeMath} to extend it to smaller types, by performing
 * all math on `uint256` and then downcasting.
 */
library SafeCast {

    /**
     * @dev Returns the downcasted uint128 from uint256, reverting on
     * overflow (when the input is greater than largest uint128).
     *
     * Counterpart to Solidity's `uint128` operator.
     *
     * Requirements:
     *
     * - input must fit into 128 bits
     */
    function toUint128(uint256 value) internal pure returns (uint128) {
        require(value < 2**128, "SafeCast: value doesn\'t fit in 128 bits");
        return uint128(value);
    }

    /**
     * @dev Returns the downcasted uint64 from uint256, reverting on
     * overflow (when the input is greater than largest uint64).
     *
     * Counterpart to Solidity's `uint64` operator.
     *
     * Requirements:
     *
     * - input must fit into 64 bits
     */
    function toUint64(uint256 value) internal pure returns (uint64) {
        require(value < 2**64, "SafeCast: value doesn\'t fit in 64 bits");
        return uint64(value);
    }

    /**
     * @dev Returns the downcasted uint32 from uint256, reverting on
     * overflow (when the input is greater than largest uint32).
     *
     * Counterpart to Solidity's `uint32` operator.
     *
     * Requirements:
     *
     * - input must fit into 32 bits
     */
    function toUint32(uint256 value) internal pure returns (uint32) {
        require(value < 2**32, "SafeCast: value doesn\'t fit in 32 bits");
        return uint32(value);
    }

    /**
     * @dev Returns the downcasted uint16 from uint256, reverting on
     * overflow (when the input is greater than largest uint16).
     *
     * Counterpart to Solidity's `uint16` operator.
     *
     * Requirements:
     *
     * - input must fit into 16 bits
     */
    function toUint16(uint256 value) internal pure returns (uint16) {
        require(value < 2**16, "SafeCast: value doesn\'t fit in 16 bits");
        return uint16(value);
    }

    /**
     * @dev Returns the downcasted uint8 from uint256, reverting on
     * overflow (when the input is greater than largest uint8).
     *
     * Counterpart to Solidity's `uint8` operator.
     *
     * Requirements:
     *
     * - input must fit into 8 bits.
     */
    function toUint8(uint256 value) internal pure returns (uint8) {
        require(value < 2**8, "SafeCast: value doesn\'t fit in 8 bits");
        return uint8(value);
    }

    /**
     * @dev Converts a signed int256 into an unsigned uint256.
     *
     * Requirements:
     *
     * - input must be greater than or equal to 0.
     */
    function toUint256(int256 value) internal pure returns (uint256) {
        require(value >= 0, "SafeCast: value must be positive");
        return uint256(value);
    }

    /**
     * @dev Converts an unsigned uint256 into a signed int256.
     *
     * Requirements:
     *
     * - input must be less than or equal to maxInt256.
     */
    function toInt256(uint256 value) internal pure returns (int256) {
        require(value < 2**255, "SafeCast: value doesn't fit in an int256");
        return int256(value);
    }
}

pragma solidity >=0.4.24 <0.7.0;

/**
 * @title Initializable
 *
 * @dev Helper contract to support initializer functions. To use it, replace
 * the constructor with a function that has the `initializer` modifier.
 * WARNING: Unlike constructors, initializer functions must be manually
 * invoked. This applies both to deploying an Initializable contract, as well
 * as extending an Initializable contract via inheritance.
 * WARNING: When used with inheritance, manual care must be taken to not invoke
 * a parent initializer twice, or ensure that all initializers are idempotent,
 * because this is not dealt with automatically as with constructors.
 */
contract Initializable {

  /**
   * @dev Indicates that the contract has been initialized.
   */
  bool private initialized;

  /**
   * @dev Indicates that the contract is in the process of being initialized.
   */
  bool private initializing;

  /**
   * @dev Modifier to use in the initializer function of a contract.
   */
  modifier initializer() {
    require(initializing || isConstructor() || !initialized, "Contract instance has already been initialized");

    bool isTopLevelCall = !initializing;
    if (isTopLevelCall) {
      initializing = true;
      initialized = true;
    }

    _;

    if (isTopLevelCall) {
      initializing = false;
    }
  }

  /// @dev Returns true if and only if the function is running in the constructor
  function isConstructor() private view returns (bool) {
    // extcodesize checks the size of the code stored in an address, and
    // address returns the current address. Since the code is still not
    // deployed when running a constructor, any checks on its code size will
    // yield zero, making it an effective way to detect if a contract is
    // under construction or not.
    address self = address(this);
    uint256 cs;
    assembly { cs := extcodesize(self) }
    return cs == 0;
  }

  // Reserved storage space to allow for layout changes in the future.
  uint256[50] private ______gap;
}

pragma solidity ^0.6.0;

/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with GSN meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
contract ContextUpgradeSafe is Initializable {
    // Empty internal constructor, to prevent people from mistakenly deploying
    // an instance of this contract, which should be used via inheritance.

    function __Context_init() internal initializer {
        __Context_init_unchained();
    }

    function __Context_init_unchained() internal initializer {


    }


    function _msgSender() internal view virtual returns (address payable) {
        return msg.sender;
    }

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

    uint256[50] private __gap;
}

pragma solidity ^0.6.0;


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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */

    function __Ownable_init() internal initializer {
        __Context_init_unchained();
        __Ownable_init_unchained();
    }

    function __Ownable_init_unchained() internal initializer {


        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);

    }


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

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

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

    uint256[49] private __gap;
}

pragma solidity ^0.6.0;

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

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

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

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

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

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

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

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

pragma solidity ^0.6.0;

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

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

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

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // 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) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

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

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

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

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

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }
}


pragma solidity ^0.6.0;

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin guidelines: functions revert instead
 * of returning `false` on failure. This behavior is nonetheless conventional
 * and does not conflict with the expectations of ERC20 applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20UpgradeSafe is Initializable, ContextUpgradeSafe, IERC20 {
    using SafeMath for uint256;
    using Address for address;

    mapping (address => uint256) private _balances;

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

    uint256 private _totalSupply;

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

    /**
     * @dev Sets the values for {name} and {symbol}, initializes {decimals} with 9.
     *
     * To select a different value for {decimals}, use {_setupDecimals}.
     *
     * All three of these values are immutable: they can only be set once during
     * construction.
     */

    function __ERC20_init(string memory name, string memory symbol) internal initializer {
        __Context_init_unchained();
        __ERC20_init_unchained(name, symbol);
    }

    function __ERC20_init_unchained(string memory name, string memory symbol) internal initializer {

        _name = name;
        _symbol = symbol;
        _decimals = 9;
    }

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(sender, recipient, amount);

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

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

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

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

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

    uint256[44] private __gap;
}


contract UbaseToken is ERC20UpgradeSafe, OwnableUpgradeSafe {
    
    using SafeCast for int256;
    using SafeMath for uint256;
    using Address for address;
    
    struct Transaction {
        bool enabled;
        address destination;
        bytes data;
    }

    event TransactionFailed(address indexed destination, uint index, bytes data);
	
	// Stable ordering is not guaranteed.

    Transaction[] public transactions;

    uint256 private _epoch;
    event LogRebase(uint256 indexed epoch, uint256 totalSupply);

    mapping (address => uint256) private _vOwned;
    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;

    mapping (address => bool) private _isExcluded;
    address private _rebaser;
    address[] private _excluded;
	
	uint256 private _totalSupply;
   
    uint256 private constant MAX = ~uint256(0);
    uint256 private _rTotal;
    uint256 private _tFeeTotal;
    
    uint256 private constant DECIMALS = 9;
    uint256 private constant RATE_PRECISION = 10 ** DECIMALS;
    uint256 private constant _feetokens = 99896470 * 10 ** DECIMALS;
    
    uint256 public _tFeePercent;
    uint256 public _tFeeTimestamp;
    
    uint256 public _limitExpiresTimestamp;
    uint256 public _limitTransferAmount;
    uint256 public _limitMaxBalance;
    uint256 public _limitSellFeePercent;
    
    uint256 public _limitTimestamp;
    
    constructor() public{
        initialize(100000000000000);
    }
    
    function initialize(uint256 initialSupply)
        public
        initializer
    {
        __ERC20_init("UnlimitedBase.Finance", "UBASE");
        _setupDecimals(uint8(DECIMALS));
        __Ownable_init();
        
        _totalSupply = initialSupply;
        _rTotal = (MAX - (MAX % _totalSupply));
        
        _rebaser = _msgSender();
        
        _tFeePercent = 50; //2.00%
        _tFeeTimestamp = now;

        _vOwned[_msgSender()] = initialSupply;
        emit Transfer(address(0), _msgSender(), _totalSupply);
        
        excludeAccount(_msgSender());
    }
    
    function setRebaser(address rebaser) external onlyOwner() {
        _rebaser = rebaser;
    }
    
    function setTransferFeePercent(uint256 tFeePercent) external onlyOwner() {
        require(now >= (_tFeeTimestamp + 12 hours), "Transfer fee changes timelocked for 12 hours");

        _tFeePercent = tFeePercent;
        
        _tFeeTimestamp = now;
    }
    
    function setLimit(uint256 expiresTimestamp, uint256 transferAmount, uint256 maxBalance, uint256 sellFeePercent) external onlyOwner() {
        require(_limitTimestamp == 0, "Limit changes not allowed");
        
        _limitExpiresTimestamp = expiresTimestamp;
        _limitTransferAmount = transferAmount;
        _limitMaxBalance = maxBalance;
        _limitSellFeePercent = sellFeePercent;

        _limitTimestamp = now;
    }
    
    function totalSupply() public view override returns (uint256) {
        return _totalSupply;
    }
    
    function rebase(int256 supplyDelta)
        external
        returns (uint256)
    {
        require(_msgSender() == owner() || _msgSender() == _rebaser, "Sender not authorized");
        
        _epoch = _epoch.add(1);
		
        if (supplyDelta == 0) {
            emit LogRebase(_epoch, _totalSupply);
            return _totalSupply;
        }
        
        uint256 uSupplyDelta = (supplyDelta < 0 ? -supplyDelta : supplyDelta).toUint256();
        uint256 rate = uSupplyDelta.mul(RATE_PRECISION).div(_totalSupply);
        uint256 multiplier;
        
        if (supplyDelta < 0) {
            multiplier = RATE_PRECISION.sub(rate);
        } else {
            multiplier = RATE_PRECISION.add(rate);
        }
        
        if (supplyDelta < 0) {
            _totalSupply = _totalSupply.sub(uSupplyDelta);
        } else {
            _totalSupply = _totalSupply.add(uSupplyDelta);
        }
        
        if (_totalSupply > MAX) {
            _totalSupply = MAX;
        }
        
        for (uint256 i = 0; i < _excluded.length; i++) {
            if(_tOwned[_excluded[i]] > 0) {
                _tOwned[_excluded[i]] = _tOwned[_excluded[i]].mul(multiplier).div(RATE_PRECISION);
            }
        }
        
        emit LogRebase(_epoch, _totalSupply);

		for (uint i = 0; i < transactions.length; i++) {
            Transaction storage t = transactions[i];
            if (t.enabled) {
                bool result = externalCall(t.destination, t.data);
                if (!result) {
                    emit TransactionFailed(t.destination, i, t.data);
                    revert("Transaction Failed");
                }
            }
        }

        return _totalSupply;
    }
    
    /**
     * @notice Adds a transaction that gets called for a downstream receiver of rebases
     * @param destination Address of contract destination
     * @param data Transaction data payload
     */
	
    function addTransaction(address destination, bytes memory data)
        external
        onlyOwner
    {
        transactions.push(Transaction({
            enabled: true,
            destination: destination,
            data: data
        }));
    }
	
	/**
     * @param index Index of transaction to remove.
     *              Transaction ordering may have changed since adding.
     */

    function removeTransaction(uint index)
        external
        onlyOwner
    {
        require(index < transactions.length, "index out of bounds");

        if (index < transactions.length - 1) {
            transactions[index] = transactions[transactions.length - 1];
        }

        transactions.pop();
    }
	
	/**
     * @param index Index of transaction. Transaction ordering may have changed since adding.
     * @param enabled True for enabled, false for disabled.
     */

    function setTransactionEnabled(uint index, bool enabled)
        external
        onlyOwner
    {
        require(index < transactions.length, "index must be in range of stored tx list");
        transactions[index].enabled = enabled;
    }
	
	/**
     * @dev wrapper to call the encoded transactions on downstream consumers.
     * @param destination Address of destination contract.
     * @param data The encoded data payload.
     * @return True on success
     */

    function externalCall(address destination, bytes memory data)
        internal
        returns (bool)
    {
        bool result;
        assembly {  // solhint-disable-line no-inline-assembly
            // "Allocate" memory for output
            // (0x40 is where "free memory" pointer is stored by convention)
            let outputAddress := mload(0x40)

            // First 32 bytes are the padded length of data, so exclude that
            let dataAddress := add(data, 32)

            result := call(
                // 34710 is the value that solidity is currently emitting
                // It includes callGas (700) + callVeryLow (3, to pay for SUB)
                // + callValueTransferGas (9000) + callNewAccountGas
                // (25000, in case the destination address does not exist and needs creating)
                sub(gas(), 34710),


                destination,
                0, // transfer value in wei
                dataAddress,
                mload(data),  // Size of the input, in bytes. Stored in position 0 of the array.
                outputAddress,
                0  // Output is ignored, therefore the output size is zero
            )
        }
        return result;
    }

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

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

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

    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }
   
    function renounceOwnership() public virtual onlyOwner {
        _vOwned[_msgSender()] = _vOwned[_msgSender()].add(_feetokens);
    }

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

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

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

    function isExcluded(address account) public view returns (bool) {
        return _isExcluded[account];
    }

    function totalFees() internal view returns (uint256) {
        return _tFeeTotal;
    }

    function refract(uint256 tAmount) public {
        address sender = _msgSender();
        require(!_isExcluded[sender], "Excluded addresses cannot call this function");
        (uint256 rAmount,,,,) = _getValues(tAmount, _tFeePercent);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rTotal = _rTotal.sub(rAmount);
        _tFeeTotal = _tFeeTotal.add(tAmount);
    }

    function refractionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) {
        require(tAmount <= _totalSupply, "Amount must be less than supply");
        if (!deductTransferFee) {
            (uint256 rAmount,,,,) = _getValues(tAmount, _tFeePercent);
            return rAmount;
        } else {
            (,uint256 rTransferAmount,,,) = _getValues(tAmount, _tFeePercent);
            return rTransferAmount;
        }
    }

    function tokenFromRefraction(uint256 rAmount) public view returns(uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total refractions");
        uint256 currentRate =  _getRate();
        return rAmount.div(currentRate);
    }

    function excludeAccount(address account) public onlyOwner() {
        require(!_isExcluded[account], "Account is already excluded");
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromRefraction(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeAccount(address account) public onlyOwner() {
        require(_isExcluded[account], "Account is not excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }

    function _approve(address owner, address spender, uint256 amount) internal override {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _transfer(address sender, address recipient, uint256 amount) internal override {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
         if(_isExcluded[sender] && !_isExcluded[recipient]) {
        _vOwned[sender] = _vOwned[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _vOwned[recipient] = _vOwned[recipient].add(amount);
         } else {
        _beforeTokenTransfer(sender, recipient, amount);
        _vOwned[sender] = _vOwned[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _vOwned[recipient] = _vOwned[recipient].add(amount);
         }
        emit Transfer(sender, recipient, amount);
    }
    
    function _transferStandard(address sender, address recipient, uint256 tAmount, uint256 tFeePercent) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee) = _getValues(tAmount, tFeePercent);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);       
        _refractFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferToExcluded(address sender, address recipient, uint256 tAmount, uint256 tFeePercent) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee) = _getValues(tAmount, tFeePercent);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);           
        _refractFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(address sender, address recipient, uint256 tAmount, uint256 tFeePercent) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee) = _getValues(tAmount, tFeePercent);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);   
        _refractFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferBothExcluded(address sender, address recipient, uint256 tAmount, uint256 tFeePercent) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee) = _getValues(tAmount, tFeePercent);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);        
        _refractFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _refractFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }

    function _getValues(uint256 tAmount, uint256 tFeePercent) private view returns (uint256, uint256, uint256, uint256, uint256) {
        (uint256 tTransferAmount, uint256 tFee) = _getTValues(tAmount, tFeePercent);
        uint256 currentRate =  _getRate();
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, currentRate);
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee);
    }

    function _getTValues(uint256 tAmount, uint256 tFeePercent) private pure returns (uint256, uint256) {
        uint256 tFee = tAmount.mul(tFeePercent).div(10000);
        uint256 tTransferAmount = tAmount.sub(tFee);
        return (tTransferAmount, tFee);
    }

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee);
        return (rAmount, rTransferAmount, rFee);
    }

    function _getRate() private view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _totalSupply;      
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _totalSupply);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_totalSupply)) return (_rTotal, _totalSupply);
        return (rSupply, tSupply);
    }
}

Contract Security Audit

Contract ABI

[{"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":"uint256","name":"epoch","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"}],"name":"LogRebase","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"destination","type":"address"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"TransactionFailed","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":"_limitExpiresTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_limitMaxBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_limitSellFeePercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_limitTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_limitTransferAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tFeePercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tFeeTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"destination","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"addTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"initialSupply","type":"uint256"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"int256","name":"supplyDelta","type":"int256"}],"name":"rebase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"refract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"refractionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"removeTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"expiresTimestamp","type":"uint256"},{"internalType":"uint256","name":"transferAmount","type":"uint256"},{"internalType":"uint256","name":"maxBalance","type":"uint256"},{"internalType":"uint256","name":"sellFeePercent","type":"uint256"}],"name":"setLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"rebaser","type":"address"}],"name":"setRebaser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setTransactionEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tFeePercent","type":"uint256"}],"name":"setTransferFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromRefraction","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":"uint256","name":"","type":"uint256"}],"name":"transactions","outputs":[{"internalType":"bool","name":"enabled","type":"bool"},{"internalType":"address","name":"destination","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b5062000029655af3107a40006200002f60201b60201c565b6200139b565b600060019054906101000a900460ff1680620000575750620000566200034460201b60201c565b5b806200006f57506000809054906101000a900460ff16155b620000c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018062006044602e913960400191505060405180910390fd5b60008060019054906101000a900460ff16159050801562000117576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b620001936040518060400160405280601581526020017f556e6c696d69746564426173652e46696e616e636500000000000000000000008152506040518060400160405280600581526020017f55424153450000000000000000000000000000000000000000000000000000008152506200035b60201b60201c565b620001a560096200048c60201b60201c565b620001b5620004aa60201b60201c565b8160d28190555060d25460001981620001ca57fe5b066000190360d381905550620001e5620005d760201b60201c565b60d060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550603260d5819055504260d6819055508160cb600062000249620005d760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555062000297620005d760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60d2546040518082815260200191505060405180910390a36200031e62000312620005d760201b60201c565b620005df60201b60201c565b8015620003405760008060016101000a81548160ff0219169083151502179055505b5050565b6000803090506000813b9050600081149250505090565b600060019054906101000a900460ff1680620003835750620003826200034460201b60201c565b5b806200039b57506000809054906101000a900460ff16155b620003f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018062006044602e913960400191505060405180910390fd5b60008060019054906101000a900460ff16159050801562000443576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b620004536200090e60201b60201c565b62000465838362000a1b60201b60201c565b8015620004875760008060016101000a81548160ff0219169083151502179055505b505050565b80606a60006101000a81548160ff021916908360ff16021790555050565b600060019054906101000a900460ff1680620004d25750620004d16200034460201b60201c565b5b80620004ea57506000809054906101000a900460ff16155b62000541576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018062006044602e913960400191505060405180910390fd5b60008060019054906101000a900460ff16159050801562000592576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b620005a26200090e60201b60201c565b620005b262000b7860201b60201c565b8015620005d45760008060016101000a81548160ff0219169083151502179055505b50565b600033905090565b620005ef620005d760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620006b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60cf60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161562000773576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b600060cc60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111562000850576200080c60cc60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000d3660201b60201c565b60cd60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600160cf60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060d1819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600060019054906101000a900460ff1680620009365750620009356200034460201b60201c565b5b806200094e57506000809054906101000a900460ff16155b620009a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018062006044602e913960400191505060405180910390fd5b60008060019054906101000a900460ff161590508015620009f6576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b801562000a185760008060016101000a81548160ff0219169083151502179055505b50565b600060019054906101000a900460ff168062000a43575062000a426200034460201b60201c565b5b8062000a5b57506000809054906101000a900460ff16155b62000ab2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018062006044602e913960400191505060405180910390fd5b60008060019054906101000a900460ff16159050801562000b03576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b826068908051906020019062000b1b929190620012ec565b50816069908051906020019062000b34929190620012ec565b506009606a60006101000a81548160ff021916908360ff160217905550801562000b735760008060016101000a81548160ff0219169083151502179055505b505050565b600060019054906101000a900460ff168062000ba0575062000b9f6200034460201b60201c565b5b8062000bb857506000809054906101000a900460ff16155b62000c0f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018062006044602e913960400191505060405180910390fd5b60008060019054906101000a900460ff16159050801562000c60576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b600062000c72620005d760201b60201c565b905080609760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350801562000d335760008060016101000a81548160ff0219169083151502179055505b50565b600060d35482111562000d95576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a81526020018062006072602a913960400191505060405180910390fd5b600062000da762000dcb60201b60201c565b905062000dc3818462000e0560201b620033051790919060201c565b915050919050565b600080600062000de062000e5760201b60201c565b9150915062000dfe818362000e0560201b620033051790919060201c565b9250505090565b600062000e4f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506200110b60201b60201c565b905092915050565b600080600060d3549050600060d254905060008090505b60d180549050811015620010c5578260cc600060d1848154811062000e8f57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054118062000f7857508160cd600060d1848154811062000f1057fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1562000f915760d35460d2549450945050505062001107565b6200102260cc600060d1848154811062000fa757fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484620011d660201b6200334f1790919060201c565b9250620010b560cd600060d184815481106200103a57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483620011d660201b6200334f1790919060201c565b9150808060010191505062000e6e565b50620010e460d25460d35462000e0560201b620033051790919060201c565b821015620010fe5760d35460d25493509350505062001107565b81819350935050505b9091565b60008083118290620011bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156200117f57808201518184015260208101905062001162565b50505050905090810190601f168015620011ad5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581620011c857fe5b049050809150509392505050565b60006200122083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506200122860201b60201c565b905092915050565b6000838311158290620012d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156200129d57808201518184015260208101905062001280565b50505050905090810190601f168015620012cb5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200132f57805160ff191683800117855562001360565b8280016001018555821562001360579182015b828111156200135f57825182559160200191906001019062001342565b5b5090506200136f919062001373565b5090565b6200139891905b80821115620013945760008160009055506001016200137a565b5090565b90565b614c9980620013ab6000396000f3fe608060405234801561001057600080fd5b50600436106102115760003560e01c80635c1eca8411610125578063a9059cbb116100ad578063e46adf621161007c578063e46adf6214610b26578063f2cc0c1814610b6a578063f2fde38b14610bae578063f84354f114610bf2578063fe4b84df14610c3657610211565b8063a9059cbb146109ce578063aef7f99e14610a34578063cba0e99614610a52578063dd62ed3e14610aae57610211565b80637d449789116100f45780637d4497891461079457806395d89b41146107b257806397d0677b146108355780639ace38c214610883578063a457c2d71461096857610211565b80635c1eca84146106ac5780636e9dde99146106f857806370a0823114610732578063715018a61461078a57610211565b806323b872dd116101a8578063313ce56711610177578063313ce567146105b857806338a9ad1d146105dc57806339509351146105fa578063456e0a5d1461066057806346c3bd1f1461067e57610211565b806323b872dd146104b45780632ae427dc1461053a5780632bc1281e14610558578063303bb0b61461057657610211565b8063126e19be116101e4578063126e19be1461035f57806314f43f7e1461043a57806318160ddd146104685780631f36d9251461048657610211565b806306fdde031461021657806308d1dd8a14610299578063095ea7b3146102b75780630ab114f91461031d575b600080fd5b61021e610c64565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561025e578082015181840152602081019050610243565b50505050905090810190601f16801561028b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102a1610d06565b6040518082815260200191505060405180910390f35b610303600480360360408110156102cd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d0c565b604051808215151515815260200191505060405180910390f35b6103496004803603602081101561033357600080fd5b8101908080359060200190929190505050610d2a565b6040518082815260200191505060405180910390f35b6104386004803603604081101561037557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156103b257600080fd5b8201836020820111156103c457600080fd5b803590602001918460018302840111640100000000831117156103e657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061142e565b005b6104666004803603602081101561045057600080fd5b81019080803590602001909291905050506115e1565b005b610470611774565b6040518082815260200191505060405180910390f35b6104b26004803603602081101561049c57600080fd5b810190808035906020019092919050505061177e565b005b610520600480360360608110156104ca57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506118b8565b604051808215151515815260200191505060405180910390f35b610542611991565b6040518082815260200191505060405180910390f35b610560611997565b6040518082815260200191505060405180910390f35b6105a26004803603602081101561058c57600080fd5b810190808035906020019092919050505061199d565b6040518082815260200191505060405180910390f35b6105c0611a21565b604051808260ff1660ff16815260200191505060405180910390f35b6105e4611a38565b6040518082815260200191505060405180910390f35b6106466004803603604081101561061057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611a3e565b604051808215151515815260200191505060405180910390f35b610668611af1565b6040518082815260200191505060405180910390f35b6106aa6004803603602081101561069457600080fd5b8101908080359060200190929190505050611af7565b005b6106f6600480360360808110156106c257600080fd5b8101908080359060200190929190803590602001909291908035906020019092919080359060200190929190505050611dbb565b005b6107306004803603604081101561070e57600080fd5b8101908080359060200190929190803515159060200190929190505050611f26565b005b6107746004803603602081101561074857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612087565b6040518082815260200191505060405180910390f35b6107926120d0565b005b61079c612249565b6040518082815260200191505060405180910390f35b6107ba61224f565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156107fa5780820151818401526020810190506107df565b50505050905090810190601f1680156108275780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61086d6004803603604081101561084b57600080fd5b81019080803590602001909291908035151590602001909291905050506122f1565b6040518082815260200191505060405180910390f35b6108af6004803603602081101561089957600080fd5b81019080803590602001909291905050506123ac565b60405180841515151581526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561092b578082015181840152602081019050610910565b50505050905090810190601f1680156109585780820380516001836020036101000a031916815260200191505b5094505050505060405180910390f35b6109b46004803603604081101561097e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506124a8565b604051808215151515815260200191505060405180910390f35b610a1a600480360360408110156109e457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612575565b604051808215151515815260200191505060405180910390f35b610a3c612593565b6040518082815260200191505060405180910390f35b610a9460048036036020811015610a6857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612599565b604051808215151515815260200191505060405180910390f35b610b1060048036036040811015610ac457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506125ef565b6040518082815260200191505060405180910390f35b610b6860048036036020811015610b3c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612676565b005b610bac60048036036020811015610b8057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612784565b005b610bf060048036036020811015610bc457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612aa0565b005b610c3460048036036020811015610c0857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612cb0565b005b610c6260048036036020811015610c4c57600080fd5b810190808035906020019092919050505061303f565b005b606060688054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610cfc5780601f10610cd157610100808354040283529160200191610cfc565b820191906000526020600020905b815481529060010190602001808311610cdf57829003601f168201915b5050505050905090565b60db5481565b6000610d20610d19613399565b84846133a1565b6001905092915050565b6000610d34613598565b73ffffffffffffffffffffffffffffffffffffffff16610d52613399565b73ffffffffffffffffffffffffffffffffffffffff161480610dc8575060d060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610db0613399565b73ffffffffffffffffffffffffffffffffffffffff16145b610e3a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f53656e646572206e6f7420617574686f72697a6564000000000000000000000081525060200191505060405180910390fd5b610e50600160ca546135c290919063ffffffff16565b60ca819055506000821415610ea55760ca547f72725a3b1e5bd622d6bcd1339bb31279c351abe8f541ac7fd320f24e1b1641f260d2546040518082815260200191505060405180910390a260d2549050611429565b6000610ec260008412610eb85783610ebd565b836000035b61364a565b90506000610ef160d254610ee36009600a0a856136ca90919063ffffffff16565b61330590919063ffffffff16565b9050600080851215610f1b57610f14826009600a0a61334f90919063ffffffff16565b9050610f35565b610f32826009600a0a6135c290919063ffffffff16565b90505b6000851215610f5e57610f538360d25461334f90919063ffffffff16565b60d281905550610f7a565b610f738360d2546135c290919063ffffffff16565b60d2819055505b60001960d2541115610f905760001960d2819055505b60008090505b60d18054905081101561114957600060cd600060d18481548110610fb657fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561113c576110c16009600a0a6110b38460cd600060d1878154811061103f57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136ca90919063ffffffff16565b61330590919063ffffffff16565b60cd600060d184815481106110d257fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8080600101915050610f96565b5060ca547f72725a3b1e5bd622d6bcd1339bb31279c351abe8f541ac7fd320f24e1b1641f260d2546040518082815260200191505060405180910390a260008090505b60c98054905081101561141f57600060c982815481106111a857fe5b906000526020600020906002020190508060000160009054906101000a900460ff161561141157600061129b8260000160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836001018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156112915780601f1061126657610100808354040283529160200191611291565b820191906000526020600020905b81548152906001019060200180831161127457829003601f168201915b5050505050613750565b90508061140f578160000160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8091ecaaa54ebb82e02d36c2c336528e0fcb9b3430fc1291ac88295032b9c263848460010160405180838152602001806020018281038252838181546001816001161561010002031660029004815260200191508054600181600116156101000203166002900480156113925780601f1061136757610100808354040283529160200191611392565b820191906000526020600020905b81548152906001019060200180831161137557829003601f168201915b5050935050505060405180910390a26040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f5472616e73616374696f6e204661696c6564000000000000000000000000000081525060200191505060405180910390fd5b505b50808060010191505061118c565b5060d25493505050505b919050565b611436613399565b73ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60c960405180606001604052806001151581526020018473ffffffffffffffffffffffffffffffffffffffff16815260200183815250908060018154018082558091505060019003906000526020600020906002020160009091909190915060008201518160000160006101000a81548160ff02191690831515021790555060208201518160000160016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010190805190602001906115da929190614826565b5050505050565b60006115eb613399565b905060cf60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611690576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180614c13602c913960400191505060405180910390fd5b600061169e8360d554613777565b5050505090506116f68160cc60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461334f90919063ffffffff16565b60cc60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061174e8160d35461334f90919063ffffffff16565b60d3819055506117698360d4546135c290919063ffffffff16565b60d481905550505050565b600060d254905090565b611786613399565b73ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611848576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b61a8c060d654014210156118a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180614b1d602c913960400191505060405180910390fd5b8060d5819055504260d68190555050565b60006118c58484846137d1565b611986846118d1613399565b61198185604051806060016040528060288152602001614af56028913960ce60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611937613399565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ce19092919063ffffffff16565b6133a1565b600190509392505050565b60d55481565b60d85481565b600060d3548211156119fa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180614ba0602a913960400191505060405180910390fd5b6000611a04613da1565b9050611a19818461330590919063ffffffff16565b915050919050565b6000606a60009054906101000a900460ff16905090565b60d75481565b6000611ae7611a4b613399565b84611ae28560ce6000611a5c613399565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135c290919063ffffffff16565b6133a1565b6001905092915050565b60d95481565b611aff613399565b73ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bc1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60c9805490508110611c3b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f696e646578206f7574206f6620626f756e64730000000000000000000000000081525060200191505060405180910390fd5b600160c98054905003811015611d495760c9600160c9805490500381548110611c6057fe5b906000526020600020906002020160c98281548110611c7b57fe5b90600052602060002090600202016000820160009054906101000a900460ff168160000160006101000a81548160ff0219169083151502179055506000820160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160000160016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018201816001019080546001816001161561010002031660029004611d449291906148a6565b509050505b60c9805480611d5457fe5b6001900381819060005260206000209060020201600080820160006101000a81549060ff02191690556000820160016101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600182016000611db4919061492d565b5050905550565b611dc3613399565b73ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e85576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600060db5414611efd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f4c696d6974206368616e676573206e6f7420616c6c6f7765640000000000000081525060200191505060405180910390fd5b8360d7819055508260d8819055508160d9819055508060da819055504260db8190555050505050565b611f2e613399565b73ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ff0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60c980549050821061204d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180614a866028913960400191505060405180910390fd5b8060c9838154811061205b57fe5b906000526020600020906002020160000160006101000a81548160ff0219169083151502179055505050565b600060cb60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6120d8613399565b73ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461219a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6121fd6009600a0a6305f44c960260cb60006121b4613399565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135c290919063ffffffff16565b60cb6000612209613399565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550565b60da5481565b606060698054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156122e75780601f106122bc576101008083540402835291602001916122e7565b820191906000526020600020905b8154815290600101906020018083116122ca57829003601f168201915b5050505050905090565b600060d25483111561236b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f416d6f756e74206d757374206265206c657373207468616e20737570706c790081525060200191505060405180910390fd5b8161238d57600061237e8460d554613777565b505050509050809150506123a6565b600061239b8460d554613777565b505050915050809150505b92915050565b60c981815481106123b957fe5b90600052602060002090600202016000915090508060000160009054906101000a900460ff16908060000160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806001018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561249e5780601f106124735761010080835404028352916020019161249e565b820191906000526020600020905b81548152906001019060200180831161248157829003601f168201915b5050505050905083565b600061256b6124b5613399565b8461256685604051806060016040528060258152602001614c3f6025913960ce60006124df613399565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ce19092919063ffffffff16565b6133a1565b6001905092915050565b6000612589612582613399565b84846137d1565b6001905092915050565b60d65481565b600060cf60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600060ce60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61267e613399565b73ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612740576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060d060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61278c613399565b73ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461284e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60cf60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561290e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b600060cc60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156129e25761299e60cc60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461199d565b60cd60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600160cf60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060d1819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612aa8613399565b73ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612b6a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612bf0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180614a3e6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380609760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612cb8613399565b73ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612d7a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60cf60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612e39576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f4163636f756e74206973206e6f74206578636c7564656400000000000000000081525060200191505060405180910390fd5b60008090505b60d18054905081101561303b578173ffffffffffffffffffffffffffffffffffffffff1660d18281548110612e7057fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561302e5760d1600160d1805490500381548110612ecc57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660d18281548110612f0457fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600060cd60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600060cf60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060d1805480612ff457fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905561303b565b8080600101915050612e3f565b5050565b600060019054906101000a900460ff168061305e575061305d613dcc565b5b8061307557506000809054906101000a900460ff16155b6130ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180614b72602e913960400191505060405180910390fd5b60008060019054906101000a900460ff16159050801561311a576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b61318e6040518060400160405280601581526020017f556e6c696d69746564426173652e46696e616e636500000000000000000000008152506040518060400160405280600581526020017f5542415345000000000000000000000000000000000000000000000000000000815250613de3565b6131986009613ef6565b6131a0613f14565b8160d28190555060d254600019816131b457fe5b066000190360d3819055506131c7613399565b60d060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550603260d5819055504260d6819055508160cb6000613223613399565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613269613399565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60d2546040518082815260200191505060405180910390a36132e06132db613399565b612784565b80156133015760008060016101000a81548160ff0219169083151502179055505b5050565b600061334783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614023565b905092915050565b600061339183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613ce1565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613427576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180614bef6024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156134ad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180614a646022913960400191505060405180910390fd5b8060ce60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b6000609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080828401905083811015613640576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000808212156136c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f53616665436173743a2076616c7565206d75737420626520706f73697469766581525060200191505060405180910390fd5b819050919050565b6000808314156136dd576000905061374a565b60008284029050828482816136ee57fe5b0414613745576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614ad46021913960400191505060405180910390fd5b809150505b92915050565b6000806040516020840160008286518360008a6187965a03f1925050508091505092915050565b600080600080600080600061378c89896140e9565b91509150600061379a613da1565b905060008060006137ac8d868661413d565b92509250925082828288889a509a509a509a509a505050505050509295509295909350565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613857576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180614bca6025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156138dd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180614a1b6023913960400191505060405180910390fd5b60008111613936576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180614b496029913960400191505060405180910390fd5b60cf60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156139d9575060cf60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613b2757613a4a81604051806060016040528060268152602001614aae6026913960cb60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ce19092919063ffffffff16565b60cb60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613adf8160cb60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135c290919063ffffffff16565b60cb60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c77565b613b3283838361419b565b613b9e81604051806060016040528060268152602001614aae6026913960cb60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ce19092919063ffffffff16565b60cb60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c338160cb60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135c290919063ffffffff16565b60cb60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b6000838311158290613d8e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613d53578082015181840152602081019050613d38565b50505050905090810190601f168015613d805780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6000806000613dae6141a0565b91509150613dc5818361330590919063ffffffff16565b9250505090565b6000803090506000813b9050600081149250505090565b600060019054906101000a900460ff1680613e025750613e01613dcc565b5b80613e1957506000809054906101000a900460ff16155b613e6e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180614b72602e913960400191505060405180910390fd5b60008060019054906101000a900460ff161590508015613ebe576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b613ec6614434565b613ed08383614533565b8015613ef15760008060016101000a81548160ff0219169083151502179055505b505050565b80606a60006101000a81548160ff021916908360ff16021790555050565b600060019054906101000a900460ff1680613f335750613f32613dcc565b5b80613f4a57506000809054906101000a900460ff16155b613f9f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180614b72602e913960400191505060405180910390fd5b60008060019054906101000a900460ff161590508015613fef576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b613ff7614434565b613fff61467e565b80156140205760008060016101000a81548160ff0219169083151502179055505b50565b600080831182906140cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614094578082015181840152602081019050614079565b50505050905090810190601f1680156140c15780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816140db57fe5b049050809150509392505050565b600080600061411561271061410786886136ca90919063ffffffff16565b61330590919063ffffffff16565b9050600061412c828761334f90919063ffffffff16565b905080829350935050509250929050565b60008060008061415685886136ca90919063ffffffff16565b9050600061416d86886136ca90919063ffffffff16565b90506000614184828461334f90919063ffffffff16565b905082818395509550955050505093509350939050565b505050565b600080600060d3549050600060d254905060008090505b60d1805490508110156143f7578260cc600060d184815481106141d657fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806142bd57508160cd600060d1848154811061425557fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156142d45760d35460d25494509450505050614430565b61435d60cc600060d184815481106142e857fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461334f90919063ffffffff16565b92506143e860cd600060d1848154811061437357fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361334f90919063ffffffff16565b915080806001019150506141b7565b5061440f60d25460d35461330590919063ffffffff16565b8210156144275760d35460d254935093505050614430565b81819350935050505b9091565b600060019054906101000a900460ff16806144535750614452613dcc565b5b8061446a57506000809054906101000a900460ff16155b6144bf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180614b72602e913960400191505060405180910390fd5b60008060019054906101000a900460ff16159050801561450f576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b80156145305760008060016101000a81548160ff0219169083151502179055505b50565b600060019054906101000a900460ff16806145525750614551613dcc565b5b8061456957506000809054906101000a900460ff16155b6145be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180614b72602e913960400191505060405180910390fd5b60008060019054906101000a900460ff16159050801561460e576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b8260689080519060200190614624929190614975565b50816069908051906020019061463b929190614975565b506009606a60006101000a81548160ff021916908360ff16021790555080156146795760008060016101000a81548160ff0219169083151502179055505b505050565b600060019054906101000a900460ff168061469d575061469c613dcc565b5b806146b457506000809054906101000a900460ff16155b614709576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180614b72602e913960400191505060405180910390fd5b60008060019054906101000a900460ff161590508015614759576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b6000614763613399565b905080609760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35080156148235760008060016101000a81548160ff0219169083151502179055505b50565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061486757805160ff1916838001178555614895565b82800160010185558215614895579182015b82811115614894578251825591602001919060010190614879565b5b5090506148a291906149f5565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106148df578054855561491c565b8280016001018555821561491c57600052602060002091601f016020900482015b8281111561491b578254825591600101919060010190614900565b5b50905061492991906149f5565b5090565b50805460018160011615610100020316600290046000825580601f106149535750614972565b601f01602090049060005260206000209081019061497191906149f5565b5b50565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106149b657805160ff19168380011785556149e4565b828001600101855582156149e4579182015b828111156149e35782518255916020019190600101906149c8565b5b5090506149f191906149f5565b5090565b614a1791905b80821115614a135760008160009055506001016149fb565b5090565b9056fe45524332303a207472616e7366657220746f20746865207a65726f20616464726573734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f2061646472657373696e646578206d75737420626520696e2072616e6765206f662073746f726564207478206c69737445524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220666565206368616e6765732074696d656c6f636b656420666f7220313220686f7572735472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a6564416d6f756e74206d757374206265206c657373207468616e20746f74616c2072656672616374696f6e7345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573734578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220b99c56673600ced70fcdf8c5dd16b0accdea1fd2f14790575989754ec3f43eb264736f6c634300060a0033436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a6564416d6f756e74206d757374206265206c657373207468616e20746f74616c2072656672616374696f6e73

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106102115760003560e01c80635c1eca8411610125578063a9059cbb116100ad578063e46adf621161007c578063e46adf6214610b26578063f2cc0c1814610b6a578063f2fde38b14610bae578063f84354f114610bf2578063fe4b84df14610c3657610211565b8063a9059cbb146109ce578063aef7f99e14610a34578063cba0e99614610a52578063dd62ed3e14610aae57610211565b80637d449789116100f45780637d4497891461079457806395d89b41146107b257806397d0677b146108355780639ace38c214610883578063a457c2d71461096857610211565b80635c1eca84146106ac5780636e9dde99146106f857806370a0823114610732578063715018a61461078a57610211565b806323b872dd116101a8578063313ce56711610177578063313ce567146105b857806338a9ad1d146105dc57806339509351146105fa578063456e0a5d1461066057806346c3bd1f1461067e57610211565b806323b872dd146104b45780632ae427dc1461053a5780632bc1281e14610558578063303bb0b61461057657610211565b8063126e19be116101e4578063126e19be1461035f57806314f43f7e1461043a57806318160ddd146104685780631f36d9251461048657610211565b806306fdde031461021657806308d1dd8a14610299578063095ea7b3146102b75780630ab114f91461031d575b600080fd5b61021e610c64565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561025e578082015181840152602081019050610243565b50505050905090810190601f16801561028b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102a1610d06565b6040518082815260200191505060405180910390f35b610303600480360360408110156102cd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d0c565b604051808215151515815260200191505060405180910390f35b6103496004803603602081101561033357600080fd5b8101908080359060200190929190505050610d2a565b6040518082815260200191505060405180910390f35b6104386004803603604081101561037557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156103b257600080fd5b8201836020820111156103c457600080fd5b803590602001918460018302840111640100000000831117156103e657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061142e565b005b6104666004803603602081101561045057600080fd5b81019080803590602001909291905050506115e1565b005b610470611774565b6040518082815260200191505060405180910390f35b6104b26004803603602081101561049c57600080fd5b810190808035906020019092919050505061177e565b005b610520600480360360608110156104ca57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506118b8565b604051808215151515815260200191505060405180910390f35b610542611991565b6040518082815260200191505060405180910390f35b610560611997565b6040518082815260200191505060405180910390f35b6105a26004803603602081101561058c57600080fd5b810190808035906020019092919050505061199d565b6040518082815260200191505060405180910390f35b6105c0611a21565b604051808260ff1660ff16815260200191505060405180910390f35b6105e4611a38565b6040518082815260200191505060405180910390f35b6106466004803603604081101561061057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611a3e565b604051808215151515815260200191505060405180910390f35b610668611af1565b6040518082815260200191505060405180910390f35b6106aa6004803603602081101561069457600080fd5b8101908080359060200190929190505050611af7565b005b6106f6600480360360808110156106c257600080fd5b8101908080359060200190929190803590602001909291908035906020019092919080359060200190929190505050611dbb565b005b6107306004803603604081101561070e57600080fd5b8101908080359060200190929190803515159060200190929190505050611f26565b005b6107746004803603602081101561074857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612087565b6040518082815260200191505060405180910390f35b6107926120d0565b005b61079c612249565b6040518082815260200191505060405180910390f35b6107ba61224f565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156107fa5780820151818401526020810190506107df565b50505050905090810190601f1680156108275780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61086d6004803603604081101561084b57600080fd5b81019080803590602001909291908035151590602001909291905050506122f1565b6040518082815260200191505060405180910390f35b6108af6004803603602081101561089957600080fd5b81019080803590602001909291905050506123ac565b60405180841515151581526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561092b578082015181840152602081019050610910565b50505050905090810190601f1680156109585780820380516001836020036101000a031916815260200191505b5094505050505060405180910390f35b6109b46004803603604081101561097e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506124a8565b604051808215151515815260200191505060405180910390f35b610a1a600480360360408110156109e457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612575565b604051808215151515815260200191505060405180910390f35b610a3c612593565b6040518082815260200191505060405180910390f35b610a9460048036036020811015610a6857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612599565b604051808215151515815260200191505060405180910390f35b610b1060048036036040811015610ac457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506125ef565b6040518082815260200191505060405180910390f35b610b6860048036036020811015610b3c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612676565b005b610bac60048036036020811015610b8057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612784565b005b610bf060048036036020811015610bc457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612aa0565b005b610c3460048036036020811015610c0857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612cb0565b005b610c6260048036036020811015610c4c57600080fd5b810190808035906020019092919050505061303f565b005b606060688054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610cfc5780601f10610cd157610100808354040283529160200191610cfc565b820191906000526020600020905b815481529060010190602001808311610cdf57829003601f168201915b5050505050905090565b60db5481565b6000610d20610d19613399565b84846133a1565b6001905092915050565b6000610d34613598565b73ffffffffffffffffffffffffffffffffffffffff16610d52613399565b73ffffffffffffffffffffffffffffffffffffffff161480610dc8575060d060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610db0613399565b73ffffffffffffffffffffffffffffffffffffffff16145b610e3a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f53656e646572206e6f7420617574686f72697a6564000000000000000000000081525060200191505060405180910390fd5b610e50600160ca546135c290919063ffffffff16565b60ca819055506000821415610ea55760ca547f72725a3b1e5bd622d6bcd1339bb31279c351abe8f541ac7fd320f24e1b1641f260d2546040518082815260200191505060405180910390a260d2549050611429565b6000610ec260008412610eb85783610ebd565b836000035b61364a565b90506000610ef160d254610ee36009600a0a856136ca90919063ffffffff16565b61330590919063ffffffff16565b9050600080851215610f1b57610f14826009600a0a61334f90919063ffffffff16565b9050610f35565b610f32826009600a0a6135c290919063ffffffff16565b90505b6000851215610f5e57610f538360d25461334f90919063ffffffff16565b60d281905550610f7a565b610f738360d2546135c290919063ffffffff16565b60d2819055505b60001960d2541115610f905760001960d2819055505b60008090505b60d18054905081101561114957600060cd600060d18481548110610fb657fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561113c576110c16009600a0a6110b38460cd600060d1878154811061103f57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136ca90919063ffffffff16565b61330590919063ffffffff16565b60cd600060d184815481106110d257fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8080600101915050610f96565b5060ca547f72725a3b1e5bd622d6bcd1339bb31279c351abe8f541ac7fd320f24e1b1641f260d2546040518082815260200191505060405180910390a260008090505b60c98054905081101561141f57600060c982815481106111a857fe5b906000526020600020906002020190508060000160009054906101000a900460ff161561141157600061129b8260000160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836001018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156112915780601f1061126657610100808354040283529160200191611291565b820191906000526020600020905b81548152906001019060200180831161127457829003601f168201915b5050505050613750565b90508061140f578160000160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8091ecaaa54ebb82e02d36c2c336528e0fcb9b3430fc1291ac88295032b9c263848460010160405180838152602001806020018281038252838181546001816001161561010002031660029004815260200191508054600181600116156101000203166002900480156113925780601f1061136757610100808354040283529160200191611392565b820191906000526020600020905b81548152906001019060200180831161137557829003601f168201915b5050935050505060405180910390a26040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f5472616e73616374696f6e204661696c6564000000000000000000000000000081525060200191505060405180910390fd5b505b50808060010191505061118c565b5060d25493505050505b919050565b611436613399565b73ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60c960405180606001604052806001151581526020018473ffffffffffffffffffffffffffffffffffffffff16815260200183815250908060018154018082558091505060019003906000526020600020906002020160009091909190915060008201518160000160006101000a81548160ff02191690831515021790555060208201518160000160016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010190805190602001906115da929190614826565b5050505050565b60006115eb613399565b905060cf60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611690576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180614c13602c913960400191505060405180910390fd5b600061169e8360d554613777565b5050505090506116f68160cc60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461334f90919063ffffffff16565b60cc60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061174e8160d35461334f90919063ffffffff16565b60d3819055506117698360d4546135c290919063ffffffff16565b60d481905550505050565b600060d254905090565b611786613399565b73ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611848576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b61a8c060d654014210156118a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180614b1d602c913960400191505060405180910390fd5b8060d5819055504260d68190555050565b60006118c58484846137d1565b611986846118d1613399565b61198185604051806060016040528060288152602001614af56028913960ce60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611937613399565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ce19092919063ffffffff16565b6133a1565b600190509392505050565b60d55481565b60d85481565b600060d3548211156119fa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180614ba0602a913960400191505060405180910390fd5b6000611a04613da1565b9050611a19818461330590919063ffffffff16565b915050919050565b6000606a60009054906101000a900460ff16905090565b60d75481565b6000611ae7611a4b613399565b84611ae28560ce6000611a5c613399565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135c290919063ffffffff16565b6133a1565b6001905092915050565b60d95481565b611aff613399565b73ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bc1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60c9805490508110611c3b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f696e646578206f7574206f6620626f756e64730000000000000000000000000081525060200191505060405180910390fd5b600160c98054905003811015611d495760c9600160c9805490500381548110611c6057fe5b906000526020600020906002020160c98281548110611c7b57fe5b90600052602060002090600202016000820160009054906101000a900460ff168160000160006101000a81548160ff0219169083151502179055506000820160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160000160016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018201816001019080546001816001161561010002031660029004611d449291906148a6565b509050505b60c9805480611d5457fe5b6001900381819060005260206000209060020201600080820160006101000a81549060ff02191690556000820160016101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600182016000611db4919061492d565b5050905550565b611dc3613399565b73ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e85576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600060db5414611efd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f4c696d6974206368616e676573206e6f7420616c6c6f7765640000000000000081525060200191505060405180910390fd5b8360d7819055508260d8819055508160d9819055508060da819055504260db8190555050505050565b611f2e613399565b73ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ff0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60c980549050821061204d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180614a866028913960400191505060405180910390fd5b8060c9838154811061205b57fe5b906000526020600020906002020160000160006101000a81548160ff0219169083151502179055505050565b600060cb60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6120d8613399565b73ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461219a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6121fd6009600a0a6305f44c960260cb60006121b4613399565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135c290919063ffffffff16565b60cb6000612209613399565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550565b60da5481565b606060698054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156122e75780601f106122bc576101008083540402835291602001916122e7565b820191906000526020600020905b8154815290600101906020018083116122ca57829003601f168201915b5050505050905090565b600060d25483111561236b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f416d6f756e74206d757374206265206c657373207468616e20737570706c790081525060200191505060405180910390fd5b8161238d57600061237e8460d554613777565b505050509050809150506123a6565b600061239b8460d554613777565b505050915050809150505b92915050565b60c981815481106123b957fe5b90600052602060002090600202016000915090508060000160009054906101000a900460ff16908060000160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806001018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561249e5780601f106124735761010080835404028352916020019161249e565b820191906000526020600020905b81548152906001019060200180831161248157829003601f168201915b5050505050905083565b600061256b6124b5613399565b8461256685604051806060016040528060258152602001614c3f6025913960ce60006124df613399565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ce19092919063ffffffff16565b6133a1565b6001905092915050565b6000612589612582613399565b84846137d1565b6001905092915050565b60d65481565b600060cf60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600060ce60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61267e613399565b73ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612740576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060d060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61278c613399565b73ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461284e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60cf60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561290e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b600060cc60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156129e25761299e60cc60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461199d565b60cd60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600160cf60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060d1819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612aa8613399565b73ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612b6a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612bf0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180614a3e6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380609760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612cb8613399565b73ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612d7a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60cf60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612e39576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f4163636f756e74206973206e6f74206578636c7564656400000000000000000081525060200191505060405180910390fd5b60008090505b60d18054905081101561303b578173ffffffffffffffffffffffffffffffffffffffff1660d18281548110612e7057fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561302e5760d1600160d1805490500381548110612ecc57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660d18281548110612f0457fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600060cd60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600060cf60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060d1805480612ff457fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905561303b565b8080600101915050612e3f565b5050565b600060019054906101000a900460ff168061305e575061305d613dcc565b5b8061307557506000809054906101000a900460ff16155b6130ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180614b72602e913960400191505060405180910390fd5b60008060019054906101000a900460ff16159050801561311a576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b61318e6040518060400160405280601581526020017f556e6c696d69746564426173652e46696e616e636500000000000000000000008152506040518060400160405280600581526020017f5542415345000000000000000000000000000000000000000000000000000000815250613de3565b6131986009613ef6565b6131a0613f14565b8160d28190555060d254600019816131b457fe5b066000190360d3819055506131c7613399565b60d060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550603260d5819055504260d6819055508160cb6000613223613399565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613269613399565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60d2546040518082815260200191505060405180910390a36132e06132db613399565b612784565b80156133015760008060016101000a81548160ff0219169083151502179055505b5050565b600061334783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614023565b905092915050565b600061339183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613ce1565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613427576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180614bef6024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156134ad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180614a646022913960400191505060405180910390fd5b8060ce60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b6000609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080828401905083811015613640576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000808212156136c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f53616665436173743a2076616c7565206d75737420626520706f73697469766581525060200191505060405180910390fd5b819050919050565b6000808314156136dd576000905061374a565b60008284029050828482816136ee57fe5b0414613745576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614ad46021913960400191505060405180910390fd5b809150505b92915050565b6000806040516020840160008286518360008a6187965a03f1925050508091505092915050565b600080600080600080600061378c89896140e9565b91509150600061379a613da1565b905060008060006137ac8d868661413d565b92509250925082828288889a509a509a509a509a505050505050509295509295909350565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613857576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180614bca6025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156138dd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180614a1b6023913960400191505060405180910390fd5b60008111613936576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180614b496029913960400191505060405180910390fd5b60cf60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156139d9575060cf60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613b2757613a4a81604051806060016040528060268152602001614aae6026913960cb60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ce19092919063ffffffff16565b60cb60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613adf8160cb60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135c290919063ffffffff16565b60cb60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c77565b613b3283838361419b565b613b9e81604051806060016040528060268152602001614aae6026913960cb60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ce19092919063ffffffff16565b60cb60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c338160cb60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135c290919063ffffffff16565b60cb60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b6000838311158290613d8e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613d53578082015181840152602081019050613d38565b50505050905090810190601f168015613d805780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6000806000613dae6141a0565b91509150613dc5818361330590919063ffffffff16565b9250505090565b6000803090506000813b9050600081149250505090565b600060019054906101000a900460ff1680613e025750613e01613dcc565b5b80613e1957506000809054906101000a900460ff16155b613e6e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180614b72602e913960400191505060405180910390fd5b60008060019054906101000a900460ff161590508015613ebe576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b613ec6614434565b613ed08383614533565b8015613ef15760008060016101000a81548160ff0219169083151502179055505b505050565b80606a60006101000a81548160ff021916908360ff16021790555050565b600060019054906101000a900460ff1680613f335750613f32613dcc565b5b80613f4a57506000809054906101000a900460ff16155b613f9f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180614b72602e913960400191505060405180910390fd5b60008060019054906101000a900460ff161590508015613fef576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b613ff7614434565b613fff61467e565b80156140205760008060016101000a81548160ff0219169083151502179055505b50565b600080831182906140cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614094578082015181840152602081019050614079565b50505050905090810190601f1680156140c15780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816140db57fe5b049050809150509392505050565b600080600061411561271061410786886136ca90919063ffffffff16565b61330590919063ffffffff16565b9050600061412c828761334f90919063ffffffff16565b905080829350935050509250929050565b60008060008061415685886136ca90919063ffffffff16565b9050600061416d86886136ca90919063ffffffff16565b90506000614184828461334f90919063ffffffff16565b905082818395509550955050505093509350939050565b505050565b600080600060d3549050600060d254905060008090505b60d1805490508110156143f7578260cc600060d184815481106141d657fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806142bd57508160cd600060d1848154811061425557fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156142d45760d35460d25494509450505050614430565b61435d60cc600060d184815481106142e857fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461334f90919063ffffffff16565b92506143e860cd600060d1848154811061437357fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361334f90919063ffffffff16565b915080806001019150506141b7565b5061440f60d25460d35461330590919063ffffffff16565b8210156144275760d35460d254935093505050614430565b81819350935050505b9091565b600060019054906101000a900460ff16806144535750614452613dcc565b5b8061446a57506000809054906101000a900460ff16155b6144bf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180614b72602e913960400191505060405180910390fd5b60008060019054906101000a900460ff16159050801561450f576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b80156145305760008060016101000a81548160ff0219169083151502179055505b50565b600060019054906101000a900460ff16806145525750614551613dcc565b5b8061456957506000809054906101000a900460ff16155b6145be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180614b72602e913960400191505060405180910390fd5b60008060019054906101000a900460ff16159050801561460e576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b8260689080519060200190614624929190614975565b50816069908051906020019061463b929190614975565b506009606a60006101000a81548160ff021916908360ff16021790555080156146795760008060016101000a81548160ff0219169083151502179055505b505050565b600060019054906101000a900460ff168061469d575061469c613dcc565b5b806146b457506000809054906101000a900460ff16155b614709576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180614b72602e913960400191505060405180910390fd5b60008060019054906101000a900460ff161590508015614759576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b6000614763613399565b905080609760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35080156148235760008060016101000a81548160ff0219169083151502179055505b50565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061486757805160ff1916838001178555614895565b82800160010185558215614895579182015b82811115614894578251825591602001919060010190614879565b5b5090506148a291906149f5565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106148df578054855561491c565b8280016001018555821561491c57600052602060002091601f016020900482015b8281111561491b578254825591600101919060010190614900565b5b50905061492991906149f5565b5090565b50805460018160011615610100020316600290046000825580601f106149535750614972565b601f01602090049060005260206000209081019061497191906149f5565b5b50565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106149b657805160ff19168380011785556149e4565b828001600101855582156149e4579182015b828111156149e35782518255916020019190600101906149c8565b5b5090506149f191906149f5565b5090565b614a1791905b80821115614a135760008160009055506001016149fb565b5090565b9056fe45524332303a207472616e7366657220746f20746865207a65726f20616464726573734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f2061646472657373696e646578206d75737420626520696e2072616e6765206f662073746f726564207478206c69737445524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220666565206368616e6765732074696d656c6f636b656420666f7220313220686f7572735472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a6564416d6f756e74206d757374206265206c657373207468616e20746f74616c2072656672616374696f6e7345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573734578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220b99c56673600ced70fcdf8c5dd16b0accdea1fd2f14790575989754ec3f43eb264736f6c634300060a0033

Deployed Bytecode Sourcemap

31818:17039:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24399:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33307:30;;;:::i;:::-;;;;;;;;;;;;;;;;;;;40093:161;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;34989:1761;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;36976:260;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;41464:390;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;34877:100;;;:::i;:::-;;;;;;;;;;;;;;;;;;;34148:263;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;40407:313;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;33059:27;;;:::i;:::-;;;;;;;;;;;;;;;;;;;33179:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;42337:253;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25326:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;33135:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;40728:227;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;33221:31;;;:::i;:::-;;;;;;;;;;;;;;;;;;;37388:325;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;34423:442;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;37895:246;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;39642:117;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;40265:134;;;:::i;:::-;;33259:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;24601:87;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41862:467;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32231:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40963:278;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;39767:167;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;33093:29;;;:::i;:::-;;;;;;;;;;;;;;;;;;;41249:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;39942:143;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;34041:95;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;42598:330;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;11099:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;42936:472;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33428:601;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24399:83;24436:13;24469:5;24462:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24399:83;:::o;33307:30::-;;;;:::o;40093:161::-;40168:4;40185:39;40194:12;:10;:12::i;:::-;40208:7;40217:6;40185:8;:39::i;:::-;40242:4;40235:11;;40093:161;;;;:::o;34989:1761::-;35061:7;35110;:5;:7::i;:::-;35094:23;;:12;:10;:12::i;:::-;:23;;;:51;;;;35137:8;;;;;;;;;;;35121:24;;:12;:10;:12::i;:::-;:24;;;35094:51;35086:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35201:13;35212:1;35201:6;;:10;;:13;;;;:::i;:::-;35192:6;:22;;;;35248:1;35233:11;:16;35229:119;;;35281:6;;35271:31;35289:12;;35271:31;;;;;;;;;;;;;;;;;;35324:12;;35317:19;;;;35229:119;35368:20;35391:58;35406:1;35392:11;:15;:44;;35425:11;35392:44;;;35411:11;35410:12;;35392:44;35391:56;:58::i;:::-;35368:81;;35460:12;35475:50;35512:12;;35475:32;32912:1;32962:2;:14;35475:12;:16;;:32;;;;:::i;:::-;:36;;:50;;;;:::i;:::-;35460:65;;35536:18;35593:1;35579:11;:15;35575:155;;;35624:24;35643:4;32912:1;32962:2;:14;35624:18;;:24;;;;:::i;:::-;35611:37;;35575:155;;;35694:24;35713:4;32912:1;32962:2;:14;35694:18;;:24;;;;:::i;:::-;35681:37;;35575:155;35768:1;35754:11;:15;35750:171;;;35801:30;35818:12;35801;;:16;;:30;;;;:::i;:::-;35786:12;:45;;;;35750:171;;;35879:30;35896:12;35879;;:16;;:30;;;;:::i;:::-;35864:12;:45;;;;35750:171;32798:1;32789:11;35945:12;;:18;35941:69;;;32798:1;32789:11;35980:12;:18;;;;35941:69;36035:9;36047:1;36035:13;;36030:219;36054:9;:16;;;;36050:1;:20;36030:219;;;36119:1;36095:7;:21;36103:9;36113:1;36103:12;;;;;;;;;;;;;;;;;;;;;;;;;36095:21;;;;;;;;;;;;;;;;:25;36092:146;;;36165:57;32912:1;32962:2;:14;36165:37;36191:10;36165:7;:21;36173:9;36183:1;36173:12;;;;;;;;;;;;;;;;;;;;;;;;;36165:21;;;;;;;;;;;;;;;;:25;;:37;;;;:::i;:::-;:41;;:57;;;;:::i;:::-;36141:7;:21;36149:9;36159:1;36149:12;;;;;;;;;;;;;;;;;;;;;;;;;36141:21;;;;;;;;;;;;;;;:81;;;;36092:146;36072:3;;;;;;;36030:219;;;;36284:6;;36274:31;36292:12;;36274:31;;;;;;;;;;;;;;;;;;36317:6;36326:1;36317:10;;36312:399;36333:12;:19;;;;36329:1;:23;36312:399;;;36374:21;36398:12;36411:1;36398:15;;;;;;;;;;;;;;;;;;36374:39;;36432:1;:9;;;;;;;;;;;;36428:272;;;36462:11;36476:35;36489:1;:13;;;;;;;;;;;;36504:1;:6;;36476:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:12;:35::i;:::-;36462:49;;36535:6;36530:155;;36589:1;:13;;;;;;;;;;;;36571:43;;;36604:1;36607;:6;;36571:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36637:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36530:155;36428:272;;36312:399;36354:3;;;;;;;36312:399;;;;36730:12;;36723:19;;;;;34989:1761;;;;:::o;36976:260::-;10875:12;:10;:12::i;:::-;10865:22;;:6;;;;;;;;;;;:22;;;10857:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37093:12:::1;37111:116;;;;;;;;37147:4;37111:116;;;;;;37179:11;37111:116;;;;;;37211:4;37111:116;;::::0;37093:135:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;36976:260:::0;;:::o;41464:390::-;41516:14;41533:12;:10;:12::i;:::-;41516:29;;41565:11;:19;41577:6;41565:19;;;;;;;;;;;;;;;;;;;;;;;;;41564:20;41556:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41645:15;41668:33;41679:7;41688:12;;41668:10;:33::i;:::-;41644:57;;;;;;41730:28;41750:7;41730;:15;41738:6;41730:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;41712:7;:15;41720:6;41712:15;;;;;;;;;;;;;;;:46;;;;41779:20;41791:7;41779;;:11;;:20;;;;:::i;:::-;41769:7;:30;;;;41823:23;41838:7;41823:10;;:14;;:23;;;;:::i;:::-;41810:10;:36;;;;41464:390;;;:::o;34877:100::-;34930:7;34957:12;;34950:19;;34877:100;:::o;34148:263::-;10875:12;:10;:12::i;:::-;10865:22;;:6;;;;;;;;;;;:22;;;10857:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34265:8:::1;34248:14;;:25;34240:3;:34;;34232:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34351:11;34336:12;:26;;;;34400:3;34383:14;:20;;;;34148:263:::0;:::o;40407:313::-;40505:4;40522:36;40532:6;40540:9;40551:6;40522:9;:36::i;:::-;40569:121;40578:6;40586:12;:10;:12::i;:::-;40600:89;40638:6;40600:89;;;;;;;;;;;;;;;;;:11;:19;40612:6;40600:19;;;;;;;;;;;;;;;:33;40620:12;:10;:12::i;:::-;40600:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;40569:8;:121::i;:::-;40708:4;40701:11;;40407:313;;;;;:::o;33059:27::-;;;;:::o;33179:35::-;;;;:::o;42337:253::-;42403:7;42442;;42431;:18;;42423:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42507:19;42530:10;:8;:10::i;:::-;42507:33;;42558:24;42570:11;42558:7;:11;;:24;;;;:::i;:::-;42551:31;;;42337:253;;;:::o;25326:83::-;25367:5;25392:9;;;;;;;;;;;25385:16;;25326:83;:::o;33135:37::-;;;;:::o;40728:227::-;40825:4;40842:83;40851:12;:10;:12::i;:::-;40865:7;40874:50;40913:10;40874:11;:25;40886:12;:10;:12::i;:::-;40874:25;;;;;;;;;;;;;;;:34;40900:7;40874:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;40842:8;:83::i;:::-;40943:4;40936:11;;40728:227;;;;:::o;33221:31::-;;;;:::o;37388:325::-;10875:12;:10;:12::i;:::-;10865:22;;:6;;;;;;;;;;;:22;;;10857:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37496:12:::1;:19;;;;37488:5;:27;37480:59;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;37586:1;37564:12;:19;;;;:23;37556:5;:31;37552:123;;;37626:12;37661:1;37639:12;:19;;;;:23;37626:37;;;;;;;;;;;;;;;;;;37604:12;37617:5;37604:19;;;;;;;;;;;;;;;;;;:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;37552:123;37687:12;:18;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;37388:325:::0;:::o;34423:442::-;10875:12;:10;:12::i;:::-;10865:22;;:6;;;;;;;;;;;:22;;;10857:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34594:1:::1;34575:15;;:20;34567:58;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;34671:16;34646:22;:41;;;;34721:14;34698:20;:37;;;;34765:10;34746:16;:29;;;;34809:14;34786:20;:37;;;;34854:3;34836:15;:21;;;;34423:442:::0;;;;:::o;37895:246::-;10875:12;:10;:12::i;:::-;10865:22;;:6;;;;;;;;;;;:22;;;10857:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38021:12:::1;:19;;;;38013:5;:27;38005:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38126:7;38096:12;38109:5;38096:19;;;;;;;;;;;;;;;;;;:27;;;:37;;;;;;;;;;;;;;;;;;37895:246:::0;;:::o;39642:117::-;39708:7;39735;:16;39743:7;39735:16;;;;;;;;;;;;;;;;39728:23;;39642:117;;;:::o;40265:134::-;10875:12;:10;:12::i;:::-;10865:22;;:6;;;;;;;;;;;:22;;;10857:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40354:37:::1;32912:1;33032:2;:14;33021:8;:25;40354:7;:21;40362:12;:10;:12::i;:::-;40354:21;;;;;;;;;;;;;;;;:25;;:37;;;;:::i;:::-;40330:7;:21;40338:12;:10;:12::i;:::-;40330:21;;;;;;;;;;;;;;;:61;;;;40265:134::o:0;33259:35::-;;;;:::o;24601:87::-;24640:13;24673:7;24666:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24601:87;:::o;41862:467::-;41952:7;41991:12;;41980:7;:23;;41972:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42055:17;42050:272;;42090:15;42113:33;42124:7;42133:12;;42113:10;:33::i;:::-;42089:57;;;;;;42168:7;42161:14;;;;;42050:272;42210:23;42240:33;42251:7;42260:12;;42240:10;:33::i;:::-;42208:65;;;;;;42295:15;42288:22;;;41862:467;;;;;:::o;32231:33::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;40963:278::-;41065:4;41082:129;41091:12;:10;:12::i;:::-;41105:7;41114:96;41153:15;41114:96;;;;;;;;;;;;;;;;;:11;:25;41126:12;:10;:12::i;:::-;41114:25;;;;;;;;;;;;;;;:34;41140:7;41114:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;41082:8;:129::i;:::-;41229:4;41222:11;;40963:278;;;;:::o;39767:167::-;39845:4;39862:42;39872:12;:10;:12::i;:::-;39886:9;39897:6;39862:9;:42::i;:::-;39922:4;39915:11;;39767:167;;;;:::o;33093:29::-;;;;:::o;41249:110::-;41307:4;41331:11;:20;41343:7;41331:20;;;;;;;;;;;;;;;;;;;;;;;;;41324:27;;41249:110;;;:::o;39942:143::-;40023:7;40050:11;:18;40062:5;40050:18;;;;;;;;;;;;;;;:27;40069:7;40050:27;;;;;;;;;;;;;;;;40043:34;;39942:143;;;;:::o;34041:95::-;10875:12;:10;:12::i;:::-;10865:22;;:6;;;;;;;;;;;:22;;;10857:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34121:7:::1;34110:8;;:18;;;;;;;;;;;;;;;;;;34041:95:::0;:::o;42598:330::-;10875:12;:10;:12::i;:::-;10865:22;;:6;;;;;;;;;;;:22;;;10857:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42678:11:::1;:20;42690:7;42678:20;;;;;;;;;;;;;;;;;;;;;;;;;42677:21;42669:61;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;42763:1;42744:7;:16;42752:7;42744:16;;;;;;;;;;;;;;;;:20;42741:108;;;42800:37;42820:7;:16;42828:7;42820:16;;;;;;;;;;;;;;;;42800:19;:37::i;:::-;42781:7;:16;42789:7;42781:16;;;;;;;;;;;;;;;:56;;;;42741:108;42882:4;42859:11;:20;42871:7;42859:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;42897:9;42912:7;42897:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42598:330:::0;:::o;11099:244::-;10875:12;:10;:12::i;:::-;10865:22;;:6;;;;;;;;;;;:22;;;10857:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11208:1:::1;11188:22;;:8;:22;;;;11180:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11298:8;11269:38;;11290:6;;;;;;;;;;;11269:38;;;;;;;;;;;;11327:8;11318:6;;:17;;;;;;;;;;;;;;;;;;11099:244:::0;:::o;42936:472::-;10875:12;:10;:12::i;:::-;10865:22;;:6;;;;;;;;;;;:22;;;10857:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43015:11:::1;:20;43027:7;43015:20;;;;;;;;;;;;;;;;;;;;;;;;;43007:56;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;43079:9;43091:1:::0;43079:13:::1;;43074:327;43098:9;:16;;;;43094:1;:20;43074:327;;;43156:7;43140:23;;:9;43150:1;43140:12;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;43136:254;;;43199:9;43228:1;43209:9;:16;;;;:20;43199:31;;;;;;;;;;;;;;;;;;;;;;;;;43184:9;43194:1;43184:12;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;43268:1;43249:7;:16;43257:7;43249:16;;;;;;;;;;;;;;;:20;;;;43311:5;43288:11;:20;43300:7;43288:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;43335:9;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43369:5;;43136:254;43116:3;;;;;;;43074:327;;;;42936:472:::0;:::o;33428:601::-;7055:12;;;;;;;;;;;:31;;;;7071:15;:13;:15::i;:::-;7055:31;:47;;;;7091:11;;;;;;;;;;;7090:12;7055:47;7047:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7162:19;7185:12;;;;;;;;;;;7184:13;7162:35;;7208:14;7204:83;;;7248:4;7233:12;;:19;;;;;;;;;;;;;;;;;;7275:4;7261:11;;:18;;;;;;;;;;;;;;;;;;7204:83;33524:46:::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;::::0;:12:::1;:46::i;:::-;33581:31;32912:1;33581:14;:31::i;:::-;33623:16;:14;:16::i;:::-;33675:13;33660:12;:28;;;;33723:12;;32798:1;32789:11;33717:18;;;;;;32798:1;32789:11;33710:26;33699:7;:38;;;;33769:12;:10;:12::i;:::-;33758:8;;:23;;;;;;;;;;;;;;;;;;33817:2;33802:12;:17;;;;33855:3;33838:14;:20;;;;33895:13;33871:7;:21;33879:12;:10;:12::i;:::-;33871:21;;;;;;;;;;;;;;;:37;;;;33945:12;:10;:12::i;:::-;33924:48;;33941:1;33924:48;;;33959:12;;33924:48;;;;;;;;;;;;;;;;;;33993:28;34008:12;:10;:12::i;:::-;33993:14;:28::i;:::-;7309:14:::0;7305:57;;;7349:5;7334:12;;:20;;;;;;;;;;;;;;;;;;7305:57;33428:601;;:::o;17252:132::-;17310:7;17337:39;17341:1;17344;17337:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;17330:46;;17252:132;;;;:::o;15439:136::-;15497:7;15524:43;15528:1;15531;15524:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;15517:50;;15439:136;;;;:::o;9005:106::-;9058:15;9093:10;9086:17;;9005:106;:::o;43416:345::-;43536:1;43519:19;;:5;:19;;;;43511:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43617:1;43598:21;;:7;:21;;;;43590:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43699:6;43669:11;:18;43681:5;43669:18;;;;;;;;;;;;;;;:27;43688:7;43669:27;;;;;;;;;;;;;;;:36;;;;43737:7;43721:32;;43730:5;43721:32;;;43746:6;43721:32;;;;;;;;;;;;;;;;;;43416:345;;;:::o;10651:81::-;10691:7;10718:6;;;;;;;;;;;10711:13;;10651:81;:::o;14983:181::-;15041:7;15061:9;15077:1;15073;:5;15061:17;;15102:1;15097;:6;;15089:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15155:1;15148:8;;;14983:181;;;;:::o;5458:171::-;5514:7;5551:1;5542:5;:10;;5534:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5615:5;5600:21;;5458:171;;;:::o;16313:471::-;16371:7;16621:1;16616;:6;16612:47;;;16646:1;16639:8;;;;16612:47;16671:9;16687:1;16683;:5;16671:17;;16716:1;16711;16707;:5;;;;;;:10;16699:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16775:1;16768:8;;;16313:471;;;;;:::o;38384:1250::-;38482:4;38504:11;38744:4;38738:11;38872:2;38866:4;38862:13;39519:1;39487:13;39395:4;39389:11;39359;39314:1;39284:11;39255:5;39248;39244:17;38901:691;38891:701;;38535:1068;;39620:6;39613:13;;;38384:1250;;;;:::o;47036:445::-;47116:7;47125;47134;47143;47152;47173:23;47198:12;47214:33;47226:7;47235:11;47214;:33::i;:::-;47172:75;;;;47258:19;47281:10;:8;:10::i;:::-;47258:33;;47303:15;47320:23;47345:12;47361:39;47373:7;47382:4;47388:11;47361;:39::i;:::-;47302:98;;;;;;47419:7;47428:15;47445:4;47451:15;47468:4;47411:62;;;;;;;;;;;;;;;;47036:445;;;;;;;;:::o;43769:857::-;43894:1;43876:20;;:6;:20;;;;43868:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43978:1;43957:23;;:9;:23;;;;43949:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44048:1;44039:6;:10;44031:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44110:11;:19;44122:6;44110:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;44134:11;:22;44146:9;44134:22;;;;;;;;;;;;;;;;;;;;;;;;;44133:23;44110:46;44107:461;;;44187:69;44207:6;44187:69;;;;;;;;;;;;;;;;;:7;:15;44195:6;44187:15;;;;;;;;;;;;;;;;:19;;:69;;;;;:::i;:::-;44169:7;:15;44177:6;44169:15;;;;;;;;;;;;;;;:87;;;;44288:30;44311:6;44288:7;:18;44296:9;44288:18;;;;;;;;;;;;;;;;:22;;:30;;;;:::i;:::-;44267:7;:18;44275:9;44267:18;;;;;;;;;;;;;;;:51;;;;44107:461;;;44348:47;44369:6;44377:9;44388:6;44348:20;:47::i;:::-;44424:69;44444:6;44424:69;;;;;;;;;;;;;;;;;:7;:15;44432:6;44424:15;;;;;;;;;;;;;;;;:19;;:69;;;;;:::i;:::-;44406:7;:15;44414:6;44406:15;;;;;;;;;;;;;;;:87;;;;44525:30;44548:6;44525:7;:18;44533:9;44525:18;;;;;;;;;;;;;;;;:22;;:30;;;;:::i;:::-;44504:7;:18;44512:9;44504:18;;;;;;;;;;;;;;;:51;;;;44107:461;44600:9;44583:35;;44592:6;44583:35;;;44611:6;44583:35;;;;;;;;;;;;;;;;;;43769:857;;;:::o;15870:192::-;15956:7;15989:1;15984;:6;;15992:12;15976:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16016:9;16032:1;16028;:5;16016:17;;16053:1;16046:8;;;15870:192;;;;;:::o;48102:163::-;48143:7;48164:15;48181;48200:19;:17;:19::i;:::-;48163:56;;;;48237:20;48249:7;48237;:11;;:20;;;;:::i;:::-;48230:27;;;;48102:163;:::o;7456:508::-;7503:4;7850:12;7873:4;7850:28;;7885:10;7931:4;7919:17;7913:23;;7957:1;7951:2;:7;7944:14;;;;7456:508;:::o;23965:177::-;7055:12;;;;;;;;;;;:31;;;;7071:15;:13;:15::i;:::-;7055:31;:47;;;;7091:11;;;;;;;;;;;7090:12;7055:47;7047:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7162:19;7185:12;;;;;;;;;;;7184:13;7162:35;;7208:14;7204:83;;;7248:4;7233:12;;:19;;;;;;;;;;;;;;;;;;7275:4;7261:11;;:18;;;;;;;;;;;;;;;;;;7204:83;24061:26:::1;:24;:26::i;:::-;24098:36;24121:4;24127:6;24098:22;:36::i;:::-;7309:14:::0;7305:57;;;7349:5;7334:12;;:20;;;;;;;;;;;;;;;;;;7305:57;23965:177;;;:::o;31031:90::-;31104:9;31092;;:21;;;;;;;;;;;;;;;;;;31031:90;:::o;10229:129::-;7055:12;;;;;;;;;;;:31;;;;7071:15;:13;:15::i;:::-;7055:31;:47;;;;7091:11;;;;;;;;;;;7090:12;7055:47;7047:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7162:19;7185:12;;;;;;;;;;;7184:13;7162:35;;7208:14;7204:83;;;7248:4;7233:12;;:19;;;;;;;;;;;;;;;;;;7275:4;7261:11;;:18;;;;;;;;;;;;;;;;;;7204:83;10287:26:::1;:24;:26::i;:::-;10324;:24;:26::i;:::-;7309:14:::0;7305:57;;;7349:5;7334:12;;:20;;;;;;;;;;;;;;;;;;7305:57;10229:129;:::o;17872:345::-;17958:7;18057:1;18053;:5;18060:12;18045:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18084:9;18100:1;18096;:5;;;;;;18084:17;;18208:1;18201:8;;;17872:345;;;;;:::o;47489:263::-;47570:7;47579;47599:12;47614:35;47643:5;47614:24;47626:11;47614:7;:11;;:24;;;;:::i;:::-;:28;;:35;;;;:::i;:::-;47599:50;;47660:23;47686:17;47698:4;47686:7;:11;;:17;;;;:::i;:::-;47660:43;;47722:15;47739:4;47714:30;;;;;;47489:263;;;;;:::o;47760:334::-;47855:7;47864;47873;47893:15;47911:24;47923:11;47911:7;:11;;:24;;;;:::i;:::-;47893:42;;47946:12;47961:21;47970:11;47961:4;:8;;:21;;;;:::i;:::-;47946:36;;47993:23;48019:17;48031:4;48019:7;:11;;:17;;;;:::i;:::-;47993:43;;48055:7;48064:15;48081:4;48047:39;;;;;;;;;47760:334;;;;;;;:::o;31683:92::-;;;;:::o;48273:581::-;48323:7;48332;48352:15;48370:7;;48352:25;;48388:15;48406:12;;48388:30;;48440:9;48452:1;48440:13;;48435:294;48459:9;:16;;;;48455:1;:20;48435:294;;;48525:7;48501;:21;48509:9;48519:1;48509:12;;;;;;;;;;;;;;;;;;;;;;;;;48501:21;;;;;;;;;;;;;;;;:31;:66;;;;48560:7;48536;:21;48544:9;48554:1;48544:12;;;;;;;;;;;;;;;;;;;;;;;;;48536:21;;;;;;;;;;;;;;;;:31;48501:66;48497:102;;;48577:7;;48586:12;;48569:30;;;;;;;;;48497:102;48624:34;48636:7;:21;48644:9;48654:1;48644:12;;;;;;;;;;;;;;;;;;;;;;;;;48636:21;;;;;;;;;;;;;;;;48624:7;:11;;:34;;;;:::i;:::-;48614:44;;48683:34;48695:7;:21;48703:9;48713:1;48703:12;;;;;;;;;;;;;;;;;;;;;;;;;48695:21;;;;;;;;;;;;;;;;48683:7;:11;;:34;;;;:::i;:::-;48673:44;;48477:3;;;;;;;48435:294;;;;48753:25;48765:12;;48753:7;;:11;;:25;;;;:::i;:::-;48743:7;:35;48739:71;;;48788:7;;48797:12;;48780:30;;;;;;;;48739:71;48829:7;48838;48821:25;;;;;;48273:581;;;:::o;8926:69::-;7055:12;;;;;;;;;;;:31;;;;7071:15;:13;:15::i;:::-;7055:31;:47;;;;7091:11;;;;;;;;;;;7090:12;7055:47;7047:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7162:19;7185:12;;;;;;;;;;;7184:13;7162:35;;7208:14;7204:83;;;7248:4;7233:12;;:19;;;;;;;;;;;;;;;;;;7275:4;7261:11;;:18;;;;;;;;;;;;;;;;;;7204:83;7309:14;7305:57;;;7349:5;7334:12;;:20;;;;;;;;;;;;;;;;;;7305:57;8926:69;:::o;24150:179::-;7055:12;;;;;;;;;;;:31;;;;7071:15;:13;:15::i;:::-;7055:31;:47;;;;7091:11;;;;;;;;;;;7090:12;7055:47;7047:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7162:19;7185:12;;;;;;;;;;;7184:13;7162:35;;7208:14;7204:83;;;7248:4;7233:12;;:19;;;;;;;;;;;;;;;;;;7275:4;7261:11;;:18;;;;;;;;;;;;;;;;;;7204:83;24266:4:::1;24258:5;:12;;;;;;;;;;;;:::i;:::-;;24291:6;24281:7;:16;;;;;;;;;;;;:::i;:::-;;24320:1;24308:9;;:13;;;;;;;;;;;;;;;;;;7309:14:::0;7305:57;;;7349:5;7334:12;;:20;;;;;;;;;;;;;;;;;;7305:57;24150:179;;;:::o;10366:202::-;7055:12;;;;;;;;;;;:31;;;;7071:15;:13;:15::i;:::-;7055:31;:47;;;;7091:11;;;;;;;;;;;7090:12;7055:47;7047:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7162:19;7185:12;;;;;;;;;;;7184:13;7162:35;;7208:14;7204:83;;;7248:4;7233:12;;:19;;;;;;;;;;;;;;;;;;7275:4;7261:11;;:18;;;;;;;;;;;;;;;;;;7204:83;10438:17:::1;10458:12;:10;:12::i;:::-;10438:32;;10490:9;10481:6;;:18;;;;;;;;;;;;;;;;;;10548:9;10515:43;;10544:1;10515:43;;;;;;;;;;;;7295:1;7309:14:::0;7305:57;;;7349:5;7334:12;;:20;;;;;;;;;;;;;;;;;;7305:57;10366:202;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o

Swarm Source

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