ETH Price: $2,552.96 (+0.37%)

Token

KwoN PrEdAtOR (KOM)
 

Overview

Max Total Supply

1,000,000,000 KOM

Holders

52

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
2,522,643.531132318928079338 KOM

Value
$0.00
0x84588f24ea5fc98250966047b02b4386836178d7
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
KOM

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

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


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

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with 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;
    }
}

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


// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;


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

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _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);
    }
}

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


// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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


// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.0;


/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
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/token/ERC20/ERC20.sol


// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/ERC20.sol)

pragma solidity ^0.8.0;




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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * 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 override returns (string memory) {
        return _name;
    }

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

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5.05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * 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 override returns (uint8) {
        return 18;
    }

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

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

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

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

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `amount` 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 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * 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 `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

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

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

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.
     *
     * 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.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
        }
        _balances[to] += amount;

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

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

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

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

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

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

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

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

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

    /**
     * @dev Spend `amount` form the allowance of `owner` toward `spender`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

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

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



//SPDX-License-Identifier: Unlicense
pragma solidity ^0.8.0;



contract KOM is ERC20, Ownable {
    /* Token Tax */
    uint32 public _taxPercision = 100000;
    address[] public _taxRecipients;
    uint16 public _taxTotal;
    bool public _taxActive;

    mapping(address => uint16) public _taxRecipientAmounts;
    mapping(address => bool) private _isTaxRecipient;
    mapping(address => bool) public _whitelisted;

    /* Events */
    event UpdateTaxPercentage(address indexed wallet, uint16 _newTaxAmount);
    event AddTaxRecipient(address indexed wallet, uint16 _taxAmount);
    event RemoveFromWhitelist(address indexed wallet);
    event RemoveTaxRecipient(address indexed wallet);
    event AddToWhitelist(address indexed wallet);
    event ToggleTax(bool _active);

    uint256 private _totalSupply;

    /**
     * @dev Constructor.
     */
    constructor() ERC20('KwoN PrEdAtOR', 'KOM') payable {
      _totalSupply = 1000000000 * (10**18);

      _mint(msg.sender, _totalSupply);
    }

    /**
      * @notice overrides ERC20 transferFrom function to introduce tax functionality
      * @param from address amount is coming from
      * @param to address amount is going to
      * @param amount amount being sent
     */
    function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        require(balanceOf(from) >= amount, "ERC20: transfer amount exceeds balance");
        if(_taxActive && !_whitelisted[from] && !_whitelisted[to]) {
          uint256 tax = amount *_taxTotal / _taxPercision;
          amount = amount - tax;
          _transfer(from, address(this), tax);
        }
        _transfer(from, to, amount);
        return true;
    }


    /**
      * @notice : overrides ERC20 transfer function to introduce tax functionality
      * @param to address amount is going to
      * @param amount amount being sent
     */
    function transfer(address to, uint256 amount) public virtual override returns (bool) {
      address owner = _msgSender();
      require(balanceOf(owner) >= amount, "ERC20: transfer amount exceeds balance");
      if(_taxActive && !_whitelisted[owner] && !_whitelisted[to]) {
        uint256 tax = amount*_taxTotal/_taxPercision;
        amount = amount - tax;
        _transfer(owner, address(this), tax);
      }
      _transfer(owner, to, amount);
      return true;
    }


    /**
     * @dev Burns a specific amount of tokens.
     * @param value The amount of lowest token units to be burned.
     */
    function burn(uint256 value) public {
      _burn(msg.sender, value);
    }

    /* ADMIN Functions */
    /**
       * @notice : toggles the tax on or off
    */
    function toggleTax() external onlyOwner {
      _taxActive = !_taxActive;
      emit ToggleTax(_taxActive);
    }

    /**
      * @notice : adds address with tax amount to taxable addresses list
      * @param wallet address to add
      * @param _tax tax amount this address receives
    */
    function addTaxRecipient(address wallet, uint16 _tax) external onlyOwner {
      require(_taxRecipients.length < 100, "Reached maximum number of tax addresses");
      require(wallet != address(0), "Cannot add 0 address");
      require(!_isTaxRecipient[wallet], "Recipient already added");
      require(_tax > 0 && _tax + _taxTotal <= _taxPercision/10, "Total tax amount must be between 0 and 10%");

      _isTaxRecipient[wallet] = true;
      _taxRecipients.push(wallet);
      _taxRecipientAmounts[wallet] = _tax;
      _taxTotal = _taxTotal + _tax;
      emit AddTaxRecipient(wallet, _tax);
    }

    /**
      * @notice : updates address tax amount
      * @param wallet address to update
      * @param newTax new tax amount
     */
    function updateTaxPercentage(address wallet, uint16 newTax) external onlyOwner {
      require(wallet != address(0), "Cannot add 0 address");
      require(_isTaxRecipient[wallet], "Not a tax address");

      uint16 currentTax = _taxRecipientAmounts[wallet];
      require(currentTax != newTax, "Tax already this amount for this address");

      if(currentTax < newTax) {
        uint16 diff = newTax - currentTax;
        require(_taxTotal + diff <= 10000, "Tax amount too high for current tax rate");
        _taxTotal = _taxTotal + diff;
      } else {
        uint16 diff = currentTax - newTax;
        _taxTotal = _taxTotal - diff;
      }
      _taxRecipientAmounts[wallet] = newTax;
      emit UpdateTaxPercentage(wallet, newTax);
    }

    /**
      * @notice : remove address from taxed list
      * @param wallet address to remove
     */
    function removeTaxRecipient(address wallet) external onlyOwner {
      require(wallet != address(0), "Cannot add 0 address");
      require(_isTaxRecipient[wallet], "Recipient has not been added");
      uint16 _tax = _taxRecipientAmounts[wallet];

      for(uint8 i = 0; i < _taxRecipients.length; i++) {
        if(_taxRecipients[i] == wallet) {
          _taxTotal = _taxTotal - _tax;
          _taxRecipientAmounts[wallet] = 0;
          _taxRecipients[i] = _taxRecipients[_taxRecipients.length - 1];
          _isTaxRecipient[wallet] = false;
          _taxRecipients.pop();
          emit RemoveTaxRecipient(wallet);

          break;
        }
      }
    }

    /**
    * @notice : add address to tax whitelist
    * @param wallet address to add to whitelist
    */
    function addToWhitelist(address wallet) external onlyOwner {
      require(wallet != address(0), "Cant use 0 address");
      require(!_whitelisted[wallet], "Address already added");
      _whitelisted[wallet] = true;

      emit AddToWhitelist(wallet);
    }

    /**
    * @notice : add address to whitelist (non taxed)
    * @param wallet address to remove from whitelist
    */
    function removeFromWhitelist(address wallet) external onlyOwner {
      require(wallet != address(0), "Cant use 0 address");
      require(_whitelisted[wallet], "Address not added");
      _whitelisted[wallet] = false;

      emit RemoveFromWhitelist(wallet);
    }

    /**
    * @notice : resets tax settings to initial state
    */
    function taxReset() external onlyOwner {
      _taxActive = false;
      _taxTotal = 0;

      for(uint8 i = 0; i < _taxRecipients.length; i++) {
        _taxRecipientAmounts[_taxRecipients[i]] = 0;
        _isTaxRecipient[_taxRecipients[i]] = false;
      }

      delete _taxRecipients;
    }

    /**
      * @notice : withdraws taxable amount to tax recipients
     */
    function distributeTaxes() external onlyOwner {
      require(balanceOf(address(this)) > 0, "Nothing to withdraw");
      uint256 taxableAmount = balanceOf(address(this));
      for(uint8 i = 0; i < _taxRecipients.length; i++) {
        address taxAddress = _taxRecipients[i];
        if(i == _taxRecipients.length - 1) {
           _transfer(address(this), taxAddress, balanceOf(address(this)));
        } else {
          uint256 amount = taxableAmount * _taxRecipientAmounts[taxAddress]/_taxTotal;
          _transfer(address(this), taxAddress, amount);
        }
      }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"wallet","type":"address"},{"indexed":false,"internalType":"uint16","name":"_taxAmount","type":"uint16"}],"name":"AddTaxRecipient","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"wallet","type":"address"}],"name":"AddToWhitelist","type":"event"},{"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":"wallet","type":"address"}],"name":"RemoveFromWhitelist","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"wallet","type":"address"}],"name":"RemoveTaxRecipient","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"_active","type":"bool"}],"name":"ToggleTax","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"wallet","type":"address"},{"indexed":false,"internalType":"uint16","name":"_newTaxAmount","type":"uint16"}],"name":"UpdateTaxPercentage","type":"event"},{"inputs":[],"name":"_taxActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxPercision","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_taxRecipientAmounts","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_taxRecipients","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxTotal","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_whitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"uint16","name":"_tax","type":"uint16"}],"name":"addTaxRecipient","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"addToWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","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":"distributeTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"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":[{"internalType":"address","name":"wallet","type":"address"}],"name":"removeFromWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"removeTaxRecipient","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxReset","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleTax","outputs":[],"stateMutability":"nonpayable","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":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","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":"wallet","type":"address"},{"internalType":"uint16","name":"newTax","type":"uint16"}],"name":"updateTaxPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6005805463ffffffff60a01b1916610c3560a51b179055600d60808181526c25bbb7a710283922b220ba27a960991b60a0908152610100604052600360c0818152624b4f4d60e81b60e0529293620000589290620001ed565b5080516200006e906004906020840190620001ed565b5050506200008b62000085620000b060201b60201c565b620000b4565b6b033b2e3c9fd0803ce8000000600b819055620000aa90339062000106565b62000335565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216620001385760405162461bcd60e51b81526004016200012f9062000293565b60405180910390fd5b6200014660008383620001e8565b80600260008282546200015a9190620002d3565b90915550506001600160a01b0382166000908152602081905260408120805483929062000189908490620002d3565b90915550506040516001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90620001ce908590620002ca565b60405180910390a3620001e460008383620001e8565b5050565b505050565b828054620001fb90620002f8565b90600052602060002090601f0160209004810192826200021f57600085556200026a565b82601f106200023a57805160ff19168380011785556200026a565b828001600101855582156200026a579182015b828111156200026a5782518255916020019190600101906200024d565b50620002789291506200027c565b5090565b5b808211156200027857600081556001016200027d565b6020808252601f908201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604082015260600190565b90815260200190565b60008219821115620002f357634e487b7160e01b81526011600452602481fd5b500190565b6002810460018216806200030d57607f821691505b602082108114156200032f57634e487b7160e01b600052602260045260246000fd5b50919050565b6120e580620003456000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c8063619f28ed1161010457806395d89b41116100a2578063dd62ed3e11610071578063dd62ed3e1461039c578063e43252d7146103af578063f2fde38b146103c2578063fb369eb0146103d5576101cf565b806395d89b4114610366578063a457c2d71461036e578063a9059cbb14610381578063bb47cc0c14610394576101cf565b806371fc737c116100de57806371fc737c1461033b5780638ab1d681146103435780638da5cb5b14610356578063909656521461035e576101cf565b8063619f28ed1461030d57806370a0823114610320578063715018a614610333576101cf565b806323b872dd116101715780633a5fcb631161014b5780633a5fcb63146102b257806342966c68146102d25780634be31778146102e557806354f12265146102fa576101cf565b806323b872dd14610277578063313ce5671461028a578063395093511461029f576101cf565b806310bf6029116101ad57806310bf60291461022557806310f6da921461022f57806318160ddd146102425780632354ee0314610257576101cf565b806301c4b316146101d457806306fdde03146101fd578063095ea7b314610212575b600080fd5b6101e76101e236600461183d565b6103dd565b6040516101f4919061195c565b60405180910390f35b6102056103f2565b6040516101f49190611967565b6101e7610220366004611907565b610484565b61022d6104a6565b005b61022d61023d36600461183d565b61054e565b61024a6107e0565b6040516101f49190611f32565b61026a610265366004611930565b6107e6565b6040516101f49190611948565b6101e7610285366004611890565b610810565b61029261090b565b6040516101f49190611f4c565b6101e76102ad366004611907565b610910565b6102c56102c036600461183d565b61095c565b6040516101f49190611f23565b61022d6102e0366004611930565b610972565b6102ed61097f565b6040516101f49190611f3b565b61022d6103083660046118cb565b610992565b61022d61031b3660046118cb565b610b92565b61024a61032e36600461183d565b610dab565b61022d610dca565b61022d610e15565b61022d61035136600461183d565b610f69565b61026a61104f565b61022d61105e565b61020561119a565b6101e761037c366004611907565b6111a9565b6101e761038f366004611907565b61120a565b6102c56112ef565b61024a6103aa36600461185e565b6112f9565b61022d6103bd36600461183d565b611324565b61022d6103d036600461183d565b61140e565b6101e761147c565b600a6020526000908152604090205460ff1681565b60606003805461040190612028565b80601f016020809104026020016040519081016040528092919081815260200182805461042d90612028565b801561047a5780601f1061044f5761010080835404028352916020019161047a565b820191906000526020600020905b81548152906001019060200180831161045d57829003601f168201915b5050505050905090565b60008061048f61148b565b905061049c81858561148f565b5060019392505050565b6104ae61148b565b6001600160a01b03166104bf61104f565b6001600160a01b0316146104ee5760405162461bcd60e51b81526004016104e590611d6b565b60405180910390fd5b6007805460ff62010000808304821615810262ff00001990931692909217928390556040517fdda4866fd658821eea607c5d6addd0c4a0cc347eb4cea313399e516e66019864936105449390049091169061195c565b60405180910390a1565b61055661148b565b6001600160a01b031661056761104f565b6001600160a01b03161461058d5760405162461bcd60e51b81526004016104e590611d6b565b6001600160a01b0381166105b35760405162461bcd60e51b81526004016104e590611c37565b6001600160a01b03811660009081526009602052604090205460ff166105eb5760405162461bcd60e51b81526004016104e590611d09565b6001600160a01b03811660009081526008602052604081205461ffff16905b60065460ff821610156107db57826001600160a01b031660068260ff168154811061064557634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b031614156107c95760075461067290839061ffff16611fee565b6007805461ffff9290921661ffff199283161790556001600160a01b038416600090815260086020526040902080549091169055600680546106b690600190612011565b815481106106d457634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600680546001600160a01b039092169160ff841690811061071157634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559185168152600990915260409020805460ff19169055600680548061076e57634e487b7160e01b600052603160045260246000fd5b600082815260208120820160001990810180546001600160a01b03191690559091019091556040516001600160a01b038516917f4fd6fed175ab0b49d36124b1a61f8b0d9d15ea6289719749317cbb005ccb13f391a26107db565b806107d381612063565b91505061060a565b505050565b60025490565b600681815481106107f657600080fd5b6000918252602090912001546001600160a01b0316905081565b60008061081b61148b565b9050610828858285611543565b8261083286610dab565b10156108505760405162461bcd60e51b81526004016104e590611bba565b60075462010000900460ff16801561088157506001600160a01b0385166000908152600a602052604090205460ff16155b80156108a657506001600160a01b0384166000908152600a602052604090205460ff16155b156108f557600554600754600091600160a01b900463ffffffff16906108d09061ffff1686611fcf565b6108da9190611f98565b90506108e68185612011565b93506108f386308361158d565b505b61090085858561158d565b506001949350505050565b601290565b60008061091b61148b565b6001600160a01b0380821660009081526001602090815260408083209389168352929052205490915061049c9082908690610957908790611f80565b61148f565b60086020526000908152604090205461ffff1681565b61097c33826116b1565b50565b600554600160a01b900463ffffffff1681565b61099a61148b565b6001600160a01b03166109ab61104f565b6001600160a01b0316146109d15760405162461bcd60e51b81526004016104e590611d6b565b6001600160a01b0382166109f75760405162461bcd60e51b81526004016104e590611c37565b6001600160a01b03821660009081526009602052604090205460ff16610a2f5760405162461bcd60e51b81526004016104e590611cde565b6001600160a01b03821660009081526008602052604090205461ffff908116908216811415610a705760405162461bcd60e51b81526004016104e590611da0565b8161ffff168161ffff161015610af5576000610a8c8284611fee565b60075490915061271090610aa590839061ffff16611f5a565b61ffff161115610ac75760405162461bcd60e51b81526004016104e590611b3b565b600754610ad990829061ffff16611f5a565b6007805461ffff191661ffff9290921691909117905550610b2e565b6000610b018383611fee565b600754909150610b1690829061ffff16611fee565b6007805461ffff191661ffff92909216919091179055505b6001600160a01b03831660008181526008602052604090819020805461ffff191661ffff8616179055517fee47ac5c77f2952467745dc55e7c0f653f25c603443f24d129d62712b57eeb5d90610b85908590611f23565b60405180910390a2505050565b610b9a61148b565b6001600160a01b0316610bab61104f565b6001600160a01b031614610bd15760405162461bcd60e51b81526004016104e590611d6b565b600654606411610bf35760405162461bcd60e51b81526004016104e590611a6c565b6001600160a01b038216610c195760405162461bcd60e51b81526004016104e590611c37565b6001600160a01b03821660009081526009602052604090205460ff1615610c525760405162461bcd60e51b81526004016104e590611c00565b60008161ffff16118015610c9f5750600554610c7d90600a90600160a01b900463ffffffff16611fac565b60075463ffffffff9190911690610c989061ffff1683611f5a565b61ffff1611155b610cbb5760405162461bcd60e51b81526004016104e590611c94565b6001600160a01b03821660008181526009602090815260408083208054600160ff1990911681179091556006805491820190557ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319169094179093556008905220805461ffff191661ffff83811691909117909155600754610d4a91839116611f5a565b600760006101000a81548161ffff021916908361ffff160217905550816001600160a01b03167ff0379f3a0fa1271904bae35478eacd47ea582a7e6316fb3d935a46c931f61c2582604051610d9f9190611f23565b60405180910390a25050565b6001600160a01b0381166000908152602081905260409020545b919050565b610dd261148b565b6001600160a01b0316610de361104f565b6001600160a01b031614610e095760405162461bcd60e51b81526004016104e590611d6b565b610e1360006117a2565b565b610e1d61148b565b6001600160a01b0316610e2e61104f565b6001600160a01b031614610e545760405162461bcd60e51b81526004016104e590611d6b565b6000610e5f30610dab565b11610e7c5760405162461bcd60e51b81526004016104e590611a3f565b6000610e8730610dab565b905060005b60065460ff82161015610f6557600060068260ff1681548110610ebf57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546006546001600160a01b039091169150610ee790600190612011565b8260ff161415610f0957610f043082610eff30610dab565b61158d565b610f52565b6007546001600160a01b038216600090815260086020526040812054909161ffff90811691610f39911686611fcf565b610f439190611f98565b9050610f5030838361158d565b505b5080610f5d81612063565b915050610e8c565b5050565b610f7161148b565b6001600160a01b0316610f8261104f565b6001600160a01b031614610fa85760405162461bcd60e51b81526004016104e590611d6b565b6001600160a01b038116610fce5760405162461bcd60e51b81526004016104e590611ef7565b6001600160a01b0381166000908152600a602052604090205460ff166110065760405162461bcd60e51b81526004016104e590611d40565b6001600160a01b0381166000818152600a6020526040808220805460ff19169055517f1f756c8b089af6b33ee121fee8badac2553a2fa89c0575ea91ff8792617746c29190a250565b6005546001600160a01b031690565b61106661148b565b6001600160a01b031661107761104f565b6001600160a01b03161461109d5760405162461bcd60e51b81526004016104e590611d6b565b6007805462ffffff1916905560005b60065460ff8216101561118d5760006008600060068460ff16815481106110e357634e487b7160e01b600052603260045260246000fd5b6000918252602080832091909101546001600160a01b031683528201929092526040018120805461ffff191661ffff939093169290921790915560068054600991839160ff861690811061114757634e487b7160e01b600052603260045260246000fd5b6000918252602080832091909101546001600160a01b031683528201929092526040019020805460ff19169115159190911790558061118581612063565b9150506110ac565b50610e13600660006117f4565b60606004805461040190612028565b6000806111b461148b565b6001600160a01b03808216600090815260016020908152604080832093891683529290522054909150838110156111fd5760405162461bcd60e51b81526004016104e590611eb2565b610900828686840361148f565b60008061121561148b565b90508261122182610dab565b101561123f5760405162461bcd60e51b81526004016104e590611bba565b60075462010000900460ff16801561127057506001600160a01b0381166000908152600a602052604090205460ff16155b801561129557506001600160a01b0384166000908152600a602052604090205460ff16155b156112e457600554600754600091600160a01b900463ffffffff16906112bf9061ffff1686611fcf565b6112c99190611f98565b90506112d58185612011565b93506112e282308361158d565b505b61049c81858561158d565b60075461ffff1681565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b61132c61148b565b6001600160a01b031661133d61104f565b6001600160a01b0316146113635760405162461bcd60e51b81526004016104e590611d6b565b6001600160a01b0381166113895760405162461bcd60e51b81526004016104e590611ef7565b6001600160a01b0381166000908152600a602052604090205460ff16156113c25760405162461bcd60e51b81526004016104e590611c65565b6001600160a01b0381166000818152600a6020526040808220805460ff19166001179055517f75b2135d1c8c3519f3c09c43fe6527089ef09f40c7981ebf0ed46e79e79032c79190a250565b61141661148b565b6001600160a01b031661142761104f565b6001600160a01b03161461144d5760405162461bcd60e51b81526004016104e590611d6b565b6001600160a01b0381166114735760405162461bcd60e51b81526004016104e590611ab3565b61097c816117a2565b60075462010000900460ff1681565b3390565b6001600160a01b0383166114b55760405162461bcd60e51b81526004016104e590611e6e565b6001600160a01b0382166114db5760405162461bcd60e51b81526004016104e590611af9565b6001600160a01b0380841660008181526001602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590611536908590611f32565b60405180910390a3505050565b600061154f84846112f9565b90506000198114611587578181101561157a5760405162461bcd60e51b81526004016104e590611b83565b611587848484840361148f565b50505050565b6001600160a01b0383166115b35760405162461bcd60e51b81526004016104e590611e29565b6001600160a01b0382166115d95760405162461bcd60e51b81526004016104e5906119ba565b6115e48383836107db565b6001600160a01b0383166000908152602081905260409020548181101561161d5760405162461bcd60e51b81526004016104e590611bba565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290611654908490611f80565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161169e9190611f32565b60405180910390a36115878484846107db565b6001600160a01b0382166116d75760405162461bcd60e51b81526004016104e590611de8565b6116e3826000836107db565b6001600160a01b0382166000908152602081905260409020548181101561171c5760405162461bcd60e51b81526004016104e5906119fd565b6001600160a01b038316600090815260208190526040812083830390556002805484929061174b908490612011565b90915550506040516000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061178e908690611f32565b60405180910390a36107db836000846107db565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b508054600082559060005260206000209081019061097c91905b80821115611822576000815560010161180e565b5090565b80356001600160a01b0381168114610dc557600080fd5b60006020828403121561184e578081fd5b61185782611826565b9392505050565b60008060408385031215611870578081fd5b61187983611826565b915061188760208401611826565b90509250929050565b6000806000606084860312156118a4578081fd5b6118ad84611826565b92506118bb60208501611826565b9150604084013590509250925092565b600080604083850312156118dd578182fd5b6118e683611826565b9150602083013561ffff811681146118fc578182fd5b809150509250929050565b60008060408385031215611919578182fd5b61192283611826565b946020939093013593505050565b600060208284031215611941578081fd5b5035919050565b6001600160a01b0391909116815260200190565b901515815260200190565b6000602080835283518082850152825b8181101561199357858101830151858201604001528201611977565b818111156119a45783604083870101525b50601f01601f1916929092016040019392505050565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526022908201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604082015261636560f01b606082015260800190565b6020808252601390820152724e6f7468696e6720746f20776974686472617760681b604082015260600190565b60208082526027908201527f52656163686564206d6178696d756d206e756d626572206f66207461782061646040820152666472657373657360c81b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b60208082526028908201527f54617820616d6f756e7420746f6f206869676820666f722063757272656e7420604082015267746178207261746560c01b606082015260800190565b6020808252601d908201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604082015260600190565b60208082526026908201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604082015265616c616e636560d01b606082015260800190565b60208082526017908201527f526563697069656e7420616c7265616479206164646564000000000000000000604082015260600190565b60208082526014908201527343616e6e6f74206164642030206164647265737360601b604082015260600190565b6020808252601590820152741059191c995cdcc8185b1c9958591e481859191959605a1b604082015260600190565b6020808252602a908201527f546f74616c2074617820616d6f756e74206d757374206265206265747765656e604082015269203020616e642031302560b01b606082015260800190565b6020808252601190820152704e6f74206120746178206164647265737360781b604082015260600190565b6020808252601c908201527f526563697069656e7420686173206e6f74206265656e20616464656400000000604082015260600190565b6020808252601190820152701059191c995cdcc81b9bdd081859191959607a1b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526028908201527f54617820616c7265616479207468697320616d6f756e7420666f722074686973604082015267206164647265737360c01b606082015260800190565b60208082526021908201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736040820152607360f81b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526025908201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604082015264207a65726f60d81b606082015260800190565b60208082526012908201527143616e74207573652030206164647265737360701b604082015260600190565b61ffff91909116815260200190565b90815260200190565b63ffffffff91909116815260200190565b60ff91909116815260200190565b600061ffff808316818516808303821115611f7757611f77612083565b01949350505050565b60008219821115611f9357611f93612083565b500190565b600082611fa757611fa7612099565b500490565b600063ffffffff80841680611fc357611fc3612099565b92169190910492915050565b6000816000190483118215151615611fe957611fe9612083565b500290565b600061ffff8381169083168181101561200957612009612083565b039392505050565b60008282101561202357612023612083565b500390565b60028104600182168061203c57607f821691505b6020821081141561205d57634e487b7160e01b600052602260045260246000fd5b50919050565b600060ff821660ff81141561207a5761207a612083565b60010192915050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fdfea26469706673582212204cdda7cd1b75b126174f154b08450b87192175e2712321b35e479ab4b27fdd4a64736f6c63430008000033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101cf5760003560e01c8063619f28ed1161010457806395d89b41116100a2578063dd62ed3e11610071578063dd62ed3e1461039c578063e43252d7146103af578063f2fde38b146103c2578063fb369eb0146103d5576101cf565b806395d89b4114610366578063a457c2d71461036e578063a9059cbb14610381578063bb47cc0c14610394576101cf565b806371fc737c116100de57806371fc737c1461033b5780638ab1d681146103435780638da5cb5b14610356578063909656521461035e576101cf565b8063619f28ed1461030d57806370a0823114610320578063715018a614610333576101cf565b806323b872dd116101715780633a5fcb631161014b5780633a5fcb63146102b257806342966c68146102d25780634be31778146102e557806354f12265146102fa576101cf565b806323b872dd14610277578063313ce5671461028a578063395093511461029f576101cf565b806310bf6029116101ad57806310bf60291461022557806310f6da921461022f57806318160ddd146102425780632354ee0314610257576101cf565b806301c4b316146101d457806306fdde03146101fd578063095ea7b314610212575b600080fd5b6101e76101e236600461183d565b6103dd565b6040516101f4919061195c565b60405180910390f35b6102056103f2565b6040516101f49190611967565b6101e7610220366004611907565b610484565b61022d6104a6565b005b61022d61023d36600461183d565b61054e565b61024a6107e0565b6040516101f49190611f32565b61026a610265366004611930565b6107e6565b6040516101f49190611948565b6101e7610285366004611890565b610810565b61029261090b565b6040516101f49190611f4c565b6101e76102ad366004611907565b610910565b6102c56102c036600461183d565b61095c565b6040516101f49190611f23565b61022d6102e0366004611930565b610972565b6102ed61097f565b6040516101f49190611f3b565b61022d6103083660046118cb565b610992565b61022d61031b3660046118cb565b610b92565b61024a61032e36600461183d565b610dab565b61022d610dca565b61022d610e15565b61022d61035136600461183d565b610f69565b61026a61104f565b61022d61105e565b61020561119a565b6101e761037c366004611907565b6111a9565b6101e761038f366004611907565b61120a565b6102c56112ef565b61024a6103aa36600461185e565b6112f9565b61022d6103bd36600461183d565b611324565b61022d6103d036600461183d565b61140e565b6101e761147c565b600a6020526000908152604090205460ff1681565b60606003805461040190612028565b80601f016020809104026020016040519081016040528092919081815260200182805461042d90612028565b801561047a5780601f1061044f5761010080835404028352916020019161047a565b820191906000526020600020905b81548152906001019060200180831161045d57829003601f168201915b5050505050905090565b60008061048f61148b565b905061049c81858561148f565b5060019392505050565b6104ae61148b565b6001600160a01b03166104bf61104f565b6001600160a01b0316146104ee5760405162461bcd60e51b81526004016104e590611d6b565b60405180910390fd5b6007805460ff62010000808304821615810262ff00001990931692909217928390556040517fdda4866fd658821eea607c5d6addd0c4a0cc347eb4cea313399e516e66019864936105449390049091169061195c565b60405180910390a1565b61055661148b565b6001600160a01b031661056761104f565b6001600160a01b03161461058d5760405162461bcd60e51b81526004016104e590611d6b565b6001600160a01b0381166105b35760405162461bcd60e51b81526004016104e590611c37565b6001600160a01b03811660009081526009602052604090205460ff166105eb5760405162461bcd60e51b81526004016104e590611d09565b6001600160a01b03811660009081526008602052604081205461ffff16905b60065460ff821610156107db57826001600160a01b031660068260ff168154811061064557634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b031614156107c95760075461067290839061ffff16611fee565b6007805461ffff9290921661ffff199283161790556001600160a01b038416600090815260086020526040902080549091169055600680546106b690600190612011565b815481106106d457634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600680546001600160a01b039092169160ff841690811061071157634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559185168152600990915260409020805460ff19169055600680548061076e57634e487b7160e01b600052603160045260246000fd5b600082815260208120820160001990810180546001600160a01b03191690559091019091556040516001600160a01b038516917f4fd6fed175ab0b49d36124b1a61f8b0d9d15ea6289719749317cbb005ccb13f391a26107db565b806107d381612063565b91505061060a565b505050565b60025490565b600681815481106107f657600080fd5b6000918252602090912001546001600160a01b0316905081565b60008061081b61148b565b9050610828858285611543565b8261083286610dab565b10156108505760405162461bcd60e51b81526004016104e590611bba565b60075462010000900460ff16801561088157506001600160a01b0385166000908152600a602052604090205460ff16155b80156108a657506001600160a01b0384166000908152600a602052604090205460ff16155b156108f557600554600754600091600160a01b900463ffffffff16906108d09061ffff1686611fcf565b6108da9190611f98565b90506108e68185612011565b93506108f386308361158d565b505b61090085858561158d565b506001949350505050565b601290565b60008061091b61148b565b6001600160a01b0380821660009081526001602090815260408083209389168352929052205490915061049c9082908690610957908790611f80565b61148f565b60086020526000908152604090205461ffff1681565b61097c33826116b1565b50565b600554600160a01b900463ffffffff1681565b61099a61148b565b6001600160a01b03166109ab61104f565b6001600160a01b0316146109d15760405162461bcd60e51b81526004016104e590611d6b565b6001600160a01b0382166109f75760405162461bcd60e51b81526004016104e590611c37565b6001600160a01b03821660009081526009602052604090205460ff16610a2f5760405162461bcd60e51b81526004016104e590611cde565b6001600160a01b03821660009081526008602052604090205461ffff908116908216811415610a705760405162461bcd60e51b81526004016104e590611da0565b8161ffff168161ffff161015610af5576000610a8c8284611fee565b60075490915061271090610aa590839061ffff16611f5a565b61ffff161115610ac75760405162461bcd60e51b81526004016104e590611b3b565b600754610ad990829061ffff16611f5a565b6007805461ffff191661ffff9290921691909117905550610b2e565b6000610b018383611fee565b600754909150610b1690829061ffff16611fee565b6007805461ffff191661ffff92909216919091179055505b6001600160a01b03831660008181526008602052604090819020805461ffff191661ffff8616179055517fee47ac5c77f2952467745dc55e7c0f653f25c603443f24d129d62712b57eeb5d90610b85908590611f23565b60405180910390a2505050565b610b9a61148b565b6001600160a01b0316610bab61104f565b6001600160a01b031614610bd15760405162461bcd60e51b81526004016104e590611d6b565b600654606411610bf35760405162461bcd60e51b81526004016104e590611a6c565b6001600160a01b038216610c195760405162461bcd60e51b81526004016104e590611c37565b6001600160a01b03821660009081526009602052604090205460ff1615610c525760405162461bcd60e51b81526004016104e590611c00565b60008161ffff16118015610c9f5750600554610c7d90600a90600160a01b900463ffffffff16611fac565b60075463ffffffff9190911690610c989061ffff1683611f5a565b61ffff1611155b610cbb5760405162461bcd60e51b81526004016104e590611c94565b6001600160a01b03821660008181526009602090815260408083208054600160ff1990911681179091556006805491820190557ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319169094179093556008905220805461ffff191661ffff83811691909117909155600754610d4a91839116611f5a565b600760006101000a81548161ffff021916908361ffff160217905550816001600160a01b03167ff0379f3a0fa1271904bae35478eacd47ea582a7e6316fb3d935a46c931f61c2582604051610d9f9190611f23565b60405180910390a25050565b6001600160a01b0381166000908152602081905260409020545b919050565b610dd261148b565b6001600160a01b0316610de361104f565b6001600160a01b031614610e095760405162461bcd60e51b81526004016104e590611d6b565b610e1360006117a2565b565b610e1d61148b565b6001600160a01b0316610e2e61104f565b6001600160a01b031614610e545760405162461bcd60e51b81526004016104e590611d6b565b6000610e5f30610dab565b11610e7c5760405162461bcd60e51b81526004016104e590611a3f565b6000610e8730610dab565b905060005b60065460ff82161015610f6557600060068260ff1681548110610ebf57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546006546001600160a01b039091169150610ee790600190612011565b8260ff161415610f0957610f043082610eff30610dab565b61158d565b610f52565b6007546001600160a01b038216600090815260086020526040812054909161ffff90811691610f39911686611fcf565b610f439190611f98565b9050610f5030838361158d565b505b5080610f5d81612063565b915050610e8c565b5050565b610f7161148b565b6001600160a01b0316610f8261104f565b6001600160a01b031614610fa85760405162461bcd60e51b81526004016104e590611d6b565b6001600160a01b038116610fce5760405162461bcd60e51b81526004016104e590611ef7565b6001600160a01b0381166000908152600a602052604090205460ff166110065760405162461bcd60e51b81526004016104e590611d40565b6001600160a01b0381166000818152600a6020526040808220805460ff19169055517f1f756c8b089af6b33ee121fee8badac2553a2fa89c0575ea91ff8792617746c29190a250565b6005546001600160a01b031690565b61106661148b565b6001600160a01b031661107761104f565b6001600160a01b03161461109d5760405162461bcd60e51b81526004016104e590611d6b565b6007805462ffffff1916905560005b60065460ff8216101561118d5760006008600060068460ff16815481106110e357634e487b7160e01b600052603260045260246000fd5b6000918252602080832091909101546001600160a01b031683528201929092526040018120805461ffff191661ffff939093169290921790915560068054600991839160ff861690811061114757634e487b7160e01b600052603260045260246000fd5b6000918252602080832091909101546001600160a01b031683528201929092526040019020805460ff19169115159190911790558061118581612063565b9150506110ac565b50610e13600660006117f4565b60606004805461040190612028565b6000806111b461148b565b6001600160a01b03808216600090815260016020908152604080832093891683529290522054909150838110156111fd5760405162461bcd60e51b81526004016104e590611eb2565b610900828686840361148f565b60008061121561148b565b90508261122182610dab565b101561123f5760405162461bcd60e51b81526004016104e590611bba565b60075462010000900460ff16801561127057506001600160a01b0381166000908152600a602052604090205460ff16155b801561129557506001600160a01b0384166000908152600a602052604090205460ff16155b156112e457600554600754600091600160a01b900463ffffffff16906112bf9061ffff1686611fcf565b6112c99190611f98565b90506112d58185612011565b93506112e282308361158d565b505b61049c81858561158d565b60075461ffff1681565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b61132c61148b565b6001600160a01b031661133d61104f565b6001600160a01b0316146113635760405162461bcd60e51b81526004016104e590611d6b565b6001600160a01b0381166113895760405162461bcd60e51b81526004016104e590611ef7565b6001600160a01b0381166000908152600a602052604090205460ff16156113c25760405162461bcd60e51b81526004016104e590611c65565b6001600160a01b0381166000818152600a6020526040808220805460ff19166001179055517f75b2135d1c8c3519f3c09c43fe6527089ef09f40c7981ebf0ed46e79e79032c79190a250565b61141661148b565b6001600160a01b031661142761104f565b6001600160a01b03161461144d5760405162461bcd60e51b81526004016104e590611d6b565b6001600160a01b0381166114735760405162461bcd60e51b81526004016104e590611ab3565b61097c816117a2565b60075462010000900460ff1681565b3390565b6001600160a01b0383166114b55760405162461bcd60e51b81526004016104e590611e6e565b6001600160a01b0382166114db5760405162461bcd60e51b81526004016104e590611af9565b6001600160a01b0380841660008181526001602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590611536908590611f32565b60405180910390a3505050565b600061154f84846112f9565b90506000198114611587578181101561157a5760405162461bcd60e51b81526004016104e590611b83565b611587848484840361148f565b50505050565b6001600160a01b0383166115b35760405162461bcd60e51b81526004016104e590611e29565b6001600160a01b0382166115d95760405162461bcd60e51b81526004016104e5906119ba565b6115e48383836107db565b6001600160a01b0383166000908152602081905260409020548181101561161d5760405162461bcd60e51b81526004016104e590611bba565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290611654908490611f80565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161169e9190611f32565b60405180910390a36115878484846107db565b6001600160a01b0382166116d75760405162461bcd60e51b81526004016104e590611de8565b6116e3826000836107db565b6001600160a01b0382166000908152602081905260409020548181101561171c5760405162461bcd60e51b81526004016104e5906119fd565b6001600160a01b038316600090815260208190526040812083830390556002805484929061174b908490612011565b90915550506040516000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061178e908690611f32565b60405180910390a36107db836000846107db565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b508054600082559060005260206000209081019061097c91905b80821115611822576000815560010161180e565b5090565b80356001600160a01b0381168114610dc557600080fd5b60006020828403121561184e578081fd5b61185782611826565b9392505050565b60008060408385031215611870578081fd5b61187983611826565b915061188760208401611826565b90509250929050565b6000806000606084860312156118a4578081fd5b6118ad84611826565b92506118bb60208501611826565b9150604084013590509250925092565b600080604083850312156118dd578182fd5b6118e683611826565b9150602083013561ffff811681146118fc578182fd5b809150509250929050565b60008060408385031215611919578182fd5b61192283611826565b946020939093013593505050565b600060208284031215611941578081fd5b5035919050565b6001600160a01b0391909116815260200190565b901515815260200190565b6000602080835283518082850152825b8181101561199357858101830151858201604001528201611977565b818111156119a45783604083870101525b50601f01601f1916929092016040019392505050565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526022908201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604082015261636560f01b606082015260800190565b6020808252601390820152724e6f7468696e6720746f20776974686472617760681b604082015260600190565b60208082526027908201527f52656163686564206d6178696d756d206e756d626572206f66207461782061646040820152666472657373657360c81b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b60208082526028908201527f54617820616d6f756e7420746f6f206869676820666f722063757272656e7420604082015267746178207261746560c01b606082015260800190565b6020808252601d908201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604082015260600190565b60208082526026908201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604082015265616c616e636560d01b606082015260800190565b60208082526017908201527f526563697069656e7420616c7265616479206164646564000000000000000000604082015260600190565b60208082526014908201527343616e6e6f74206164642030206164647265737360601b604082015260600190565b6020808252601590820152741059191c995cdcc8185b1c9958591e481859191959605a1b604082015260600190565b6020808252602a908201527f546f74616c2074617820616d6f756e74206d757374206265206265747765656e604082015269203020616e642031302560b01b606082015260800190565b6020808252601190820152704e6f74206120746178206164647265737360781b604082015260600190565b6020808252601c908201527f526563697069656e7420686173206e6f74206265656e20616464656400000000604082015260600190565b6020808252601190820152701059191c995cdcc81b9bdd081859191959607a1b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526028908201527f54617820616c7265616479207468697320616d6f756e7420666f722074686973604082015267206164647265737360c01b606082015260800190565b60208082526021908201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736040820152607360f81b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526025908201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604082015264207a65726f60d81b606082015260800190565b60208082526012908201527143616e74207573652030206164647265737360701b604082015260600190565b61ffff91909116815260200190565b90815260200190565b63ffffffff91909116815260200190565b60ff91909116815260200190565b600061ffff808316818516808303821115611f7757611f77612083565b01949350505050565b60008219821115611f9357611f93612083565b500190565b600082611fa757611fa7612099565b500490565b600063ffffffff80841680611fc357611fc3612099565b92169190910492915050565b6000816000190483118215151615611fe957611fe9612083565b500290565b600061ffff8381169083168181101561200957612009612083565b039392505050565b60008282101561202357612023612083565b500390565b60028104600182168061203c57607f821691505b6020821081141561205d57634e487b7160e01b600052602260045260246000fd5b50919050565b600060ff821660ff81141561207a5761207a612083565b60010192915050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fdfea26469706673582212204cdda7cd1b75b126174f154b08450b87192175e2712321b35e479ab4b27fdd4a64736f6c63430008000033

Deployed Bytecode Sourcemap

20051:7275:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20368:44;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9183:100;;;:::i;:::-;;;;;;;:::i;11534:201::-;;;;;;:::i;:::-;;:::i;22840:116::-;;;:::i;:::-;;24790:681;;;;;;:::i;:::-;;:::i;10303:108::-;;;:::i;:::-;;;;;;;:::i;20153:31::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;21266:571::-;;;;;;:::i;:::-;;:::i;10145:93::-;;;:::i;:::-;;;;;;;:::i;13019:240::-;;;;;;:::i;:::-;;:::i;20252:54::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;22665:77::-;;;;;;:::i;:::-;;:::i;20110:36::-;;;:::i;:::-;;;;;;;:::i;23911:762::-;;;;;;:::i;:::-;;:::i;23147:613::-;;;;;;:::i;:::-;;:::i;10474:127::-;;;;;;:::i;:::-;;:::i;2606:103::-;;;:::i;26731:592::-;;;:::i;25989:271::-;;;;;;:::i;:::-;;:::i;1955:87::-;;;:::i;26339:304::-;;;:::i;9402:104::-;;;:::i;13762:438::-;;;;;;:::i;:::-;;:::i;22036:485::-;;;;;;:::i;:::-;;:::i;20191:23::-;;;:::i;11063:151::-;;;;;;:::i;:::-;;:::i;25591:265::-;;;;;;:::i;:::-;;:::i;2864:201::-;;;;;;:::i;:::-;;:::i;20221:22::-;;;:::i;20368:44::-;;;;;;;;;;;;;;;:::o;9183:100::-;9237:13;9270:5;9263:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9183:100;:::o;11534:201::-;11617:4;11634:13;11650:12;:10;:12::i;:::-;11634:28;;11673:32;11682:5;11689:7;11698:6;11673:8;:32::i;:::-;-1:-1:-1;11723:4:0;;11534:201;-1:-1:-1;;;11534:201:0:o;22840:116::-;2186:12;:10;:12::i;:::-;-1:-1:-1;;;;;2175:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2175:23:0;;2167:68;;;;-1:-1:-1;;;2167:68:0;;;;;;;:::i;:::-;;;;;;;;;22903:10:::1;::::0;;::::1;::::0;;;::::1;::::0;::::1;22902:11;22889:24:::0;::::1;-1:-1:-1::0;;22889:24:0;;::::1;::::0;;;::::1;::::0;;;;22927:21:::1;::::0;::::1;::::0;::::1;::::0;22937:10;::::1;::::0;;::::1;::::0;22927:21:::1;:::i;:::-;;;;;;;;22840:116::o:0;24790:681::-;2186:12;:10;:12::i;:::-;-1:-1:-1;;;;;2175:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2175:23:0;;2167:68;;;;-1:-1:-1;;;2167:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24870:20:0;::::1;24862:53;;;;-1:-1:-1::0;;;24862:53:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;24932:23:0;::::1;;::::0;;;:15:::1;:23;::::0;;;;;::::1;;24924:64;;;;-1:-1:-1::0;;;24924:64:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;25011:28:0;::::1;24997:11;25011:28:::0;;;:20:::1;:28;::::0;;;;;::::1;;::::0;25050:414:::1;25071:14;:21:::0;25067:25:::1;::::0;::::1;;25050:414;;;25134:6;-1:-1:-1::0;;;;;25113:27:0::1;:14;25128:1;25113:17;;;;;;;;-1:-1:-1::0;;;25113:17:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;25113:17:0::1;:27;25110:345;;;25167:9;::::0;:16:::1;::::0;25179:4;;25167:9:::1;;:16;:::i;:::-;25155:9;:28:::0;;::::1;::::0;;;::::1;-1:-1:-1::0;;25155:28:0;;::::1;;::::0;;-1:-1:-1;;;;;25196:28:0;::::1;25155:9;25196:28:::0;;;:20:::1;:28;::::0;;;;:32;;;;::::1;::::0;;25261:14:::1;25276:21:::0;;:25:::1;::::0;25155:28;;25276:25:::1;:::i;:::-;25261:41;;;;;;-1:-1:-1::0;;;25261:41:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;25241:14:::1;:17:::0;;-1:-1:-1;;;;;25261:41:0;;::::1;::::0;25241:17:::1;::::0;::::1;::::0;;::::1;;;-1:-1:-1::0;;;25241:17:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:61:::0;;-1:-1:-1;;;;;;25241:61:0::1;-1:-1:-1::0;;;;;25241:61:0;;::::1;;::::0;;25315:23;;::::1;::::0;;:15:::1;:23:::0;;;;;;:31;;-1:-1:-1;;25315:31:0::1;::::0;;25359:14:::1;:20:::0;;;::::1;;-1:-1:-1::0;;;25359:20:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;25359:20:0;;;;;-1:-1:-1;;;;;;25359:20:0::1;::::0;;;;;;;;25397:26:::1;::::0;-1:-1:-1;;;;;25397:26:0;::::1;::::0;::::1;::::0;::::1;25438:5;;25110:345;25094:3:::0;::::1;::::0;::::1;:::i;:::-;;;;25050:414;;;;2246:1;24790:681:::0;:::o;10303:108::-;10391:12;;10303:108;:::o;20153:31::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20153:31:0;;-1:-1:-1;20153:31:0;:::o;21266:571::-;21363:4;21380:15;21398:12;:10;:12::i;:::-;21380:30;;21421:38;21437:4;21443:7;21452:6;21421:15;:38::i;:::-;21497:6;21478:15;21488:4;21478:9;:15::i;:::-;:25;;21470:76;;;;-1:-1:-1;;;21470:76:0;;;;;;;:::i;:::-;21560:10;;;;;;;:33;;;;-1:-1:-1;;;;;;21575:18:0;;;;;;:12;:18;;;;;;;;21574:19;21560:33;:54;;;;-1:-1:-1;;;;;;21598:16:0;;;;;;:12;:16;;;;;;;;21597:17;21560:54;21557:213;;;21663:13;;21651:9;;21629:11;;-1:-1:-1;;;21663:13:0;;;;;21643:17;;21651:9;;21643:6;:17;:::i;:::-;:33;;;;:::i;:::-;21629:47;-1:-1:-1;21698:12:0;21629:47;21698:6;:12;:::i;:::-;21689:21;;21723:35;21733:4;21747;21754:3;21723:9;:35::i;:::-;21557:213;;21780:27;21790:4;21796:2;21800:6;21780:9;:27::i;:::-;-1:-1:-1;21825:4:0;;21266:571;-1:-1:-1;;;;21266:571:0:o;10145:93::-;10228:2;10145:93;:::o;13019:240::-;13107:4;13124:13;13140:12;:10;:12::i;:::-;-1:-1:-1;;;;;13188:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;13124:28;;-1:-1:-1;13163:66:0;;13124:28;;13179:7;;13188:40;;13218:10;;13188:40;:::i;:::-;13163:8;:66::i;20252:54::-;;;;;;;;;;;;;;;:::o;22665:77::-;22710:24;22716:10;22728:5;22710;:24::i;:::-;22665:77;:::o;20110:36::-;;;-1:-1:-1;;;20110:36:0;;;;;:::o;23911:762::-;2186:12;:10;:12::i;:::-;-1:-1:-1;;;;;2175:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2175:23:0;;2167:68;;;;-1:-1:-1;;;2167:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24007:20:0;::::1;23999:53;;;;-1:-1:-1::0;;;23999:53:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;24069:23:0;::::1;;::::0;;;:15:::1;:23;::::0;;;;;::::1;;24061:53;;;;-1:-1:-1::0;;;24061:53:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;24145:28:0;::::1;24125:17;24145:28:::0;;;:20:::1;:28;::::0;;;;;::::1;::::0;;::::1;::::0;24190:20;::::1;::::0;::::1;;24182:73;;;;-1:-1:-1::0;;;24182:73:0::1;;;;;;;:::i;:::-;24282:6;24269:19;;:10;:19;;;24266:305;;;24301:11;24315:19;24324:10:::0;24315:6;:19:::1;:::i;:::-;24353:9;::::0;24301:33;;-1:-1:-1;24373:5:0::1;::::0;24353:16:::1;::::0;24301:33;;24353:9:::1;;:16;:::i;:::-;:25;;;;24345:78;;;;-1:-1:-1::0;;;24345:78:0::1;;;;;;;:::i;:::-;24446:9;::::0;:16:::1;::::0;24458:4;;24446:9:::1;;:16;:::i;:::-;24434:9;:28:::0;;-1:-1:-1;;24434:28:0::1;;::::0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;24266:305:0::1;;;24489:11;24503:19;24516:6:::0;24503:10;:19:::1;:::i;:::-;24545:9;::::0;24489:33;;-1:-1:-1;24545:16:0::1;::::0;24489:33;;24545:9:::1;;:16;:::i;:::-;24533:9;:28:::0;;-1:-1:-1;;24533:28:0::1;;::::0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;24266:305:0::1;-1:-1:-1::0;;;;;24579:28:0;::::1;;::::0;;;:20:::1;:28;::::0;;;;;;:37;;-1:-1:-1;;24579:37:0::1;;::::0;::::1;;::::0;;24630:35;::::1;::::0;::::1;::::0;24579:37;;24630:35:::1;:::i;:::-;;;;;;;;2246:1;23911:762:::0;;:::o;23147:613::-;2186:12;:10;:12::i;:::-;-1:-1:-1;;;;;2175:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2175:23:0;;2167:68;;;;-1:-1:-1;;;2167:68:0;;;;;;;:::i;:::-;23237:14:::1;:21:::0;23261:3:::1;-1:-1:-1::0;23229:79:0::1;;;;-1:-1:-1::0;;;23229:79:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23325:20:0;::::1;23317:53;;;;-1:-1:-1::0;;;23317:53:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23388:23:0;::::1;;::::0;;;:15:::1;:23;::::0;;;;;::::1;;23387:24;23379:60;;;;-1:-1:-1::0;;;23379:60:0::1;;;;;;;:::i;:::-;23463:1;23456:4;:8;;;:48;;;;-1:-1:-1::0;23488:13:0::1;::::0;:16:::1;::::0;23502:2:::1;::::0;-1:-1:-1;;;23488:13:0;::::1;;;:16;:::i;:::-;23475:9;::::0;23468:36:::1;::::0;;;::::1;::::0;:16:::1;::::0;23475:9:::1;;23468:4:::0;:16:::1;:::i;:::-;:36;;;;23456:48;23448:103;;;;-1:-1:-1::0;;;23448:103:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23562:23:0;::::1;;::::0;;;:15:::1;:23;::::0;;;;;;;:30;;23588:4:::1;-1:-1:-1::0;;23562:30:0;;::::1;::::0;::::1;::::0;;;23601:14:::1;:27:::0;;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;;;;23601:27:0::1;::::0;;::::1;::::0;;;23637:20:::1;:28:::0;;;:35;;-1:-1:-1;;23637:35:0::1;;::::0;;::::1;::::0;;;::::1;::::0;;;23693:9:::1;::::0;:16:::1;::::0;23637:35;;23693:9:::1;:16;:::i;:::-;23681:9;;:28;;;;;;;;;;;;;;;;;;23739:6;-1:-1:-1::0;;;;;23723:29:0::1;;23747:4;23723:29;;;;;;:::i;:::-;;;;;;;;23147:613:::0;;:::o;10474:127::-;-1:-1:-1;;;;;10575:18:0;;10548:7;10575:18;;;;;;;;;;;10474:127;;;;:::o;2606:103::-;2186:12;:10;:12::i;:::-;-1:-1:-1;;;;;2175:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2175:23:0;;2167:68;;;;-1:-1:-1;;;2167:68:0;;;;;;;:::i;:::-;2671:30:::1;2698:1;2671:18;:30::i;:::-;2606:103::o:0;26731:592::-;2186:12;:10;:12::i;:::-;-1:-1:-1;;;;;2175:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2175:23:0;;2167:68;;;;-1:-1:-1;;;2167:68:0;;;;;;;:::i;:::-;26821:1:::1;26794:24;26812:4;26794:9;:24::i;:::-;:28;26786:60;;;;-1:-1:-1::0;;;26786:60:0::1;;;;;;;:::i;:::-;26855:21;26879:24;26897:4;26879:9;:24::i;:::-;26855:48;;26916:7;26912:404;26933:14;:21:::0;26929:25:::1;::::0;::::1;;26912:404;;;26972:18;26993:14;27008:1;26993:17;;;;;;;;-1:-1:-1::0;;;26993:17:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;27029:14:::1;:21:::0;-1:-1:-1;;;;;26993:17:0;;::::1;::::0;-1:-1:-1;27029:25:0::1;::::0;26993:17;;27029:25:::1;:::i;:::-;27024:1;:30;;;27021:286;;;27070:62;27088:4;27095:10;27107:24;27125:4;27107:9;:24::i;:::-;27070:9;:62::i;:::-;27021:286;;;27229:9;::::0;-1:-1:-1;;;;;27196:32:0;::::1;27163:14;27196:32:::0;;;:20:::1;:32;::::0;;;;;27163:14;;27229:9:::1;::::0;;::::1;::::0;27180:48:::1;::::0;27196:32:::1;27180:13:::0;:48:::1;:::i;:::-;:58;;;;:::i;:::-;27163:75;;27251:44;27269:4;27276:10;27288:6;27251:9;:44::i;:::-;27021:286;;-1:-1:-1::0;26956:3:0;::::1;::::0;::::1;:::i;:::-;;;;26912:404;;;;2246:1;26731:592::o:0;25989:271::-;2186:12;:10;:12::i;:::-;-1:-1:-1;;;;;2175:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2175:23:0;;2167:68;;;;-1:-1:-1;;;2167:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26070:20:0;::::1;26062:51;;;;-1:-1:-1::0;;;26062:51:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;26130:20:0;::::1;;::::0;;;:12:::1;:20;::::0;;;;;::::1;;26122:50;;;;-1:-1:-1::0;;;26122:50:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;26181:20:0;::::1;26204:5;26181:20:::0;;;:12:::1;:20;::::0;;;;;:28;;-1:-1:-1;;26181:28:0::1;::::0;;26225:27;::::1;::::0;26204:5;26225:27:::1;25989:271:::0;:::o;1955:87::-;2028:6;;-1:-1:-1;;;;;2028:6:0;1955:87;:::o;26339:304::-;2186:12;:10;:12::i;:::-;-1:-1:-1;;;;;2175:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2175:23:0;;2167:68;;;;-1:-1:-1;;;2167:68:0;;;;;;;:::i;:::-;26387:10:::1;:18:::0;;-1:-1:-1;;26414:13:0;;;26400:5:::1;26438:166;26459:14;:21:::0;26455:25:::1;::::0;::::1;;26438:166;;;26540:1;26498:20;:39;26519:14;26534:1;26519:17;;;;;;;;-1:-1:-1::0;;;26519:17:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;;;::::1;::::0;-1:-1:-1;;;;;26519:17:0::1;26498:39:::0;;;::::1;::::0;;;;;;;;:43;;-1:-1:-1;;26498:43:0::1;;::::0;;;::::1;::::0;;;::::1;::::0;;;26568:14:::1;:17:::0;;26552:15:::1;::::0;26519:17;;26568::::1;::::0;::::1;::::0;;::::1;;;-1:-1:-1::0;;;26568:17:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;;;::::1;::::0;-1:-1:-1;;;;;26568:17:0::1;26552:34:::0;;;::::1;::::0;;;;;;;;:42;;-1:-1:-1;;26552:42:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26482:3;::::1;::::0;::::1;:::i;:::-;;;;26438:166;;;-1:-1:-1::0;26614:21:0::1;26621:14;;26614:21;:::i;9402:104::-:0;9458:13;9491:7;9484:14;;;;;:::i;13762:438::-;13855:4;13872:13;13888:12;:10;:12::i;:::-;-1:-1:-1;;;;;13938:18:0;;;13911:24;13938:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;13872:28;;-1:-1:-1;13984:35:0;;;;13976:85;;;;-1:-1:-1;;;13976:85:0;;;;;;;:::i;:::-;14097:60;14106:5;14113:7;14141:15;14122:16;:34;14097:8;:60::i;22036:485::-;22115:4;22130:13;22146:12;:10;:12::i;:::-;22130:28;;22195:6;22175:16;22185:5;22175:9;:16::i;:::-;:26;;22167:77;;;;-1:-1:-1;;;22167:77:0;;;;;;;:::i;:::-;22256:10;;;;;;;:34;;;;-1:-1:-1;;;;;;22271:19:0;;;;;;:12;:19;;;;;;;;22270:20;22256:34;:55;;;;-1:-1:-1;;;;;;22295:16:0;;;;;;:12;:16;;;;;;;;22294:17;22256:55;22253:204;;;22355:13;;22345:9;;22324:11;;-1:-1:-1;;;22355:13:0;;;;;22338:16;;22345:9;;22338:6;:16;:::i;:::-;:30;;;;:::i;:::-;22324:44;-1:-1:-1;22388:12:0;22324:44;22388:6;:12;:::i;:::-;22379:21;;22411:36;22421:5;22436:4;22443:3;22411:9;:36::i;:::-;22253:204;;22465:28;22475:5;22482:2;22486:6;22465:9;:28::i;20191:23::-;;;;;;:::o;11063:151::-;-1:-1:-1;;;;;11179:18:0;;;11152:7;11179:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;11063:151::o;25591:265::-;2186:12;:10;:12::i;:::-;-1:-1:-1;;;;;2175:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2175:23:0;;2167:68;;;;-1:-1:-1;;;2167:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25667:20:0;::::1;25659:51;;;;-1:-1:-1::0;;;25659:51:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;25728:20:0;::::1;;::::0;;;:12:::1;:20;::::0;;;;;::::1;;25727:21;25719:55;;;;-1:-1:-1::0;;;25719:55:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;25783:20:0;::::1;;::::0;;;:12:::1;:20;::::0;;;;;:27;;-1:-1:-1;;25783:27:0::1;25806:4;25783:27;::::0;;25826:22;::::1;::::0;25783:20;25826:22:::1;25591:265:::0;:::o;2864:201::-;2186:12;:10;:12::i;:::-;-1:-1:-1;;;;;2175:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2175:23:0;;2167:68;;;;-1:-1:-1;;;2167:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2953:22:0;::::1;2945:73;;;;-1:-1:-1::0;;;2945:73:0::1;;;;;;;:::i;:::-;3029:28;3048:8;3029:18;:28::i;20221:22::-:0;;;;;;;;;:::o;679:98::-;759:10;679:98;:::o;17398:380::-;-1:-1:-1;;;;;17534:19:0;;17526:68;;;;-1:-1:-1;;;17526:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17613:21:0;;17605:68;;;;-1:-1:-1;;;17605:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17686:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;;:36;;;17738:32;;;;;17716:6;;17738:32;:::i;:::-;;;;;;;;17398:380;;;:::o;18065:453::-;18200:24;18227:25;18237:5;18244:7;18227:9;:25::i;:::-;18200:52;;-1:-1:-1;;18267:16:0;:37;18263:248;;18349:6;18329:16;:26;;18321:68;;;;-1:-1:-1;;;18321:68:0;;;;;;;:::i;:::-;18433:51;18442:5;18449:7;18477:6;18458:16;:25;18433:8;:51::i;:::-;18065:453;;;;:::o;14679:671::-;-1:-1:-1;;;;;14810:18:0;;14802:68;;;;-1:-1:-1;;;14802:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14889:16:0;;14881:64;;;;-1:-1:-1;;;14881:64:0;;;;;;;:::i;:::-;14958:38;14979:4;14985:2;14989:6;14958:20;:38::i;:::-;-1:-1:-1;;;;;15031:15:0;;15009:19;15031:15;;;;;;;;;;;15065:21;;;;15057:72;;;;-1:-1:-1;;;15057:72:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15165:15:0;;;:9;:15;;;;;;;;;;;15183:20;;;15165:38;;15225:13;;;;;;;;:23;;15197:6;;15165:9;15225:23;;15197:6;;15225:23;:::i;:::-;;;;;;;;15281:2;-1:-1:-1;;;;;15266:26:0;15275:4;-1:-1:-1;;;;;15266:26:0;;15285:6;15266:26;;;;;;:::i;:::-;;;;;;;;15305:37;15325:4;15331:2;15335:6;15305:19;:37::i;16369:591::-;-1:-1:-1;;;;;16453:21:0;;16445:67;;;;-1:-1:-1;;;16445:67:0;;;;;;;:::i;:::-;16525:49;16546:7;16563:1;16567:6;16525:20;:49::i;:::-;-1:-1:-1;;;;;16612:18:0;;16587:22;16612:18;;;;;;;;;;;16649:24;;;;16641:71;;;;-1:-1:-1;;;16641:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16748:18:0;;:9;:18;;;;;;;;;;16769:23;;;16748:44;;16814:12;:22;;16786:6;;16748:9;16814:22;;16786:6;;16814:22;:::i;:::-;;;;-1:-1:-1;;16854:37:0;;16880:1;;-1:-1:-1;;;;;16854:37:0;;;;;;;16884:6;;16854:37;:::i;:::-;;;;;;;;16904:48;16924:7;16941:1;16945:6;16904:19;:48::i;3225:191::-;3318:6;;;-1:-1:-1;;;;;3335:17:0;;;-1:-1:-1;;;;;;3335:17:0;;;;;;;3368:40;;3318:6;;;3335:17;3318:6;;3368:40;;3299:16;;3368:40;3225:191;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:175:1:-;84:20;;-1:-1:-1;;;;;133:31:1;;123:42;;113:2;;179:1;176;169:12;194:198;;306:2;294:9;285:7;281:23;277:32;274:2;;;327:6;319;312:22;274:2;355:31;376:9;355:31;:::i;:::-;345:41;264:128;-1:-1:-1;;;264:128:1:o;397:274::-;;;526:2;514:9;505:7;501:23;497:32;494:2;;;547:6;539;532:22;494:2;575:31;596:9;575:31;:::i;:::-;565:41;;625:40;661:2;650:9;646:18;625:40;:::i;:::-;615:50;;484:187;;;;;:::o;676:342::-;;;;822:2;810:9;801:7;797:23;793:32;790:2;;;843:6;835;828:22;790:2;871:31;892:9;871:31;:::i;:::-;861:41;;921:40;957:2;946:9;942:18;921:40;:::i;:::-;911:50;;1008:2;997:9;993:18;980:32;970:42;;780:238;;;;;:::o;1023:368::-;;;1151:2;1139:9;1130:7;1126:23;1122:32;1119:2;;;1172:6;1164;1157:22;1119:2;1200:31;1221:9;1200:31;:::i;:::-;1190:41;;1281:2;1270:9;1266:18;1253:32;1325:6;1318:5;1314:18;1307:5;1304:29;1294:2;;1352:6;1344;1337:22;1294:2;1380:5;1370:15;;;1109:282;;;;;:::o;1396:266::-;;;1525:2;1513:9;1504:7;1500:23;1496:32;1493:2;;;1546:6;1538;1531:22;1493:2;1574:31;1595:9;1574:31;:::i;:::-;1564:41;1652:2;1637:18;;;;1624:32;;-1:-1:-1;;;1483:179:1:o;1667:190::-;;1779:2;1767:9;1758:7;1754:23;1750:32;1747:2;;;1800:6;1792;1785:22;1747:2;-1:-1:-1;1828:23:1;;1737:120;-1:-1:-1;1737:120:1:o;1862:203::-;-1:-1:-1;;;;;2026:32:1;;;;2008:51;;1996:2;1981:18;;1963:102::o;2070:187::-;2235:14;;2228:22;2210:41;;2198:2;2183:18;;2165:92::o;2262:603::-;;2403:2;2432;2421:9;2414:21;2464:6;2458:13;2507:6;2502:2;2491:9;2487:18;2480:34;2532:4;2545:140;2559:6;2556:1;2553:13;2545:140;;;2654:14;;;2650:23;;2644:30;2620:17;;;2639:2;2616:26;2609:66;2574:10;;2545:140;;;2703:6;2700:1;2697:13;2694:2;;;2773:4;2768:2;2759:6;2748:9;2744:22;2740:31;2733:45;2694:2;-1:-1:-1;2849:2:1;2828:15;-1:-1:-1;;2824:29:1;2809:45;;;;2856:2;2805:54;;2383:482;-1:-1:-1;;;2383:482:1:o;2870:399::-;3072:2;3054:21;;;3111:2;3091:18;;;3084:30;3150:34;3145:2;3130:18;;3123:62;-1:-1:-1;;;3216:2:1;3201:18;;3194:33;3259:3;3244:19;;3044:225::o;3274:398::-;3476:2;3458:21;;;3515:2;3495:18;;;3488:30;3554:34;3549:2;3534:18;;3527:62;-1:-1:-1;;;3620:2:1;3605:18;;3598:32;3662:3;3647:19;;3448:224::o;3677:343::-;3879:2;3861:21;;;3918:2;3898:18;;;3891:30;-1:-1:-1;;;3952:2:1;3937:18;;3930:49;4011:2;3996:18;;3851:169::o;4025:403::-;4227:2;4209:21;;;4266:2;4246:18;;;4239:30;4305:34;4300:2;4285:18;;4278:62;-1:-1:-1;;;4371:2:1;4356:18;;4349:37;4418:3;4403:19;;4199:229::o;4433:402::-;4635:2;4617:21;;;4674:2;4654:18;;;4647:30;4713:34;4708:2;4693:18;;4686:62;-1:-1:-1;;;4779:2:1;4764:18;;4757:36;4825:3;4810:19;;4607:228::o;4840:398::-;5042:2;5024:21;;;5081:2;5061:18;;;5054:30;5120:34;5115:2;5100:18;;5093:62;-1:-1:-1;;;5186:2:1;5171:18;;5164:32;5228:3;5213:19;;5014:224::o;5243:404::-;5445:2;5427:21;;;5484:2;5464:18;;;5457:30;5523:34;5518:2;5503:18;;5496:62;-1:-1:-1;;;5589:2:1;5574:18;;5567:38;5637:3;5622:19;;5417:230::o;5652:353::-;5854:2;5836:21;;;5893:2;5873:18;;;5866:30;5932:31;5927:2;5912:18;;5905:59;5996:2;5981:18;;5826:179::o;6010:402::-;6212:2;6194:21;;;6251:2;6231:18;;;6224:30;6290:34;6285:2;6270:18;;6263:62;-1:-1:-1;;;6356:2:1;6341:18;;6334:36;6402:3;6387:19;;6184:228::o;6417:347::-;6619:2;6601:21;;;6658:2;6638:18;;;6631:30;6697:25;6692:2;6677:18;;6670:53;6755:2;6740:18;;6591:173::o;6769:344::-;6971:2;6953:21;;;7010:2;6990:18;;;6983:30;-1:-1:-1;;;7044:2:1;7029:18;;7022:50;7104:2;7089:18;;6943:170::o;7118:345::-;7320:2;7302:21;;;7359:2;7339:18;;;7332:30;-1:-1:-1;;;7393:2:1;7378:18;;7371:51;7454:2;7439:18;;7292:171::o;7468:406::-;7670:2;7652:21;;;7709:2;7689:18;;;7682:30;7748:34;7743:2;7728:18;;7721:62;-1:-1:-1;;;7814:2:1;7799:18;;7792:40;7864:3;7849:19;;7642:232::o;7879:341::-;8081:2;8063:21;;;8120:2;8100:18;;;8093:30;-1:-1:-1;;;8154:2:1;8139:18;;8132:47;8211:2;8196:18;;8053:167::o;8225:352::-;8427:2;8409:21;;;8466:2;8446:18;;;8439:30;8505;8500:2;8485:18;;8478:58;8568:2;8553:18;;8399:178::o;8582:341::-;8784:2;8766:21;;;8823:2;8803:18;;;8796:30;-1:-1:-1;;;8857:2:1;8842:18;;8835:47;8914:2;8899:18;;8756:167::o;8928:356::-;9130:2;9112:21;;;9149:18;;;9142:30;9208:34;9203:2;9188:18;;9181:62;9275:2;9260:18;;9102:182::o;9289:404::-;9491:2;9473:21;;;9530:2;9510:18;;;9503:30;9569:34;9564:2;9549:18;;9542:62;-1:-1:-1;;;9635:2:1;9620:18;;9613:38;9683:3;9668:19;;9463:230::o;9698:397::-;9900:2;9882:21;;;9939:2;9919:18;;;9912:30;9978:34;9973:2;9958:18;;9951:62;-1:-1:-1;;;10044:2:1;10029:18;;10022:31;10085:3;10070:19;;9872:223::o;10100:401::-;10302:2;10284:21;;;10341:2;10321:18;;;10314:30;10380:34;10375:2;10360:18;;10353:62;-1:-1:-1;;;10446:2:1;10431:18;;10424:35;10491:3;10476:19;;10274:227::o;10506:400::-;10708:2;10690:21;;;10747:2;10727:18;;;10720:30;10786:34;10781:2;10766:18;;10759:62;-1:-1:-1;;;10852:2:1;10837:18;;10830:34;10896:3;10881:19;;10680:226::o;10911:401::-;11113:2;11095:21;;;11152:2;11132:18;;;11125:30;11191:34;11186:2;11171:18;;11164:62;-1:-1:-1;;;11257:2:1;11242:18;;11235:35;11302:3;11287:19;;11085:227::o;11317:342::-;11519:2;11501:21;;;11558:2;11538:18;;;11531:30;-1:-1:-1;;;11592:2:1;11577:18;;11570:48;11650:2;11635:18;;11491:168::o;11664:188::-;11838:6;11826:19;;;;11808:38;;11796:2;11781:18;;11763:89::o;11857:177::-;12003:25;;;11991:2;11976:18;;11958:76::o;12039:192::-;12213:10;12201:23;;;;12183:42;;12171:2;12156:18;;12138:93::o;12236:184::-;12408:4;12396:17;;;;12378:36;;12366:2;12351:18;;12333:87::o;12425:224::-;;12492:6;12525:2;12522:1;12518:10;12555:2;12552:1;12548:10;12586:3;12582:2;12578:12;12573:3;12570:21;12567:2;;;12594:18;;:::i;:::-;12630:13;;12472:177;-1:-1:-1;;;;12472:177:1:o;12654:128::-;;12725:1;12721:6;12718:1;12715:13;12712:2;;;12731:18;;:::i;:::-;-1:-1:-1;12767:9:1;;12702:80::o;12787:120::-;;12853:1;12843:2;;12858:18;;:::i;:::-;-1:-1:-1;12892:9:1;;12833:74::o;12912:191::-;;12977:10;13014:2;13011:1;13007:10;13036:3;13026:2;;13043:18;;:::i;:::-;13081:10;;13077:20;;;;;12957:146;-1:-1:-1;;12957:146:1:o;13108:168::-;;13214:1;13210;13206:6;13202:14;13199:1;13196:21;13191:1;13184:9;13177:17;13173:45;13170:2;;;13221:18;;:::i;:::-;-1:-1:-1;13261:9:1;;13160:116::o;13281:217::-;;13349:6;13405:10;;;;13375;;13427:12;;;13424:2;;;13442:18;;:::i;:::-;13479:13;;13329:169;-1:-1:-1;;;13329:169:1:o;13503:125::-;;13571:1;13568;13565:8;13562:2;;;13576:18;;:::i;:::-;-1:-1:-1;13613:9:1;;13552:76::o;13633:380::-;13718:1;13708:12;;13765:1;13755:12;;;13776:2;;13830:4;13822:6;13818:17;13808:27;;13776:2;13883;13875:6;13872:14;13852:18;13849:38;13846:2;;;13929:10;13924:3;13920:20;13917:1;13910:31;13964:4;13961:1;13954:15;13992:4;13989:1;13982:15;13846:2;;13688:325;;;:::o;14018:175::-;;14099:4;14092:5;14088:16;14128:4;14119:7;14116:17;14113:2;;;14136:18;;:::i;:::-;14185:1;14172:15;;14063:130;-1:-1:-1;;14063:130:1:o;14198:127::-;14259:10;14254:3;14250:20;14247:1;14240:31;14290:4;14287:1;14280:15;14314:4;14311:1;14304:15;14330:127;14391:10;14386:3;14382:20;14379:1;14372:31;14422:4;14419:1;14412:15;14446:4;14443:1;14436:15

Swarm Source

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