ETH Price: $2,295.37 (-6.34%)
Gas: 0 Gwei

Token

Bit Profit Matrix (BPM)

Overview

Max Total Supply

4,000,600 BPM

Holders

17

Transfers

-
0

Market

Price

$0.00 @ 0.000000 ETH

Onchain Market Cap

-

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information

Contract Source Code Verified (Exact Match)

Contract Name:
BitProfitMatrix

Compiler Version
v0.8.24+commit.e11b9ed9

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Arbiscan.io on 2025-03-23
*/

// File: @openzeppelin/contracts/utils/Context.sol


// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)

pragma solidity ^0.8.20;

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

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

    function _contextSuffixLength() internal view virtual returns (uint256) {
        return 0;
    }
}

// File: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)

pragma solidity ^0.8.20;


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

    /**
     * @dev The caller account is not authorized to perform an operation.
     */
    error OwnableUnauthorizedAccount(address account);

    /**
     * @dev The owner is not a valid owner account. (eg. `address(0)`)
     */
    error OwnableInvalidOwner(address owner);

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

    /**
     * @dev Initializes the contract setting the address provided by the deployer as the initial owner.
     */
    constructor(address initialOwner) {
        if (initialOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(initialOwner);
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        if (owner() != _msgSender()) {
            revert OwnableUnauthorizedAccount(_msgSender());
        }
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby disabling 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 {
        if (newOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _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);
    }
}

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol


// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.20;

/**
 * @dev Interface of the ERC-20 standard as defined in the ERC.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

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

    /**
     * @dev Returns the value of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

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

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

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

// File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol


// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.20;


/**
 * @dev Interface for the optional metadata functions from the ERC-20 standard.
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

// File: @openzeppelin/contracts/interfaces/draft-IERC6093.sol


// OpenZeppelin Contracts (last updated v5.1.0) (interfaces/draft-IERC6093.sol)
pragma solidity ^0.8.20;

/**
 * @dev Standard ERC-20 Errors
 * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-20 tokens.
 */
interface IERC20Errors {
    /**
     * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     * @param balance Current balance for the interacting account.
     * @param needed Minimum amount required to perform a transfer.
     */
    error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed);

    /**
     * @dev Indicates a failure with the token `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     */
    error ERC20InvalidSender(address sender);

    /**
     * @dev Indicates a failure with the token `receiver`. Used in transfers.
     * @param receiver Address to which tokens are being transferred.
     */
    error ERC20InvalidReceiver(address receiver);

    /**
     * @dev Indicates a failure with the `spender`’s `allowance`. Used in transfers.
     * @param spender Address that may be allowed to operate on tokens without being their owner.
     * @param allowance Amount of tokens a `spender` is allowed to operate with.
     * @param needed Minimum amount required to perform a transfer.
     */
    error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed);

    /**
     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
     * @param approver Address initiating an approval operation.
     */
    error ERC20InvalidApprover(address approver);

    /**
     * @dev Indicates a failure with the `spender` to be approved. Used in approvals.
     * @param spender Address that may be allowed to operate on tokens without being their owner.
     */
    error ERC20InvalidSpender(address spender);
}

/**
 * @dev Standard ERC-721 Errors
 * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-721 tokens.
 */
interface IERC721Errors {
    /**
     * @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in ERC-20.
     * Used in balance queries.
     * @param owner Address of the current owner of a token.
     */
    error ERC721InvalidOwner(address owner);

    /**
     * @dev Indicates a `tokenId` whose `owner` is the zero address.
     * @param tokenId Identifier number of a token.
     */
    error ERC721NonexistentToken(uint256 tokenId);

    /**
     * @dev Indicates an error related to the ownership over a particular token. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     * @param tokenId Identifier number of a token.
     * @param owner Address of the current owner of a token.
     */
    error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner);

    /**
     * @dev Indicates a failure with the token `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     */
    error ERC721InvalidSender(address sender);

    /**
     * @dev Indicates a failure with the token `receiver`. Used in transfers.
     * @param receiver Address to which tokens are being transferred.
     */
    error ERC721InvalidReceiver(address receiver);

    /**
     * @dev Indicates a failure with the `operator`’s approval. Used in transfers.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     * @param tokenId Identifier number of a token.
     */
    error ERC721InsufficientApproval(address operator, uint256 tokenId);

    /**
     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
     * @param approver Address initiating an approval operation.
     */
    error ERC721InvalidApprover(address approver);

    /**
     * @dev Indicates a failure with the `operator` to be approved. Used in approvals.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     */
    error ERC721InvalidOperator(address operator);
}

/**
 * @dev Standard ERC-1155 Errors
 * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-1155 tokens.
 */
interface IERC1155Errors {
    /**
     * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     * @param balance Current balance for the interacting account.
     * @param needed Minimum amount required to perform a transfer.
     * @param tokenId Identifier number of a token.
     */
    error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId);

    /**
     * @dev Indicates a failure with the token `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     */
    error ERC1155InvalidSender(address sender);

    /**
     * @dev Indicates a failure with the token `receiver`. Used in transfers.
     * @param receiver Address to which tokens are being transferred.
     */
    error ERC1155InvalidReceiver(address receiver);

    /**
     * @dev Indicates a failure with the `operator`’s approval. Used in transfers.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     * @param owner Address of the current owner of a token.
     */
    error ERC1155MissingApprovalForAll(address operator, address owner);

    /**
     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
     * @param approver Address initiating an approval operation.
     */
    error ERC1155InvalidApprover(address approver);

    /**
     * @dev Indicates a failure with the `operator` to be approved. Used in approvals.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     */
    error ERC1155InvalidOperator(address operator);

    /**
     * @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation.
     * Used in batch transfers.
     * @param idsLength Length of the array of token identifiers
     * @param valuesLength Length of the array of token amounts
     */
    error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength);
}

// File: @openzeppelin/contracts/token/ERC20/ERC20.sol


// OpenZeppelin Contracts (last updated v5.2.0) (token/ERC20/ERC20.sol)

pragma solidity ^0.8.20;





/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * The default value of {decimals} is 18. To change this, you should override
 * this function so it returns a different value.
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC-20
 * applications.
 */
abstract contract ERC20 is Context, IERC20, IERC20Metadata, IERC20Errors {
    mapping(address account => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

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

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

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

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

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

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `value` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 value) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, value);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Skips emitting an {Approval} event indicating an allowance update. This is not
     * required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve].
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `value`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `value`.
     */
    function transferFrom(address from, address to, uint256 value) public virtual returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, value);
        _transfer(from, to, value);
        return true;
    }

    /**
     * @dev Moves a `value` amount of tokens from `from` to `to`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * NOTE: This function is not virtual, {_update} should be overridden instead.
     */
    function _transfer(address from, address to, uint256 value) internal {
        if (from == address(0)) {
            revert ERC20InvalidSender(address(0));
        }
        if (to == address(0)) {
            revert ERC20InvalidReceiver(address(0));
        }
        _update(from, to, value);
    }

    /**
     * @dev Transfers a `value` amount of tokens from `from` to `to`, or alternatively mints (or burns) if `from`
     * (or `to`) is the zero address. All customizations to transfers, mints, and burns should be done by overriding
     * this function.
     *
     * Emits a {Transfer} event.
     */
    function _update(address from, address to, uint256 value) internal virtual {
        if (from == address(0)) {
            // Overflow check required: The rest of the code assumes that totalSupply never overflows
            _totalSupply += value;
        } else {
            uint256 fromBalance = _balances[from];
            if (fromBalance < value) {
                revert ERC20InsufficientBalance(from, fromBalance, value);
            }
            unchecked {
                // Overflow not possible: value <= fromBalance <= totalSupply.
                _balances[from] = fromBalance - value;
            }
        }

        if (to == address(0)) {
            unchecked {
                // Overflow not possible: value <= totalSupply or value <= fromBalance <= totalSupply.
                _totalSupply -= value;
            }
        } else {
            unchecked {
                // Overflow not possible: balance + value is at most totalSupply, which we know fits into a uint256.
                _balances[to] += value;
            }
        }

        emit Transfer(from, to, value);
    }

    /**
     * @dev Creates a `value` amount of tokens and assigns them to `account`, by transferring it from address(0).
     * Relies on the `_update` mechanism
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * NOTE: This function is not virtual, {_update} should be overridden instead.
     */
    function _mint(address account, uint256 value) internal {
        if (account == address(0)) {
            revert ERC20InvalidReceiver(address(0));
        }
        _update(address(0), account, value);
    }

    /**
     * @dev Destroys a `value` amount of tokens from `account`, lowering the total supply.
     * Relies on the `_update` mechanism.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * NOTE: This function is not virtual, {_update} should be overridden instead
     */
    function _burn(address account, uint256 value) internal {
        if (account == address(0)) {
            revert ERC20InvalidSender(address(0));
        }
        _update(account, address(0), value);
    }

    /**
     * @dev Sets `value` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     *
     * Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument.
     */
    function _approve(address owner, address spender, uint256 value) internal {
        _approve(owner, spender, value, true);
    }

    /**
     * @dev Variant of {_approve} with an optional flag to enable or disable the {Approval} event.
     *
     * By default (when calling {_approve}) the flag is set to true. On the other hand, approval changes made by
     * `_spendAllowance` during the `transferFrom` operation set the flag to false. This saves gas by not emitting any
     * `Approval` event during `transferFrom` operations.
     *
     * Anyone who wishes to continue emitting `Approval` events on the`transferFrom` operation can force the flag to
     * true using the following override:
     *
     * ```solidity
     * function _approve(address owner, address spender, uint256 value, bool) internal virtual override {
     *     super._approve(owner, spender, value, true);
     * }
     * ```
     *
     * Requirements are the same as {_approve}.
     */
    function _approve(address owner, address spender, uint256 value, bool emitEvent) internal virtual {
        if (owner == address(0)) {
            revert ERC20InvalidApprover(address(0));
        }
        if (spender == address(0)) {
            revert ERC20InvalidSpender(address(0));
        }
        _allowances[owner][spender] = value;
        if (emitEvent) {
            emit Approval(owner, spender, value);
        }
    }

    /**
     * @dev Updates `owner` s allowance for `spender` based on spent `value`.
     *
     * Does not update the allowance value in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Does not emit an {Approval} event.
     */
    function _spendAllowance(address owner, address spender, uint256 value) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance < type(uint256).max) {
            if (currentAllowance < value) {
                revert ERC20InsufficientAllowance(spender, currentAllowance, value);
            }
            unchecked {
                _approve(owner, spender, currentAllowance - value, false);
            }
        }
    }
}

// File: BPM.sol



pragma solidity ^0.8.24;



contract BitProfitMatrix is ERC20, Ownable {
    uint256 public transferFeeRate;
    uint256 public pancakeBuyFeeRate;
    uint256 public pancakeSellFeeRate;
    uint256 public pancakeSellFeeBurnRate;
    address public transferFeeReceiver;
    address public pancakeFeeReceiver;
    address public pair;

    mapping(address => bool) public transferExcludes;

    constructor() ERC20("Bit Profit Matrix", "BPM") Ownable(msg.sender) {}

    function mint(address to, uint256 amount) external onlyOwner {
        _mint(to, amount);
    }

    function _update(
        address from,
        address to,
        uint256 amount
    ) internal override {
        if (isExclude(from) || isExclude(to)) {
            super._update(from, to, amount);
        } else {
            uint256 fee;
            if (from == pair && pancakeBuyFeeRate > 0) {
                fee = (amount * pancakeBuyFeeRate) / 1000;
                super._update(from, pancakeFeeReceiver, fee);
                amount -= fee;
            } else if (to == pair && pancakeSellFeeRate > 0) {
                fee = (amount * pancakeSellFeeRate) / 1000;
                uint256 burn;
                if (pancakeSellFeeBurnRate > 0) {
                    burn = (fee * pancakeSellFeeBurnRate) / 1000;
                    super._update(from, address(1), burn);
                }
                uint256 income = fee - burn;
                if (income > 0) {
                    super._update(from, pancakeFeeReceiver, income);
                }
                amount -= fee;
            } else if (transferFeeRate > 0) {
                fee = (amount * transferFeeRate) / 1000;
                super._update(from, transferFeeReceiver, fee);
                amount -= fee;
            }

            if (amount > 0) {
                super._update(from, to, amount);
            }
        }
    }

    function isExclude(address from) public view returns (bool) {
        return transferExcludes[from];
    }

    function setExclude(address sender, bool state) public onlyOwner {
        transferExcludes[sender] = state;
    }

    function setPair(address _pair) public onlyOwner {
        pair = _pair;
    }

    function setFee(
        uint256 _transferFeeRate,
        uint256 _pancakeBuyFeeRate,
        uint256 _pancakeSellFeeRate,
        uint256 _pancakeSellFeeBurnRate,
        address _transferFeeReceiver,
        address _pancakeFeeReceiver
    ) public onlyOwner {
        require(_transferFeeRate <= 1000, "SetFee: _transferFeeRate 0-1000");
        require(
            _pancakeBuyFeeRate <= 1000,
            "SetFee: _pancakeBuyFeeRate 0-1000"
        );
        require(
            _pancakeSellFeeRate <= 1000,
            "SetFee: _pancakeSellFeeRate 0-1000"
        );
        require(
            _transferFeeReceiver != address(0),
            "SetFee: _transferFeeReceiver not be 0"
        );
        require(
            _pancakeFeeReceiver != address(0),
            "SetFee: _pancakeFeeReceiver not be 0"
        );
        require(
            _pancakeSellFeeBurnRate <= 1000,
            "SetFee: _pancakeSellFeeBurnRate 0 -1000"
        );

        transferFeeRate = _transferFeeRate;
        pancakeBuyFeeRate = _pancakeBuyFeeRate;
        pancakeSellFeeRate = _pancakeSellFeeRate;
        pancakeSellFeeBurnRate = _pancakeSellFeeBurnRate;

        transferFeeReceiver = _transferFeeReceiver;
        pancakeFeeReceiver = _pancakeFeeReceiver;
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"}],"name":"isExclude","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pancakeBuyFeeRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pancakeFeeReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pancakeSellFeeBurnRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pancakeSellFeeRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"bool","name":"state","type":"bool"}],"name":"setExclude","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_transferFeeRate","type":"uint256"},{"internalType":"uint256","name":"_pancakeBuyFeeRate","type":"uint256"},{"internalType":"uint256","name":"_pancakeSellFeeRate","type":"uint256"},{"internalType":"uint256","name":"_pancakeSellFeeBurnRate","type":"uint256"},{"internalType":"address","name":"_transferFeeReceiver","type":"address"},{"internalType":"address","name":"_pancakeFeeReceiver","type":"address"}],"name":"setFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"}],"name":"setPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"transferExcludes","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"transferFeeRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"transferFeeReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","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"}]

608060405234801562000010575f80fd5b50336040518060400160405280601181526020017f4269742050726f666974204d61747269780000000000000000000000000000008152506040518060400160405280600381526020017f42504d000000000000000000000000000000000000000000000000000000000081525081600390816200008f919062000456565b508060049081620000a1919062000456565b5050505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000117575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016200010e91906200057d565b60405180910390fd5b62000128816200012f60201b60201c565b5062000598565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806200026e57607f821691505b60208210810362000284576200028362000229565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620002e87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620002ab565b620002f48683620002ab565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f6200033e6200033862000332846200030c565b62000315565b6200030c565b9050919050565b5f819050919050565b62000359836200031e565b62000371620003688262000345565b848454620002b7565b825550505050565b5f90565b6200038762000379565b620003948184846200034e565b505050565b5b81811015620003bb57620003af5f826200037d565b6001810190506200039a565b5050565b601f8211156200040a57620003d4816200028a565b620003df846200029c565b81016020851015620003ef578190505b62000407620003fe856200029c565b83018262000399565b50505b505050565b5f82821c905092915050565b5f6200042c5f19846008026200040f565b1980831691505092915050565b5f6200044683836200041b565b9150826002028217905092915050565b6200046182620001f2565b67ffffffffffffffff8111156200047d576200047c620001fc565b5b62000489825462000256565b62000496828285620003bf565b5f60209050601f831160018114620004cc575f8415620004b7578287015190505b620004c3858262000439565b86555062000532565b601f198416620004dc866200028a565b5f5b828110156200050557848901518255600182019150602085019450602081019050620004de565b8683101562000525578489015162000521601f8916826200041b565b8355505b6001600288020188555050505b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62000565826200053a565b9050919050565b620005778162000559565b82525050565b5f602082019050620005925f8301846200056c565b92915050565b611f0680620005a65f395ff3fe608060405234801561000f575f80fd5b5060043610610171575f3560e01c8063715018a6116100dc578063961d3cd311610095578063a9059cbb1161006f578063a9059cbb1461042b578063dd62ed3e1461045b578063ddd32a881461048b578063f2fde38b146104a757610171565b8063961d3cd3146103c15780639ee7dd4f146103dd578063a8aa1b311461040d57610171565b8063715018a6146103235780638187f5161461032d5780638da5cb5b146103495780638df0cf30146103675780638e4a77141461038557806395d89b41146103a357610171565b8063351bf5181161012e578063351bf5181461024d57806340c10f191461026b57806355a59be3146102875780635f0938cc146102a55780635fe270e4146102d557806370a08231146102f357610171565b806303aec9d31461017557806306fdde0314610193578063095ea7b3146101b157806318160ddd146101e157806323b872dd146101ff578063313ce5671461022f575b5f80fd5b61017d6104c3565b60405161018a919061161d565b60405180910390f35b61019b6104c9565b6040516101a891906116c0565b60405180910390f35b6101cb60048036038101906101c69190611768565b610559565b6040516101d891906117c0565b60405180910390f35b6101e961057b565b6040516101f6919061161d565b60405180910390f35b610219600480360381019061021491906117d9565b610584565b60405161022691906117c0565b60405180910390f35b6102376105b2565b6040516102449190611844565b60405180910390f35b6102556105ba565b604051610262919061161d565b60405180910390f35b61028560048036038101906102809190611768565b6105c0565b005b61028f6105d6565b60405161029c919061186c565b60405180910390f35b6102bf60048036038101906102ba9190611885565b6105fb565b6040516102cc91906117c0565b60405180910390f35b6102dd61064d565b6040516102ea919061161d565b60405180910390f35b61030d60048036038101906103089190611885565b610653565b60405161031a919061161d565b60405180910390f35b61032b610698565b005b61034760048036038101906103429190611885565b6106ab565b005b6103516106f6565b60405161035e919061186c565b60405180910390f35b61036f61071e565b60405161037c919061161d565b60405180910390f35b61038d610724565b60405161039a919061186c565b60405180910390f35b6103ab610749565b6040516103b891906116c0565b60405180910390f35b6103db60048036038101906103d691906118da565b6107d9565b005b6103f760048036038101906103f29190611885565b610839565b60405161040491906117c0565b60405180910390f35b610415610856565b604051610422919061186c565b60405180910390f35b61044560048036038101906104409190611768565b61087b565b60405161045291906117c0565b60405180910390f35b61047560048036038101906104709190611918565b61089d565b604051610482919061161d565b60405180910390f35b6104a560048036038101906104a09190611956565b61091f565b005b6104c160048036038101906104bc9190611885565b610bbb565b005b60075481565b6060600380546104d890611a0c565b80601f016020809104026020016040519081016040528092919081815260200182805461050490611a0c565b801561054f5780601f106105265761010080835404028352916020019161054f565b820191905f5260205f20905b81548152906001019060200180831161053257829003601f168201915b5050505050905090565b5f80610563610c3f565b9050610570818585610c46565b600191505092915050565b5f600254905090565b5f8061058e610c3f565b905061059b858285610c58565b6105a6858585610ceb565b60019150509392505050565b5f6012905090565b60065481565b6105c8610ddb565b6105d28282610e62565b5050565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600d5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60095481565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6106a0610ddb565b6106a95f610ee1565b565b6106b3610ddb565b80600c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60085481565b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606004805461075890611a0c565b80601f016020809104026020016040519081016040528092919081815260200182805461078490611a0c565b80156107cf5780601f106107a6576101008083540402835291602001916107cf565b820191905f5260205f20905b8154815290600101906020018083116107b257829003601f168201915b5050505050905090565b6107e1610ddb565b80600d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b600d602052805f5260405f205f915054906101000a900460ff1681565b600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f80610885610c3f565b9050610892818585610ceb565b600191505092915050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b610927610ddb565b6103e886111561096c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096390611a86565b60405180910390fd5b6103e88511156109b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a890611b14565b60405180910390fd5b6103e88411156109f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ed90611ba2565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610a64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5b90611c30565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610ad2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac990611cbe565b60405180910390fd5b6103e8831115610b17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0e90611d4c565b60405180910390fd5b8560068190555084600781905550836008819055508260098190555081600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050505050565b610bc3610ddb565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610c33575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610c2a919061186c565b60405180910390fd5b610c3c81610ee1565b50565b5f33905090565b610c538383836001610fa4565b505050565b5f610c63848461089d565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811015610ce55781811015610cd6578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401610ccd93929190611d6a565b60405180910390fd5b610ce484848484035f610fa4565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610d5b575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610d52919061186c565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610dcb575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610dc2919061186c565b60405180910390fd5b610dd6838383611173565b505050565b610de3610c3f565b73ffffffffffffffffffffffffffffffffffffffff16610e016106f6565b73ffffffffffffffffffffffffffffffffffffffff1614610e6057610e24610c3f565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610e57919061186c565b60405180910390fd5b565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610ed2575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610ec9919061186c565b60405180910390fd5b610edd5f8383611173565b5050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611014575f6040517fe602df0500000000000000000000000000000000000000000000000000000000815260040161100b919061186c565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611084575f6040517f94280d6200000000000000000000000000000000000000000000000000000000815260040161107b919061186c565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550801561116d578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051611164919061161d565b60405180910390a35b50505050565b61117c836105fb565b8061118c575061118b826105fb565b5b156111a15761119c8383836113ec565b6113e7565b5f600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480156111ff57505f600754115b15611260576103e8600754836112159190611dcc565b61121f9190611e3a565b905061124d84600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836113ec565b80826112599190611e6a565b91506113d1565b600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480156112bd57505f600854115b1561136d576103e8600854836112d39190611dcc565b6112dd9190611e3a565b90505f806009541115611314576103e8600954836112fb9190611dcc565b6113059190611e3a565b9050611313856001836113ec565b5b5f81836113219190611e6a565b90505f8111156113585761135786600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836113ec565b5b82846113649190611e6a565b935050506113d0565b5f60065411156113cf576103e8600654836113889190611dcc565b6113929190611e3a565b90506113c084600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836113ec565b80826113cc9190611e6a565b91505b5b5b5f8211156113e5576113e48484846113ec565b5b505b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361143c578060025f8282546114309190611e9d565b9250508190555061150a565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156114c5578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016114bc93929190611d6a565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611551578060025f828254039250508190555061159b565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516115f8919061161d565b60405180910390a3505050565b5f819050919050565b61161781611605565b82525050565b5f6020820190506116305f83018461160e565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561166d578082015181840152602081019050611652565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61169282611636565b61169c8185611640565b93506116ac818560208601611650565b6116b581611678565b840191505092915050565b5f6020820190508181035f8301526116d88184611688565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61170d826116e4565b9050919050565b61171d81611703565b8114611727575f80fd5b50565b5f8135905061173881611714565b92915050565b61174781611605565b8114611751575f80fd5b50565b5f813590506117628161173e565b92915050565b5f806040838503121561177e5761177d6116e0565b5b5f61178b8582860161172a565b925050602061179c85828601611754565b9150509250929050565b5f8115159050919050565b6117ba816117a6565b82525050565b5f6020820190506117d35f8301846117b1565b92915050565b5f805f606084860312156117f0576117ef6116e0565b5b5f6117fd8682870161172a565b935050602061180e8682870161172a565b925050604061181f86828701611754565b9150509250925092565b5f60ff82169050919050565b61183e81611829565b82525050565b5f6020820190506118575f830184611835565b92915050565b61186681611703565b82525050565b5f60208201905061187f5f83018461185d565b92915050565b5f6020828403121561189a576118996116e0565b5b5f6118a78482850161172a565b91505092915050565b6118b9816117a6565b81146118c3575f80fd5b50565b5f813590506118d4816118b0565b92915050565b5f80604083850312156118f0576118ef6116e0565b5b5f6118fd8582860161172a565b925050602061190e858286016118c6565b9150509250929050565b5f806040838503121561192e5761192d6116e0565b5b5f61193b8582860161172a565b925050602061194c8582860161172a565b9150509250929050565b5f805f805f8060c087890312156119705761196f6116e0565b5b5f61197d89828a01611754565b965050602061198e89828a01611754565b955050604061199f89828a01611754565b94505060606119b089828a01611754565b93505060806119c189828a0161172a565b92505060a06119d289828a0161172a565b9150509295509295509295565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680611a2357607f821691505b602082108103611a3657611a356119df565b5b50919050565b7f5365744665653a205f7472616e736665724665655261746520302d31303030005f82015250565b5f611a70601f83611640565b9150611a7b82611a3c565b602082019050919050565b5f6020820190508181035f830152611a9d81611a64565b9050919050565b7f5365744665653a205f70616e63616b654275794665655261746520302d3130305f8201527f3000000000000000000000000000000000000000000000000000000000000000602082015250565b5f611afe602183611640565b9150611b0982611aa4565b604082019050919050565b5f6020820190508181035f830152611b2b81611af2565b9050919050565b7f5365744665653a205f70616e63616b6553656c6c4665655261746520302d31305f8201527f3030000000000000000000000000000000000000000000000000000000000000602082015250565b5f611b8c602283611640565b9150611b9782611b32565b604082019050919050565b5f6020820190508181035f830152611bb981611b80565b9050919050565b7f5365744665653a205f7472616e736665724665655265636569766572206e6f745f8201527f2062652030000000000000000000000000000000000000000000000000000000602082015250565b5f611c1a602583611640565b9150611c2582611bc0565b604082019050919050565b5f6020820190508181035f830152611c4781611c0e565b9050919050565b7f5365744665653a205f70616e63616b654665655265636569766572206e6f74205f8201527f6265203000000000000000000000000000000000000000000000000000000000602082015250565b5f611ca8602483611640565b9150611cb382611c4e565b604082019050919050565b5f6020820190508181035f830152611cd581611c9c565b9050919050565b7f5365744665653a205f70616e63616b6553656c6c4665654275726e52617465205f8201527f30202d3130303000000000000000000000000000000000000000000000000000602082015250565b5f611d36602783611640565b9150611d4182611cdc565b604082019050919050565b5f6020820190508181035f830152611d6381611d2a565b9050919050565b5f606082019050611d7d5f83018661185d565b611d8a602083018561160e565b611d97604083018461160e565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611dd682611605565b9150611de183611605565b9250828202611def81611605565b91508282048414831517611e0657611e05611d9f565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f611e4482611605565b9150611e4f83611605565b925082611e5f57611e5e611e0d565b5b828204905092915050565b5f611e7482611605565b9150611e7f83611605565b9250828203905081811115611e9757611e96611d9f565b5b92915050565b5f611ea782611605565b9150611eb283611605565b9250828201905080821115611eca57611ec9611d9f565b5b9291505056fea264697066735822122027695d8a09846beebf267d54690d520e2e92ed755d3f486681a31fa0a820067c64736f6c63430008180033

Deployed Bytecode

0x608060405234801561000f575f80fd5b5060043610610171575f3560e01c8063715018a6116100dc578063961d3cd311610095578063a9059cbb1161006f578063a9059cbb1461042b578063dd62ed3e1461045b578063ddd32a881461048b578063f2fde38b146104a757610171565b8063961d3cd3146103c15780639ee7dd4f146103dd578063a8aa1b311461040d57610171565b8063715018a6146103235780638187f5161461032d5780638da5cb5b146103495780638df0cf30146103675780638e4a77141461038557806395d89b41146103a357610171565b8063351bf5181161012e578063351bf5181461024d57806340c10f191461026b57806355a59be3146102875780635f0938cc146102a55780635fe270e4146102d557806370a08231146102f357610171565b806303aec9d31461017557806306fdde0314610193578063095ea7b3146101b157806318160ddd146101e157806323b872dd146101ff578063313ce5671461022f575b5f80fd5b61017d6104c3565b60405161018a919061161d565b60405180910390f35b61019b6104c9565b6040516101a891906116c0565b60405180910390f35b6101cb60048036038101906101c69190611768565b610559565b6040516101d891906117c0565b60405180910390f35b6101e961057b565b6040516101f6919061161d565b60405180910390f35b610219600480360381019061021491906117d9565b610584565b60405161022691906117c0565b60405180910390f35b6102376105b2565b6040516102449190611844565b60405180910390f35b6102556105ba565b604051610262919061161d565b60405180910390f35b61028560048036038101906102809190611768565b6105c0565b005b61028f6105d6565b60405161029c919061186c565b60405180910390f35b6102bf60048036038101906102ba9190611885565b6105fb565b6040516102cc91906117c0565b60405180910390f35b6102dd61064d565b6040516102ea919061161d565b60405180910390f35b61030d60048036038101906103089190611885565b610653565b60405161031a919061161d565b60405180910390f35b61032b610698565b005b61034760048036038101906103429190611885565b6106ab565b005b6103516106f6565b60405161035e919061186c565b60405180910390f35b61036f61071e565b60405161037c919061161d565b60405180910390f35b61038d610724565b60405161039a919061186c565b60405180910390f35b6103ab610749565b6040516103b891906116c0565b60405180910390f35b6103db60048036038101906103d691906118da565b6107d9565b005b6103f760048036038101906103f29190611885565b610839565b60405161040491906117c0565b60405180910390f35b610415610856565b604051610422919061186c565b60405180910390f35b61044560048036038101906104409190611768565b61087b565b60405161045291906117c0565b60405180910390f35b61047560048036038101906104709190611918565b61089d565b604051610482919061161d565b60405180910390f35b6104a560048036038101906104a09190611956565b61091f565b005b6104c160048036038101906104bc9190611885565b610bbb565b005b60075481565b6060600380546104d890611a0c565b80601f016020809104026020016040519081016040528092919081815260200182805461050490611a0c565b801561054f5780601f106105265761010080835404028352916020019161054f565b820191905f5260205f20905b81548152906001019060200180831161053257829003601f168201915b5050505050905090565b5f80610563610c3f565b9050610570818585610c46565b600191505092915050565b5f600254905090565b5f8061058e610c3f565b905061059b858285610c58565b6105a6858585610ceb565b60019150509392505050565b5f6012905090565b60065481565b6105c8610ddb565b6105d28282610e62565b5050565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600d5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60095481565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6106a0610ddb565b6106a95f610ee1565b565b6106b3610ddb565b80600c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60085481565b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606004805461075890611a0c565b80601f016020809104026020016040519081016040528092919081815260200182805461078490611a0c565b80156107cf5780601f106107a6576101008083540402835291602001916107cf565b820191905f5260205f20905b8154815290600101906020018083116107b257829003601f168201915b5050505050905090565b6107e1610ddb565b80600d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b600d602052805f5260405f205f915054906101000a900460ff1681565b600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f80610885610c3f565b9050610892818585610ceb565b600191505092915050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b610927610ddb565b6103e886111561096c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096390611a86565b60405180910390fd5b6103e88511156109b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a890611b14565b60405180910390fd5b6103e88411156109f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ed90611ba2565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610a64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5b90611c30565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610ad2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac990611cbe565b60405180910390fd5b6103e8831115610b17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0e90611d4c565b60405180910390fd5b8560068190555084600781905550836008819055508260098190555081600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050505050565b610bc3610ddb565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610c33575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610c2a919061186c565b60405180910390fd5b610c3c81610ee1565b50565b5f33905090565b610c538383836001610fa4565b505050565b5f610c63848461089d565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811015610ce55781811015610cd6578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401610ccd93929190611d6a565b60405180910390fd5b610ce484848484035f610fa4565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610d5b575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610d52919061186c565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610dcb575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610dc2919061186c565b60405180910390fd5b610dd6838383611173565b505050565b610de3610c3f565b73ffffffffffffffffffffffffffffffffffffffff16610e016106f6565b73ffffffffffffffffffffffffffffffffffffffff1614610e6057610e24610c3f565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610e57919061186c565b60405180910390fd5b565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610ed2575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610ec9919061186c565b60405180910390fd5b610edd5f8383611173565b5050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611014575f6040517fe602df0500000000000000000000000000000000000000000000000000000000815260040161100b919061186c565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611084575f6040517f94280d6200000000000000000000000000000000000000000000000000000000815260040161107b919061186c565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550801561116d578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051611164919061161d565b60405180910390a35b50505050565b61117c836105fb565b8061118c575061118b826105fb565b5b156111a15761119c8383836113ec565b6113e7565b5f600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480156111ff57505f600754115b15611260576103e8600754836112159190611dcc565b61121f9190611e3a565b905061124d84600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836113ec565b80826112599190611e6a565b91506113d1565b600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480156112bd57505f600854115b1561136d576103e8600854836112d39190611dcc565b6112dd9190611e3a565b90505f806009541115611314576103e8600954836112fb9190611dcc565b6113059190611e3a565b9050611313856001836113ec565b5b5f81836113219190611e6a565b90505f8111156113585761135786600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836113ec565b5b82846113649190611e6a565b935050506113d0565b5f60065411156113cf576103e8600654836113889190611dcc565b6113929190611e3a565b90506113c084600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836113ec565b80826113cc9190611e6a565b91505b5b5b5f8211156113e5576113e48484846113ec565b5b505b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361143c578060025f8282546114309190611e9d565b9250508190555061150a565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156114c5578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016114bc93929190611d6a565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611551578060025f828254039250508190555061159b565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516115f8919061161d565b60405180910390a3505050565b5f819050919050565b61161781611605565b82525050565b5f6020820190506116305f83018461160e565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561166d578082015181840152602081019050611652565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61169282611636565b61169c8185611640565b93506116ac818560208601611650565b6116b581611678565b840191505092915050565b5f6020820190508181035f8301526116d88184611688565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61170d826116e4565b9050919050565b61171d81611703565b8114611727575f80fd5b50565b5f8135905061173881611714565b92915050565b61174781611605565b8114611751575f80fd5b50565b5f813590506117628161173e565b92915050565b5f806040838503121561177e5761177d6116e0565b5b5f61178b8582860161172a565b925050602061179c85828601611754565b9150509250929050565b5f8115159050919050565b6117ba816117a6565b82525050565b5f6020820190506117d35f8301846117b1565b92915050565b5f805f606084860312156117f0576117ef6116e0565b5b5f6117fd8682870161172a565b935050602061180e8682870161172a565b925050604061181f86828701611754565b9150509250925092565b5f60ff82169050919050565b61183e81611829565b82525050565b5f6020820190506118575f830184611835565b92915050565b61186681611703565b82525050565b5f60208201905061187f5f83018461185d565b92915050565b5f6020828403121561189a576118996116e0565b5b5f6118a78482850161172a565b91505092915050565b6118b9816117a6565b81146118c3575f80fd5b50565b5f813590506118d4816118b0565b92915050565b5f80604083850312156118f0576118ef6116e0565b5b5f6118fd8582860161172a565b925050602061190e858286016118c6565b9150509250929050565b5f806040838503121561192e5761192d6116e0565b5b5f61193b8582860161172a565b925050602061194c8582860161172a565b9150509250929050565b5f805f805f8060c087890312156119705761196f6116e0565b5b5f61197d89828a01611754565b965050602061198e89828a01611754565b955050604061199f89828a01611754565b94505060606119b089828a01611754565b93505060806119c189828a0161172a565b92505060a06119d289828a0161172a565b9150509295509295509295565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680611a2357607f821691505b602082108103611a3657611a356119df565b5b50919050565b7f5365744665653a205f7472616e736665724665655261746520302d31303030005f82015250565b5f611a70601f83611640565b9150611a7b82611a3c565b602082019050919050565b5f6020820190508181035f830152611a9d81611a64565b9050919050565b7f5365744665653a205f70616e63616b654275794665655261746520302d3130305f8201527f3000000000000000000000000000000000000000000000000000000000000000602082015250565b5f611afe602183611640565b9150611b0982611aa4565b604082019050919050565b5f6020820190508181035f830152611b2b81611af2565b9050919050565b7f5365744665653a205f70616e63616b6553656c6c4665655261746520302d31305f8201527f3030000000000000000000000000000000000000000000000000000000000000602082015250565b5f611b8c602283611640565b9150611b9782611b32565b604082019050919050565b5f6020820190508181035f830152611bb981611b80565b9050919050565b7f5365744665653a205f7472616e736665724665655265636569766572206e6f745f8201527f2062652030000000000000000000000000000000000000000000000000000000602082015250565b5f611c1a602583611640565b9150611c2582611bc0565b604082019050919050565b5f6020820190508181035f830152611c4781611c0e565b9050919050565b7f5365744665653a205f70616e63616b654665655265636569766572206e6f74205f8201527f6265203000000000000000000000000000000000000000000000000000000000602082015250565b5f611ca8602483611640565b9150611cb382611c4e565b604082019050919050565b5f6020820190508181035f830152611cd581611c9c565b9050919050565b7f5365744665653a205f70616e63616b6553656c6c4665654275726e52617465205f8201527f30202d3130303000000000000000000000000000000000000000000000000000602082015250565b5f611d36602783611640565b9150611d4182611cdc565b604082019050919050565b5f6020820190508181035f830152611d6381611d2a565b9050919050565b5f606082019050611d7d5f83018661185d565b611d8a602083018561160e565b611d97604083018461160e565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611dd682611605565b9150611de183611605565b9250828202611def81611605565b91508282048414831517611e0657611e05611d9f565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f611e4482611605565b9150611e4f83611605565b925082611e5f57611e5e611e0d565b5b828204905092915050565b5f611e7482611605565b9150611e7f83611605565b9250828203905081811115611e9757611e96611d9f565b5b92915050565b5f611ea782611605565b9150611eb283611605565b9250828201905080821115611eca57611ec9611d9f565b5b9291505056fea264697066735822122027695d8a09846beebf267d54690d520e2e92ed755d3f486681a31fa0a820067c64736f6c63430008180033

Deployed Bytecode Sourcemap

25619:3552:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25706:32;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16186:91;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18479:190;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17288:99;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19279:249;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17139:84;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25669:30;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26073:97;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25870:33;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27537:108;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25785:37;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17450:118;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3361:103;;;:::i;:::-;;27777:80;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2686:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25745:33;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25829:34;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16396:95;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27653:116;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25938:48;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25910:19;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17773:182;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18018:142;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27865:1303;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3619:220;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25706:32;;;;:::o;16186:91::-;16231:13;16264:5;16257:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16186:91;:::o;18479:190::-;18552:4;18569:13;18585:12;:10;:12::i;:::-;18569:28;;18608:31;18617:5;18624:7;18633:5;18608:8;:31::i;:::-;18657:4;18650:11;;;18479:190;;;;:::o;17288:99::-;17340:7;17367:12;;17360:19;;17288:99;:::o;19279:249::-;19366:4;19383:15;19401:12;:10;:12::i;:::-;19383:30;;19424:37;19440:4;19446:7;19455:5;19424:15;:37::i;:::-;19472:26;19482:4;19488:2;19492:5;19472:9;:26::i;:::-;19516:4;19509:11;;;19279:249;;;;;:::o;17139:84::-;17188:5;17213:2;17206:9;;17139:84;:::o;25669:30::-;;;;:::o;26073:97::-;2572:13;:11;:13::i;:::-;26145:17:::1;26151:2;26155:6;26145:5;:17::i;:::-;26073:97:::0;;:::o;25870:33::-;;;;;;;;;;;;;:::o;27537:108::-;27591:4;27615:16;:22;27632:4;27615:22;;;;;;;;;;;;;;;;;;;;;;;;;27608:29;;27537:108;;;:::o;25785:37::-;;;;:::o;17450:118::-;17515:7;17542:9;:18;17552:7;17542:18;;;;;;;;;;;;;;;;17535:25;;17450:118;;;:::o;3361:103::-;2572:13;:11;:13::i;:::-;3426:30:::1;3453:1;3426:18;:30::i;:::-;3361:103::o:0;27777:80::-;2572:13;:11;:13::i;:::-;27844:5:::1;27837:4;;:12;;;;;;;;;;;;;;;;;;27777:80:::0;:::o;2686:87::-;2732:7;2759:6;;;;;;;;;;;2752:13;;2686:87;:::o;25745:33::-;;;;:::o;25829:34::-;;;;;;;;;;;;;:::o;16396:95::-;16443:13;16476:7;16469:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16396:95;:::o;27653:116::-;2572:13;:11;:13::i;:::-;27756:5:::1;27729:16;:24;27746:6;27729:24;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;27653:116:::0;;:::o;25938:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;25910:19::-;;;;;;;;;;;;;:::o;17773:182::-;17842:4;17859:13;17875:12;:10;:12::i;:::-;17859:28;;17898:27;17908:5;17915:2;17919:5;17898:9;:27::i;:::-;17943:4;17936:11;;;17773:182;;;;:::o;18018:142::-;18098:7;18125:11;:18;18137:5;18125:18;;;;;;;;;;;;;;;:27;18144:7;18125:27;;;;;;;;;;;;;;;;18118:34;;18018:142;;;;:::o;27865:1303::-;2572:13;:11;:13::i;:::-;28173:4:::1;28153:16;:24;;28145:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28268:4;28246:18;:26;;28224:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;28389:4;28366:19;:27;;28344:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;28520:1;28488:34;;:20;:34;;::::0;28466:121:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;28651:1;28620:33;;:19;:33;;::::0;28598:119:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;28777:4;28750:23;:31;;28728:120;;;;;;;;;;;;:::i;:::-;;;;;;;;;28879:16;28861:15;:34;;;;28926:18;28906:17;:38;;;;28976:19;28955:18;:40;;;;29031:23;29006:22;:48;;;;29089:20;29067:19;;:42;;;;;;;;;;;;;;;;;;29141:19;29120:18;;:40;;;;;;;;;;;;;;;;;;27865:1303:::0;;;;;;:::o;3619:220::-;2572:13;:11;:13::i;:::-;3724:1:::1;3704:22;;:8;:22;;::::0;3700:93:::1;;3778:1;3750:31;;;;;;;;;;;:::i;:::-;;;;;;;;3700:93;3803:28;3822:8;3803:18;:28::i;:::-;3619:220:::0;:::o;695:98::-;748:7;775:10;768:17;;695:98;:::o;23338:130::-;23423:37;23432:5;23439:7;23448:5;23455:4;23423:8;:37::i;:::-;23338:130;;;:::o;25070:486::-;25170:24;25197:25;25207:5;25214:7;25197:9;:25::i;:::-;25170:52;;25256:17;25237:16;:36;25233:316;;;25313:5;25294:16;:24;25290:132;;;25373:7;25382:16;25400:5;25346:60;;;;;;;;;;;;;:::i;:::-;;;;;;;;25290:132;25465:57;25474:5;25481:7;25509:5;25490:16;:24;25516:5;25465:8;:57::i;:::-;25233:316;25159:397;25070:486;;;:::o;19913:308::-;20013:1;19997:18;;:4;:18;;;19993:88;;20066:1;20039:30;;;;;;;;;;;:::i;:::-;;;;;;;;19993:88;20109:1;20095:16;;:2;:16;;;20091:88;;20164:1;20135:32;;;;;;;;;;;:::i;:::-;;;;;;;;20091:88;20189:24;20197:4;20203:2;20207:5;20189:7;:24::i;:::-;19913:308;;;:::o;2851:166::-;2922:12;:10;:12::i;:::-;2911:23;;:7;:5;:7::i;:::-;:23;;;2907:103;;2985:12;:10;:12::i;:::-;2958:40;;;;;;;;;;;:::i;:::-;;;;;;;;2907:103;2851:166::o;22033:213::-;22123:1;22104:21;;:7;:21;;;22100:93;;22178:1;22149:32;;;;;;;;;;;:::i;:::-;;;;;;;;22100:93;22203:35;22219:1;22223:7;22232:5;22203:7;:35::i;:::-;22033:213;;:::o;3999:191::-;4073:16;4092:6;;;;;;;;;;;4073:25;;4118:8;4109:6;;:17;;;;;;;;;;;;;;;;;;4173:8;4142:40;;4163:8;4142:40;;;;;;;;;;;;4062:128;3999:191;:::o;24335:443::-;24465:1;24448:19;;:5;:19;;;24444:91;;24520:1;24491:32;;;;;;;;;;;:::i;:::-;;;;;;;;24444:91;24568:1;24549:21;;:7;:21;;;24545:92;;24622:1;24594:31;;;;;;;;;;;:::i;:::-;;;;;;;;24545:92;24677:5;24647:11;:18;24659:5;24647:18;;;;;;;;;;;;;;;:27;24666:7;24647:27;;;;;;;;;;;;;;;:35;;;;24697:9;24693:78;;;24744:7;24728:31;;24737:5;24728:31;;;24753:5;24728:31;;;;;;:::i;:::-;;;;;;;;24693:78;24335:443;;;;:::o;26178:1351::-;26304:15;26314:4;26304:9;:15::i;:::-;:32;;;;26323:13;26333:2;26323:9;:13::i;:::-;26304:32;26300:1222;;;26353:31;26367:4;26373:2;26377:6;26353:13;:31::i;:::-;26300:1222;;;26417:11;26455:4;;;;;;;;;;;26447:12;;:4;:12;;;:37;;;;;26483:1;26463:17;;:21;26447:37;26443:970;;;26542:4;26521:17;;26512:6;:26;;;;:::i;:::-;26511:35;;;;:::i;:::-;26505:41;;26565:44;26579:4;26585:18;;;;;;;;;;;26605:3;26565:13;:44::i;:::-;26638:3;26628:13;;;;;:::i;:::-;;;26443:970;;;26673:4;;;;;;;;;;;26667:10;;:2;:10;;;:36;;;;;26702:1;26681:18;;:22;26667:36;26663:750;;;26762:4;26740:18;;26731:6;:27;;;;:::i;:::-;26730:36;;;;:::i;:::-;26724:42;;26785:12;26845:1;26820:22;;:26;26816:179;;;26911:4;26885:22;;26879:3;:28;;;;:::i;:::-;26878:37;;;;:::i;:::-;26871:44;;26938:37;26952:4;26966:1;26970:4;26938:13;:37::i;:::-;26816:179;27013:14;27036:4;27030:3;:10;;;;:::i;:::-;27013:27;;27072:1;27063:6;:10;27059:106;;;27098:47;27112:4;27118:18;;;;;;;;;;;27138:6;27098:13;:47::i;:::-;27059:106;27193:3;27183:13;;;;;:::i;:::-;;;26705:507;;26663:750;;;27240:1;27222:15;;:19;27218:195;;;27297:4;27278:15;;27269:6;:24;;;;:::i;:::-;27268:33;;;;:::i;:::-;27262:39;;27320:45;27334:4;27340:19;;;;;;;;;;;27361:3;27320:13;:45::i;:::-;27394:3;27384:13;;;;;:::i;:::-;;;27218:195;26663:750;26443:970;27442:1;27433:6;:10;27429:82;;;27464:31;27478:4;27484:2;27488:6;27464:13;:31::i;:::-;27429:82;26402:1120;26300:1222;26178:1351;;;:::o;20545:1135::-;20651:1;20635:18;;:4;:18;;;20631:552;;20789:5;20773:12;;:21;;;;;;;:::i;:::-;;;;;;;;20631:552;;;20827:19;20849:9;:15;20859:4;20849:15;;;;;;;;;;;;;;;;20827:37;;20897:5;20883:11;:19;20879:117;;;20955:4;20961:11;20974:5;20930:50;;;;;;;;;;;;;:::i;:::-;;;;;;;;20879:117;21151:5;21137:11;:19;21119:9;:15;21129:4;21119:15;;;;;;;;;;;;;;;:37;;;;20812:371;20631:552;21213:1;21199:16;;:2;:16;;;21195:435;;21381:5;21365:12;;:21;;;;;;;;;;;21195:435;;;21598:5;21581:9;:13;21591:2;21581:13;;;;;;;;;;;;;;;;:22;;;;;;;;;;;21195:435;21662:2;21647:25;;21656:4;21647:25;;;21666:5;21647:25;;;;;;:::i;:::-;;;;;;;;20545:1135;;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;442:99::-;494:6;528:5;522:12;512:22;;442:99;;;:::o;547:169::-;631:11;665:6;660:3;653:19;705:4;700:3;696:14;681:29;;547:169;;;;:::o;722:246::-;803:1;813:113;827:6;824:1;821:13;813:113;;;912:1;907:3;903:11;897:18;893:1;888:3;884:11;877:39;849:2;846:1;842:10;837:15;;813:113;;;960:1;951:6;946:3;942:16;935:27;784:184;722:246;;;:::o;974:102::-;1015:6;1066:2;1062:7;1057:2;1050:5;1046:14;1042:28;1032:38;;974:102;;;:::o;1082:377::-;1170:3;1198:39;1231:5;1198:39;:::i;:::-;1253:71;1317:6;1312:3;1253:71;:::i;:::-;1246:78;;1333:65;1391:6;1386:3;1379:4;1372:5;1368:16;1333:65;:::i;:::-;1423:29;1445:6;1423:29;:::i;:::-;1418:3;1414:39;1407:46;;1174:285;1082:377;;;;:::o;1465:313::-;1578:4;1616:2;1605:9;1601:18;1593:26;;1665:9;1659:4;1655:20;1651:1;1640:9;1636:17;1629:47;1693:78;1766:4;1757:6;1693:78;:::i;:::-;1685:86;;1465:313;;;;:::o;1865:117::-;1974:1;1971;1964:12;2111:126;2148:7;2188:42;2181:5;2177:54;2166:65;;2111:126;;;:::o;2243:96::-;2280:7;2309:24;2327:5;2309:24;:::i;:::-;2298:35;;2243:96;;;:::o;2345:122::-;2418:24;2436:5;2418:24;:::i;:::-;2411:5;2408:35;2398:63;;2457:1;2454;2447:12;2398:63;2345:122;:::o;2473:139::-;2519:5;2557:6;2544:20;2535:29;;2573:33;2600:5;2573:33;:::i;:::-;2473:139;;;;:::o;2618:122::-;2691:24;2709:5;2691:24;:::i;:::-;2684:5;2681:35;2671:63;;2730:1;2727;2720:12;2671:63;2618:122;:::o;2746:139::-;2792:5;2830:6;2817:20;2808:29;;2846:33;2873:5;2846:33;:::i;:::-;2746:139;;;;:::o;2891:474::-;2959:6;2967;3016:2;3004:9;2995:7;2991:23;2987:32;2984:119;;;3022:79;;:::i;:::-;2984:119;3142:1;3167:53;3212:7;3203:6;3192:9;3188:22;3167:53;:::i;:::-;3157:63;;3113:117;3269:2;3295:53;3340:7;3331:6;3320:9;3316:22;3295:53;:::i;:::-;3285:63;;3240:118;2891:474;;;;;:::o;3371:90::-;3405:7;3448:5;3441:13;3434:21;3423:32;;3371:90;;;:::o;3467:109::-;3548:21;3563:5;3548:21;:::i;:::-;3543:3;3536:34;3467:109;;:::o;3582:210::-;3669:4;3707:2;3696:9;3692:18;3684:26;;3720:65;3782:1;3771:9;3767:17;3758:6;3720:65;:::i;:::-;3582:210;;;;:::o;3798:619::-;3875:6;3883;3891;3940:2;3928:9;3919:7;3915:23;3911:32;3908:119;;;3946:79;;:::i;:::-;3908:119;4066:1;4091:53;4136:7;4127:6;4116:9;4112:22;4091:53;:::i;:::-;4081:63;;4037:117;4193:2;4219:53;4264:7;4255:6;4244:9;4240:22;4219:53;:::i;:::-;4209:63;;4164:118;4321:2;4347:53;4392:7;4383:6;4372:9;4368:22;4347:53;:::i;:::-;4337:63;;4292:118;3798:619;;;;;:::o;4423:86::-;4458:7;4498:4;4491:5;4487:16;4476:27;;4423:86;;;:::o;4515:112::-;4598:22;4614:5;4598:22;:::i;:::-;4593:3;4586:35;4515:112;;:::o;4633:214::-;4722:4;4760:2;4749:9;4745:18;4737:26;;4773:67;4837:1;4826:9;4822:17;4813:6;4773:67;:::i;:::-;4633:214;;;;:::o;4853:118::-;4940:24;4958:5;4940:24;:::i;:::-;4935:3;4928:37;4853:118;;:::o;4977:222::-;5070:4;5108:2;5097:9;5093:18;5085:26;;5121:71;5189:1;5178:9;5174:17;5165:6;5121:71;:::i;:::-;4977:222;;;;:::o;5205:329::-;5264:6;5313:2;5301:9;5292:7;5288:23;5284:32;5281:119;;;5319:79;;:::i;:::-;5281:119;5439:1;5464:53;5509:7;5500:6;5489:9;5485:22;5464:53;:::i;:::-;5454:63;;5410:117;5205:329;;;;:::o;5540:116::-;5610:21;5625:5;5610:21;:::i;:::-;5603:5;5600:32;5590:60;;5646:1;5643;5636:12;5590:60;5540:116;:::o;5662:133::-;5705:5;5743:6;5730:20;5721:29;;5759:30;5783:5;5759:30;:::i;:::-;5662:133;;;;:::o;5801:468::-;5866:6;5874;5923:2;5911:9;5902:7;5898:23;5894:32;5891:119;;;5929:79;;:::i;:::-;5891:119;6049:1;6074:53;6119:7;6110:6;6099:9;6095:22;6074:53;:::i;:::-;6064:63;;6020:117;6176:2;6202:50;6244:7;6235:6;6224:9;6220:22;6202:50;:::i;:::-;6192:60;;6147:115;5801:468;;;;;:::o;6275:474::-;6343:6;6351;6400:2;6388:9;6379:7;6375:23;6371:32;6368:119;;;6406:79;;:::i;:::-;6368:119;6526:1;6551:53;6596:7;6587:6;6576:9;6572:22;6551:53;:::i;:::-;6541:63;;6497:117;6653:2;6679:53;6724:7;6715:6;6704:9;6700:22;6679:53;:::i;:::-;6669:63;;6624:118;6275:474;;;;;:::o;6755:1057::-;6859:6;6867;6875;6883;6891;6899;6948:3;6936:9;6927:7;6923:23;6919:33;6916:120;;;6955:79;;:::i;:::-;6916:120;7075:1;7100:53;7145:7;7136:6;7125:9;7121:22;7100:53;:::i;:::-;7090:63;;7046:117;7202:2;7228:53;7273:7;7264:6;7253:9;7249:22;7228:53;:::i;:::-;7218:63;;7173:118;7330:2;7356:53;7401:7;7392:6;7381:9;7377:22;7356:53;:::i;:::-;7346:63;;7301:118;7458:2;7484:53;7529:7;7520:6;7509:9;7505:22;7484:53;:::i;:::-;7474:63;;7429:118;7586:3;7613:53;7658:7;7649:6;7638:9;7634:22;7613:53;:::i;:::-;7603:63;;7557:119;7715:3;7742:53;7787:7;7778:6;7767:9;7763:22;7742:53;:::i;:::-;7732:63;;7686:119;6755:1057;;;;;;;;:::o;7818:180::-;7866:77;7863:1;7856:88;7963:4;7960:1;7953:15;7987:4;7984:1;7977:15;8004:320;8048:6;8085:1;8079:4;8075:12;8065:22;;8132:1;8126:4;8122:12;8153:18;8143:81;;8209:4;8201:6;8197:17;8187:27;;8143:81;8271:2;8263:6;8260:14;8240:18;8237:38;8234:84;;8290:18;;:::i;:::-;8234:84;8055:269;8004:320;;;:::o;8330:181::-;8470:33;8466:1;8458:6;8454:14;8447:57;8330:181;:::o;8517:366::-;8659:3;8680:67;8744:2;8739:3;8680:67;:::i;:::-;8673:74;;8756:93;8845:3;8756:93;:::i;:::-;8874:2;8869:3;8865:12;8858:19;;8517:366;;;:::o;8889:419::-;9055:4;9093:2;9082:9;9078:18;9070:26;;9142:9;9136:4;9132:20;9128:1;9117:9;9113:17;9106:47;9170:131;9296:4;9170:131;:::i;:::-;9162:139;;8889:419;;;:::o;9314:220::-;9454:34;9450:1;9442:6;9438:14;9431:58;9523:3;9518:2;9510:6;9506:15;9499:28;9314:220;:::o;9540:366::-;9682:3;9703:67;9767:2;9762:3;9703:67;:::i;:::-;9696:74;;9779:93;9868:3;9779:93;:::i;:::-;9897:2;9892:3;9888:12;9881:19;;9540:366;;;:::o;9912:419::-;10078:4;10116:2;10105:9;10101:18;10093:26;;10165:9;10159:4;10155:20;10151:1;10140:9;10136:17;10129:47;10193:131;10319:4;10193:131;:::i;:::-;10185:139;;9912:419;;;:::o;10337:221::-;10477:34;10473:1;10465:6;10461:14;10454:58;10546:4;10541:2;10533:6;10529:15;10522:29;10337:221;:::o;10564:366::-;10706:3;10727:67;10791:2;10786:3;10727:67;:::i;:::-;10720:74;;10803:93;10892:3;10803:93;:::i;:::-;10921:2;10916:3;10912:12;10905:19;;10564:366;;;:::o;10936:419::-;11102:4;11140:2;11129:9;11125:18;11117:26;;11189:9;11183:4;11179:20;11175:1;11164:9;11160:17;11153:47;11217:131;11343:4;11217:131;:::i;:::-;11209:139;;10936:419;;;:::o;11361:224::-;11501:34;11497:1;11489:6;11485:14;11478:58;11570:7;11565:2;11557:6;11553:15;11546:32;11361:224;:::o;11591:366::-;11733:3;11754:67;11818:2;11813:3;11754:67;:::i;:::-;11747:74;;11830:93;11919:3;11830:93;:::i;:::-;11948:2;11943:3;11939:12;11932:19;;11591:366;;;:::o;11963:419::-;12129:4;12167:2;12156:9;12152:18;12144:26;;12216:9;12210:4;12206:20;12202:1;12191:9;12187:17;12180:47;12244:131;12370:4;12244:131;:::i;:::-;12236:139;;11963:419;;;:::o;12388:223::-;12528:34;12524:1;12516:6;12512:14;12505:58;12597:6;12592:2;12584:6;12580:15;12573:31;12388:223;:::o;12617:366::-;12759:3;12780:67;12844:2;12839:3;12780:67;:::i;:::-;12773:74;;12856:93;12945:3;12856:93;:::i;:::-;12974:2;12969:3;12965:12;12958:19;;12617:366;;;:::o;12989:419::-;13155:4;13193:2;13182:9;13178:18;13170:26;;13242:9;13236:4;13232:20;13228:1;13217:9;13213:17;13206:47;13270:131;13396:4;13270:131;:::i;:::-;13262:139;;12989:419;;;:::o;13414:226::-;13554:34;13550:1;13542:6;13538:14;13531:58;13623:9;13618:2;13610:6;13606:15;13599:34;13414:226;:::o;13646:366::-;13788:3;13809:67;13873:2;13868:3;13809:67;:::i;:::-;13802:74;;13885:93;13974:3;13885:93;:::i;:::-;14003:2;13998:3;13994:12;13987:19;;13646:366;;;:::o;14018:419::-;14184:4;14222:2;14211:9;14207:18;14199:26;;14271:9;14265:4;14261:20;14257:1;14246:9;14242:17;14235:47;14299:131;14425:4;14299:131;:::i;:::-;14291:139;;14018:419;;;:::o;14443:442::-;14592:4;14630:2;14619:9;14615:18;14607:26;;14643:71;14711:1;14700:9;14696:17;14687:6;14643:71;:::i;:::-;14724:72;14792:2;14781:9;14777:18;14768:6;14724:72;:::i;:::-;14806;14874:2;14863:9;14859:18;14850:6;14806:72;:::i;:::-;14443:442;;;;;;:::o;14891:180::-;14939:77;14936:1;14929:88;15036:4;15033:1;15026:15;15060:4;15057:1;15050:15;15077:410;15117:7;15140:20;15158:1;15140:20;:::i;:::-;15135:25;;15174:20;15192:1;15174:20;:::i;:::-;15169:25;;15229:1;15226;15222:9;15251:30;15269:11;15251:30;:::i;:::-;15240:41;;15430:1;15421:7;15417:15;15414:1;15411:22;15391:1;15384:9;15364:83;15341:139;;15460:18;;:::i;:::-;15341:139;15125:362;15077:410;;;;:::o;15493:180::-;15541:77;15538:1;15531:88;15638:4;15635:1;15628:15;15662:4;15659:1;15652:15;15679:185;15719:1;15736:20;15754:1;15736:20;:::i;:::-;15731:25;;15770:20;15788:1;15770:20;:::i;:::-;15765:25;;15809:1;15799:35;;15814:18;;:::i;:::-;15799:35;15856:1;15853;15849:9;15844:14;;15679:185;;;;:::o;15870:194::-;15910:4;15930:20;15948:1;15930:20;:::i;:::-;15925:25;;15964:20;15982:1;15964:20;:::i;:::-;15959:25;;16008:1;16005;16001:9;15993:17;;16032:1;16026:4;16023:11;16020:37;;;16037:18;;:::i;:::-;16020:37;15870:194;;;;:::o;16070:191::-;16110:3;16129:20;16147:1;16129:20;:::i;:::-;16124:25;;16163:20;16181:1;16163:20;:::i;:::-;16158:25;;16206:1;16203;16199:9;16192:16;;16227:3;16224:1;16221:10;16218:36;;;16234:18;;:::i;:::-;16218:36;16070:191;;;;:::o

Swarm Source

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