ETH Price: $3,467.62 (+0.11%)

Token

METANO (METANO)
 

Overview

Max Total Supply

10,000,000,000 METANO

Holders

458

Market

Price

$0.00 @ 0.000000 ETH (+77.66%)

Onchain Market Cap

$1,988,300.00

Circulating Supply Market Cap

$0.00

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
Uniswap V2: METANO
Balance
1,106,722,899.244697887350236554 METANO

Value
$220,049.71 ( ~63.4585 Eth) [11.0672%]
0xb4fff3d8e7e9d9f17fbbd1e425eb1d7734616960
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

The Metano organization was founded in Miami, Florida by Elias DaSilva, an internet entrepreneur, and a great team of blockchain programmers.

Market

Volume (24H):$23.30
Market Capitalization:$0.00
Circulating Supply:0.00 METANO
Market Data Source: Coinmarketcap

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Metano

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-09-09
*/

// SPDX-License-Identifier: MIT License

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Counters.sol


// OpenZeppelin Contracts v4.4.1 (utils/Counters.sol)

pragma solidity ^0.8.0;

/**
 * @title Counters
 * @author Matt Condon (@shrugs)
 * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number
 * of elements in a mapping, issuing ERC721 ids, or counting request ids.
 *
 * Include with `using Counters for Counters.Counter;`
 */
library Counters {
    struct Counter {
        // This variable should never be directly accessed by users of the library: interactions must be restricted to
        // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
        // this feature: see https://github.com/ethereum/solidity/issues/4637
        uint256 _value; // default: 0
    }

    function current(Counter storage counter) internal view returns (uint256) {
        return counter._value;
    }

    function increment(Counter storage counter) internal {
        unchecked {
            counter._value += 1;
        }
    }

    function decrement(Counter storage counter) internal {
        uint256 value = counter._value;
        require(value > 0, "Counter: decrement overflow");
        unchecked {
            counter._value = value - 1;
        }
    }

    function reset(Counter storage counter) internal {
        counter._value = 0;
    }
}

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/math/Math.sol


// OpenZeppelin Contracts (last updated v4.7.0) (utils/math/Math.sol)

pragma solidity ^0.8.0;

/**
 * @dev Standard math utilities missing in the Solidity language.
 */
library Math {
    enum Rounding {
        Down, // Toward negative infinity
        Up, // Toward infinity
        Zero // Toward zero
    }

    /**
     * @dev Returns the largest of two numbers.
     */
    function max(uint256 a, uint256 b) internal pure returns (uint256) {
        return a >= b ? a : b;
    }

    /**
     * @dev Returns the smallest of two numbers.
     */
    function min(uint256 a, uint256 b) internal pure returns (uint256) {
        return a < b ? a : b;
    }

    /**
     * @dev Returns the average of two numbers. The result is rounded towards
     * zero.
     */
    function average(uint256 a, uint256 b) internal pure returns (uint256) {
        // (a + b) / 2 can overflow.
        return (a & b) + (a ^ b) / 2;
    }

    /**
     * @dev Returns the ceiling of the division of two numbers.
     *
     * This differs from standard division with `/` in that it rounds up instead
     * of rounding down.
     */
    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {
        // (a + b - 1) / b can overflow on addition, so we distribute.
        return a == 0 ? 0 : (a - 1) / b + 1;
    }

    /**
     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0
     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)
     * with further edits by Uniswap Labs also under MIT license.
     */
    function mulDiv(
        uint256 x,
        uint256 y,
        uint256 denominator
    ) internal pure returns (uint256 result) {
        unchecked {
            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use
            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256
            // variables such that product = prod1 * 2^256 + prod0.
            uint256 prod0; // Least significant 256 bits of the product
            uint256 prod1; // Most significant 256 bits of the product
            assembly {
                let mm := mulmod(x, y, not(0))
                prod0 := mul(x, y)
                prod1 := sub(sub(mm, prod0), lt(mm, prod0))
            }

            // Handle non-overflow cases, 256 by 256 division.
            if (prod1 == 0) {
                return prod0 / denominator;
            }

            // Make sure the result is less than 2^256. Also prevents denominator == 0.
            require(denominator > prod1);

            ///////////////////////////////////////////////
            // 512 by 256 division.
            ///////////////////////////////////////////////

            // Make division exact by subtracting the remainder from [prod1 prod0].
            uint256 remainder;
            assembly {
                // Compute remainder using mulmod.
                remainder := mulmod(x, y, denominator)

                // Subtract 256 bit number from 512 bit number.
                prod1 := sub(prod1, gt(remainder, prod0))
                prod0 := sub(prod0, remainder)
            }

            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.
            // See https://cs.stackexchange.com/q/138556/92363.

            // Does not overflow because the denominator cannot be zero at this stage in the function.
            uint256 twos = denominator & (~denominator + 1);
            assembly {
                // Divide denominator by twos.
                denominator := div(denominator, twos)

                // Divide [prod1 prod0] by twos.
                prod0 := div(prod0, twos)

                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.
                twos := add(div(sub(0, twos), twos), 1)
            }

            // Shift in bits from prod1 into prod0.
            prod0 |= prod1 * twos;

            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such
            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for
            // four bits. That is, denominator * inv = 1 mod 2^4.
            uint256 inverse = (3 * denominator) ^ 2;

            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works
            // in modular arithmetic, doubling the correct bits in each step.
            inverse *= 2 - denominator * inverse; // inverse mod 2^8
            inverse *= 2 - denominator * inverse; // inverse mod 2^16
            inverse *= 2 - denominator * inverse; // inverse mod 2^32
            inverse *= 2 - denominator * inverse; // inverse mod 2^64
            inverse *= 2 - denominator * inverse; // inverse mod 2^128
            inverse *= 2 - denominator * inverse; // inverse mod 2^256

            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.
            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is
            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1
            // is no longer required.
            result = prod0 * inverse;
            return result;
        }
    }

    /**
     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.
     */
    function mulDiv(
        uint256 x,
        uint256 y,
        uint256 denominator,
        Rounding rounding
    ) internal pure returns (uint256) {
        uint256 result = mulDiv(x, y, denominator);
        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {
            result += 1;
        }
        return result;
    }

    /**
     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.
     *
     * Inspired by Henry S. Warren, Jr.'s "Hacker's Delight" (Chapter 11).
     */
    function sqrt(uint256 a) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.
        // We know that the "msb" (most significant bit) of our target number `a` is a power of 2 such that we have
        // `msb(a) <= a < 2*msb(a)`.
        // We also know that `k`, the position of the most significant bit, is such that `msb(a) = 2**k`.
        // This gives `2**k < a <= 2**(k+1)` → `2**(k/2) <= sqrt(a) < 2 ** (k/2+1)`.
        // Using an algorithm similar to the msb computation, we are able to compute `result = 2**(k/2)` which is a
        // good first approximation of `sqrt(a)` with at least 1 correct bit.
        uint256 result = 1;
        uint256 x = a;
        if (x >> 128 > 0) {
            x >>= 128;
            result <<= 64;
        }
        if (x >> 64 > 0) {
            x >>= 64;
            result <<= 32;
        }
        if (x >> 32 > 0) {
            x >>= 32;
            result <<= 16;
        }
        if (x >> 16 > 0) {
            x >>= 16;
            result <<= 8;
        }
        if (x >> 8 > 0) {
            x >>= 8;
            result <<= 4;
        }
        if (x >> 4 > 0) {
            x >>= 4;
            result <<= 2;
        }
        if (x >> 2 > 0) {
            result <<= 1;
        }

        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,
        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at
        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision
        // into the expected uint128 result.
        unchecked {
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            return min(result, a / result);
        }
    }

    /**
     * @notice Calculates sqrt(a), following the selected rounding direction.
     */
    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {
        uint256 result = sqrt(a);
        if (rounding == Rounding.Up && result * result < a) {
            result += 1;
        }
        return result;
    }
}

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Arrays.sol


// OpenZeppelin Contracts v4.4.1 (utils/Arrays.sol)

pragma solidity ^0.8.0;


/**
 * @dev Collection of functions related to array types.
 */
library Arrays {
    /**
     * @dev Searches a sorted `array` and returns the first index that contains
     * a value greater or equal to `element`. If no such index exists (i.e. all
     * values in the array are strictly less than `element`), the array length is
     * returned. Time complexity O(log n).
     *
     * `array` is expected to be sorted in ascending order, and to contain no
     * repeated elements.
     */
    function findUpperBound(uint256[] storage array, uint256 element) internal view returns (uint256) {
        if (array.length == 0) {
            return 0;
        }

        uint256 low = 0;
        uint256 high = array.length;

        while (low < high) {
            uint256 mid = Math.average(low, high);

            // Note that mid will always be strictly less than high (i.e. it will be a valid array index)
            // because Math.average rounds down (it does integer division with truncation).
            if (array[mid] > element) {
                high = mid;
            } else {
                low = mid + 1;
            }
        }

        // At this point `low` is the exclusive upper bound. We will return the inclusive upper bound.
        if (low > 0 && array[low - 1] == element) {
            return low - 1;
        } else {
            return low;
        }
    }
}

// File: contracts/NewMetano.sol



pragma solidity ^0.8.0;



interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}



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

    function _msgData() internal view virtual returns (bytes calldata) {
        this;
        return msg.data;
    }
}

abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initiamenoes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

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

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

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

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

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

contract ERC20 is Context, IERC20 {
    mapping (address => uint256) private _balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    uint256 private _totalSupply;
    string private _name;
    string private _symbol;

    constructor (string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

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

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

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

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

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

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

    function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        _approve(sender, _msgSender(), currentAllowance - amount);
        return true;
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        _approve(_msgSender(), spender, currentAllowance - subtractedValue);

        return true;
    }

    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);
        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        _balances[sender] = senderBalance - amount;
        _balances[recipient] += amount;
        emit Transfer(sender, recipient, amount);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");
        _beforeTokenTransfer(address(0), account, amount);
        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");
        _beforeTokenTransfer(account, address(0), amount);
        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        _balances[account] = accountBalance - amount;
        _totalSupply -= amount;
        emit Transfer(account, address(0), amount);
    }

    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);
    }

    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { }
}
abstract contract ERC20Snapshot is ERC20 {
    // Inspired by Jordi Baylina's MiniMeToken to record historical balances:
    // https://github.com/Giveth/minime/blob/ea04d950eea153a04c51fa510b068b9dded390cb/contracts/MiniMeToken.sol

    using Arrays for uint256[];
    using Counters for Counters.Counter;

    // Snapshotted values have  of ids and the value corresponding to that id. These could be an array of a
    // Snapshot struct, but that would impede usage of functions that work on an array.
    struct Snapshots {
        uint256[] ids;
        uint256[] values;
    }

    mapping(address => Snapshots) private _accountBalanceSnapshots;
    Snapshots private _totalSupplySnapshots;

    // Snapshot ids increase monotonically, with the first value being 1. An id of 0 is invalid.
    Counters.Counter private _currentSnapshotId;

    /**
     * @dev Emitted by {_snapshot} when a snapshot identified by `id` is created.
     */
    event Snapshot(uint256 id);

    /**
     * @dev Creates a new snapshot and returns its snapshot id.
     *
     * Emits a {Snapshot} event that contains the same id.
     *
     * {_snapshot} is `internal` and you have to decide how to expose it externally. Its usage may be restricted to a
     * set of accounts, for example using {AccessControl}, or it may be open to the public.
     *
     * [WARNING]
     * ====
     * While an open way of calling {_snapshot} is required for certain trust minimization mechanisms such as forking,
     * you must consider that it can potentially be used by attackers in two ways.
     *
     * First, it can be used to increase the cost of retrieval of values from snapshots, although it will grow
     * logarithmically thus rendering this attack ineffective in the long term. Second, it can be used to target
     * specific accounts and increase the cost of ERC20 transfers for them, in the ways specified in the Gas Costs
     * section above.
     *
     * We haven't measured the actual numbers; if this is something you're interested in please reach out to us.
     * ====
     */
    function _snapshot() internal virtual returns (uint256) {
        _currentSnapshotId.increment();

        uint256 currentId = _getCurrentSnapshotId();
        emit Snapshot(currentId);
        return currentId;
    }

    /**
     * @dev Get the current snapshotId
     */
    function _getCurrentSnapshotId() internal view virtual returns (uint256) {
        return _currentSnapshotId.current();
    }

    /**
     * @dev Retrieves the balance of `account` at the time `snapshotId` was created.
     */
    function balanceOfAt(address account, uint256 snapshotId) public view virtual returns (uint256) {
        (bool snapshotted, uint256 value) = _valueAt(snapshotId, _accountBalanceSnapshots[account]);

        return snapshotted ? value : balanceOf(account);
    }

    /**
     * @dev Retrieves the total supply at the time `snapshotId` was created.
     */
    function totalSupplyAt(uint256 snapshotId) public view virtual returns (uint256) {
        (bool snapshotted, uint256 value) = _valueAt(snapshotId, _totalSupplySnapshots);

        return snapshotted ? value : totalSupply();
    }

    // Update balance and/or total supply snapshots before the values are modified. This is implemented
    // in the _beforeTokenTransfer hook, which is executed for _mint, _burn, and _transfer operations.
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual override {
        super._beforeTokenTransfer(from, to, amount);

        if (from == address(0)) {
            // mint
            _updateAccountSnapshot(to);
            _updateTotalSupplySnapshot();
        } else if (to == address(0)) {
            // burn
            _updateAccountSnapshot(from);
            _updateTotalSupplySnapshot();
        } else {
            // transfer
            _updateAccountSnapshot(from);
            _updateAccountSnapshot(to);
        }
    }

    function _valueAt(uint256 snapshotId, Snapshots storage snapshots) private view returns (bool, uint256) {
        require(snapshotId > 0, "ERC20Snapshot: id is 0");
        require(snapshotId <= _getCurrentSnapshotId(), "ERC20Snapshot: nonexistent id");

        // When a valid snapshot is queried, there are three possibilities:
        //  a) The queried value was not modified after the snapshot was taken. Therefore, a snapshot entry was never
        //  created for this id, and all stored snapshot ids are smaller than the requested one. The value that corresponds
        //  to this id is the current one.
        //  b) The queried value was modified after the snapshot was taken. Therefore, there will be an entry with the
        //  requested id, and its value is the one to return.
        //  c) More snapshots were created after the requested one, and the queried value was later modified. There will be
        //  no entry for the requested id: the value that corresponds to it is that of the smallest snapshot id that is
        //  larger than the requested one.
        //
        // In summary, we need to find an element in an array, returning the index of the smallest value that is larger if
        // it is not found, unless said value doesn't exist (e.g. when all values are smaller). .findUpperBound does
        // exactly this.

        uint256 index = snapshots.ids.findUpperBound(snapshotId);

        if (index == snapshots.ids.length) {
            return (false, 0);
        } else {
            return (true, snapshots.values[index]);
        }
    }

    function _updateAccountSnapshot(address account) private {
        _updateSnapshot(_accountBalanceSnapshots[account], balanceOf(account));
    }

    function _updateTotalSupplySnapshot() private {
        _updateSnapshot(_totalSupplySnapshots, totalSupply());
    }

    function _updateSnapshot(Snapshots storage snapshots, uint256 currentValue) private {
        uint256 currentId = _getCurrentSnapshotId();
        if (_lastSnapshotId(snapshots.ids) < currentId) {
            snapshots.ids.push(currentId);
            snapshots.values.push(currentValue);
        }
    }

    function _lastSnapshotId(uint256[] storage ids) private view returns (uint256) {
        if (ids.length == 0) {
            return 0;
        } else {
            return ids[ids.length - 1];
        }
    }
}

contract Metano is ERC20Snapshot, Ownable {
    address public operator;
    address public deployer;
    uint256 public maxSupply = 10_000_000_000e18; // 10 BILLION
    uint256 private _totalSupply;

    // Fair launch settings
    bool public swapEnabled = false;
    mapping (address => bool) public _excludedForFairLaunch;
    uint256 public allowTradeAt;
    bool public fairLaunchEventActive = true;
    bool public fairLaunchExecuted = false;
    uint256 public maxTransferAmount;

  constructor() ERC20("METANO", "METANO") {
        operator = msg.sender;
        deployer = msg.sender;
        _excludedForFairLaunch[msg.sender] = true;
    }

    // function AddExcludedForFairLaunch(address newAddress) internal onlyOwner(){
    //     require(_excludedForFairLaunch[newAddress],"Metano::This Address already excluded from Fair Lauch event!");
    //     _excludedForFairLaunch[newAddress]=true;
    // }

    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
    
        require(fairLaunchExecuted || _excludedForFairLaunch[msg.sender] == true, "Metano::Fair Launch event , not starts yet");
            if(fairLaunchEventActive){
            require(allowTradeAt<=block.timestamp || _excludedForFairLaunch[msg.sender] == true, "Metano::Fair Launch event , not starts yet");
            require(amount<=maxTransferAmount || _excludedForFairLaunch[msg.sender] == true, "Metano::Anti Whale System");                                     
            }                
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

  function updateOperator(address newOperator) external {
    require(msg.sender == operator, 'only Operator Contract');
    operator = newOperator;
  }

  function mint(address to, uint amount) external {
    require(msg.sender == operator, 'only Operator Contract');
    _totalSupply += amount;
    require(
        _totalSupply <= maxSupply,
        "METANO::mint: cannot exceed max supply"
    );
    _mint(to, amount);
  }

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

  function burn(address owner, uint amount) external {
    require(msg.sender == operator, 'only Operator Contract');
    _burn(owner, amount);
  }
  function enableFairLaunch(uint256 _timestamp,uint256 maxAmount) external onlyOwner(){
        require(!fairLaunchExecuted, "Fair Launch already happened" );
        allowTradeAt = _timestamp;
        fairLaunchExecuted=true;
        swapEnabled=true;
        maxTransferAmount=maxAmount;
  }

      function endFairLaunchEvent() public {
        require(fairLaunchExecuted, "Fair launch has not been executed yet");
        require(block.timestamp > allowTradeAt+ 3 days, "Time has not passed yet");
        require(fairLaunchEventActive, "fair Launch event is finished");
        fairLaunchEventActive = false;
    }
}

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":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"}],"name":"Snapshot","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_excludedForFairLaunch","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allowTradeAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"snapshotId","type":"uint256"}],"name":"balanceOfAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deployer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_timestamp","type":"uint256"},{"internalType":"uint256","name":"maxAmount","type":"uint256"}],"name":"enableFairLaunch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"endFairLaunchEvent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"fairLaunchEventActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fairLaunchExecuted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransferAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"snapshotId","type":"uint256"}],"name":"totalSupplyAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOperator","type":"address"}],"name":"updateOperator","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526b204fce5e3e25026110000000600c556000600e60006101000a81548160ff0219169083151502179055506001601160006101000a81548160ff0219169083151502179055506000601160016101000a81548160ff0219169083151502179055503480156200007257600080fd5b506040518060400160405280600681526020017f4d4554414e4f00000000000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f4d4554414e4f00000000000000000000000000000000000000000000000000008152508160039080519060200190620000f7929190620002e1565b50806004908051906020019062000110929190620002e1565b50505062000133620001276200021360201b60201c565b6200021b60201b60201c565b33600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620003f6565b600033905090565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002ef9062000391565b90600052602060002090601f0160209004810192826200031357600085556200035f565b82601f106200032e57805160ff19168380011785556200035f565b828001600101855582156200035f579182015b828111156200035e57825182559160200191906001019062000341565b5b5090506200036e919062000372565b5090565b5b808211156200038d57600081600090555060010162000373565b5090565b60006002820490506001821680620003aa57607f821691505b60208210811415620003c157620003c0620003c7565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b61313580620004066000396000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c8063929912dc11610104578063ac7475ed116100a2578063dd62ed3e11610071578063dd62ed3e1461055d578063e233033f1461058d578063f2fde38b146105ab578063f4f38bde146105c7576101da565b8063ac7475ed146104e7578063ca31163014610503578063d5abeb0114610521578063d5f394881461053f576101da565b80639dc29fac116100de5780639dc29fac1461044d578063a457c2d714610469578063a9059cbb14610499578063a9e75723146104c9576101da565b8063929912dc146103cf57806395d89b41146103ff578063981b24d01461041d576101da565b80634ee2cd7e1161017c57806370a082311161014b57806370a082311461035b578063715018a61461038b5780638da5cb5b1461039557806391af8aba146103b3576101da565b80634ee2cd7e146102e5578063570ca735146103155780636688ddf4146103335780636ddd17131461033d576101da565b806323b872dd116101b857806323b872dd1461024b578063313ce5671461027b578063395093511461029957806340c10f19146102c9576101da565b806306fdde03146101df578063095ea7b3146101fd57806318160ddd1461022d575b600080fd5b6101e76105e5565b6040516101f491906125e2565b60405180910390f35b61021760048036038101906102129190612188565b610677565b60405161022491906125c7565b60405180910390f35b610235610695565b60405161024291906128c4565b60405180910390f35b61026560048036038101906102609190612135565b61069f565b60405161027291906125c7565b60405180910390f35b6102836107a0565b60405161029091906128df565b60405180910390f35b6102b360048036038101906102ae9190612188565b6107a9565b6040516102c091906125c7565b60405180910390f35b6102e360048036038101906102de9190612188565b610855565b005b6102ff60048036038101906102fa9190612188565b610953565b60405161030c91906128c4565b60405180910390f35b61031d6109c3565b60405161032a91906125ac565b60405180910390f35b61033b6109e9565b005b610345610af6565b60405161035291906125c7565b60405180910390f35b610375600480360381019061037091906120c8565b610b09565b60405161038291906128c4565b60405180910390f35b610393610b51565b005b61039d610bd9565b6040516103aa91906125ac565b60405180910390f35b6103cd60048036038101906103c891906121f5565b610c03565b005b6103e960048036038101906103e491906120c8565b610d17565b6040516103f691906125c7565b60405180910390f35b610407610d37565b60405161041491906125e2565b60405180910390f35b610437600480360381019061043291906121c8565b610dc9565b60405161044491906128c4565b60405180910390f35b61046760048036038101906104629190612188565b610dfa565b005b610483600480360381019061047e9190612188565b610e98565b60405161049091906125c7565b60405180910390f35b6104b360048036038101906104ae9190612188565b610f8c565b6040516104c091906125c7565b60405180910390f35b6104d16111aa565b6040516104de91906128c4565b60405180910390f35b61050160048036038101906104fc91906120c8565b6111b0565b005b61050b611284565b60405161051891906125c7565b60405180910390f35b610529611297565b60405161053691906128c4565b60405180910390f35b61054761129d565b60405161055491906125ac565b60405180910390f35b610577600480360381019061057291906120f5565b6112c3565b60405161058491906128c4565b60405180910390f35b61059561134a565b6040516105a291906125c7565b60405180910390f35b6105c560048036038101906105c091906120c8565b61135d565b005b6105cf611455565b6040516105dc91906128c4565b60405180910390f35b6060600380546105f490612a59565b80601f016020809104026020016040519081016040528092919081815260200182805461062090612a59565b801561066d5780601f106106425761010080835404028352916020019161066d565b820191906000526020600020905b81548152906001019060200180831161065057829003601f168201915b5050505050905090565b600061068b61068461145b565b8484611463565b6001905092915050565b6000600d54905090565b60006106ac84848461162e565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006106f761145b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076e90612744565b60405180910390fd5b6107948561078361145b565b858461078f919061299d565b611463565b60019150509392505050565b60006012905090565b600061084b6107b661145b565b8484600160006107c461145b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546108469190612916565b611463565b6001905092915050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146108e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108dc90612664565b60405180910390fd5b80600d60008282546108f79190612916565b92505081905550600c54600d541115610945576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093c906127a4565b60405180910390fd5b61094f82826118ad565b5050565b60008060006109a084600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020611a01565b91509150816109b7576109b285610b09565b6109b9565b805b9250505092915050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601160019054906101000a900460ff16610a38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2f906127e4565b60405180910390fd5b6203f480601054610a499190612916565b4211610a8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a81906126e4565b60405180910390fd5b601160009054906101000a900460ff16610ad9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad090612724565b60405180910390fd5b6000601160006101000a81548160ff021916908315150217905550565b600e60009054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610b5961145b565b73ffffffffffffffffffffffffffffffffffffffff16610b77610bd9565b73ffffffffffffffffffffffffffffffffffffffff1614610bcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc490612764565b60405180910390fd5b610bd76000611af7565b565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610c0b61145b565b73ffffffffffffffffffffffffffffffffffffffff16610c29610bd9565b73ffffffffffffffffffffffffffffffffffffffff1614610c7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7690612764565b60405180910390fd5b601160019054906101000a900460ff1615610ccf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc690612644565b60405180910390fd5b816010819055506001601160016101000a81548160ff0219169083151502179055506001600e60006101000a81548160ff021916908315150217905550806012819055505050565b600f6020528060005260406000206000915054906101000a900460ff1681565b606060048054610d4690612a59565b80601f0160208091040260200160405190810160405280929190818152602001828054610d7290612a59565b8015610dbf5780601f10610d9457610100808354040283529160200191610dbf565b820191906000526020600020905b815481529060010190602001808311610da257829003601f168201915b5050505050905090565b6000806000610dd9846006611a01565b9150915081610def57610dea610695565b610df1565b805b92505050919050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8190612664565b60405180910390fd5b610e948282611bbd565b5050565b60008060016000610ea761145b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610f64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5b90612884565b60405180910390fd5b610f81610f6f61145b565b858584610f7c919061299d565b611463565b600191505092915050565b6000601160019054906101000a900460ff1680610ff9575060011515600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515145b611038576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102f90612824565b60405180910390fd5b601160009054906101000a900460ff161561118e57426010541115806110ae575060011515600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515145b6110ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e490612824565b60405180910390fd5b6012548211158061114e575060011515600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515145b61118d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118490612784565b60405180910390fd5b5b6111a061119961145b565b848461162e565b6001905092915050565b60125481565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611240576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123790612664565b60405180910390fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601160019054906101000a900460ff1681565b600c5481565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b601160009054906101000a900460ff1681565b61136561145b565b73ffffffffffffffffffffffffffffffffffffffff16611383610bd9565b73ffffffffffffffffffffffffffffffffffffffff16146113d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d090612764565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611449576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611440906126a4565b60405180910390fd5b61145281611af7565b50565b60105481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156114d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ca90612844565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611543576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153a906126c4565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161162191906128c4565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561169e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169590612804565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561170e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170590612624565b60405180910390fd5b611719838383611d91565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561179f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179690612704565b60405180910390fd5b81816117ab919061299d565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461183b9190612916565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161189f91906128c4565b60405180910390a350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561191d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611914906128a4565b60405180910390fd5b61192960008383611d91565b806002600082825461193b9190612916565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119909190612916565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516119f591906128c4565b60405180910390a35050565b60008060008411611a47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3e90612864565b60405180910390fd5b611a4f611e4b565b841115611a91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8890612604565b60405180910390fd5b6000611aa98585600001611e5c90919063ffffffff16565b90508360000180549050811415611ac7576000809250925050611af0565b6001846001018281548110611adf57611ade612b18565b5b906000526020600020015492509250505b9250929050565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c24906127c4565b60405180910390fd5b611c3982600083611d91565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611cbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb690612684565b60405180910390fd5b8181611ccb919061299d565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160026000828254611d1f919061299d565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611d8491906128c4565b60405180910390a3505050565b611d9c838383611f36565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611de757611dda82611f3b565b611de2611f8e565b611e46565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e3257611e2583611f3b565b611e2d611f8e565b611e45565b611e3b83611f3b565b611e4482611f3b565b5b5b505050565b6000611e576008611fa2565b905090565b60008083805490501415611e735760009050611f30565b600080848054905090505b80821015611ed7576000611e928383611fb0565b905084868281548110611ea857611ea7612b18565b5b90600052602060002001541115611ec157809150611ed1565b600181611ece9190612916565b92505b50611e7e565b600082118015611f0f57508385600184611ef1919061299d565b81548110611f0257611f01612b18565b5b9060005260206000200154145b15611f2a57600182611f21919061299d565b92505050611f30565b81925050505b92915050565b505050565b611f8b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020611f8683610b09565b611fd6565b50565b611fa06006611f9b610695565b611fd6565b565b600081600001549050919050565b60006002828418611fc1919061296c565b828416611fce9190612916565b905092915050565b6000611fe0611e4b565b905080611fef84600001612051565b101561204c5782600001819080600181540180825580915050600190039060005260206000200160009091909190915055826001018290806001815401808255809150506001900390600052602060002001600090919091909150555b505050565b600080828054905014156120685760009050612099565b816001838054905061207a919061299d565b8154811061208b5761208a612b18565b5b906000526020600020015490505b919050565b6000813590506120ad816130d1565b92915050565b6000813590506120c2816130e8565b92915050565b6000602082840312156120de576120dd612b47565b5b60006120ec8482850161209e565b91505092915050565b6000806040838503121561210c5761210b612b47565b5b600061211a8582860161209e565b925050602061212b8582860161209e565b9150509250929050565b60008060006060848603121561214e5761214d612b47565b5b600061215c8682870161209e565b935050602061216d8682870161209e565b925050604061217e868287016120b3565b9150509250925092565b6000806040838503121561219f5761219e612b47565b5b60006121ad8582860161209e565b92505060206121be858286016120b3565b9150509250929050565b6000602082840312156121de576121dd612b47565b5b60006121ec848285016120b3565b91505092915050565b6000806040838503121561220c5761220b612b47565b5b600061221a858286016120b3565b925050602061222b858286016120b3565b9150509250929050565b61223e816129d1565b82525050565b61224d816129e3565b82525050565b600061225e826128fa565b6122688185612905565b9350612278818560208601612a26565b61228181612b4c565b840191505092915050565b6000612299601d83612905565b91506122a482612b5d565b602082019050919050565b60006122bc602383612905565b91506122c782612b86565b604082019050919050565b60006122df601c83612905565b91506122ea82612bd5565b602082019050919050565b6000612302601683612905565b915061230d82612bfe565b602082019050919050565b6000612325602283612905565b915061233082612c27565b604082019050919050565b6000612348602683612905565b915061235382612c76565b604082019050919050565b600061236b602283612905565b915061237682612cc5565b604082019050919050565b600061238e601783612905565b915061239982612d14565b602082019050919050565b60006123b1602683612905565b91506123bc82612d3d565b604082019050919050565b60006123d4601d83612905565b91506123df82612d8c565b602082019050919050565b60006123f7602883612905565b915061240282612db5565b604082019050919050565b600061241a602083612905565b915061242582612e04565b602082019050919050565b600061243d601983612905565b915061244882612e2d565b602082019050919050565b6000612460602683612905565b915061246b82612e56565b604082019050919050565b6000612483602183612905565b915061248e82612ea5565b604082019050919050565b60006124a6602583612905565b91506124b182612ef4565b604082019050919050565b60006124c9602583612905565b91506124d482612f43565b604082019050919050565b60006124ec602a83612905565b91506124f782612f92565b604082019050919050565b600061250f602483612905565b915061251a82612fe1565b604082019050919050565b6000612532601683612905565b915061253d82613030565b602082019050919050565b6000612555602583612905565b915061256082613059565b604082019050919050565b6000612578601f83612905565b9150612583826130a8565b602082019050919050565b61259781612a0f565b82525050565b6125a681612a19565b82525050565b60006020820190506125c16000830184612235565b92915050565b60006020820190506125dc6000830184612244565b92915050565b600060208201905081810360008301526125fc8184612253565b905092915050565b6000602082019050818103600083015261261d8161228c565b9050919050565b6000602082019050818103600083015261263d816122af565b9050919050565b6000602082019050818103600083015261265d816122d2565b9050919050565b6000602082019050818103600083015261267d816122f5565b9050919050565b6000602082019050818103600083015261269d81612318565b9050919050565b600060208201905081810360008301526126bd8161233b565b9050919050565b600060208201905081810360008301526126dd8161235e565b9050919050565b600060208201905081810360008301526126fd81612381565b9050919050565b6000602082019050818103600083015261271d816123a4565b9050919050565b6000602082019050818103600083015261273d816123c7565b9050919050565b6000602082019050818103600083015261275d816123ea565b9050919050565b6000602082019050818103600083015261277d8161240d565b9050919050565b6000602082019050818103600083015261279d81612430565b9050919050565b600060208201905081810360008301526127bd81612453565b9050919050565b600060208201905081810360008301526127dd81612476565b9050919050565b600060208201905081810360008301526127fd81612499565b9050919050565b6000602082019050818103600083015261281d816124bc565b9050919050565b6000602082019050818103600083015261283d816124df565b9050919050565b6000602082019050818103600083015261285d81612502565b9050919050565b6000602082019050818103600083015261287d81612525565b9050919050565b6000602082019050818103600083015261289d81612548565b9050919050565b600060208201905081810360008301526128bd8161256b565b9050919050565b60006020820190506128d9600083018461258e565b92915050565b60006020820190506128f4600083018461259d565b92915050565b600081519050919050565b600082825260208201905092915050565b600061292182612a0f565b915061292c83612a0f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561296157612960612a8b565b5b828201905092915050565b600061297782612a0f565b915061298283612a0f565b92508261299257612991612aba565b5b828204905092915050565b60006129a882612a0f565b91506129b383612a0f565b9250828210156129c6576129c5612a8b565b5b828203905092915050565b60006129dc826129ef565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b83811015612a44578082015181840152602081019050612a29565b83811115612a53576000848401525b50505050565b60006002820490506001821680612a7157607f821691505b60208210811415612a8557612a84612ae9565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433230536e617073686f743a206e6f6e6578697374656e74206964000000600082015250565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f46616972204c61756e636820616c72656164792068617070656e656400000000600082015250565b7f6f6e6c79204f70657261746f7220436f6e747261637400000000000000000000600082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f54696d6520686173206e6f742070617373656420796574000000000000000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f66616972204c61756e6368206576656e742069732066696e6973686564000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4d6574616e6f3a3a416e7469205768616c652053797374656d00000000000000600082015250565b7f4d4554414e4f3a3a6d696e743a2063616e6e6f7420657863656564206d61782060008201527f737570706c790000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f46616972206c61756e636820686173206e6f74206265656e206578656375746560008201527f6420796574000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f4d6574616e6f3a3a46616972204c61756e6368206576656e74202c206e6f742060008201527f7374617274732079657400000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433230536e617073686f743a206964206973203000000000000000000000600082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6130da816129d1565b81146130e557600080fd5b50565b6130f181612a0f565b81146130fc57600080fd5b5056fea2646970667358221220a54626f6a59899bda977ad1067ccc3aa4277f1c55d3d9c3aad1f35cd798af2c064736f6c63430008070033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101da5760003560e01c8063929912dc11610104578063ac7475ed116100a2578063dd62ed3e11610071578063dd62ed3e1461055d578063e233033f1461058d578063f2fde38b146105ab578063f4f38bde146105c7576101da565b8063ac7475ed146104e7578063ca31163014610503578063d5abeb0114610521578063d5f394881461053f576101da565b80639dc29fac116100de5780639dc29fac1461044d578063a457c2d714610469578063a9059cbb14610499578063a9e75723146104c9576101da565b8063929912dc146103cf57806395d89b41146103ff578063981b24d01461041d576101da565b80634ee2cd7e1161017c57806370a082311161014b57806370a082311461035b578063715018a61461038b5780638da5cb5b1461039557806391af8aba146103b3576101da565b80634ee2cd7e146102e5578063570ca735146103155780636688ddf4146103335780636ddd17131461033d576101da565b806323b872dd116101b857806323b872dd1461024b578063313ce5671461027b578063395093511461029957806340c10f19146102c9576101da565b806306fdde03146101df578063095ea7b3146101fd57806318160ddd1461022d575b600080fd5b6101e76105e5565b6040516101f491906125e2565b60405180910390f35b61021760048036038101906102129190612188565b610677565b60405161022491906125c7565b60405180910390f35b610235610695565b60405161024291906128c4565b60405180910390f35b61026560048036038101906102609190612135565b61069f565b60405161027291906125c7565b60405180910390f35b6102836107a0565b60405161029091906128df565b60405180910390f35b6102b360048036038101906102ae9190612188565b6107a9565b6040516102c091906125c7565b60405180910390f35b6102e360048036038101906102de9190612188565b610855565b005b6102ff60048036038101906102fa9190612188565b610953565b60405161030c91906128c4565b60405180910390f35b61031d6109c3565b60405161032a91906125ac565b60405180910390f35b61033b6109e9565b005b610345610af6565b60405161035291906125c7565b60405180910390f35b610375600480360381019061037091906120c8565b610b09565b60405161038291906128c4565b60405180910390f35b610393610b51565b005b61039d610bd9565b6040516103aa91906125ac565b60405180910390f35b6103cd60048036038101906103c891906121f5565b610c03565b005b6103e960048036038101906103e491906120c8565b610d17565b6040516103f691906125c7565b60405180910390f35b610407610d37565b60405161041491906125e2565b60405180910390f35b610437600480360381019061043291906121c8565b610dc9565b60405161044491906128c4565b60405180910390f35b61046760048036038101906104629190612188565b610dfa565b005b610483600480360381019061047e9190612188565b610e98565b60405161049091906125c7565b60405180910390f35b6104b360048036038101906104ae9190612188565b610f8c565b6040516104c091906125c7565b60405180910390f35b6104d16111aa565b6040516104de91906128c4565b60405180910390f35b61050160048036038101906104fc91906120c8565b6111b0565b005b61050b611284565b60405161051891906125c7565b60405180910390f35b610529611297565b60405161053691906128c4565b60405180910390f35b61054761129d565b60405161055491906125ac565b60405180910390f35b610577600480360381019061057291906120f5565b6112c3565b60405161058491906128c4565b60405180910390f35b61059561134a565b6040516105a291906125c7565b60405180910390f35b6105c560048036038101906105c091906120c8565b61135d565b005b6105cf611455565b6040516105dc91906128c4565b60405180910390f35b6060600380546105f490612a59565b80601f016020809104026020016040519081016040528092919081815260200182805461062090612a59565b801561066d5780601f106106425761010080835404028352916020019161066d565b820191906000526020600020905b81548152906001019060200180831161065057829003601f168201915b5050505050905090565b600061068b61068461145b565b8484611463565b6001905092915050565b6000600d54905090565b60006106ac84848461162e565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006106f761145b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076e90612744565b60405180910390fd5b6107948561078361145b565b858461078f919061299d565b611463565b60019150509392505050565b60006012905090565b600061084b6107b661145b565b8484600160006107c461145b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546108469190612916565b611463565b6001905092915050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146108e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108dc90612664565b60405180910390fd5b80600d60008282546108f79190612916565b92505081905550600c54600d541115610945576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093c906127a4565b60405180910390fd5b61094f82826118ad565b5050565b60008060006109a084600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020611a01565b91509150816109b7576109b285610b09565b6109b9565b805b9250505092915050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601160019054906101000a900460ff16610a38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2f906127e4565b60405180910390fd5b6203f480601054610a499190612916565b4211610a8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a81906126e4565b60405180910390fd5b601160009054906101000a900460ff16610ad9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad090612724565b60405180910390fd5b6000601160006101000a81548160ff021916908315150217905550565b600e60009054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610b5961145b565b73ffffffffffffffffffffffffffffffffffffffff16610b77610bd9565b73ffffffffffffffffffffffffffffffffffffffff1614610bcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc490612764565b60405180910390fd5b610bd76000611af7565b565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610c0b61145b565b73ffffffffffffffffffffffffffffffffffffffff16610c29610bd9565b73ffffffffffffffffffffffffffffffffffffffff1614610c7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7690612764565b60405180910390fd5b601160019054906101000a900460ff1615610ccf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc690612644565b60405180910390fd5b816010819055506001601160016101000a81548160ff0219169083151502179055506001600e60006101000a81548160ff021916908315150217905550806012819055505050565b600f6020528060005260406000206000915054906101000a900460ff1681565b606060048054610d4690612a59565b80601f0160208091040260200160405190810160405280929190818152602001828054610d7290612a59565b8015610dbf5780601f10610d9457610100808354040283529160200191610dbf565b820191906000526020600020905b815481529060010190602001808311610da257829003601f168201915b5050505050905090565b6000806000610dd9846006611a01565b9150915081610def57610dea610695565b610df1565b805b92505050919050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8190612664565b60405180910390fd5b610e948282611bbd565b5050565b60008060016000610ea761145b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610f64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5b90612884565b60405180910390fd5b610f81610f6f61145b565b858584610f7c919061299d565b611463565b600191505092915050565b6000601160019054906101000a900460ff1680610ff9575060011515600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515145b611038576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102f90612824565b60405180910390fd5b601160009054906101000a900460ff161561118e57426010541115806110ae575060011515600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515145b6110ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e490612824565b60405180910390fd5b6012548211158061114e575060011515600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515145b61118d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118490612784565b60405180910390fd5b5b6111a061119961145b565b848461162e565b6001905092915050565b60125481565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611240576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123790612664565b60405180910390fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601160019054906101000a900460ff1681565b600c5481565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b601160009054906101000a900460ff1681565b61136561145b565b73ffffffffffffffffffffffffffffffffffffffff16611383610bd9565b73ffffffffffffffffffffffffffffffffffffffff16146113d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d090612764565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611449576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611440906126a4565b60405180910390fd5b61145281611af7565b50565b60105481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156114d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ca90612844565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611543576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153a906126c4565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161162191906128c4565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561169e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169590612804565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561170e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170590612624565b60405180910390fd5b611719838383611d91565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561179f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179690612704565b60405180910390fd5b81816117ab919061299d565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461183b9190612916565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161189f91906128c4565b60405180910390a350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561191d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611914906128a4565b60405180910390fd5b61192960008383611d91565b806002600082825461193b9190612916565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119909190612916565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516119f591906128c4565b60405180910390a35050565b60008060008411611a47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3e90612864565b60405180910390fd5b611a4f611e4b565b841115611a91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8890612604565b60405180910390fd5b6000611aa98585600001611e5c90919063ffffffff16565b90508360000180549050811415611ac7576000809250925050611af0565b6001846001018281548110611adf57611ade612b18565b5b906000526020600020015492509250505b9250929050565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c24906127c4565b60405180910390fd5b611c3982600083611d91565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611cbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb690612684565b60405180910390fd5b8181611ccb919061299d565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160026000828254611d1f919061299d565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611d8491906128c4565b60405180910390a3505050565b611d9c838383611f36565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611de757611dda82611f3b565b611de2611f8e565b611e46565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e3257611e2583611f3b565b611e2d611f8e565b611e45565b611e3b83611f3b565b611e4482611f3b565b5b5b505050565b6000611e576008611fa2565b905090565b60008083805490501415611e735760009050611f30565b600080848054905090505b80821015611ed7576000611e928383611fb0565b905084868281548110611ea857611ea7612b18565b5b90600052602060002001541115611ec157809150611ed1565b600181611ece9190612916565b92505b50611e7e565b600082118015611f0f57508385600184611ef1919061299d565b81548110611f0257611f01612b18565b5b9060005260206000200154145b15611f2a57600182611f21919061299d565b92505050611f30565b81925050505b92915050565b505050565b611f8b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020611f8683610b09565b611fd6565b50565b611fa06006611f9b610695565b611fd6565b565b600081600001549050919050565b60006002828418611fc1919061296c565b828416611fce9190612916565b905092915050565b6000611fe0611e4b565b905080611fef84600001612051565b101561204c5782600001819080600181540180825580915050600190039060005260206000200160009091909190915055826001018290806001815401808255809150506001900390600052602060002001600090919091909150555b505050565b600080828054905014156120685760009050612099565b816001838054905061207a919061299d565b8154811061208b5761208a612b18565b5b906000526020600020015490505b919050565b6000813590506120ad816130d1565b92915050565b6000813590506120c2816130e8565b92915050565b6000602082840312156120de576120dd612b47565b5b60006120ec8482850161209e565b91505092915050565b6000806040838503121561210c5761210b612b47565b5b600061211a8582860161209e565b925050602061212b8582860161209e565b9150509250929050565b60008060006060848603121561214e5761214d612b47565b5b600061215c8682870161209e565b935050602061216d8682870161209e565b925050604061217e868287016120b3565b9150509250925092565b6000806040838503121561219f5761219e612b47565b5b60006121ad8582860161209e565b92505060206121be858286016120b3565b9150509250929050565b6000602082840312156121de576121dd612b47565b5b60006121ec848285016120b3565b91505092915050565b6000806040838503121561220c5761220b612b47565b5b600061221a858286016120b3565b925050602061222b858286016120b3565b9150509250929050565b61223e816129d1565b82525050565b61224d816129e3565b82525050565b600061225e826128fa565b6122688185612905565b9350612278818560208601612a26565b61228181612b4c565b840191505092915050565b6000612299601d83612905565b91506122a482612b5d565b602082019050919050565b60006122bc602383612905565b91506122c782612b86565b604082019050919050565b60006122df601c83612905565b91506122ea82612bd5565b602082019050919050565b6000612302601683612905565b915061230d82612bfe565b602082019050919050565b6000612325602283612905565b915061233082612c27565b604082019050919050565b6000612348602683612905565b915061235382612c76565b604082019050919050565b600061236b602283612905565b915061237682612cc5565b604082019050919050565b600061238e601783612905565b915061239982612d14565b602082019050919050565b60006123b1602683612905565b91506123bc82612d3d565b604082019050919050565b60006123d4601d83612905565b91506123df82612d8c565b602082019050919050565b60006123f7602883612905565b915061240282612db5565b604082019050919050565b600061241a602083612905565b915061242582612e04565b602082019050919050565b600061243d601983612905565b915061244882612e2d565b602082019050919050565b6000612460602683612905565b915061246b82612e56565b604082019050919050565b6000612483602183612905565b915061248e82612ea5565b604082019050919050565b60006124a6602583612905565b91506124b182612ef4565b604082019050919050565b60006124c9602583612905565b91506124d482612f43565b604082019050919050565b60006124ec602a83612905565b91506124f782612f92565b604082019050919050565b600061250f602483612905565b915061251a82612fe1565b604082019050919050565b6000612532601683612905565b915061253d82613030565b602082019050919050565b6000612555602583612905565b915061256082613059565b604082019050919050565b6000612578601f83612905565b9150612583826130a8565b602082019050919050565b61259781612a0f565b82525050565b6125a681612a19565b82525050565b60006020820190506125c16000830184612235565b92915050565b60006020820190506125dc6000830184612244565b92915050565b600060208201905081810360008301526125fc8184612253565b905092915050565b6000602082019050818103600083015261261d8161228c565b9050919050565b6000602082019050818103600083015261263d816122af565b9050919050565b6000602082019050818103600083015261265d816122d2565b9050919050565b6000602082019050818103600083015261267d816122f5565b9050919050565b6000602082019050818103600083015261269d81612318565b9050919050565b600060208201905081810360008301526126bd8161233b565b9050919050565b600060208201905081810360008301526126dd8161235e565b9050919050565b600060208201905081810360008301526126fd81612381565b9050919050565b6000602082019050818103600083015261271d816123a4565b9050919050565b6000602082019050818103600083015261273d816123c7565b9050919050565b6000602082019050818103600083015261275d816123ea565b9050919050565b6000602082019050818103600083015261277d8161240d565b9050919050565b6000602082019050818103600083015261279d81612430565b9050919050565b600060208201905081810360008301526127bd81612453565b9050919050565b600060208201905081810360008301526127dd81612476565b9050919050565b600060208201905081810360008301526127fd81612499565b9050919050565b6000602082019050818103600083015261281d816124bc565b9050919050565b6000602082019050818103600083015261283d816124df565b9050919050565b6000602082019050818103600083015261285d81612502565b9050919050565b6000602082019050818103600083015261287d81612525565b9050919050565b6000602082019050818103600083015261289d81612548565b9050919050565b600060208201905081810360008301526128bd8161256b565b9050919050565b60006020820190506128d9600083018461258e565b92915050565b60006020820190506128f4600083018461259d565b92915050565b600081519050919050565b600082825260208201905092915050565b600061292182612a0f565b915061292c83612a0f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561296157612960612a8b565b5b828201905092915050565b600061297782612a0f565b915061298283612a0f565b92508261299257612991612aba565b5b828204905092915050565b60006129a882612a0f565b91506129b383612a0f565b9250828210156129c6576129c5612a8b565b5b828203905092915050565b60006129dc826129ef565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b83811015612a44578082015181840152602081019050612a29565b83811115612a53576000848401525b50505050565b60006002820490506001821680612a7157607f821691505b60208210811415612a8557612a84612ae9565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433230536e617073686f743a206e6f6e6578697374656e74206964000000600082015250565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f46616972204c61756e636820616c72656164792068617070656e656400000000600082015250565b7f6f6e6c79204f70657261746f7220436f6e747261637400000000000000000000600082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f54696d6520686173206e6f742070617373656420796574000000000000000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f66616972204c61756e6368206576656e742069732066696e6973686564000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4d6574616e6f3a3a416e7469205768616c652053797374656d00000000000000600082015250565b7f4d4554414e4f3a3a6d696e743a2063616e6e6f7420657863656564206d61782060008201527f737570706c790000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f46616972206c61756e636820686173206e6f74206265656e206578656375746560008201527f6420796574000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f4d6574616e6f3a3a46616972204c61756e6368206576656e74202c206e6f742060008201527f7374617274732079657400000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433230536e617073686f743a206964206973203000000000000000000000600082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6130da816129d1565b81146130e557600080fd5b50565b6130f181612a0f565b81146130fc57600080fd5b5056fea2646970667358221220a54626f6a59899bda977ad1067ccc3aa4277f1c55d3d9c3aad1f35cd798af2c064736f6c63430008070033

Deployed Bytecode Sourcemap

26138:2983:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15604:91;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16308:169;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28222:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16668:418;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15806:84;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17094:215;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27937:279;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22249:266;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26187:23;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28795:323;;;:::i;:::-;;26378:31;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16014:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14399:103;;;:::i;:::-;;13748:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28488:297;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26416:55;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15703:95;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22619:234;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28336:148;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17317:377;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27084:688;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26604:32;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27778:153;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26559:38;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26247:44;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26217:23;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16149:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26512:40;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14657:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26478:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15604:91;15649:13;15682:5;15675:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15604:91;:::o;16308:169::-;16391:4;16408:39;16417:12;:10;:12::i;:::-;16431:7;16440:6;16408:8;:39::i;:::-;16465:4;16458:11;;16308:169;;;;:::o;28222:108::-;28283:7;28310:12;;28303:19;;28222:108;:::o;16668:418::-;16774:4;16791:36;16801:6;16809:9;16820:6;16791:9;:36::i;:::-;16838:24;16865:11;:19;16877:6;16865:19;;;;;;;;;;;;;;;:33;16885:12;:10;:12::i;:::-;16865:33;;;;;;;;;;;;;;;;16838:60;;16937:6;16917:16;:26;;16909:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;16999:57;17008:6;17016:12;:10;:12::i;:::-;17049:6;17030:16;:25;;;;:::i;:::-;16999:8;:57::i;:::-;17074:4;17067:11;;;16668:418;;;;;:::o;15806:84::-;15855:5;15880:2;15873:9;;15806:84;:::o;17094:215::-;17182:4;17199:80;17208:12;:10;:12::i;:::-;17222:7;17268:10;17231:11;:25;17243:12;:10;:12::i;:::-;17231:25;;;;;;;;;;;;;;;:34;17257:7;17231:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;17199:8;:80::i;:::-;17297:4;17290:11;;17094:215;;;;:::o;27937:279::-;28014:8;;;;;;;;;;;28000:22;;:10;:22;;;27992:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;28072:6;28056:12;;:22;;;;;;;:::i;:::-;;;;;;;;28119:9;;28103:12;;:25;;28085:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;28193:17;28199:2;28203:6;28193:5;:17::i;:::-;27937:279;;:::o;22249:266::-;22336:7;22357:16;22375:13;22392:55;22401:10;22413:24;:33;22438:7;22413:33;;;;;;;;;;;;;;;22392:8;:55::i;:::-;22356:91;;;;22467:11;:40;;22489:18;22499:7;22489:9;:18::i;:::-;22467:40;;;22481:5;22467:40;22460:47;;;;22249:266;;;;:::o;26187:23::-;;;;;;;;;;;;;:::o;28795:323::-;28851:18;;;;;;;;;;;28843:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28962:6;28948:12;;:20;;;;:::i;:::-;28930:15;:38;28922:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;29015:21;;;;;;;;;;;29007:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;29105:5;29081:21;;:29;;;;;;;;;;;;;;;;;;28795:323::o;26378:31::-;;;;;;;;;;;;;:::o;16014:127::-;16088:7;16115:9;:18;16125:7;16115:18;;;;;;;;;;;;;;;;16108:25;;16014:127;;;:::o;14399:103::-;13979:12;:10;:12::i;:::-;13968:23;;:7;:5;:7::i;:::-;:23;;;13960:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14464:30:::1;14491:1;14464:18;:30::i;:::-;14399:103::o:0;13748:87::-;13794:7;13821:6;;;;;;;;;;;13814:13;;13748:87;:::o;28488:297::-;13979:12;:10;:12::i;:::-;13968:23;;:7;:5;:7::i;:::-;:23;;;13960:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28592:18:::1;;;;;;;;;;;28591:19;28583:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;28670:10;28655:12;:25;;;;28710:4;28691:18;;:23;;;;;;;;;;;;;;;;;;28737:4;28725:11;;:16;;;;;;;;;;;;;;;;;;28770:9;28752:17;:27;;;;28488:297:::0;;:::o;26416:55::-;;;;;;;;;;;;;;;;;;;;;;:::o;15703:95::-;15750:13;15783:7;15776:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15703:95;:::o;22619:234::-;22691:7;22712:16;22730:13;22747:43;22756:10;22768:21;22747:8;:43::i;:::-;22711:79;;;;22810:11;:35;;22832:13;:11;:13::i;:::-;22810:35;;;22824:5;22810:35;22803:42;;;;22619:234;;;:::o;28336:148::-;28416:8;;;;;;;;;;;28402:22;;:10;:22;;;28394:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;28458:20;28464:5;28471:6;28458:5;:20::i;:::-;28336:148;;:::o;17317:377::-;17410:4;17427:24;17454:11;:25;17466:12;:10;:12::i;:::-;17454:25;;;;;;;;;;;;;;;:34;17480:7;17454:34;;;;;;;;;;;;;;;;17427:61;;17527:15;17507:16;:35;;17499:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;17595:67;17604:12;:10;:12::i;:::-;17618:7;17646:15;17627:16;:34;;;;:::i;:::-;17595:8;:67::i;:::-;17682:4;17675:11;;;17317:377;;;;:::o;27084:688::-;27170:4;27201:18;;;;;;;;;;;:64;;;;27261:4;27223:42;;:22;:34;27246:10;27223:34;;;;;;;;;;;;;;;;;;;;;;;;;:42;;;27201:64;27193:119;;;;;;;;;;;;:::i;:::-;;;;;;;;;27330:21;;;;;;;;;;;27327:347;;;27389:15;27375:12;;:29;;:75;;;;27446:4;27408:42;;:22;:34;27431:10;27408:34;;;;;;;;;;;;;;;;;;;;;;;;;:42;;;27375:75;27367:130;;;;;;;;;;;;:::i;:::-;;;;;;;;;27528:17;;27520:6;:25;;:71;;;;27587:4;27549:42;;:22;:34;27572:10;27549:34;;;;;;;;;;;;;;;;;;;;;;;;;:42;;;27520:71;27512:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;27327:347;27700:42;27710:12;:10;:12::i;:::-;27724:9;27735:6;27700:9;:42::i;:::-;27760:4;27753:11;;27084:688;;;;:::o;26604:32::-;;;;:::o;27778:153::-;27861:8;;;;;;;;;;;27847:22;;:10;:22;;;27839:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;27914:11;27903:8;;:22;;;;;;;;;;;;;;;;;;27778:153;:::o;26559:38::-;;;;;;;;;;;;;:::o;26247:44::-;;;;:::o;26217:23::-;;;;;;;;;;;;;:::o;16149:151::-;16238:7;16265:11;:18;16277:5;16265:18;;;;;;;;;;;;;;;:27;16284:7;16265:27;;;;;;;;;;;;;;;;16258:34;;16149:151;;;;:::o;26512:40::-;;;;;;;;;;;;;:::o;14657:201::-;13979:12;:10;:12::i;:::-;13968:23;;:7;:5;:7::i;:::-;:23;;;13960:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14766:1:::1;14746:22;;:8;:22;;;;14738:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;14822:28;14841:8;14822:18;:28::i;:::-;14657:201:::0;:::o;26478:27::-;;;;:::o;13106:98::-;13159:7;13186:10;13179:17;;13106:98;:::o;19146:344::-;19265:1;19248:19;;:5;:19;;;;19240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19346:1;19327:21;;:7;:21;;;;19319:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19428:6;19398:11;:18;19410:5;19398:18;;;;;;;;;;;;;;;:27;19417:7;19398:27;;;;;;;;;;;;;;;:36;;;;19466:7;19450:32;;19459:5;19450:32;;;19475:6;19450:32;;;;;;:::i;:::-;;;;;;;;19146:344;;;:::o;17702:598::-;17826:1;17808:20;;:6;:20;;;;17800:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;17910:1;17889:23;;:9;:23;;;;17881:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;17963:47;17984:6;17992:9;18003:6;17963:20;:47::i;:::-;18021:21;18045:9;:17;18055:6;18045:17;;;;;;;;;;;;;;;;18021:41;;18098:6;18081:13;:23;;18073:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;18194:6;18178:13;:22;;;;:::i;:::-;18158:9;:17;18168:6;18158:17;;;;;;;;;;;;;;;:42;;;;18235:6;18211:9;:20;18221:9;18211:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;18274:9;18257:35;;18266:6;18257:35;;;18285:6;18257:35;;;;;;:::i;:::-;;;;;;;;17789:511;17702:598;;;:::o;18308:334::-;18411:1;18392:21;;:7;:21;;;;18384:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;18460:49;18489:1;18493:7;18502:6;18460:20;:49::i;:::-;18536:6;18520:12;;:22;;;;;;;:::i;:::-;;;;;;;;18575:6;18553:9;:18;18563:7;18553:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;18618:7;18597:37;;18614:1;18597:37;;;18627:6;18597:37;;;;;;:::i;:::-;;;;;;;;18308:334;;:::o;23700:1613::-;23789:4;23795:7;23836:1;23823:10;:14;23815:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;23897:23;:21;:23::i;:::-;23883:10;:37;;23875:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;25087:13;25103:40;25132:10;25103:9;:13;;:28;;:40;;;;:::i;:::-;25087:56;;25169:9;:13;;:20;;;;25160:5;:29;25156:150;;;25214:5;25221:1;25206:17;;;;;;;25156:150;25264:4;25270:9;:16;;25287:5;25270:23;;;;;;;;:::i;:::-;;;;;;;;;;25256:38;;;;;23700:1613;;;;;;:::o;15018:191::-;15092:16;15111:6;;;;;;;;;;;15092:25;;15137:8;15128:6;;:17;;;;;;;;;;;;;;;;;;15192:8;15161:40;;15182:8;15161:40;;;;;;;;;;;;15081:128;15018:191;:::o;18650:488::-;18753:1;18734:21;;:7;:21;;;;18726:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18804:49;18825:7;18842:1;18846:6;18804:20;:49::i;:::-;18864:22;18889:9;:18;18899:7;18889:18;;;;;;;;;;;;;;;;18864:43;;18944:6;18926:14;:24;;18918:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;19038:6;19021:14;:23;;;;:::i;:::-;19000:9;:18;19010:7;19000:18;;;;;;;;;;;;;;;:44;;;;19071:6;19055:12;;:22;;;;;;;:::i;:::-;;;;;;;;19119:1;19093:37;;19102:7;19093:37;;;19123:6;19093:37;;;;;;:::i;:::-;;;;;;;;18715:423;18650:488;;:::o;23070:622::-;23213:44;23240:4;23246:2;23250:6;23213:26;:44::i;:::-;23290:1;23274:18;;:4;:18;;;23270:415;;;23330:26;23353:2;23330:22;:26::i;:::-;23371:28;:26;:28::i;:::-;23270:415;;;23435:1;23421:16;;:2;:16;;;23417:268;;;23475:28;23498:4;23475:22;:28::i;:::-;23518;:26;:28::i;:::-;23417:268;;;23604:28;23627:4;23604:22;:28::i;:::-;23647:26;23670:2;23647:22;:26::i;:::-;23417:268;23270:415;23070:622;;;:::o;22010:127::-;22074:7;22101:28;:18;:26;:28::i;:::-;22094:35;;22010:127;:::o;11396:918::-;11485:7;11525:1;11509:5;:12;;;;:17;11505:58;;;11550:1;11543:8;;;;11505:58;11575:11;11601:12;11616:5;:12;;;;11601:27;;11641:424;11654:4;11648:3;:10;11641:424;;;11675:11;11689:23;11702:3;11707:4;11689:12;:23::i;:::-;11675:37;;11946:7;11933:5;11939:3;11933:10;;;;;;;;:::i;:::-;;;;;;;;;;:20;11929:125;;;11981:3;11974:10;;11929:125;;;12037:1;12031:3;:7;;;;:::i;:::-;12025:13;;11929:125;11660:405;11641:424;;;12191:1;12185:3;:7;:36;;;;;12214:7;12196:5;12208:1;12202:3;:7;;;;:::i;:::-;12196:14;;;;;;;;:::i;:::-;;;;;;;;;;:25;12185:36;12181:126;;;12251:1;12245:3;:7;;;;:::i;:::-;12238:14;;;;;;12181:126;12292:3;12285:10;;;;11396:918;;;;;:::o;19498:92::-;;;;:::o;25321:146::-;25389:70;25405:24;:33;25430:7;25405:33;;;;;;;;;;;;;;;25440:18;25450:7;25440:9;:18::i;:::-;25389:15;:70::i;:::-;25321:146;:::o;25475:118::-;25532:53;25548:21;25571:13;:11;:13::i;:::-;25532:15;:53::i;:::-;25475:118::o;968:114::-;1033:7;1060;:14;;;1053:21;;968:114;;;:::o;2478:156::-;2540:7;2625:1;2620;2616;:5;2615:11;;;;:::i;:::-;2610:1;2606;:5;2605:21;;;;:::i;:::-;2598:28;;2478:156;;;;:::o;25601:310::-;25696:17;25716:23;:21;:23::i;:::-;25696:43;;25787:9;25754:30;25770:9;:13;;25754:15;:30::i;:::-;:42;25750:154;;;25813:9;:13;;25832:9;25813:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25857:9;:16;;25879:12;25857:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25750:154;25685:226;25601:310;;:::o;25919:212::-;25989:7;26027:1;26013:3;:10;;;;:15;26009:115;;;26052:1;26045:8;;;;26009:115;26093:3;26110:1;26097:3;:10;;;;:14;;;;:::i;:::-;26093:19;;;;;;;;:::i;:::-;;;;;;;;;;26086:26;;25919:212;;;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;7:139;;;;:::o;152:::-;198:5;236:6;223:20;214:29;;252:33;279:5;252:33;:::i;:::-;152:139;;;;:::o;297:329::-;356:6;405:2;393:9;384:7;380:23;376:32;373:119;;;411:79;;:::i;:::-;373:119;531:1;556:53;601:7;592:6;581:9;577:22;556:53;:::i;:::-;546:63;;502:117;297:329;;;;:::o;632:474::-;700:6;708;757:2;745:9;736:7;732:23;728:32;725:119;;;763:79;;:::i;:::-;725:119;883:1;908:53;953:7;944:6;933:9;929:22;908:53;:::i;:::-;898:63;;854:117;1010:2;1036:53;1081:7;1072:6;1061:9;1057:22;1036:53;:::i;:::-;1026:63;;981:118;632:474;;;;;:::o;1112:619::-;1189:6;1197;1205;1254:2;1242:9;1233:7;1229:23;1225:32;1222:119;;;1260:79;;:::i;:::-;1222:119;1380:1;1405:53;1450:7;1441:6;1430:9;1426:22;1405:53;:::i;:::-;1395:63;;1351:117;1507:2;1533:53;1578:7;1569:6;1558:9;1554:22;1533:53;:::i;:::-;1523:63;;1478:118;1635:2;1661:53;1706:7;1697:6;1686:9;1682:22;1661:53;:::i;:::-;1651:63;;1606:118;1112:619;;;;;:::o;1737:474::-;1805:6;1813;1862:2;1850:9;1841:7;1837:23;1833:32;1830:119;;;1868:79;;:::i;:::-;1830:119;1988:1;2013:53;2058:7;2049:6;2038:9;2034:22;2013:53;:::i;:::-;2003:63;;1959:117;2115:2;2141:53;2186:7;2177:6;2166:9;2162:22;2141:53;:::i;:::-;2131:63;;2086:118;1737:474;;;;;:::o;2217:329::-;2276:6;2325:2;2313:9;2304:7;2300:23;2296:32;2293:119;;;2331:79;;:::i;:::-;2293:119;2451:1;2476:53;2521:7;2512:6;2501:9;2497:22;2476:53;:::i;:::-;2466:63;;2422:117;2217:329;;;;:::o;2552:474::-;2620:6;2628;2677:2;2665:9;2656:7;2652:23;2648:32;2645:119;;;2683:79;;:::i;:::-;2645:119;2803:1;2828:53;2873:7;2864:6;2853:9;2849:22;2828:53;:::i;:::-;2818:63;;2774:117;2930:2;2956:53;3001:7;2992:6;2981:9;2977:22;2956:53;:::i;:::-;2946:63;;2901:118;2552:474;;;;;:::o;3032:118::-;3119:24;3137:5;3119:24;:::i;:::-;3114:3;3107:37;3032:118;;:::o;3156:109::-;3237:21;3252:5;3237:21;:::i;:::-;3232:3;3225:34;3156:109;;:::o;3271:364::-;3359:3;3387:39;3420:5;3387:39;:::i;:::-;3442:71;3506:6;3501:3;3442:71;:::i;:::-;3435:78;;3522:52;3567:6;3562:3;3555:4;3548:5;3544:16;3522:52;:::i;:::-;3599:29;3621:6;3599:29;:::i;:::-;3594:3;3590:39;3583:46;;3363:272;3271:364;;;;:::o;3641:366::-;3783:3;3804:67;3868:2;3863:3;3804:67;:::i;:::-;3797:74;;3880:93;3969:3;3880:93;:::i;:::-;3998:2;3993:3;3989:12;3982:19;;3641:366;;;:::o;4013:::-;4155:3;4176:67;4240:2;4235:3;4176:67;:::i;:::-;4169:74;;4252:93;4341:3;4252:93;:::i;:::-;4370:2;4365:3;4361:12;4354:19;;4013:366;;;:::o;4385:::-;4527:3;4548:67;4612:2;4607:3;4548:67;:::i;:::-;4541:74;;4624:93;4713:3;4624:93;:::i;:::-;4742:2;4737:3;4733:12;4726:19;;4385:366;;;:::o;4757:::-;4899:3;4920:67;4984:2;4979:3;4920:67;:::i;:::-;4913:74;;4996:93;5085:3;4996:93;:::i;:::-;5114:2;5109:3;5105:12;5098:19;;4757:366;;;:::o;5129:::-;5271:3;5292:67;5356:2;5351:3;5292:67;:::i;:::-;5285:74;;5368:93;5457:3;5368:93;:::i;:::-;5486:2;5481:3;5477:12;5470:19;;5129:366;;;:::o;5501:::-;5643:3;5664:67;5728:2;5723:3;5664:67;:::i;:::-;5657:74;;5740:93;5829:3;5740:93;:::i;:::-;5858:2;5853:3;5849:12;5842:19;;5501:366;;;:::o;5873:::-;6015:3;6036:67;6100:2;6095:3;6036:67;:::i;:::-;6029:74;;6112:93;6201:3;6112:93;:::i;:::-;6230:2;6225:3;6221:12;6214:19;;5873:366;;;:::o;6245:::-;6387:3;6408:67;6472:2;6467:3;6408:67;:::i;:::-;6401:74;;6484:93;6573:3;6484:93;:::i;:::-;6602:2;6597:3;6593:12;6586:19;;6245:366;;;:::o;6617:::-;6759:3;6780:67;6844:2;6839:3;6780:67;:::i;:::-;6773:74;;6856:93;6945:3;6856:93;:::i;:::-;6974:2;6969:3;6965:12;6958:19;;6617:366;;;:::o;6989:::-;7131:3;7152:67;7216:2;7211:3;7152:67;:::i;:::-;7145:74;;7228:93;7317:3;7228:93;:::i;:::-;7346:2;7341:3;7337:12;7330:19;;6989:366;;;:::o;7361:::-;7503:3;7524:67;7588:2;7583:3;7524:67;:::i;:::-;7517:74;;7600:93;7689:3;7600:93;:::i;:::-;7718:2;7713:3;7709:12;7702:19;;7361:366;;;:::o;7733:::-;7875:3;7896:67;7960:2;7955:3;7896:67;:::i;:::-;7889:74;;7972:93;8061:3;7972:93;:::i;:::-;8090:2;8085:3;8081:12;8074:19;;7733:366;;;:::o;8105:::-;8247:3;8268:67;8332:2;8327:3;8268:67;:::i;:::-;8261:74;;8344:93;8433:3;8344:93;:::i;:::-;8462:2;8457:3;8453:12;8446:19;;8105:366;;;:::o;8477:::-;8619:3;8640:67;8704:2;8699:3;8640:67;:::i;:::-;8633:74;;8716:93;8805:3;8716:93;:::i;:::-;8834:2;8829:3;8825:12;8818:19;;8477:366;;;:::o;8849:::-;8991:3;9012:67;9076:2;9071:3;9012:67;:::i;:::-;9005:74;;9088:93;9177:3;9088:93;:::i;:::-;9206:2;9201:3;9197:12;9190:19;;8849:366;;;:::o;9221:::-;9363:3;9384:67;9448:2;9443:3;9384:67;:::i;:::-;9377:74;;9460:93;9549:3;9460:93;:::i;:::-;9578:2;9573:3;9569:12;9562:19;;9221:366;;;:::o;9593:::-;9735:3;9756:67;9820:2;9815:3;9756:67;:::i;:::-;9749:74;;9832:93;9921:3;9832:93;:::i;:::-;9950:2;9945:3;9941:12;9934:19;;9593:366;;;:::o;9965:::-;10107:3;10128:67;10192:2;10187:3;10128:67;:::i;:::-;10121:74;;10204:93;10293:3;10204:93;:::i;:::-;10322:2;10317:3;10313:12;10306:19;;9965:366;;;:::o;10337:::-;10479:3;10500:67;10564:2;10559:3;10500:67;:::i;:::-;10493:74;;10576:93;10665:3;10576:93;:::i;:::-;10694:2;10689:3;10685:12;10678:19;;10337:366;;;:::o;10709:::-;10851:3;10872:67;10936:2;10931:3;10872:67;:::i;:::-;10865:74;;10948:93;11037:3;10948:93;:::i;:::-;11066:2;11061:3;11057:12;11050:19;;10709:366;;;:::o;11081:::-;11223:3;11244:67;11308:2;11303:3;11244:67;:::i;:::-;11237:74;;11320:93;11409:3;11320:93;:::i;:::-;11438:2;11433:3;11429:12;11422:19;;11081:366;;;:::o;11453:::-;11595:3;11616:67;11680:2;11675:3;11616:67;:::i;:::-;11609:74;;11692:93;11781:3;11692:93;:::i;:::-;11810:2;11805:3;11801:12;11794:19;;11453:366;;;:::o;11825:118::-;11912:24;11930:5;11912:24;:::i;:::-;11907:3;11900:37;11825:118;;:::o;11949:112::-;12032:22;12048:5;12032:22;:::i;:::-;12027:3;12020:35;11949:112;;:::o;12067:222::-;12160:4;12198:2;12187:9;12183:18;12175:26;;12211:71;12279:1;12268:9;12264:17;12255:6;12211:71;:::i;:::-;12067:222;;;;:::o;12295:210::-;12382:4;12420:2;12409:9;12405:18;12397:26;;12433:65;12495:1;12484:9;12480:17;12471:6;12433:65;:::i;:::-;12295:210;;;;:::o;12511:313::-;12624:4;12662:2;12651:9;12647:18;12639:26;;12711:9;12705:4;12701:20;12697:1;12686:9;12682:17;12675:47;12739:78;12812:4;12803:6;12739:78;:::i;:::-;12731:86;;12511:313;;;;:::o;12830:419::-;12996:4;13034:2;13023:9;13019:18;13011:26;;13083:9;13077:4;13073:20;13069:1;13058:9;13054:17;13047:47;13111:131;13237:4;13111:131;:::i;:::-;13103:139;;12830:419;;;:::o;13255:::-;13421:4;13459:2;13448:9;13444:18;13436:26;;13508:9;13502:4;13498:20;13494:1;13483:9;13479:17;13472:47;13536:131;13662:4;13536:131;:::i;:::-;13528:139;;13255:419;;;:::o;13680:::-;13846:4;13884:2;13873:9;13869:18;13861:26;;13933:9;13927:4;13923:20;13919:1;13908:9;13904:17;13897:47;13961:131;14087:4;13961:131;:::i;:::-;13953:139;;13680:419;;;:::o;14105:::-;14271:4;14309:2;14298:9;14294:18;14286:26;;14358:9;14352:4;14348:20;14344:1;14333:9;14329:17;14322:47;14386:131;14512:4;14386:131;:::i;:::-;14378:139;;14105:419;;;:::o;14530:::-;14696:4;14734:2;14723:9;14719:18;14711:26;;14783:9;14777:4;14773:20;14769:1;14758:9;14754:17;14747:47;14811:131;14937:4;14811:131;:::i;:::-;14803:139;;14530:419;;;:::o;14955:::-;15121:4;15159:2;15148:9;15144:18;15136:26;;15208:9;15202:4;15198:20;15194:1;15183:9;15179:17;15172:47;15236:131;15362:4;15236:131;:::i;:::-;15228:139;;14955:419;;;:::o;15380:::-;15546:4;15584:2;15573:9;15569:18;15561:26;;15633:9;15627:4;15623:20;15619:1;15608:9;15604:17;15597:47;15661:131;15787:4;15661:131;:::i;:::-;15653:139;;15380:419;;;:::o;15805:::-;15971:4;16009:2;15998:9;15994:18;15986:26;;16058:9;16052:4;16048:20;16044:1;16033:9;16029:17;16022:47;16086:131;16212:4;16086:131;:::i;:::-;16078:139;;15805:419;;;:::o;16230:::-;16396:4;16434:2;16423:9;16419:18;16411:26;;16483:9;16477:4;16473:20;16469:1;16458:9;16454:17;16447:47;16511:131;16637:4;16511:131;:::i;:::-;16503:139;;16230:419;;;:::o;16655:::-;16821:4;16859:2;16848:9;16844:18;16836:26;;16908:9;16902:4;16898:20;16894:1;16883:9;16879:17;16872:47;16936:131;17062:4;16936:131;:::i;:::-;16928:139;;16655:419;;;:::o;17080:::-;17246:4;17284:2;17273:9;17269:18;17261:26;;17333:9;17327:4;17323:20;17319:1;17308:9;17304:17;17297:47;17361:131;17487:4;17361:131;:::i;:::-;17353:139;;17080:419;;;:::o;17505:::-;17671:4;17709:2;17698:9;17694:18;17686:26;;17758:9;17752:4;17748:20;17744:1;17733:9;17729:17;17722:47;17786:131;17912:4;17786:131;:::i;:::-;17778:139;;17505:419;;;:::o;17930:::-;18096:4;18134:2;18123:9;18119:18;18111:26;;18183:9;18177:4;18173:20;18169:1;18158:9;18154:17;18147:47;18211:131;18337:4;18211:131;:::i;:::-;18203:139;;17930:419;;;:::o;18355:::-;18521:4;18559:2;18548:9;18544:18;18536:26;;18608:9;18602:4;18598:20;18594:1;18583:9;18579:17;18572:47;18636:131;18762:4;18636:131;:::i;:::-;18628:139;;18355:419;;;:::o;18780:::-;18946:4;18984:2;18973:9;18969:18;18961:26;;19033:9;19027:4;19023:20;19019:1;19008:9;19004:17;18997:47;19061:131;19187:4;19061:131;:::i;:::-;19053:139;;18780:419;;;:::o;19205:::-;19371:4;19409:2;19398:9;19394:18;19386:26;;19458:9;19452:4;19448:20;19444:1;19433:9;19429:17;19422:47;19486:131;19612:4;19486:131;:::i;:::-;19478:139;;19205:419;;;:::o;19630:::-;19796:4;19834:2;19823:9;19819:18;19811:26;;19883:9;19877:4;19873:20;19869:1;19858:9;19854:17;19847:47;19911:131;20037:4;19911:131;:::i;:::-;19903:139;;19630:419;;;:::o;20055:::-;20221:4;20259:2;20248:9;20244:18;20236:26;;20308:9;20302:4;20298:20;20294:1;20283:9;20279:17;20272:47;20336:131;20462:4;20336:131;:::i;:::-;20328:139;;20055:419;;;:::o;20480:::-;20646:4;20684:2;20673:9;20669:18;20661:26;;20733:9;20727:4;20723:20;20719:1;20708:9;20704:17;20697:47;20761:131;20887:4;20761:131;:::i;:::-;20753:139;;20480:419;;;:::o;20905:::-;21071:4;21109:2;21098:9;21094:18;21086:26;;21158:9;21152:4;21148:20;21144:1;21133:9;21129:17;21122:47;21186:131;21312:4;21186:131;:::i;:::-;21178:139;;20905:419;;;:::o;21330:::-;21496:4;21534:2;21523:9;21519:18;21511:26;;21583:9;21577:4;21573:20;21569:1;21558:9;21554:17;21547:47;21611:131;21737:4;21611:131;:::i;:::-;21603:139;;21330:419;;;:::o;21755:::-;21921:4;21959:2;21948:9;21944:18;21936:26;;22008:9;22002:4;21998:20;21994:1;21983:9;21979:17;21972:47;22036:131;22162:4;22036:131;:::i;:::-;22028:139;;21755:419;;;:::o;22180:222::-;22273:4;22311:2;22300:9;22296:18;22288:26;;22324:71;22392:1;22381:9;22377:17;22368:6;22324:71;:::i;:::-;22180:222;;;;:::o;22408:214::-;22497:4;22535:2;22524:9;22520:18;22512:26;;22548:67;22612:1;22601:9;22597:17;22588:6;22548:67;:::i;:::-;22408:214;;;;:::o;22709:99::-;22761:6;22795:5;22789:12;22779:22;;22709:99;;;:::o;22814:169::-;22898:11;22932:6;22927:3;22920:19;22972:4;22967:3;22963:14;22948:29;;22814:169;;;;:::o;22989:305::-;23029:3;23048:20;23066:1;23048:20;:::i;:::-;23043:25;;23082:20;23100:1;23082:20;:::i;:::-;23077:25;;23236:1;23168:66;23164:74;23161:1;23158:81;23155:107;;;23242:18;;:::i;:::-;23155:107;23286:1;23283;23279:9;23272:16;;22989:305;;;;:::o;23300:185::-;23340:1;23357:20;23375:1;23357:20;:::i;:::-;23352:25;;23391:20;23409:1;23391:20;:::i;:::-;23386:25;;23430:1;23420:35;;23435:18;;:::i;:::-;23420:35;23477:1;23474;23470:9;23465:14;;23300:185;;;;:::o;23491:191::-;23531:4;23551:20;23569:1;23551:20;:::i;:::-;23546:25;;23585:20;23603:1;23585:20;:::i;:::-;23580:25;;23624:1;23621;23618:8;23615:34;;;23629:18;;:::i;:::-;23615:34;23674:1;23671;23667:9;23659:17;;23491:191;;;;:::o;23688:96::-;23725:7;23754:24;23772:5;23754:24;:::i;:::-;23743:35;;23688:96;;;:::o;23790:90::-;23824:7;23867:5;23860:13;23853:21;23842:32;;23790:90;;;:::o;23886:126::-;23923:7;23963:42;23956:5;23952:54;23941:65;;23886:126;;;:::o;24018:77::-;24055:7;24084:5;24073:16;;24018:77;;;:::o;24101:86::-;24136:7;24176:4;24169:5;24165:16;24154:27;;24101:86;;;:::o;24193:307::-;24261:1;24271:113;24285:6;24282:1;24279:13;24271:113;;;24370:1;24365:3;24361:11;24355:18;24351:1;24346:3;24342:11;24335:39;24307:2;24304:1;24300:10;24295:15;;24271:113;;;24402:6;24399:1;24396:13;24393:101;;;24482:1;24473:6;24468:3;24464:16;24457:27;24393:101;24242:258;24193:307;;;:::o;24506:320::-;24550:6;24587:1;24581:4;24577:12;24567:22;;24634:1;24628:4;24624:12;24655:18;24645:81;;24711:4;24703:6;24699:17;24689:27;;24645:81;24773:2;24765:6;24762:14;24742:18;24739:38;24736:84;;;24792:18;;:::i;:::-;24736:84;24557:269;24506:320;;;:::o;24832:180::-;24880:77;24877:1;24870:88;24977:4;24974:1;24967:15;25001:4;24998:1;24991:15;25018:180;25066:77;25063:1;25056:88;25163:4;25160:1;25153:15;25187:4;25184:1;25177:15;25204:180;25252:77;25249:1;25242:88;25349:4;25346:1;25339:15;25373:4;25370:1;25363:15;25390:180;25438:77;25435:1;25428:88;25535:4;25532:1;25525:15;25559:4;25556:1;25549:15;25699:117;25808:1;25805;25798:12;25822:102;25863:6;25914:2;25910:7;25905:2;25898:5;25894:14;25890:28;25880:38;;25822:102;;;:::o;25930:179::-;26070:31;26066:1;26058:6;26054:14;26047:55;25930:179;:::o;26115:222::-;26255:34;26251:1;26243:6;26239:14;26232:58;26324:5;26319:2;26311:6;26307:15;26300:30;26115:222;:::o;26343:178::-;26483:30;26479:1;26471:6;26467:14;26460:54;26343:178;:::o;26527:172::-;26667:24;26663:1;26655:6;26651:14;26644:48;26527:172;:::o;26705:221::-;26845:34;26841:1;26833:6;26829:14;26822:58;26914:4;26909:2;26901:6;26897:15;26890:29;26705:221;:::o;26932:225::-;27072:34;27068:1;27060:6;27056:14;27049:58;27141:8;27136:2;27128:6;27124:15;27117:33;26932:225;:::o;27163:221::-;27303:34;27299:1;27291:6;27287:14;27280:58;27372:4;27367:2;27359:6;27355:15;27348:29;27163:221;:::o;27390:173::-;27530:25;27526:1;27518:6;27514:14;27507:49;27390:173;:::o;27569:225::-;27709:34;27705:1;27697:6;27693:14;27686:58;27778:8;27773:2;27765:6;27761:15;27754:33;27569:225;:::o;27800:179::-;27940:31;27936:1;27928:6;27924:14;27917:55;27800:179;:::o;27985:227::-;28125:34;28121:1;28113:6;28109:14;28102:58;28194:10;28189:2;28181:6;28177:15;28170:35;27985:227;:::o;28218:182::-;28358:34;28354:1;28346:6;28342:14;28335:58;28218:182;:::o;28406:175::-;28546:27;28542:1;28534:6;28530:14;28523:51;28406:175;:::o;28587:225::-;28727:34;28723:1;28715:6;28711:14;28704:58;28796:8;28791:2;28783:6;28779:15;28772:33;28587:225;:::o;28818:220::-;28958:34;28954:1;28946:6;28942:14;28935:58;29027:3;29022:2;29014:6;29010:15;29003:28;28818:220;:::o;29044:224::-;29184:34;29180:1;29172:6;29168:14;29161:58;29253:7;29248:2;29240:6;29236:15;29229:32;29044:224;:::o;29274:::-;29414:34;29410:1;29402:6;29398:14;29391:58;29483:7;29478:2;29470:6;29466:15;29459:32;29274:224;:::o;29504:229::-;29644:34;29640:1;29632:6;29628:14;29621:58;29713:12;29708:2;29700:6;29696:15;29689:37;29504:229;:::o;29739:223::-;29879:34;29875:1;29867:6;29863:14;29856:58;29948:6;29943:2;29935:6;29931:15;29924:31;29739:223;:::o;29968:172::-;30108:24;30104:1;30096:6;30092:14;30085:48;29968:172;:::o;30146:224::-;30286:34;30282:1;30274:6;30270:14;30263:58;30355:7;30350:2;30342:6;30338:15;30331:32;30146:224;:::o;30376:181::-;30516:33;30512:1;30504:6;30500:14;30493:57;30376:181;:::o;30563:122::-;30636:24;30654:5;30636:24;:::i;:::-;30629:5;30626:35;30616:63;;30675:1;30672;30665:12;30616:63;30563:122;:::o;30691:::-;30764:24;30782:5;30764:24;:::i;:::-;30757:5;30754:35;30744:63;;30803:1;30800;30793:12;30744:63;30691:122;:::o

Swarm Source

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