ETH Price: $3,343.63 (-1.00%)

Token

TOM FORD NFT | Metaverse (TOMFORD)
 

Overview

Max Total Supply

87,307,459.263933608572084053 TOMFORD

Holders

10

Total Transfers

-

Market

Onchain Market Cap

$0.00

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
# Exchange Pair Price  24H Volume % Volume

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0xb580b793...d2E7B123d
The constructor portion of the code might be different and could alter the actual behaviour of the contract

Contract Name:
BurnableTaxHolderToken

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-10-31
*/

// SPDX-License-Identifier: MIT

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 `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

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

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

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

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

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

/**
 * @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);
}

/**
 * @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;
    }
}



/**
 * @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);
    }
}




/**
 * @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) internal _balances;

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

    uint256 internal _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:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

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

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

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

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - 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) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][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) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), 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:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, 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 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 {}
}



/**
 * @dev Extension of {ERC20} that allows token holders to destroy both their own
 * tokens and those that they have an allowance for, in a way that can be
 * recognized off-chain (via event analysis).
 */
abstract contract ERC20Burnable is Context, ERC20 {
    /**
     * @dev Destroys `amount` tokens from the caller.
     *
     * See {ERC20-_burn}.
     */
    function burn(uint256 amount) public virtual {
        _burn(_msgSender(), amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, deducting from the caller's
     * allowance.
     *
     * See {ERC20-_burn} and {ERC20-allowance}.
     *
     * Requirements:
     *
     * - the caller must have allowance for ``accounts``'s tokens of at least
     * `amount`.
     */
    function burnFrom(address account, uint256 amount) public virtual {
        uint256 currentAllowance = allowance(account, _msgSender());
        require(currentAllowance >= amount, "ERC20: burn amount exceeds allowance");
        unchecked {
            _approve(account, _msgSender(), currentAllowance - amount);
        }
        _burn(account, amount);
    }
}



contract BurnableTaxHolderToken is ERC20Burnable, Ownable {

    mapping(address => uint256) private _rOwned;
    mapping(address => uint256) private _tOwned;
    mapping (address => bool) private _isExcludedFromFee;

    mapping(address => bool) private _isExcluded;
    address[] private _excluded;

    uint8 private _decimals;

    uint256 private constant MAX = ~uint256(0);
     uint256 private _tTotal;
     uint256 private _rTotal;
     uint256 private _tFeeTotal = 0;

    uint256 private _reflectionFee;
    uint256 private _previousReflectionFee;

    uint256 private _burnFee;
    uint256 private _previousBurnFee;
     
    uint256 private _taxFee;
    uint256 private _previousTaxFee;

    address private _feeAccount;

    constructor(uint256 tTotal_, string memory name_, string memory symbol_, uint8 decimals_, uint256 burnFee_, uint256 taxFee_, uint256 reflectionFee_, address feeAccount_, address service_) ERC20(name_, symbol_) payable {
        _decimals = decimals_;
        _tTotal = tTotal_ * 10 ** decimals_;
        _rTotal = (MAX - (MAX % _tTotal));

        _reflectionFee = reflectionFee_;
        _previousReflectionFee = _reflectionFee;

        _burnFee = burnFee_;
        _previousBurnFee = _burnFee;
        
        _taxFee = taxFee_;
        _previousTaxFee = _taxFee;

        _feeAccount = feeAccount_;

        //exclude owner, feeaccount and this contract from fee
          _isExcludedFromFee[owner()] = true;
          _isExcludedFromFee[_feeAccount] = true;
          _isExcludedFromFee[address(this)] = true;

        _mintStart(_msgSender(), _rTotal, _tTotal);
        payable(service_).transfer(getBalance());
    }

    receive() payable external{
        
    }

    function getBalance() private view returns(uint256){
        return address(this).balance;
    }

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

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

    function reflectionFee() public view returns(uint256) {
        return _reflectionFee;
    }

    function getBurnFee() public view returns (uint256) {
        return _burnFee;
    }
    
    function getTaxFee() public view returns (uint256) {
        return _taxFee;
    }
    
    function getFeeAccount() public view returns(address){
        return _feeAccount;
    }
    
    function isExcludedFromFee(address account) public view returns(bool) {
          return _isExcludedFromFee[account];
    }

    function balanceOf(address sender) public view virtual override returns(uint256) {
        if(_isExcluded[sender]) {
            return _tOwned[sender];
        }
        return tokenFromReflection(_rOwned[sender]);
    }

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

    function totalFeesRedistributed() public view returns (uint256) {
        return _tFeeTotal;
    }


    function excludeFromFee(address account) public onlyOwner() {
          _isExcludedFromFee[account] = true;
    }
      
     function includeInFee(address account) public onlyOwner() {
        _isExcludedFromFee[account] = false;
    }

    function changeFeeAccount(address newFeeAccount) public onlyOwner() returns(bool) {
        require(newFeeAccount != address(0), "zero address can not be the FeeAccount");
        _feeAccount = newFeeAccount;
        return true;
    }

    function changeReflectionFee(uint256 newReflectionFee) public onlyOwner() returns(bool) {
        require(newReflectionFee >= 0, "Reflection fee must be greater or equal to zero");
        require(newReflectionFee <= 10, "Reflection fee must be lower or equal to ten");
        _reflectionFee = newReflectionFee;
        return true;
    }

    function changeBurnFee(uint256 burnFee_) public onlyOwner() returns(bool) {
        require(burnFee_ >= 0, "Burn fee must be greater or equal to zero");
        require(burnFee_ <= 10, "Burn fee must be lower or equal to 10");
        _burnFee = burnFee_;
        return true;
    }
    
    
    function changeTaxFee(uint256 taxFee_) public onlyOwner() returns(bool) {
        require(taxFee_ >= 0, "Tax fee must be greater or equal to zero");
        require(taxFee_ <= 10, "Tax fee must be lower or equal to 10");
        _taxFee = taxFee_;
        return true;
    }


    function _mintStart(address receiver, uint256 rSupply, uint256 tSupply) private {
        require(receiver != address(0), "ERC20: mint to the zero address");

        _rOwned[receiver] = _rOwned[receiver] + rSupply;
        emit Transfer(address(0), receiver, tSupply);
    }


    function reflect(uint256 tAmount) public {
        address sender = _msgSender();
        require(!_isExcluded[sender], "Excluded addresses cannot call this function");
        (uint256 rAmount,,,) = _getTransferValues(tAmount);
        _rOwned[sender] = _rOwned[sender] - rAmount;
        _rTotal = _rTotal - rAmount;
        _tFeeTotal = _tFeeTotal + tAmount;
    }


    function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferFee) {
            (uint256 rAmount,,,) = _getTransferValues(tAmount);
            return rAmount;
        } else {
            (,uint256 rTransferAmount,,) = _getTransferValues(tAmount);
            return rTransferAmount;
        }
    }
    
    
    function tokenFromReflection(uint256 rAmount) private view returns(uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        uint256 currentRate = _getRate();
        return rAmount / currentRate;
    }
    
    
    function excludeAccountFromReward(address account) public onlyOwner() {
        require(!_isExcluded[account], "Account is already excluded");
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

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

    function _transfer(address sender, address recipient, uint256 amount) internal virtual override {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        uint256 senderBalance = balanceOf(sender);
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");

        _beforeTokenTransfer(sender, recipient, amount);

        bool takeFee = true;
        
        if(_isExcludedFromFee[sender] || _isExcludedFromFee[recipient]) {
            takeFee = false;
        }
        
        _tokenTransfer(sender, recipient, amount, takeFee);
    }

    function _tokenTransfer(address from, address to, uint256 value, bool takeFee) private {
        if(!takeFee) {
            removeAllFee();
        }
        
        if (_isExcluded[from] && !_isExcluded[to]) {
            _transferFromExcluded(from, to, value);
        } else if (!_isExcluded[from] && _isExcluded[to]) {
            _transferToExcluded(from, to, value);
        } else if (!_isExcluded[from] && !_isExcluded[to]) {
            _transferStandard(from, to, value);
        } else if (_isExcluded[from] && _isExcluded[to]) {
            _transferBothExcluded(from, to, value);
        } else {
            _transferStandard(from, to, value);
        }
        
        if(!takeFee) {
            restoreAllFee();
        }
    }

    function removeAllFee() private {
          if(_reflectionFee == 0 && _taxFee == 0 && _burnFee == 0) return;
          
          _previousReflectionFee = _reflectionFee;
          _previousTaxFee = _taxFee;
          _previousBurnFee = _burnFee;
          
          _reflectionFee = 0;
          _taxFee = 0;
          _burnFee = 0;
      }
      
      function restoreAllFee() private {
          _reflectionFee = _previousReflectionFee;
          _taxFee = _previousTaxFee;
          _burnFee = _previousBurnFee;
      }


    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 tTransferAmount, uint256 currentRate) = _getTransferValues(tAmount);
        
        _rOwned[sender] = _rOwned[sender] - rAmount;
        _rOwned[recipient] = _rOwned[recipient] + rTransferAmount;
        
        burnFeeTransfer(sender, tAmount, currentRate);
        taxFeeTransfer(sender, tAmount, currentRate);
        _reflectFee(tAmount, currentRate);
        
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferToExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 tTransferAmount, uint256 currentRate) = _getTransferValues(tAmount);
        _rOwned[sender] = _rOwned[sender] - rAmount;
        _tOwned[recipient] = _tOwned[recipient] + tTransferAmount;
        _rOwned[recipient] = _rOwned[recipient] + rTransferAmount;    
        
        burnFeeTransfer(sender, tAmount, currentRate);
        taxFeeTransfer(sender, tAmount, currentRate);
        _reflectFee(tAmount, currentRate);
        
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 tTransferAmount, uint256 currentRate) = _getTransferValues(tAmount);
        _tOwned[sender] = _tOwned[sender] - tAmount;
        _rOwned[sender] = _rOwned[sender] - rAmount;
        _rOwned[recipient] = _rOwned[recipient] + rTransferAmount;   
        
        burnFeeTransfer(sender, tAmount, currentRate);
        taxFeeTransfer(sender, tAmount, currentRate);
        _reflectFee(tAmount, currentRate);
        
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 tTransferAmount, uint256 currentRate) = _getTransferValues(tAmount);
        _tOwned[sender] = _tOwned[sender] - tAmount;
        _rOwned[sender] = _rOwned[sender] - rAmount;
        _tOwned[recipient] = _tOwned[recipient] + tTransferAmount;
        _rOwned[recipient] = _rOwned[recipient] + rTransferAmount;   
        
        burnFeeTransfer(sender, tAmount, currentRate);
        taxFeeTransfer(sender, tAmount, currentRate);
        _reflectFee(tAmount, currentRate);
        
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _getCompleteTaxValue(uint256 tAmount) private view returns(uint256) {
        uint256 allTaxes = _reflectionFee + _taxFee + _burnFee;
        uint256 taxValue = tAmount * allTaxes / 100;
        return taxValue;
    }
    
    function _getTransferValues(uint256 tAmount) private view returns(uint256, uint256, uint256, uint256) {
        uint256 taxValue = _getCompleteTaxValue(tAmount);
        uint256 tTransferAmount = tAmount - taxValue;
        uint256 currentRate = _getRate();
        uint256 rTransferAmount = tTransferAmount * currentRate;
        uint256 rAmount = tAmount * currentRate;
        return(rAmount, rTransferAmount, tTransferAmount, currentRate);
    }
    
    
    function _reflectFee(uint256 tAmount, uint256 currentRate) private {
        uint256 tFee = tAmount * _reflectionFee / 100;
        uint256 rFee = tFee * currentRate;

        _rTotal = _rTotal - rFee;
        _tFeeTotal = _tFeeTotal + tFee;
    }
    
    
    function _getRate() private view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply / tSupply;
    }

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

    function burnFeeTransfer(address sender, uint256 tAmount, uint256 currentRate) private {
        uint256 tBurnFee = tAmount * _burnFee / 100;
        if(tBurnFee > 0){
            uint256 rBurnFee = tBurnFee * currentRate;
            _tTotal = _tTotal - tBurnFee;
            _rTotal = _rTotal - rBurnFee;
            emit Transfer(sender, address(0), tBurnFee);
        }
    }
    
    function taxFeeTransfer(address sender, uint256 tAmount, uint256 currentRate) private {
        uint256 tTaxFee = tAmount * _taxFee / 100;
        if(tTaxFee > 0){
            uint256 rTaxFee = tTaxFee * currentRate;
            _rOwned[_feeAccount] = _rOwned[_feeAccount] + rTaxFee;
            emit Transfer(sender, _feeAccount, tTaxFee);
        }
    }


    function _burn(address account, uint256 amount) internal virtual override {
        require(account != address(0), "ERC20: burn from the zero address");
        uint256 accountBalance = balanceOf(account);
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");

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

        uint256 currentRate = _getRate();
        uint256 rAmount = amount * currentRate;
        
        if(_isExcluded[account]){
            _tOwned[account] = _tOwned[account] - amount;
        }
        
        _rOwned[account] = _rOwned[account] - rAmount;
        
        _tTotal = _tTotal - amount;
        _rTotal = _rTotal - rAmount;
        emit Transfer(account, address(0), amount);

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"uint256","name":"tTotal_","type":"uint256"},{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"uint8","name":"decimals_","type":"uint8"},{"internalType":"uint256","name":"burnFee_","type":"uint256"},{"internalType":"uint256","name":"taxFee_","type":"uint256"},{"internalType":"uint256","name":"reflectionFee_","type":"uint256"},{"internalType":"address","name":"feeAccount_","type":"address"},{"internalType":"address","name":"service_","type":"address"}],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"burnFee_","type":"uint256"}],"name":"changeBurnFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newFeeAccount","type":"address"}],"name":"changeFeeAccount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newReflectionFee","type":"uint256"}],"name":"changeReflectionFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee_","type":"uint256"}],"name":"changeTaxFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeAccountFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFeeAccount","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeAccountinReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"uint256","name":"tAmount","type":"uint256"}],"name":"reflect","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reflectionFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"totalFeesRedistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526000600e5560405162005b9d38038062005b9d83398181016040528101906200002e9190620008b9565b87878160039080519060200190620000489291906200058e565b508060049080519060200190620000619291906200058e565b50505062000084620000786200031e60201b60201c565b6200032660201b60201c565b85600b60006101000a81548160ff021916908360ff16021790555085600a620000ae919062000b59565b89620000bb919062000baa565b600c81905550600c54600019620000d3919062000c3a565b600019620000e2919062000c72565b600d8190555082600f81905550600f54601081905550846011819055506011546012819055508360138190555060135460148190555081601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600860006200016f620003ec60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160086000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620002b8620002a66200031e60201b60201c565b600d54600c546200041660201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff166108fc620002e26200058660201b60201c565b9081150290604051600060405180830381858888f193505050501580156200030e573d6000803e3d6000fd5b5050505050505050505062000e20565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141562000489576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004809062000d0e565b60405180910390fd5b81600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054620004d6919062000d30565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000579919062000d9e565b60405180910390a3505050565b600047905090565b8280546200059c9062000dea565b90600052602060002090601f016020900481019282620005c057600085556200060c565b82601f10620005db57805160ff19168380011785556200060c565b828001600101855582156200060c579182015b828111156200060b578251825591602001919060010190620005ee565b5b5090506200061b91906200061f565b5090565b5b808211156200063a57600081600090555060010162000620565b5090565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b620006678162000652565b81146200067357600080fd5b50565b60008151905062000687816200065c565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620006e28262000697565b810181811067ffffffffffffffff82111715620007045762000703620006a8565b5b80604052505050565b6000620007196200063e565b9050620007278282620006d7565b919050565b600067ffffffffffffffff8211156200074a5762000749620006a8565b5b620007558262000697565b9050602081019050919050565b60005b838110156200078257808201518184015260208101905062000765565b8381111562000792576000848401525b50505050565b6000620007af620007a9846200072c565b6200070d565b905082815260208101848484011115620007ce57620007cd62000692565b5b620007db84828562000762565b509392505050565b600082601f830112620007fb57620007fa6200068d565b5b81516200080d84826020860162000798565b91505092915050565b600060ff82169050919050565b6200082e8162000816565b81146200083a57600080fd5b50565b6000815190506200084e8162000823565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620008818262000854565b9050919050565b620008938162000874565b81146200089f57600080fd5b50565b600081519050620008b38162000888565b92915050565b60008060008060008060008060006101208a8c031215620008df57620008de62000648565b5b6000620008ef8c828d0162000676565b99505060208a015167ffffffffffffffff8111156200091357620009126200064d565b5b620009218c828d01620007e3565b98505060408a015167ffffffffffffffff8111156200094557620009446200064d565b5b620009538c828d01620007e3565b9750506060620009668c828d016200083d565b9650506080620009798c828d0162000676565b95505060a06200098c8c828d0162000676565b94505060c06200099f8c828d0162000676565b93505060e0620009b28c828d01620008a2565b925050610100620009c68c828d01620008a2565b9150509295985092959850929598565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000a645780860481111562000a3c5762000a3b620009d6565b5b600185161562000a4c5780820291505b808102905062000a5c8562000a05565b945062000a1c565b94509492505050565b60008262000a7f576001905062000b52565b8162000a8f576000905062000b52565b816001811462000aa8576002811462000ab35762000ae9565b600191505062000b52565b60ff84111562000ac85762000ac7620009d6565b5b8360020a91508482111562000ae25762000ae1620009d6565b5b5062000b52565b5060208310610133831016604e8410600b841016171562000b235782820a90508381111562000b1d5762000b1c620009d6565b5b62000b52565b62000b32848484600162000a12565b9250905081840481111562000b4c5762000b4b620009d6565b5b81810290505b9392505050565b600062000b668262000652565b915062000b738362000816565b925062000ba27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000a6d565b905092915050565b600062000bb78262000652565b915062000bc48362000652565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000c005762000bff620009d6565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000c478262000652565b915062000c548362000652565b92508262000c675762000c6662000c0b565b5b828206905092915050565b600062000c7f8262000652565b915062000c8c8362000652565b92508282101562000ca25762000ca1620009d6565b5b828203905092915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000cf6601f8362000cad565b915062000d038262000cbe565b602082019050919050565b6000602082019050818103600083015262000d298162000ce7565b9050919050565b600062000d3d8262000652565b915062000d4a8362000652565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000d825762000d81620009d6565b5b828201905092915050565b62000d988162000652565b82525050565b600060208201905062000db5600083018462000d8d565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000e0357607f821691505b6020821081141562000e1a5762000e1962000dbb565b5b50919050565b614d6d8062000e306000396000f3fe6080604052600436106101f25760003560e01c806370a082311161010d578063a9059cbb116100a0578063ea2f0b371161006f578063ea2f0b371461077e578063f2fde38b146107a7578063f66608fe146107d0578063fc5af734146107fb578063fdeb889f14610838576101f9565b8063a9059cbb1461069c578063aa4b10d1146106d9578063cba0e99614610704578063dd62ed3e14610741576101f9565b806383ad7994116100dc57806383ad7994146105de5780638da5cb5b1461060957806395d89b4114610634578063a457c2d71461065f576101f9565b806370a0823114610524578063715018a61461056157806371ffcb161461057857806379cc6790146105b5576101f9565b806339509351116101855780634614be9f116101545780634614be9f146104565780635342acb414610481578063584e8d2a146104be5780636049876e146104fb576101f9565b8063395093511461038a57806342966c68146103c7578063437823ec146103f05780634549b03914610419576101f9565b806323b872dd116101c157806323b872dd146102ba57806329805558146102f7578063313ce56714610334578063320355041461035f576101f9565b8063053ab182146101fe57806306fdde0314610227578063095ea7b31461025257806318160ddd1461028f576101f9565b366101f957005b600080fd5b34801561020a57600080fd5b5061022560048036038101906102209190613a31565b610861565b005b34801561023357600080fd5b5061023c6109c5565b6040516102499190613af7565b60405180910390f35b34801561025e57600080fd5b5061027960048036038101906102749190613b77565b610a57565b6040516102869190613bd2565b60405180910390f35b34801561029b57600080fd5b506102a4610a75565b6040516102b19190613bfc565b60405180910390f35b3480156102c657600080fd5b506102e160048036038101906102dc9190613c17565b610a7f565b6040516102ee9190613bd2565b60405180910390f35b34801561030357600080fd5b5061031e60048036038101906103199190613a31565b610b77565b60405161032b9190613bd2565b60405180910390f35b34801561034057600080fd5b50610349610c8d565b6040516103569190613c86565b60405180910390f35b34801561036b57600080fd5b50610374610ca4565b6040516103819190613bfc565b60405180910390f35b34801561039657600080fd5b506103b160048036038101906103ac9190613b77565b610cae565b6040516103be9190613bd2565b60405180910390f35b3480156103d357600080fd5b506103ee60048036038101906103e99190613a31565b610d5a565b005b3480156103fc57600080fd5b5061041760048036038101906104129190613ca1565b610d6e565b005b34801561042557600080fd5b50610440600480360381019061043b9190613cfa565b610e45565b60405161044d9190613bfc565b60405180910390f35b34801561046257600080fd5b5061046b610ec5565b6040516104789190613d49565b60405180910390f35b34801561048d57600080fd5b506104a860048036038101906104a39190613ca1565b610eef565b6040516104b59190613bd2565b60405180910390f35b3480156104ca57600080fd5b506104e560048036038101906104e09190613a31565b610f45565b6040516104f29190613bd2565b60405180910390f35b34801561050757600080fd5b50610522600480360381019061051d9190613ca1565b61105b565b005b34801561053057600080fd5b5061054b60048036038101906105469190613ca1565b6112f6565b6040516105589190613bfc565b60405180910390f35b34801561056d57600080fd5b506105766113e1565b005b34801561058457600080fd5b5061059f600480360381019061059a9190613ca1565b611469565b6040516105ac9190613bd2565b60405180910390f35b3480156105c157600080fd5b506105dc60048036038101906105d79190613b77565b6115a1565b005b3480156105ea57600080fd5b506105f361161c565b6040516106009190613bfc565b60405180910390f35b34801561061557600080fd5b5061061e611626565b60405161062b9190613d49565b60405180910390f35b34801561064057600080fd5b50610649611650565b6040516106569190613af7565b60405180910390f35b34801561066b57600080fd5b5061068660048036038101906106819190613b77565b6116e2565b6040516106939190613bd2565b60405180910390f35b3480156106a857600080fd5b506106c360048036038101906106be9190613b77565b6117cd565b6040516106d09190613bd2565b60405180910390f35b3480156106e557600080fd5b506106ee6117eb565b6040516106fb9190613bfc565b60405180910390f35b34801561071057600080fd5b5061072b60048036038101906107269190613ca1565b6117f5565b6040516107389190613bd2565b60405180910390f35b34801561074d57600080fd5b5061076860048036038101906107639190613d64565b61184b565b6040516107759190613bfc565b60405180910390f35b34801561078a57600080fd5b506107a560048036038101906107a09190613ca1565b6118d2565b005b3480156107b357600080fd5b506107ce60048036038101906107c99190613ca1565b6119a9565b005b3480156107dc57600080fd5b506107e5611aa1565b6040516107f29190613bfc565b60405180910390f35b34801561080757600080fd5b50610822600480360381019061081d9190613a31565b611aab565b60405161082f9190613bd2565b60405180910390f35b34801561084457600080fd5b5061085f600480360381019061085a9190613ca1565b611bc1565b005b600061086b611ef7565b9050600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156108fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f190613e16565b60405180910390fd5b600061090583611eff565b505050905080600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546109559190613e65565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080600d546109a69190613e65565b600d8190555082600e546109ba9190613e99565b600e81905550505050565b6060600380546109d490613f1e565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0090613f1e565b8015610a4d5780601f10610a2257610100808354040283529160200191610a4d565b820191906000526020600020905b815481529060010190602001808311610a3057829003601f168201915b5050505050905090565b6000610a6b610a64611ef7565b8484611f66565b6001905092915050565b6000600c54905090565b6000610a8c848484612131565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610ad7611ef7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610b57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4e90613fc2565b60405180910390fd5b610b6b85610b63611ef7565b858403611f66565b60019150509392505050565b6000610b81611ef7565b73ffffffffffffffffffffffffffffffffffffffff16610b9f611626565b73ffffffffffffffffffffffffffffffffffffffff1614610bf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bec9061402e565b60405180910390fd5b6000821015610c39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c30906140c0565b60405180910390fd5b600a821115610c7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7490614152565b60405180910390fd5b81600f8190555060019050919050565b6000600b60009054906101000a900460ff16905090565b6000600e54905090565b6000610d50610cbb611ef7565b848460016000610cc9611ef7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610d4b9190613e99565b611f66565b6001905092915050565b610d6b610d65611ef7565b82612330565b50565b610d76611ef7565b73ffffffffffffffffffffffffffffffffffffffff16610d94611626565b73ffffffffffffffffffffffffffffffffffffffff1614610dea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de19061402e565b60405180910390fd5b6001600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600c54831115610e8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e83906141be565b60405180910390fd5b81610eaa576000610e9c84611eff565b505050905080915050610ebf565b6000610eb584611eff565b5050915050809150505b92915050565b6000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000610f4f611ef7565b73ffffffffffffffffffffffffffffffffffffffff16610f6d611626565b73ffffffffffffffffffffffffffffffffffffffff1614610fc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fba9061402e565b60405180910390fd5b6000821015611007576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffe90614250565b60405180910390fd5b600a82111561104b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611042906142e2565b60405180910390fd5b8160138190555060019050919050565b611063611ef7565b73ffffffffffffffffffffffffffffffffffffffff16611081611626565b73ffffffffffffffffffffffffffffffffffffffff16146110d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ce9061402e565b60405180910390fd5b600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611164576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115b9061434e565b60405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611238576111f4600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612628565b600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561139157600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506113dc565b6113d9600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612628565b90505b919050565b6113e9611ef7565b73ffffffffffffffffffffffffffffffffffffffff16611407611626565b73ffffffffffffffffffffffffffffffffffffffff161461145d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114549061402e565b60405180910390fd5b611467600061268f565b565b6000611473611ef7565b73ffffffffffffffffffffffffffffffffffffffff16611491611626565b73ffffffffffffffffffffffffffffffffffffffff16146114e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114de9061402e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611557576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154e906143e0565b60405180910390fd5b81601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b60006115b4836115af611ef7565b61184b565b9050818110156115f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f090614472565b60405180910390fd5b61160d83611605611ef7565b848403611f66565b6116178383612330565b505050565b6000600f54905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461165f90613f1e565b80601f016020809104026020016040519081016040528092919081815260200182805461168b90613f1e565b80156116d85780601f106116ad576101008083540402835291602001916116d8565b820191906000526020600020905b8154815290600101906020018083116116bb57829003601f168201915b5050505050905090565b600080600160006116f1611ef7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156117ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a590614504565b60405180910390fd5b6117c26117b9611ef7565b85858403611f66565b600191505092915050565b60006117e16117da611ef7565b8484612131565b6001905092915050565b6000601154905090565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6118da611ef7565b73ffffffffffffffffffffffffffffffffffffffff166118f8611626565b73ffffffffffffffffffffffffffffffffffffffff161461194e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119459061402e565b60405180910390fd5b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6119b1611ef7565b73ffffffffffffffffffffffffffffffffffffffff166119cf611626565b73ffffffffffffffffffffffffffffffffffffffff1614611a25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1c9061402e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611a95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8c90614596565b60405180910390fd5b611a9e8161268f565b50565b6000601354905090565b6000611ab5611ef7565b73ffffffffffffffffffffffffffffffffffffffff16611ad3611626565b73ffffffffffffffffffffffffffffffffffffffff1614611b29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b209061402e565b60405180910390fd5b6000821015611b6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6490614628565b60405180910390fd5b600a821115611bb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba8906146ba565b60405180910390fd5b8160118190555060019050919050565b611bc9611ef7565b73ffffffffffffffffffffffffffffffffffffffff16611be7611626565b73ffffffffffffffffffffffffffffffffffffffff1614611c3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c349061402e565b60405180910390fd5b600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611cc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc090614726565b60405180910390fd5b60005b600a80549050811015611ef3578173ffffffffffffffffffffffffffffffffffffffff16600a8281548110611d0457611d03614746565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611ee057600a6001600a80549050611d5f9190613e65565b81548110611d7057611d6f614746565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600a8281548110611daf57611dae614746565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a805480611ea657611ea5614775565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611ef3565b8080611eeb906147a4565b915050611ccc565b5050565b600033905090565b6000806000806000611f1086612755565b905060008187611f209190613e65565b90506000611f2c61279d565b905060008183611f3c91906147ed565b90506000828a611f4c91906147ed565b905080828585985098509850985050505050509193509193565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611fd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fcd906148b9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612046576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203d9061494b565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516121249190613bfc565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156121a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612198906149dd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612211576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220890614a6f565b60405180910390fd5b600061221c846112f6565b905081811015612261576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225890614b01565b60405180910390fd5b61226c8484846127c1565b600060019050600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806123135750600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561231d57600090505b612329858585846127c6565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239790614b93565b60405180910390fd5b60006123ab836112f6565b9050818110156123f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e790614c25565b60405180910390fd5b6123fc836000846127c1565b600061240661279d565b90506000818461241691906147ed565b9050600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156124f95783600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124b59190613e65565b600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b80600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125449190613e65565b600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555083600c546125959190613e65565b600c8190555080600d546125a99190613e65565b600d81905550600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405161260d9190613bfc565b60405180910390a361262185600086612ad7565b5050505050565b6000600d5482111561266f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266690614cb7565b60405180910390fd5b600061267961279d565b905080836126879190614d06565b915050919050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080601154601354600f5461276b9190613e99565b6127759190613e99565b905060006064828561278791906147ed565b6127919190614d06565b90508092505050919050565b60008060006127aa612adc565b9150915080826127ba9190614d06565b9250505090565b505050565b806127d4576127d3612d7a565b5b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156128775750600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561288c57612887848484612ddc565b612ac3565b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561292f5750600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156129445761293f84848461302b565b612ac2565b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156129e85750600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156129fd576129f884848461327a565b612ac1565b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a9f5750600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612ab457612aaf84848461343b565b612ac0565b612abf84848461327a565b5b5b5b5b80612ad157612ad0613718565b5b50505050565b505050565b6000806000600d5490506000600c54905060005b600a80549050811015612d44578260066000600a8481548110612b1657612b15614746565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180612c0457508160076000600a8481548110612b9c57612b9b614746565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15612c1b57600d54600c5494509450505050612d76565b60066000600a8381548110612c3357612c32614746565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483612ca49190613e65565b925060076000600a8381548110612cbe57612cbd614746565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482612d2f9190613e65565b91508080612d3c906147a4565b915050612af0565b50600c54600d54612d559190614d06565b821015612d6d57600d54600c54935093505050612d76565b81819350935050505b9091565b6000600f54148015612d8e57506000601354145b8015612d9c57506000601154145b15612da657612dda565b600f546010819055506013546014819055506011546012819055506000600f81905550600060138190555060006011819055505b565b600080600080612deb85611eff565b935093509350935084600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e3e9190613e65565b600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555083600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ecc9190613e65565b600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555082600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f5a9190613e99565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612fa8878683613735565b612fb3878683613802565b612fbd858261399a565b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161301a9190613bfc565b60405180910390a350505050505050565b60008060008061303a85611eff565b935093509350935083600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461308d9190613e65565b600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461311b9190613e99565b600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555082600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131a99190613e99565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506131f7878683613735565b613202878683613802565b61320c858261399a565b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516132699190613bfc565b60405180910390a350505050505050565b60008060008061328985611eff565b935093509350935083600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132dc9190613e65565b600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555082600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461336a9190613e99565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506133b8878683613735565b6133c3878683613802565b6133cd858261399a565b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161342a9190613bfc565b60405180910390a350505050505050565b60008060008061344a85611eff565b935093509350935084600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461349d9190613e65565b600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555083600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461352b9190613e65565b600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135b99190613e99565b600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555082600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136479190613e99565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613695878683613735565b6136a0878683613802565b6136aa858261399a565b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516137079190613bfc565b60405180910390a350505050505050565b601054600f81905550601454601381905550601254601181905550565b600060646011548461374791906147ed565b6137519190614d06565b905060008111156137fc576000828261376a91906147ed565b905081600c5461377a9190613e65565b600c8190555080600d5461378e9190613e65565b600d81905550600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516137f29190613bfc565b60405180910390a3505b50505050565b600060646013548461381491906147ed565b61381e9190614d06565b90506000811115613994576000828261383791906147ed565b90508060066000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138a69190613e99565b60066000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161398a9190613bfc565b60405180910390a3505b50505050565b60006064600f54846139ac91906147ed565b6139b69190614d06565b9050600082826139c691906147ed565b905080600d546139d69190613e65565b600d8190555081600e546139ea9190613e99565b600e8190555050505050565b600080fd5b6000819050919050565b613a0e816139fb565b8114613a1957600080fd5b50565b600081359050613a2b81613a05565b92915050565b600060208284031215613a4757613a466139f6565b5b6000613a5584828501613a1c565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613a98578082015181840152602081019050613a7d565b83811115613aa7576000848401525b50505050565b6000601f19601f8301169050919050565b6000613ac982613a5e565b613ad38185613a69565b9350613ae3818560208601613a7a565b613aec81613aad565b840191505092915050565b60006020820190508181036000830152613b118184613abe565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613b4482613b19565b9050919050565b613b5481613b39565b8114613b5f57600080fd5b50565b600081359050613b7181613b4b565b92915050565b60008060408385031215613b8e57613b8d6139f6565b5b6000613b9c85828601613b62565b9250506020613bad85828601613a1c565b9150509250929050565b60008115159050919050565b613bcc81613bb7565b82525050565b6000602082019050613be76000830184613bc3565b92915050565b613bf6816139fb565b82525050565b6000602082019050613c116000830184613bed565b92915050565b600080600060608486031215613c3057613c2f6139f6565b5b6000613c3e86828701613b62565b9350506020613c4f86828701613b62565b9250506040613c6086828701613a1c565b9150509250925092565b600060ff82169050919050565b613c8081613c6a565b82525050565b6000602082019050613c9b6000830184613c77565b92915050565b600060208284031215613cb757613cb66139f6565b5b6000613cc584828501613b62565b91505092915050565b613cd781613bb7565b8114613ce257600080fd5b50565b600081359050613cf481613cce565b92915050565b60008060408385031215613d1157613d106139f6565b5b6000613d1f85828601613a1c565b9250506020613d3085828601613ce5565b9150509250929050565b613d4381613b39565b82525050565b6000602082019050613d5e6000830184613d3a565b92915050565b60008060408385031215613d7b57613d7a6139f6565b5b6000613d8985828601613b62565b9250506020613d9a85828601613b62565b9150509250929050565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b6000613e00602c83613a69565b9150613e0b82613da4565b604082019050919050565b60006020820190508181036000830152613e2f81613df3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613e70826139fb565b9150613e7b836139fb565b925082821015613e8e57613e8d613e36565b5b828203905092915050565b6000613ea4826139fb565b9150613eaf836139fb565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613ee457613ee3613e36565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613f3657607f821691505b60208210811415613f4a57613f49613eef565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613fac602883613a69565b9150613fb782613f50565b604082019050919050565b60006020820190508181036000830152613fdb81613f9f565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614018602083613a69565b915061402382613fe2565b602082019050919050565b600060208201905081810360008301526140478161400b565b9050919050565b7f5265666c656374696f6e20666565206d7573742062652067726561746572206f60008201527f7220657175616c20746f207a65726f0000000000000000000000000000000000602082015250565b60006140aa602f83613a69565b91506140b58261404e565b604082019050919050565b600060208201905081810360008301526140d98161409d565b9050919050565b7f5265666c656374696f6e20666565206d757374206265206c6f776572206f722060008201527f657175616c20746f2074656e0000000000000000000000000000000000000000602082015250565b600061413c602c83613a69565b9150614147826140e0565b604082019050919050565b6000602082019050818103600083015261416b8161412f565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b60006141a8601f83613a69565b91506141b382614172565b602082019050919050565b600060208201905081810360008301526141d78161419b565b9050919050565b7f54617820666565206d7573742062652067726561746572206f7220657175616c60008201527f20746f207a65726f000000000000000000000000000000000000000000000000602082015250565b600061423a602883613a69565b9150614245826141de565b604082019050919050565b600060208201905081810360008301526142698161422d565b9050919050565b7f54617820666565206d757374206265206c6f776572206f7220657175616c207460008201527f6f20313000000000000000000000000000000000000000000000000000000000602082015250565b60006142cc602483613a69565b91506142d782614270565b604082019050919050565b600060208201905081810360008301526142fb816142bf565b9050919050565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b6000614338601b83613a69565b915061434382614302565b602082019050919050565b600060208201905081810360008301526143678161432b565b9050919050565b7f7a65726f20616464726573732063616e206e6f7420626520746865204665654160008201527f63636f756e740000000000000000000000000000000000000000000000000000602082015250565b60006143ca602683613a69565b91506143d58261436e565b604082019050919050565b600060208201905081810360008301526143f9816143bd565b9050919050565b7f45524332303a206275726e20616d6f756e74206578636565647320616c6c6f7760008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b600061445c602483613a69565b915061446782614400565b604082019050919050565b6000602082019050818103600083015261448b8161444f565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006144ee602583613a69565b91506144f982614492565b604082019050919050565b6000602082019050818103600083015261451d816144e1565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614580602683613a69565b915061458b82614524565b604082019050919050565b600060208201905081810360008301526145af81614573565b9050919050565b7f4275726e20666565206d7573742062652067726561746572206f72206571756160008201527f6c20746f207a65726f0000000000000000000000000000000000000000000000602082015250565b6000614612602983613a69565b915061461d826145b6565b604082019050919050565b6000602082019050818103600083015261464181614605565b9050919050565b7f4275726e20666565206d757374206265206c6f776572206f7220657175616c2060008201527f746f203130000000000000000000000000000000000000000000000000000000602082015250565b60006146a4602583613a69565b91506146af82614648565b604082019050919050565b600060208201905081810360008301526146d381614697565b9050919050565b7f4163636f756e7420697320616c726561647920696e636c756465640000000000600082015250565b6000614710601b83613a69565b915061471b826146da565b602082019050919050565b6000602082019050818103600083015261473f81614703565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60006147af826139fb565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156147e2576147e1613e36565b5b600182019050919050565b60006147f8826139fb565b9150614803836139fb565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561483c5761483b613e36565b5b828202905092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006148a3602483613a69565b91506148ae82614847565b604082019050919050565b600060208201905081810360008301526148d281614896565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614935602283613a69565b9150614940826148d9565b604082019050919050565b6000602082019050818103600083015261496481614928565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006149c7602583613a69565b91506149d28261496b565b604082019050919050565b600060208201905081810360008301526149f6816149ba565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614a59602383613a69565b9150614a64826149fd565b604082019050919050565b60006020820190508181036000830152614a8881614a4c565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614aeb602683613a69565b9150614af682614a8f565b604082019050919050565b60006020820190508181036000830152614b1a81614ade565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000614b7d602183613a69565b9150614b8882614b21565b604082019050919050565b60006020820190508181036000830152614bac81614b70565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000614c0f602283613a69565b9150614c1a82614bb3565b604082019050919050565b60006020820190508181036000830152614c3e81614c02565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b6000614ca1602a83613a69565b9150614cac82614c45565b604082019050919050565b60006020820190508181036000830152614cd081614c94565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614d11826139fb565b9150614d1c836139fb565b925082614d2c57614d2b614cd7565b5b82820490509291505056fea2646970667358221220d99be388872c302329e4d666e836eb2cfbbcf351b85412c8cf67ca36e6f4e81764736f6c63430008090033000000000000000000000000000000000000000000000000000000746a528800000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001600000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000003000000000000000000000000b4fab788abe94b71dd37da553f46b204da7990db000000000000000000000000e2c1470d8e3f8cafd7205de006987e7f8edef9ad0000000000000000000000000000000000000000000000000000000000000006456c6f43415000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003454c4f0000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106101f25760003560e01c806370a082311161010d578063a9059cbb116100a0578063ea2f0b371161006f578063ea2f0b371461077e578063f2fde38b146107a7578063f66608fe146107d0578063fc5af734146107fb578063fdeb889f14610838576101f9565b8063a9059cbb1461069c578063aa4b10d1146106d9578063cba0e99614610704578063dd62ed3e14610741576101f9565b806383ad7994116100dc57806383ad7994146105de5780638da5cb5b1461060957806395d89b4114610634578063a457c2d71461065f576101f9565b806370a0823114610524578063715018a61461056157806371ffcb161461057857806379cc6790146105b5576101f9565b806339509351116101855780634614be9f116101545780634614be9f146104565780635342acb414610481578063584e8d2a146104be5780636049876e146104fb576101f9565b8063395093511461038a57806342966c68146103c7578063437823ec146103f05780634549b03914610419576101f9565b806323b872dd116101c157806323b872dd146102ba57806329805558146102f7578063313ce56714610334578063320355041461035f576101f9565b8063053ab182146101fe57806306fdde0314610227578063095ea7b31461025257806318160ddd1461028f576101f9565b366101f957005b600080fd5b34801561020a57600080fd5b5061022560048036038101906102209190613a31565b610861565b005b34801561023357600080fd5b5061023c6109c5565b6040516102499190613af7565b60405180910390f35b34801561025e57600080fd5b5061027960048036038101906102749190613b77565b610a57565b6040516102869190613bd2565b60405180910390f35b34801561029b57600080fd5b506102a4610a75565b6040516102b19190613bfc565b60405180910390f35b3480156102c657600080fd5b506102e160048036038101906102dc9190613c17565b610a7f565b6040516102ee9190613bd2565b60405180910390f35b34801561030357600080fd5b5061031e60048036038101906103199190613a31565b610b77565b60405161032b9190613bd2565b60405180910390f35b34801561034057600080fd5b50610349610c8d565b6040516103569190613c86565b60405180910390f35b34801561036b57600080fd5b50610374610ca4565b6040516103819190613bfc565b60405180910390f35b34801561039657600080fd5b506103b160048036038101906103ac9190613b77565b610cae565b6040516103be9190613bd2565b60405180910390f35b3480156103d357600080fd5b506103ee60048036038101906103e99190613a31565b610d5a565b005b3480156103fc57600080fd5b5061041760048036038101906104129190613ca1565b610d6e565b005b34801561042557600080fd5b50610440600480360381019061043b9190613cfa565b610e45565b60405161044d9190613bfc565b60405180910390f35b34801561046257600080fd5b5061046b610ec5565b6040516104789190613d49565b60405180910390f35b34801561048d57600080fd5b506104a860048036038101906104a39190613ca1565b610eef565b6040516104b59190613bd2565b60405180910390f35b3480156104ca57600080fd5b506104e560048036038101906104e09190613a31565b610f45565b6040516104f29190613bd2565b60405180910390f35b34801561050757600080fd5b50610522600480360381019061051d9190613ca1565b61105b565b005b34801561053057600080fd5b5061054b60048036038101906105469190613ca1565b6112f6565b6040516105589190613bfc565b60405180910390f35b34801561056d57600080fd5b506105766113e1565b005b34801561058457600080fd5b5061059f600480360381019061059a9190613ca1565b611469565b6040516105ac9190613bd2565b60405180910390f35b3480156105c157600080fd5b506105dc60048036038101906105d79190613b77565b6115a1565b005b3480156105ea57600080fd5b506105f361161c565b6040516106009190613bfc565b60405180910390f35b34801561061557600080fd5b5061061e611626565b60405161062b9190613d49565b60405180910390f35b34801561064057600080fd5b50610649611650565b6040516106569190613af7565b60405180910390f35b34801561066b57600080fd5b5061068660048036038101906106819190613b77565b6116e2565b6040516106939190613bd2565b60405180910390f35b3480156106a857600080fd5b506106c360048036038101906106be9190613b77565b6117cd565b6040516106d09190613bd2565b60405180910390f35b3480156106e557600080fd5b506106ee6117eb565b6040516106fb9190613bfc565b60405180910390f35b34801561071057600080fd5b5061072b60048036038101906107269190613ca1565b6117f5565b6040516107389190613bd2565b60405180910390f35b34801561074d57600080fd5b5061076860048036038101906107639190613d64565b61184b565b6040516107759190613bfc565b60405180910390f35b34801561078a57600080fd5b506107a560048036038101906107a09190613ca1565b6118d2565b005b3480156107b357600080fd5b506107ce60048036038101906107c99190613ca1565b6119a9565b005b3480156107dc57600080fd5b506107e5611aa1565b6040516107f29190613bfc565b60405180910390f35b34801561080757600080fd5b50610822600480360381019061081d9190613a31565b611aab565b60405161082f9190613bd2565b60405180910390f35b34801561084457600080fd5b5061085f600480360381019061085a9190613ca1565b611bc1565b005b600061086b611ef7565b9050600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156108fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f190613e16565b60405180910390fd5b600061090583611eff565b505050905080600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546109559190613e65565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080600d546109a69190613e65565b600d8190555082600e546109ba9190613e99565b600e81905550505050565b6060600380546109d490613f1e565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0090613f1e565b8015610a4d5780601f10610a2257610100808354040283529160200191610a4d565b820191906000526020600020905b815481529060010190602001808311610a3057829003601f168201915b5050505050905090565b6000610a6b610a64611ef7565b8484611f66565b6001905092915050565b6000600c54905090565b6000610a8c848484612131565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610ad7611ef7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610b57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4e90613fc2565b60405180910390fd5b610b6b85610b63611ef7565b858403611f66565b60019150509392505050565b6000610b81611ef7565b73ffffffffffffffffffffffffffffffffffffffff16610b9f611626565b73ffffffffffffffffffffffffffffffffffffffff1614610bf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bec9061402e565b60405180910390fd5b6000821015610c39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c30906140c0565b60405180910390fd5b600a821115610c7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7490614152565b60405180910390fd5b81600f8190555060019050919050565b6000600b60009054906101000a900460ff16905090565b6000600e54905090565b6000610d50610cbb611ef7565b848460016000610cc9611ef7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610d4b9190613e99565b611f66565b6001905092915050565b610d6b610d65611ef7565b82612330565b50565b610d76611ef7565b73ffffffffffffffffffffffffffffffffffffffff16610d94611626565b73ffffffffffffffffffffffffffffffffffffffff1614610dea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de19061402e565b60405180910390fd5b6001600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600c54831115610e8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e83906141be565b60405180910390fd5b81610eaa576000610e9c84611eff565b505050905080915050610ebf565b6000610eb584611eff565b5050915050809150505b92915050565b6000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000610f4f611ef7565b73ffffffffffffffffffffffffffffffffffffffff16610f6d611626565b73ffffffffffffffffffffffffffffffffffffffff1614610fc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fba9061402e565b60405180910390fd5b6000821015611007576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffe90614250565b60405180910390fd5b600a82111561104b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611042906142e2565b60405180910390fd5b8160138190555060019050919050565b611063611ef7565b73ffffffffffffffffffffffffffffffffffffffff16611081611626565b73ffffffffffffffffffffffffffffffffffffffff16146110d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ce9061402e565b60405180910390fd5b600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611164576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115b9061434e565b60405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611238576111f4600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612628565b600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561139157600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506113dc565b6113d9600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612628565b90505b919050565b6113e9611ef7565b73ffffffffffffffffffffffffffffffffffffffff16611407611626565b73ffffffffffffffffffffffffffffffffffffffff161461145d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114549061402e565b60405180910390fd5b611467600061268f565b565b6000611473611ef7565b73ffffffffffffffffffffffffffffffffffffffff16611491611626565b73ffffffffffffffffffffffffffffffffffffffff16146114e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114de9061402e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611557576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154e906143e0565b60405180910390fd5b81601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b60006115b4836115af611ef7565b61184b565b9050818110156115f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f090614472565b60405180910390fd5b61160d83611605611ef7565b848403611f66565b6116178383612330565b505050565b6000600f54905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461165f90613f1e565b80601f016020809104026020016040519081016040528092919081815260200182805461168b90613f1e565b80156116d85780601f106116ad576101008083540402835291602001916116d8565b820191906000526020600020905b8154815290600101906020018083116116bb57829003601f168201915b5050505050905090565b600080600160006116f1611ef7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156117ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a590614504565b60405180910390fd5b6117c26117b9611ef7565b85858403611f66565b600191505092915050565b60006117e16117da611ef7565b8484612131565b6001905092915050565b6000601154905090565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6118da611ef7565b73ffffffffffffffffffffffffffffffffffffffff166118f8611626565b73ffffffffffffffffffffffffffffffffffffffff161461194e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119459061402e565b60405180910390fd5b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6119b1611ef7565b73ffffffffffffffffffffffffffffffffffffffff166119cf611626565b73ffffffffffffffffffffffffffffffffffffffff1614611a25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1c9061402e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611a95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8c90614596565b60405180910390fd5b611a9e8161268f565b50565b6000601354905090565b6000611ab5611ef7565b73ffffffffffffffffffffffffffffffffffffffff16611ad3611626565b73ffffffffffffffffffffffffffffffffffffffff1614611b29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b209061402e565b60405180910390fd5b6000821015611b6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6490614628565b60405180910390fd5b600a821115611bb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba8906146ba565b60405180910390fd5b8160118190555060019050919050565b611bc9611ef7565b73ffffffffffffffffffffffffffffffffffffffff16611be7611626565b73ffffffffffffffffffffffffffffffffffffffff1614611c3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c349061402e565b60405180910390fd5b600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611cc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc090614726565b60405180910390fd5b60005b600a80549050811015611ef3578173ffffffffffffffffffffffffffffffffffffffff16600a8281548110611d0457611d03614746565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611ee057600a6001600a80549050611d5f9190613e65565b81548110611d7057611d6f614746565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600a8281548110611daf57611dae614746565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a805480611ea657611ea5614775565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611ef3565b8080611eeb906147a4565b915050611ccc565b5050565b600033905090565b6000806000806000611f1086612755565b905060008187611f209190613e65565b90506000611f2c61279d565b905060008183611f3c91906147ed565b90506000828a611f4c91906147ed565b905080828585985098509850985050505050509193509193565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611fd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fcd906148b9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612046576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203d9061494b565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516121249190613bfc565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156121a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612198906149dd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612211576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220890614a6f565b60405180910390fd5b600061221c846112f6565b905081811015612261576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225890614b01565b60405180910390fd5b61226c8484846127c1565b600060019050600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806123135750600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561231d57600090505b612329858585846127c6565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239790614b93565b60405180910390fd5b60006123ab836112f6565b9050818110156123f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e790614c25565b60405180910390fd5b6123fc836000846127c1565b600061240661279d565b90506000818461241691906147ed565b9050600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156124f95783600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124b59190613e65565b600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b80600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125449190613e65565b600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555083600c546125959190613e65565b600c8190555080600d546125a99190613e65565b600d81905550600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405161260d9190613bfc565b60405180910390a361262185600086612ad7565b5050505050565b6000600d5482111561266f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266690614cb7565b60405180910390fd5b600061267961279d565b905080836126879190614d06565b915050919050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080601154601354600f5461276b9190613e99565b6127759190613e99565b905060006064828561278791906147ed565b6127919190614d06565b90508092505050919050565b60008060006127aa612adc565b9150915080826127ba9190614d06565b9250505090565b505050565b806127d4576127d3612d7a565b5b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156128775750600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561288c57612887848484612ddc565b612ac3565b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561292f5750600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156129445761293f84848461302b565b612ac2565b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156129e85750600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156129fd576129f884848461327a565b612ac1565b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a9f5750600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612ab457612aaf84848461343b565b612ac0565b612abf84848461327a565b5b5b5b5b80612ad157612ad0613718565b5b50505050565b505050565b6000806000600d5490506000600c54905060005b600a80549050811015612d44578260066000600a8481548110612b1657612b15614746565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180612c0457508160076000600a8481548110612b9c57612b9b614746565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15612c1b57600d54600c5494509450505050612d76565b60066000600a8381548110612c3357612c32614746565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483612ca49190613e65565b925060076000600a8381548110612cbe57612cbd614746565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482612d2f9190613e65565b91508080612d3c906147a4565b915050612af0565b50600c54600d54612d559190614d06565b821015612d6d57600d54600c54935093505050612d76565b81819350935050505b9091565b6000600f54148015612d8e57506000601354145b8015612d9c57506000601154145b15612da657612dda565b600f546010819055506013546014819055506011546012819055506000600f81905550600060138190555060006011819055505b565b600080600080612deb85611eff565b935093509350935084600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e3e9190613e65565b600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555083600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ecc9190613e65565b600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555082600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f5a9190613e99565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612fa8878683613735565b612fb3878683613802565b612fbd858261399a565b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161301a9190613bfc565b60405180910390a350505050505050565b60008060008061303a85611eff565b935093509350935083600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461308d9190613e65565b600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461311b9190613e99565b600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555082600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131a99190613e99565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506131f7878683613735565b613202878683613802565b61320c858261399a565b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516132699190613bfc565b60405180910390a350505050505050565b60008060008061328985611eff565b935093509350935083600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132dc9190613e65565b600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555082600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461336a9190613e99565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506133b8878683613735565b6133c3878683613802565b6133cd858261399a565b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161342a9190613bfc565b60405180910390a350505050505050565b60008060008061344a85611eff565b935093509350935084600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461349d9190613e65565b600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555083600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461352b9190613e65565b600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135b99190613e99565b600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555082600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136479190613e99565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613695878683613735565b6136a0878683613802565b6136aa858261399a565b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516137079190613bfc565b60405180910390a350505050505050565b601054600f81905550601454601381905550601254601181905550565b600060646011548461374791906147ed565b6137519190614d06565b905060008111156137fc576000828261376a91906147ed565b905081600c5461377a9190613e65565b600c8190555080600d5461378e9190613e65565b600d81905550600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516137f29190613bfc565b60405180910390a3505b50505050565b600060646013548461381491906147ed565b61381e9190614d06565b90506000811115613994576000828261383791906147ed565b90508060066000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138a69190613e99565b60066000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161398a9190613bfc565b60405180910390a3505b50505050565b60006064600f54846139ac91906147ed565b6139b69190614d06565b9050600082826139c691906147ed565b905080600d546139d69190613e65565b600d8190555081600e546139ea9190613e99565b600e8190555050505050565b600080fd5b6000819050919050565b613a0e816139fb565b8114613a1957600080fd5b50565b600081359050613a2b81613a05565b92915050565b600060208284031215613a4757613a466139f6565b5b6000613a5584828501613a1c565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613a98578082015181840152602081019050613a7d565b83811115613aa7576000848401525b50505050565b6000601f19601f8301169050919050565b6000613ac982613a5e565b613ad38185613a69565b9350613ae3818560208601613a7a565b613aec81613aad565b840191505092915050565b60006020820190508181036000830152613b118184613abe565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613b4482613b19565b9050919050565b613b5481613b39565b8114613b5f57600080fd5b50565b600081359050613b7181613b4b565b92915050565b60008060408385031215613b8e57613b8d6139f6565b5b6000613b9c85828601613b62565b9250506020613bad85828601613a1c565b9150509250929050565b60008115159050919050565b613bcc81613bb7565b82525050565b6000602082019050613be76000830184613bc3565b92915050565b613bf6816139fb565b82525050565b6000602082019050613c116000830184613bed565b92915050565b600080600060608486031215613c3057613c2f6139f6565b5b6000613c3e86828701613b62565b9350506020613c4f86828701613b62565b9250506040613c6086828701613a1c565b9150509250925092565b600060ff82169050919050565b613c8081613c6a565b82525050565b6000602082019050613c9b6000830184613c77565b92915050565b600060208284031215613cb757613cb66139f6565b5b6000613cc584828501613b62565b91505092915050565b613cd781613bb7565b8114613ce257600080fd5b50565b600081359050613cf481613cce565b92915050565b60008060408385031215613d1157613d106139f6565b5b6000613d1f85828601613a1c565b9250506020613d3085828601613ce5565b9150509250929050565b613d4381613b39565b82525050565b6000602082019050613d5e6000830184613d3a565b92915050565b60008060408385031215613d7b57613d7a6139f6565b5b6000613d8985828601613b62565b9250506020613d9a85828601613b62565b9150509250929050565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b6000613e00602c83613a69565b9150613e0b82613da4565b604082019050919050565b60006020820190508181036000830152613e2f81613df3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613e70826139fb565b9150613e7b836139fb565b925082821015613e8e57613e8d613e36565b5b828203905092915050565b6000613ea4826139fb565b9150613eaf836139fb565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613ee457613ee3613e36565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613f3657607f821691505b60208210811415613f4a57613f49613eef565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613fac602883613a69565b9150613fb782613f50565b604082019050919050565b60006020820190508181036000830152613fdb81613f9f565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614018602083613a69565b915061402382613fe2565b602082019050919050565b600060208201905081810360008301526140478161400b565b9050919050565b7f5265666c656374696f6e20666565206d7573742062652067726561746572206f60008201527f7220657175616c20746f207a65726f0000000000000000000000000000000000602082015250565b60006140aa602f83613a69565b91506140b58261404e565b604082019050919050565b600060208201905081810360008301526140d98161409d565b9050919050565b7f5265666c656374696f6e20666565206d757374206265206c6f776572206f722060008201527f657175616c20746f2074656e0000000000000000000000000000000000000000602082015250565b600061413c602c83613a69565b9150614147826140e0565b604082019050919050565b6000602082019050818103600083015261416b8161412f565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b60006141a8601f83613a69565b91506141b382614172565b602082019050919050565b600060208201905081810360008301526141d78161419b565b9050919050565b7f54617820666565206d7573742062652067726561746572206f7220657175616c60008201527f20746f207a65726f000000000000000000000000000000000000000000000000602082015250565b600061423a602883613a69565b9150614245826141de565b604082019050919050565b600060208201905081810360008301526142698161422d565b9050919050565b7f54617820666565206d757374206265206c6f776572206f7220657175616c207460008201527f6f20313000000000000000000000000000000000000000000000000000000000602082015250565b60006142cc602483613a69565b91506142d782614270565b604082019050919050565b600060208201905081810360008301526142fb816142bf565b9050919050565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b6000614338601b83613a69565b915061434382614302565b602082019050919050565b600060208201905081810360008301526143678161432b565b9050919050565b7f7a65726f20616464726573732063616e206e6f7420626520746865204665654160008201527f63636f756e740000000000000000000000000000000000000000000000000000602082015250565b60006143ca602683613a69565b91506143d58261436e565b604082019050919050565b600060208201905081810360008301526143f9816143bd565b9050919050565b7f45524332303a206275726e20616d6f756e74206578636565647320616c6c6f7760008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b600061445c602483613a69565b915061446782614400565b604082019050919050565b6000602082019050818103600083015261448b8161444f565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006144ee602583613a69565b91506144f982614492565b604082019050919050565b6000602082019050818103600083015261451d816144e1565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614580602683613a69565b915061458b82614524565b604082019050919050565b600060208201905081810360008301526145af81614573565b9050919050565b7f4275726e20666565206d7573742062652067726561746572206f72206571756160008201527f6c20746f207a65726f0000000000000000000000000000000000000000000000602082015250565b6000614612602983613a69565b915061461d826145b6565b604082019050919050565b6000602082019050818103600083015261464181614605565b9050919050565b7f4275726e20666565206d757374206265206c6f776572206f7220657175616c2060008201527f746f203130000000000000000000000000000000000000000000000000000000602082015250565b60006146a4602583613a69565b91506146af82614648565b604082019050919050565b600060208201905081810360008301526146d381614697565b9050919050565b7f4163636f756e7420697320616c726561647920696e636c756465640000000000600082015250565b6000614710601b83613a69565b915061471b826146da565b602082019050919050565b6000602082019050818103600083015261473f81614703565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60006147af826139fb565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156147e2576147e1613e36565b5b600182019050919050565b60006147f8826139fb565b9150614803836139fb565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561483c5761483b613e36565b5b828202905092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006148a3602483613a69565b91506148ae82614847565b604082019050919050565b600060208201905081810360008301526148d281614896565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614935602283613a69565b9150614940826148d9565b604082019050919050565b6000602082019050818103600083015261496481614928565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006149c7602583613a69565b91506149d28261496b565b604082019050919050565b600060208201905081810360008301526149f6816149ba565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614a59602383613a69565b9150614a64826149fd565b604082019050919050565b60006020820190508181036000830152614a8881614a4c565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614aeb602683613a69565b9150614af682614a8f565b604082019050919050565b60006020820190508181036000830152614b1a81614ade565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000614b7d602183613a69565b9150614b8882614b21565b604082019050919050565b60006020820190508181036000830152614bac81614b70565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000614c0f602283613a69565b9150614c1a82614bb3565b604082019050919050565b60006020820190508181036000830152614c3e81614c02565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b6000614ca1602a83613a69565b9150614cac82614c45565b604082019050919050565b60006020820190508181036000830152614cd081614c94565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614d11826139fb565b9150614d1c836139fb565b925082614d2c57614d2b614cd7565b5b82820490509291505056fea2646970667358221220d99be388872c302329e4d666e836eb2cfbbcf351b85412c8cf67ca36e6f4e81764736f6c63430008090033

Deployed Bytecode Sourcemap

19619:14836:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24442:374;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8486:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10653:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21605:103;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11304:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23206:344;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21497:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22599;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12205:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18830:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22709:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24826:448;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22012:90;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22114:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23863:279;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25560:340;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22247:226;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5683:103;;;;;;;;;;;;;:::i;:::-;;22959:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19240:368;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21716:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5032:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8705:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12923:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10117:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21818:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22481:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10355:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22839:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5941:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21916:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23558:287;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25908:484;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24442:374;24494:14;24511:12;:10;:12::i;:::-;24494:29;;24543:11;:19;24555:6;24543:19;;;;;;;;;;;;;;;;;;;;;;;;;24542:20;24534:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;24623:15;24645:27;24664:7;24645:18;:27::i;:::-;24622:50;;;;;24719:7;24701;:15;24709:6;24701:15;;;;;;;;;;;;;;;;:25;;;;:::i;:::-;24683:7;:15;24691:6;24683:15;;;;;;;;;;;;;;;:43;;;;24757:7;24747;;:17;;;;:::i;:::-;24737:7;:27;;;;24801:7;24788:10;;:20;;;;:::i;:::-;24775:10;:33;;;;24483:333;;24442:374;:::o;8486:100::-;8540:13;8573:5;8566:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8486:100;:::o;10653:169::-;10736:4;10753:39;10762:12;:10;:12::i;:::-;10776:7;10785:6;10753:8;:39::i;:::-;10810:4;10803:11;;10653:169;;;;:::o;21605:103::-;21666:7;21693;;21686:14;;21605:103;:::o;11304:492::-;11444:4;11461:36;11471:6;11479:9;11490:6;11461:9;:36::i;:::-;11510:24;11537:11;:19;11549:6;11537:19;;;;;;;;;;;;;;;:33;11557:12;:10;:12::i;:::-;11537:33;;;;;;;;;;;;;;;;11510:60;;11609:6;11589:16;:26;;11581:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;11696:57;11705:6;11713:12;:10;:12::i;:::-;11746:6;11727:16;:25;11696:8;:57::i;:::-;11784:4;11777:11;;;11304:492;;;;;:::o;23206:344::-;23288:4;5263:12;:10;:12::i;:::-;5252:23;;:7;:5;:7::i;:::-;:23;;;5244:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23333:1:::1;23313:16;:21;;23305:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;23425:2;23405:16;:22;;23397:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;23504:16;23487:14;:33;;;;23538:4;23531:11;;23206:344:::0;;;:::o;21497:100::-;21555:5;21580:9;;;;;;;;;;;21573:16;;21497:100;:::o;22599:::-;22654:7;22681:10;;22674:17;;22599:100;:::o;12205:215::-;12293:4;12310:80;12319:12;:10;:12::i;:::-;12333:7;12379:10;12342:11;:25;12354:12;:10;:12::i;:::-;12342:25;;;;;;;;;;;;;;;:34;12368:7;12342:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;12310:8;:80::i;:::-;12408:4;12401:11;;12205:215;;;;:::o;18830:91::-;18886:27;18892:12;:10;:12::i;:::-;18906:6;18886:5;:27::i;:::-;18830:91;:::o;22709:115::-;5263:12;:10;:12::i;:::-;5252:23;;:7;:5;:7::i;:::-;:23;;;5244:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22812:4:::1;22782:18;:27;22801:7;22782:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;22709:115:::0;:::o;24826:448::-;24916:7;24955;;24944;:18;;24936:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;25014:17;25009:258;;25049:15;25071:27;25090:7;25071:18;:27::i;:::-;25048:50;;;;;25120:7;25113:14;;;;;25009:258;25162:23;25191:27;25210:7;25191:18;:27::i;:::-;25160:58;;;;;25240:15;25233:22;;;24826:448;;;;;:::o;22012:90::-;22057:7;22083:11;;;;;;;;;;;22076:18;;22012:90;:::o;22114:125::-;22178:4;22204:18;:27;22223:7;22204:27;;;;;;;;;;;;;;;;;;;;;;;;;22197:34;;22114:125;;;:::o;23863:279::-;23929:4;5263:12;:10;:12::i;:::-;5252:23;;:7;:5;:7::i;:::-;:23;;;5244:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23965:1:::1;23954:7;:12;;23946:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;24041:2;24030:7;:13;;24022:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;24105:7;24095;:17;;;;24130:4;24123:11;;23863:279:::0;;;:::o;25560:340::-;5263:12;:10;:12::i;:::-;5252:23;;:7;:5;:7::i;:::-;:23;;;5244:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25650:11:::1;:20;25662:7;25650:20;;;;;;;;;;;;;;;;;;;;;;;;;25649:21;25641:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;25735:1;25716:7;:16;25724:7;25716:16;;;;;;;;;;;;;;;;:20;25713:108;;;25772:37;25792:7;:16;25800:7;25792:16;;;;;;;;;;;;;;;;25772:19;:37::i;:::-;25753:7;:16;25761:7;25753:16;;;;;;;;;;;;;;;:56;;;;25713:108;25854:4;25831:11;:20;25843:7;25831:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;25869:9;25884:7;25869:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25560:340:::0;:::o;22247:226::-;22319:7;22342:11;:19;22354:6;22342:19;;;;;;;;;;;;;;;;;;;;;;;;;22339:73;;;22385:7;:15;22393:6;22385:15;;;;;;;;;;;;;;;;22378:22;;;;22339:73;22429:36;22449:7;:15;22457:6;22449:15;;;;;;;;;;;;;;;;22429:19;:36::i;:::-;22422:43;;22247:226;;;;:::o;5683:103::-;5263:12;:10;:12::i;:::-;5252:23;;:7;:5;:7::i;:::-;:23;;;5244:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5748:30:::1;5775:1;5748:18;:30::i;:::-;5683:103::o:0;22959:239::-;23035:4;5263:12;:10;:12::i;:::-;5252:23;;:7;:5;:7::i;:::-;:23;;;5244:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23085:1:::1;23060:27;;:13;:27;;;;23052:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;23155:13;23141:11;;:27;;;;;;;;;;;;;;;;;;23186:4;23179:11;;22959:239:::0;;;:::o;19240:368::-;19317:24;19344:32;19354:7;19363:12;:10;:12::i;:::-;19344:9;:32::i;:::-;19317:59;;19415:6;19395:16;:26;;19387:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;19498:58;19507:7;19516:12;:10;:12::i;:::-;19549:6;19530:16;:25;19498:8;:58::i;:::-;19578:22;19584:7;19593:6;19578:5;:22::i;:::-;19306:302;19240:368;;:::o;21716:94::-;21761:7;21788:14;;21781:21;;21716:94;:::o;5032:87::-;5078:7;5105:6;;;;;;;;;;;5098:13;;5032:87;:::o;8705:104::-;8761:13;8794:7;8787:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8705:104;:::o;12923:413::-;13016:4;13033:24;13060:11;:25;13072:12;:10;:12::i;:::-;13060:25;;;;;;;;;;;;;;;:34;13086:7;13060:34;;;;;;;;;;;;;;;;13033:61;;13133:15;13113:16;:35;;13105:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;13226:67;13235:12;:10;:12::i;:::-;13249:7;13277:15;13258:16;:34;13226:8;:67::i;:::-;13324:4;13317:11;;;12923:413;;;;:::o;10117:175::-;10203:4;10220:42;10230:12;:10;:12::i;:::-;10244:9;10255:6;10220:9;:42::i;:::-;10280:4;10273:11;;10117:175;;;;:::o;21818:86::-;21861:7;21888:8;;21881:15;;21818:86;:::o;22481:110::-;22539:4;22563:11;:20;22575:7;22563:20;;;;;;;;;;;;;;;;;;;;;;;;;22556:27;;22481:110;;;:::o;10355:151::-;10444:7;10471:11;:18;10483:5;10471:18;;;;;;;;;;;;;;;:27;10490:7;10471:27;;;;;;;;;;;;;;;;10464:34;;10355:151;;;;:::o;22839:112::-;5263:12;:10;:12::i;:::-;5252:23;;:7;:5;:7::i;:::-;:23;;;5244:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22938:5:::1;22908:18;:27;22927:7;22908:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;22839:112:::0;:::o;5941:201::-;5263:12;:10;:12::i;:::-;5252:23;;:7;:5;:7::i;:::-;:23;;;5244:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6050:1:::1;6030:22;;:8;:22;;;;6022:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;6106:28;6125:8;6106:18;:28::i;:::-;5941:201:::0;:::o;21916:84::-;21958:7;21985;;21978:14;;21916:84;:::o;23558:287::-;23626:4;5263:12;:10;:12::i;:::-;5252:23;;:7;:5;:7::i;:::-;:23;;;5244:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23663:1:::1;23651:8;:13;;23643:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23741:2;23729:8;:14;;23721:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;23807:8;23796;:19;;;;23833:4;23826:11;;23558:287:::0;;;:::o;25908:484::-;5263:12;:10;:12::i;:::-;5252:23;;:7;:5;:7::i;:::-;:23;;;5244:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25995:11:::1;:20;26007:7;25995:20;;;;;;;;;;;;;;;;;;;;;;;;;25987:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;26063:9;26058:327;26082:9;:16;;;;26078:1;:20;26058:327;;;26140:7;26124:23;;:9;26134:1;26124:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:23;;;26120:254;;;26183:9;26212:1;26193:9;:16;;;;:20;;;;:::i;:::-;26183:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26168:9;26178:1;26168:12;;;;;;;;:::i;:::-;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;26252:1;26233:7;:16;26241:7;26233:16;;;;;;;;;;;;;;;:20;;;;26295:5;26272:11;:20;26284:7;26272:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;26319:9;:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;26353:5;;26120:254;26100:3;;;;;:::i;:::-;;;;26058:327;;;;25908:484:::0;:::o;3895:98::-;3948:7;3975:10;3968:17;;3895:98;:::o;31297:456::-;31363:7;31372;31381;31390;31410:16;31429:29;31450:7;31429:20;:29::i;:::-;31410:48;;31469:23;31505:8;31495:7;:18;;;;:::i;:::-;31469:44;;31524:19;31546:10;:8;:10::i;:::-;31524:32;;31567:23;31611:11;31593:15;:29;;;;:::i;:::-;31567:55;;31633:15;31661:11;31651:7;:21;;;;:::i;:::-;31633:39;;31690:7;31699:15;31716;31733:11;31683:62;;;;;;;;;;;;;31297:456;;;;;:::o;16607:380::-;16760:1;16743:19;;:5;:19;;;;16735:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16841:1;16822:21;;:7;:21;;;;16814:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16925:6;16895:11;:18;16907:5;16895:18;;;;;;;;;;;;;;;:27;16914:7;16895:27;;;;;;;;;;;;;;;:36;;;;16963:7;16947:32;;16956:5;16947:32;;;16972:6;16947:32;;;;;;:::i;:::-;;;;;;;;16607:380;;;:::o;26400:693::-;26533:1;26515:20;;:6;:20;;;;26507:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;26617:1;26596:23;;:9;:23;;;;26588:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;26670:21;26694:17;26704:6;26694:9;:17::i;:::-;26670:41;;26747:6;26730:13;:23;;26722:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;26809:47;26830:6;26838:9;26849:6;26809:20;:47::i;:::-;26869:12;26884:4;26869:19;;26912:18;:26;26931:6;26912:26;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;26942:18;:29;26961:9;26942:29;;;;;;;;;;;;;;;;;;;;;;;;;26912:59;26909:106;;;26998:5;26988:15;;26909:106;27035:50;27050:6;27058:9;27069:6;27077:7;27035:14;:50::i;:::-;26496:597;;26400:693;;;:::o;33620:832::-;33732:1;33713:21;;:7;:21;;;;33705:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33783:22;33808:18;33818:7;33808:9;:18::i;:::-;33783:43;;33863:6;33845:14;:24;;33837:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;33921:49;33942:7;33959:1;33963:6;33921:20;:49::i;:::-;33983:19;34005:10;:8;:10::i;:::-;33983:32;;34026:15;34053:11;34044:6;:20;;;;:::i;:::-;34026:38;;34088:11;:20;34100:7;34088:20;;;;;;;;;;;;;;;;;;;;;;;;;34085:95;;;34162:6;34143:7;:16;34151:7;34143:16;;;;;;;;;;;;;;;;:25;;;;:::i;:::-;34124:7;:16;34132:7;34124:16;;;;;;;;;;;;;;;:44;;;;34085:95;34238:7;34219;:16;34227:7;34219:16;;;;;;;;;;;;;;;;:26;;;;:::i;:::-;34200:7;:16;34208:7;34200:16;;;;;;;;;;;;;;;:45;;;;34286:6;34276:7;;:16;;;;:::i;:::-;34266:7;:26;;;;34323:7;34313;;:17;;;;:::i;:::-;34303:7;:27;;;;34372:1;34346:37;;34355:7;34346:37;;;34376:6;34346:37;;;;;;:::i;:::-;;;;;;;;34396:48;34416:7;34433:1;34437:6;34396:19;:48::i;:::-;33694:758;;;33620:832;;:::o;25292:250::-;25359:7;25398;;25387;:18;;25379:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25463:19;25485:10;:8;:10::i;:::-;25463:32;;25523:11;25513:7;:21;;;;:::i;:::-;25506:28;;;25292:250;;;:::o;6302:191::-;6376:16;6395:6;;;;;;;;;;;6376:25;;6421:8;6412:6;;:17;;;;;;;;;;;;;;;;;;6476:8;6445:40;;6466:8;6445:40;;;;;;;;;;;;6365:128;6302:191;:::o;31055:230::-;31123:7;31143:16;31189:8;;31179:7;;31162:14;;:24;;;;:::i;:::-;:35;;;;:::i;:::-;31143:54;;31208:16;31248:3;31237:8;31227:7;:18;;;;:::i;:::-;:24;;;;:::i;:::-;31208:43;;31269:8;31262:15;;;;31055:230;;;:::o;32042:160::-;32083:7;32104:15;32121;32140:19;:17;:19::i;:::-;32103:56;;;;32187:7;32177;:17;;;;:::i;:::-;32170:24;;;;32042:160;:::o;17587:125::-;;;;:::o;27101:765::-;27203:7;27199:54;;27227:14;:12;:14::i;:::-;27199:54;27277:11;:17;27289:4;27277:17;;;;;;;;;;;;;;;;;;;;;;;;;:37;;;;;27299:11;:15;27311:2;27299:15;;;;;;;;;;;;;;;;;;;;;;;;;27298:16;27277:37;27273:511;;;27331:38;27353:4;27359:2;27363:5;27331:21;:38::i;:::-;27273:511;;;27392:11;:17;27404:4;27392:17;;;;;;;;;;;;;;;;;;;;;;;;;27391:18;:37;;;;;27413:11;:15;27425:2;27413:15;;;;;;;;;;;;;;;;;;;;;;;;;27391:37;27387:397;;;27445:36;27465:4;27471:2;27475:5;27445:19;:36::i;:::-;27387:397;;;27504:11;:17;27516:4;27504:17;;;;;;;;;;;;;;;;;;;;;;;;;27503:18;:38;;;;;27526:11;:15;27538:2;27526:15;;;;;;;;;;;;;;;;;;;;;;;;;27525:16;27503:38;27499:285;;;27558:34;27576:4;27582:2;27586:5;27558:17;:34::i;:::-;27499:285;;;27614:11;:17;27626:4;27614:17;;;;;;;;;;;;;;;;;;;;;;;;;:36;;;;;27635:11;:15;27647:2;27635:15;;;;;;;;;;;;;;;;;;;;;;;;;27614:36;27610:174;;;27667:38;27689:4;27695:2;27699:5;27667:21;:38::i;:::-;27610:174;;;27738:34;27756:4;27762:2;27766:5;27738:17;:34::i;:::-;27610:174;27499:285;27387:397;27273:511;27808:7;27804:55;;27832:15;:13;:15::i;:::-;27804:55;27101:765;;;;:::o;18316:124::-;;;;:::o;32210:630::-;32260:7;32269;32289:15;32307:7;;32289:25;;32325:15;32343:7;;32325:25;;32375:9;32371:313;32394:9;:16;;;;32390:1;:20;32371:313;;;32458:7;32434;:21;32442:9;32452:1;32442:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32434:21;;;;;;;;;;;;;;;;:31;:66;;;;32493:7;32469;:21;32477:9;32487:1;32477:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32469:21;;;;;;;;;;;;;;;;:31;32434:66;32431:130;;;32528:7;;32537;;32521:24;;;;;;;;;32431:130;32595:7;:21;32603:9;32613:1;32603:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32595:21;;;;;;;;;;;;;;;;32585:7;:31;;;;:::i;:::-;32575:41;;32651:7;:21;32659:9;32669:1;32659:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32651:21;;;;;;;;;;;;;;;;32641:7;:31;;;;:::i;:::-;32631:41;;32412:3;;;;;:::i;:::-;;;;32371:313;;;;32727:7;;32717;;:17;;;;:::i;:::-;32707:7;:27;32704:83;;;32758:7;;32767;;32751:24;;;;;;;;32704:83;32815:7;32824;32807:25;;;;;;32210:630;;;:::o;27874:352::-;27940:1;27922:14;;:19;:35;;;;;27956:1;27945:7;;:12;27922:35;:52;;;;;27973:1;27961:8;;:13;27922:52;27919:64;;;27976:7;;27919:64;28032:14;;28007:22;:39;;;;28077:7;;28059:15;:25;;;;28116:8;;28097:16;:27;;;;28166:1;28149:14;:18;;;;28190:1;28180:7;:11;;;;28215:1;28204:8;:12;;;;27874:352;:::o;29687:642::-;29790:15;29807:23;29832;29857:19;29880:27;29899:7;29880:18;:27::i;:::-;29789:118;;;;;;;;29954:7;29936;:15;29944:6;29936:15;;;;;;;;;;;;;;;;:25;;;;:::i;:::-;29918:7;:15;29926:6;29918:15;;;;;;;;;;;;;;;:43;;;;30008:7;29990;:15;29998:6;29990:15;;;;;;;;;;;;;;;;:25;;;;:::i;:::-;29972:7;:15;29980:6;29972:15;;;;;;;;;;;;;;;:43;;;;30068:15;30047:7;:18;30055:9;30047:18;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;30026:7;:18;30034:9;30026:18;;;;;;;;;;;;;;;:57;;;;30107:45;30123:6;30131:7;30140:11;30107:15;:45::i;:::-;30163:44;30178:6;30186:7;30195:11;30163:14;:44::i;:::-;30218:33;30230:7;30239:11;30218;:33::i;:::-;30294:9;30277:44;;30286:6;30277:44;;;30305:15;30277:44;;;;;;:::i;:::-;;;;;;;;29778:551;;;;29687:642;;;:::o;29024:655::-;29125:15;29142:23;29167;29192:19;29215:27;29234:7;29215:18;:27::i;:::-;29124:118;;;;;;;;29289:7;29271;:15;29279:6;29271:15;;;;;;;;;;;;;;;;:25;;;;:::i;:::-;29253:7;:15;29261:6;29253:15;;;;;;;;;;;;;;;:43;;;;29349:15;29328:7;:18;29336:9;29328:18;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;29307:7;:18;29315:9;29307:18;;;;;;;;;;;;;;;:57;;;;29417:15;29396:7;:18;29404:9;29396:18;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;29375:7;:18;29383:9;29375:18;;;;;;;;;;;;;;;:57;;;;29457:45;29473:6;29481:7;29490:11;29457:15;:45::i;:::-;29513:44;29528:6;29536:7;29545:11;29513:14;:44::i;:::-;29568:33;29580:7;29589:11;29568;:33::i;:::-;29644:9;29627:44;;29636:6;29627:44;;;29655:15;29627:44;;;;;;:::i;:::-;;;;;;;;29113:566;;;;29024:655;;;:::o;28425:591::-;28524:15;28541:23;28566;28591:19;28614:27;28633:7;28614:18;:27::i;:::-;28523:118;;;;;;;;28698:7;28680;:15;28688:6;28680:15;;;;;;;;;;;;;;;;:25;;;;:::i;:::-;28662:7;:15;28670:6;28662:15;;;;;;;;;;;;;;;:43;;;;28758:15;28737:7;:18;28745:9;28737:18;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;28716:7;:18;28724:9;28716:18;;;;;;;;;;;;;;;:57;;;;28794:45;28810:6;28818:7;28827:11;28794:15;:45::i;:::-;28850:44;28865:6;28873:7;28882:11;28850:14;:44::i;:::-;28905:33;28917:7;28926:11;28905;:33::i;:::-;28981:9;28964:44;;28973:6;28964:44;;;28992:15;28964:44;;;;;;:::i;:::-;;;;;;;;28512:504;;;;28425:591;;;:::o;30337:710::-;30440:15;30457:23;30482;30507:19;30530:27;30549:7;30530:18;:27::i;:::-;30439:118;;;;;;;;30604:7;30586;:15;30594:6;30586:15;;;;;;;;;;;;;;;;:25;;;;:::i;:::-;30568:7;:15;30576:6;30568:15;;;;;;;;;;;;;;;:43;;;;30658:7;30640;:15;30648:6;30640:15;;;;;;;;;;;;;;;;:25;;;;:::i;:::-;30622:7;:15;30630:6;30622:15;;;;;;;;;;;;;;;:43;;;;30718:15;30697:7;:18;30705:9;30697:18;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;30676:7;:18;30684:9;30676:18;;;;;;;;;;;;;;;:57;;;;30786:15;30765:7;:18;30773:9;30765:18;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;30744:7;:18;30752:9;30744:18;;;;;;;;;;;;;;;:57;;;;30825:45;30841:6;30849:7;30858:11;30825:15;:45::i;:::-;30881:44;30896:6;30904:7;30913:11;30881:14;:44::i;:::-;30936:33;30948:7;30957:11;30936;:33::i;:::-;31012:9;30995:44;;31004:6;30995:44;;;31023:15;30995:44;;;;;;:::i;:::-;;;;;;;;30428:619;;;;30337:710;;;:::o;28242:173::-;28305:22;;28288:14;:39;;;;28350:15;;28340:7;:25;;;;28389:16;;28378:8;:27;;;;28242:173::o;32848:387::-;32946:16;32986:3;32975:8;;32965:7;:18;;;;:::i;:::-;:24;;;;:::i;:::-;32946:43;;33014:1;33003:8;:12;33000:228;;;33031:16;33061:11;33050:8;:22;;;;:::i;:::-;33031:41;;33107:8;33097:7;;:18;;;;:::i;:::-;33087:7;:28;;;;33150:8;33140:7;;:18;;;;:::i;:::-;33130:7;:28;;;;33203:1;33178:38;;33187:6;33178:38;;;33207:8;33178:38;;;;;;:::i;:::-;;;;;;;;33016:212;33000:228;32935:300;32848:387;;;:::o;33247:363::-;33344:15;33382:3;33372:7;;33362;:17;;;;:::i;:::-;:23;;;;:::i;:::-;33344:41;;33409:1;33399:7;:11;33396:207;;;33426:15;33454:11;33444:7;:21;;;;:::i;:::-;33426:39;;33526:7;33503;:20;33511:11;;;;;;;;;;;33503:20;;;;;;;;;;;;;;;;:30;;;;:::i;:::-;33480:7;:20;33488:11;;;;;;;;;;;33480:20;;;;;;;;;;;;;;;:53;;;;33570:11;;;;;;;;;;;33553:38;;33562:6;33553:38;;;33583:7;33553:38;;;;;;:::i;:::-;;;;;;;;33411:192;33396:207;33333:277;33247:363;;;:::o;31771:253::-;31849:12;31891:3;31874:14;;31864:7;:24;;;;:::i;:::-;:30;;;;:::i;:::-;31849:45;;31905:12;31927:11;31920:4;:18;;;;:::i;:::-;31905:33;;31971:4;31961:7;;:14;;;;:::i;:::-;31951:7;:24;;;;32012:4;31999:10;;:17;;;;:::i;:::-;31986:10;:30;;;;31838:186;;31771:253;;:::o;88:117:1:-;197:1;194;187:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:329::-;749:6;798:2;786:9;777:7;773:23;769:32;766:119;;;804:79;;:::i;:::-;766:119;924:1;949:53;994:7;985:6;974:9;970:22;949:53;:::i;:::-;939:63;;895:117;690:329;;;;:::o;1025:99::-;1077:6;1111:5;1105:12;1095:22;;1025:99;;;:::o;1130:169::-;1214:11;1248:6;1243:3;1236:19;1288:4;1283:3;1279:14;1264:29;;1130:169;;;;:::o;1305:307::-;1373:1;1383:113;1397:6;1394:1;1391:13;1383:113;;;1482:1;1477:3;1473:11;1467:18;1463:1;1458:3;1454:11;1447:39;1419:2;1416:1;1412:10;1407:15;;1383:113;;;1514:6;1511:1;1508:13;1505:101;;;1594:1;1585:6;1580:3;1576:16;1569:27;1505:101;1354:258;1305:307;;;:::o;1618:102::-;1659:6;1710:2;1706:7;1701:2;1694:5;1690:14;1686:28;1676:38;;1618:102;;;:::o;1726:364::-;1814:3;1842:39;1875:5;1842:39;:::i;:::-;1897:71;1961:6;1956:3;1897:71;:::i;:::-;1890:78;;1977:52;2022:6;2017:3;2010:4;2003:5;1999:16;1977:52;:::i;:::-;2054:29;2076:6;2054:29;:::i;:::-;2049:3;2045:39;2038:46;;1818:272;1726:364;;;;:::o;2096:313::-;2209:4;2247:2;2236:9;2232:18;2224:26;;2296:9;2290:4;2286:20;2282:1;2271:9;2267:17;2260:47;2324:78;2397:4;2388:6;2324:78;:::i;:::-;2316:86;;2096:313;;;;:::o;2415:126::-;2452:7;2492:42;2485:5;2481:54;2470:65;;2415:126;;;:::o;2547:96::-;2584:7;2613:24;2631:5;2613:24;:::i;:::-;2602:35;;2547:96;;;:::o;2649:122::-;2722:24;2740:5;2722:24;:::i;:::-;2715:5;2712:35;2702:63;;2761:1;2758;2751:12;2702:63;2649:122;:::o;2777:139::-;2823:5;2861:6;2848:20;2839:29;;2877:33;2904:5;2877:33;:::i;:::-;2777:139;;;;:::o;2922:474::-;2990:6;2998;3047:2;3035:9;3026:7;3022:23;3018:32;3015:119;;;3053:79;;:::i;:::-;3015:119;3173:1;3198:53;3243:7;3234:6;3223:9;3219:22;3198:53;:::i;:::-;3188:63;;3144:117;3300:2;3326:53;3371:7;3362:6;3351:9;3347:22;3326:53;:::i;:::-;3316:63;;3271:118;2922:474;;;;;:::o;3402:90::-;3436:7;3479:5;3472:13;3465:21;3454:32;;3402:90;;;:::o;3498:109::-;3579:21;3594:5;3579:21;:::i;:::-;3574:3;3567:34;3498:109;;:::o;3613:210::-;3700:4;3738:2;3727:9;3723:18;3715:26;;3751:65;3813:1;3802:9;3798:17;3789:6;3751:65;:::i;:::-;3613:210;;;;:::o;3829:118::-;3916:24;3934:5;3916:24;:::i;:::-;3911:3;3904:37;3829:118;;:::o;3953:222::-;4046:4;4084:2;4073:9;4069:18;4061:26;;4097:71;4165:1;4154:9;4150:17;4141:6;4097:71;:::i;:::-;3953:222;;;;:::o;4181:619::-;4258:6;4266;4274;4323:2;4311:9;4302:7;4298:23;4294:32;4291:119;;;4329:79;;:::i;:::-;4291:119;4449:1;4474:53;4519:7;4510:6;4499:9;4495:22;4474:53;:::i;:::-;4464:63;;4420:117;4576:2;4602:53;4647:7;4638:6;4627:9;4623:22;4602:53;:::i;:::-;4592:63;;4547:118;4704:2;4730:53;4775:7;4766:6;4755:9;4751:22;4730:53;:::i;:::-;4720:63;;4675:118;4181:619;;;;;:::o;4806:86::-;4841:7;4881:4;4874:5;4870:16;4859:27;;4806:86;;;:::o;4898:112::-;4981:22;4997:5;4981:22;:::i;:::-;4976:3;4969:35;4898:112;;:::o;5016:214::-;5105:4;5143:2;5132:9;5128:18;5120:26;;5156:67;5220:1;5209:9;5205:17;5196:6;5156:67;:::i;:::-;5016:214;;;;:::o;5236:329::-;5295:6;5344:2;5332:9;5323:7;5319:23;5315:32;5312:119;;;5350:79;;:::i;:::-;5312:119;5470:1;5495:53;5540:7;5531:6;5520:9;5516:22;5495:53;:::i;:::-;5485:63;;5441:117;5236:329;;;;:::o;5571:116::-;5641:21;5656:5;5641:21;:::i;:::-;5634:5;5631:32;5621:60;;5677:1;5674;5667:12;5621:60;5571:116;:::o;5693:133::-;5736:5;5774:6;5761:20;5752:29;;5790:30;5814:5;5790:30;:::i;:::-;5693:133;;;;:::o;5832:468::-;5897:6;5905;5954:2;5942:9;5933:7;5929:23;5925:32;5922:119;;;5960:79;;:::i;:::-;5922:119;6080:1;6105:53;6150:7;6141:6;6130:9;6126:22;6105:53;:::i;:::-;6095:63;;6051:117;6207:2;6233:50;6275:7;6266:6;6255:9;6251:22;6233:50;:::i;:::-;6223:60;;6178:115;5832:468;;;;;:::o;6306:118::-;6393:24;6411:5;6393:24;:::i;:::-;6388:3;6381:37;6306:118;;:::o;6430:222::-;6523:4;6561:2;6550:9;6546:18;6538:26;;6574:71;6642:1;6631:9;6627:17;6618:6;6574:71;:::i;:::-;6430:222;;;;:::o;6658:474::-;6726:6;6734;6783:2;6771:9;6762:7;6758:23;6754:32;6751:119;;;6789:79;;:::i;:::-;6751:119;6909:1;6934:53;6979:7;6970:6;6959:9;6955:22;6934:53;:::i;:::-;6924:63;;6880:117;7036:2;7062:53;7107:7;7098:6;7087:9;7083:22;7062:53;:::i;:::-;7052:63;;7007:118;6658:474;;;;;:::o;7138:231::-;7278:34;7274:1;7266:6;7262:14;7255:58;7347:14;7342:2;7334:6;7330:15;7323:39;7138:231;:::o;7375:366::-;7517:3;7538:67;7602:2;7597:3;7538:67;:::i;:::-;7531:74;;7614:93;7703:3;7614:93;:::i;:::-;7732:2;7727:3;7723:12;7716:19;;7375:366;;;:::o;7747:419::-;7913:4;7951:2;7940:9;7936:18;7928:26;;8000:9;7994:4;7990:20;7986:1;7975:9;7971:17;7964:47;8028:131;8154:4;8028:131;:::i;:::-;8020:139;;7747:419;;;:::o;8172:180::-;8220:77;8217:1;8210:88;8317:4;8314:1;8307:15;8341:4;8338:1;8331:15;8358:191;8398:4;8418:20;8436:1;8418:20;:::i;:::-;8413:25;;8452:20;8470:1;8452:20;:::i;:::-;8447:25;;8491:1;8488;8485:8;8482:34;;;8496:18;;:::i;:::-;8482:34;8541:1;8538;8534:9;8526:17;;8358:191;;;;:::o;8555:305::-;8595:3;8614:20;8632:1;8614:20;:::i;:::-;8609:25;;8648:20;8666:1;8648:20;:::i;:::-;8643:25;;8802:1;8734:66;8730:74;8727:1;8724:81;8721:107;;;8808:18;;:::i;:::-;8721:107;8852:1;8849;8845:9;8838:16;;8555:305;;;;:::o;8866:180::-;8914:77;8911:1;8904:88;9011:4;9008:1;9001:15;9035:4;9032:1;9025:15;9052:320;9096:6;9133:1;9127:4;9123:12;9113:22;;9180:1;9174:4;9170:12;9201:18;9191:81;;9257:4;9249:6;9245:17;9235:27;;9191:81;9319:2;9311:6;9308:14;9288:18;9285:38;9282:84;;;9338:18;;:::i;:::-;9282:84;9103:269;9052:320;;;:::o;9378:227::-;9518:34;9514:1;9506:6;9502:14;9495:58;9587:10;9582:2;9574:6;9570:15;9563:35;9378:227;:::o;9611:366::-;9753:3;9774:67;9838:2;9833:3;9774:67;:::i;:::-;9767:74;;9850:93;9939:3;9850:93;:::i;:::-;9968:2;9963:3;9959:12;9952:19;;9611:366;;;:::o;9983:419::-;10149:4;10187:2;10176:9;10172:18;10164:26;;10236:9;10230:4;10226:20;10222:1;10211:9;10207:17;10200:47;10264:131;10390:4;10264:131;:::i;:::-;10256:139;;9983:419;;;:::o;10408:182::-;10548:34;10544:1;10536:6;10532:14;10525:58;10408:182;:::o;10596:366::-;10738:3;10759:67;10823:2;10818:3;10759:67;:::i;:::-;10752:74;;10835:93;10924:3;10835:93;:::i;:::-;10953:2;10948:3;10944:12;10937:19;;10596:366;;;:::o;10968:419::-;11134:4;11172:2;11161:9;11157:18;11149:26;;11221:9;11215:4;11211:20;11207:1;11196:9;11192:17;11185:47;11249:131;11375:4;11249:131;:::i;:::-;11241:139;;10968:419;;;:::o;11393:234::-;11533:34;11529:1;11521:6;11517:14;11510:58;11602:17;11597:2;11589:6;11585:15;11578:42;11393:234;:::o;11633:366::-;11775:3;11796:67;11860:2;11855:3;11796:67;:::i;:::-;11789:74;;11872:93;11961:3;11872:93;:::i;:::-;11990:2;11985:3;11981:12;11974:19;;11633:366;;;:::o;12005:419::-;12171:4;12209:2;12198:9;12194:18;12186:26;;12258:9;12252:4;12248:20;12244:1;12233:9;12229:17;12222:47;12286:131;12412:4;12286:131;:::i;:::-;12278:139;;12005:419;;;:::o;12430:231::-;12570:34;12566:1;12558:6;12554:14;12547:58;12639:14;12634:2;12626:6;12622:15;12615:39;12430:231;:::o;12667:366::-;12809:3;12830:67;12894:2;12889:3;12830:67;:::i;:::-;12823:74;;12906:93;12995:3;12906:93;:::i;:::-;13024:2;13019:3;13015:12;13008:19;;12667:366;;;:::o;13039:419::-;13205:4;13243:2;13232:9;13228:18;13220:26;;13292:9;13286:4;13282:20;13278:1;13267:9;13263:17;13256:47;13320:131;13446:4;13320:131;:::i;:::-;13312:139;;13039:419;;;:::o;13464:181::-;13604:33;13600:1;13592:6;13588:14;13581:57;13464:181;:::o;13651:366::-;13793:3;13814:67;13878:2;13873:3;13814:67;:::i;:::-;13807:74;;13890:93;13979:3;13890:93;:::i;:::-;14008:2;14003:3;13999:12;13992:19;;13651:366;;;:::o;14023:419::-;14189:4;14227:2;14216:9;14212:18;14204:26;;14276:9;14270:4;14266:20;14262:1;14251:9;14247:17;14240:47;14304:131;14430:4;14304:131;:::i;:::-;14296:139;;14023:419;;;:::o;14448:227::-;14588:34;14584:1;14576:6;14572:14;14565:58;14657:10;14652:2;14644:6;14640:15;14633:35;14448:227;:::o;14681:366::-;14823:3;14844:67;14908:2;14903:3;14844:67;:::i;:::-;14837:74;;14920:93;15009:3;14920:93;:::i;:::-;15038:2;15033:3;15029:12;15022:19;;14681:366;;;:::o;15053:419::-;15219:4;15257:2;15246:9;15242:18;15234:26;;15306:9;15300:4;15296:20;15292:1;15281:9;15277:17;15270:47;15334:131;15460:4;15334:131;:::i;:::-;15326:139;;15053:419;;;:::o;15478:223::-;15618:34;15614:1;15606:6;15602:14;15595:58;15687:6;15682:2;15674:6;15670:15;15663:31;15478:223;:::o;15707:366::-;15849:3;15870:67;15934:2;15929:3;15870:67;:::i;:::-;15863:74;;15946:93;16035:3;15946:93;:::i;:::-;16064:2;16059:3;16055:12;16048:19;;15707:366;;;:::o;16079:419::-;16245:4;16283:2;16272:9;16268:18;16260:26;;16332:9;16326:4;16322:20;16318:1;16307:9;16303:17;16296:47;16360:131;16486:4;16360:131;:::i;:::-;16352:139;;16079:419;;;:::o;16504:177::-;16644:29;16640:1;16632:6;16628:14;16621:53;16504:177;:::o;16687:366::-;16829:3;16850:67;16914:2;16909:3;16850:67;:::i;:::-;16843:74;;16926:93;17015:3;16926:93;:::i;:::-;17044:2;17039:3;17035:12;17028:19;;16687:366;;;:::o;17059:419::-;17225:4;17263:2;17252:9;17248:18;17240:26;;17312:9;17306:4;17302:20;17298:1;17287:9;17283:17;17276:47;17340:131;17466:4;17340:131;:::i;:::-;17332:139;;17059:419;;;:::o;17484:225::-;17624:34;17620:1;17612:6;17608:14;17601:58;17693:8;17688:2;17680:6;17676:15;17669:33;17484:225;:::o;17715:366::-;17857:3;17878:67;17942:2;17937:3;17878:67;:::i;:::-;17871:74;;17954:93;18043:3;17954:93;:::i;:::-;18072:2;18067:3;18063:12;18056:19;;17715:366;;;:::o;18087:419::-;18253:4;18291:2;18280:9;18276:18;18268:26;;18340:9;18334:4;18330:20;18326:1;18315:9;18311:17;18304:47;18368:131;18494:4;18368:131;:::i;:::-;18360:139;;18087:419;;;:::o;18512:223::-;18652:34;18648:1;18640:6;18636:14;18629:58;18721:6;18716:2;18708:6;18704:15;18697:31;18512:223;:::o;18741:366::-;18883:3;18904:67;18968:2;18963:3;18904:67;:::i;:::-;18897:74;;18980:93;19069:3;18980:93;:::i;:::-;19098:2;19093:3;19089:12;19082:19;;18741:366;;;:::o;19113:419::-;19279:4;19317:2;19306:9;19302:18;19294:26;;19366:9;19360:4;19356:20;19352:1;19341:9;19337:17;19330:47;19394:131;19520:4;19394:131;:::i;:::-;19386:139;;19113:419;;;:::o;19538:224::-;19678:34;19674:1;19666:6;19662:14;19655:58;19747:7;19742:2;19734:6;19730:15;19723:32;19538:224;:::o;19768:366::-;19910:3;19931:67;19995:2;19990:3;19931:67;:::i;:::-;19924:74;;20007:93;20096:3;20007:93;:::i;:::-;20125:2;20120:3;20116:12;20109:19;;19768:366;;;:::o;20140:419::-;20306:4;20344:2;20333:9;20329:18;20321:26;;20393:9;20387:4;20383:20;20379:1;20368:9;20364:17;20357:47;20421:131;20547:4;20421:131;:::i;:::-;20413:139;;20140:419;;;:::o;20565:225::-;20705:34;20701:1;20693:6;20689:14;20682:58;20774:8;20769:2;20761:6;20757:15;20750:33;20565:225;:::o;20796:366::-;20938:3;20959:67;21023:2;21018:3;20959:67;:::i;:::-;20952:74;;21035:93;21124:3;21035:93;:::i;:::-;21153:2;21148:3;21144:12;21137:19;;20796:366;;;:::o;21168:419::-;21334:4;21372:2;21361:9;21357:18;21349:26;;21421:9;21415:4;21411:20;21407:1;21396:9;21392:17;21385:47;21449:131;21575:4;21449:131;:::i;:::-;21441:139;;21168:419;;;:::o;21593:228::-;21733:34;21729:1;21721:6;21717:14;21710:58;21802:11;21797:2;21789:6;21785:15;21778:36;21593:228;:::o;21827:366::-;21969:3;21990:67;22054:2;22049:3;21990:67;:::i;:::-;21983:74;;22066:93;22155:3;22066:93;:::i;:::-;22184:2;22179:3;22175:12;22168:19;;21827:366;;;:::o;22199:419::-;22365:4;22403:2;22392:9;22388:18;22380:26;;22452:9;22446:4;22442:20;22438:1;22427:9;22423:17;22416:47;22480:131;22606:4;22480:131;:::i;:::-;22472:139;;22199:419;;;:::o;22624:224::-;22764:34;22760:1;22752:6;22748:14;22741:58;22833:7;22828:2;22820:6;22816:15;22809:32;22624:224;:::o;22854:366::-;22996:3;23017:67;23081:2;23076:3;23017:67;:::i;:::-;23010:74;;23093:93;23182:3;23093:93;:::i;:::-;23211:2;23206:3;23202:12;23195:19;;22854:366;;;:::o;23226:419::-;23392:4;23430:2;23419:9;23415:18;23407:26;;23479:9;23473:4;23469:20;23465:1;23454:9;23450:17;23443:47;23507:131;23633:4;23507:131;:::i;:::-;23499:139;;23226:419;;;:::o;23651:177::-;23791:29;23787:1;23779:6;23775:14;23768:53;23651:177;:::o;23834:366::-;23976:3;23997:67;24061:2;24056:3;23997:67;:::i;:::-;23990:74;;24073:93;24162:3;24073:93;:::i;:::-;24191:2;24186:3;24182:12;24175:19;;23834:366;;;:::o;24206:419::-;24372:4;24410:2;24399:9;24395:18;24387:26;;24459:9;24453:4;24449:20;24445:1;24434:9;24430:17;24423:47;24487:131;24613:4;24487:131;:::i;:::-;24479:139;;24206:419;;;:::o;24631:180::-;24679:77;24676:1;24669:88;24776:4;24773:1;24766:15;24800:4;24797:1;24790:15;24817:180;24865:77;24862:1;24855:88;24962:4;24959:1;24952:15;24986:4;24983:1;24976:15;25003:233;25042:3;25065:24;25083:5;25065:24;:::i;:::-;25056:33;;25111:66;25104:5;25101:77;25098:103;;;25181:18;;:::i;:::-;25098:103;25228:1;25221:5;25217:13;25210:20;;25003:233;;;:::o;25242:348::-;25282:7;25305:20;25323:1;25305:20;:::i;:::-;25300:25;;25339:20;25357:1;25339:20;:::i;:::-;25334:25;;25527:1;25459:66;25455:74;25452:1;25449:81;25444:1;25437:9;25430:17;25426:105;25423:131;;;25534:18;;:::i;:::-;25423:131;25582:1;25579;25575:9;25564:20;;25242:348;;;;:::o;25596:223::-;25736:34;25732:1;25724:6;25720:14;25713:58;25805:6;25800:2;25792:6;25788:15;25781:31;25596:223;:::o;25825:366::-;25967:3;25988:67;26052:2;26047:3;25988:67;:::i;:::-;25981:74;;26064:93;26153:3;26064:93;:::i;:::-;26182:2;26177:3;26173:12;26166:19;;25825:366;;;:::o;26197:419::-;26363:4;26401:2;26390:9;26386:18;26378:26;;26450:9;26444:4;26440:20;26436:1;26425:9;26421:17;26414:47;26478:131;26604:4;26478:131;:::i;:::-;26470:139;;26197:419;;;:::o;26622:221::-;26762:34;26758:1;26750:6;26746:14;26739:58;26831:4;26826:2;26818:6;26814:15;26807:29;26622:221;:::o;26849:366::-;26991:3;27012:67;27076:2;27071:3;27012:67;:::i;:::-;27005:74;;27088:93;27177:3;27088:93;:::i;:::-;27206:2;27201:3;27197:12;27190:19;;26849:366;;;:::o;27221:419::-;27387:4;27425:2;27414:9;27410:18;27402:26;;27474:9;27468:4;27464:20;27460:1;27449:9;27445:17;27438:47;27502:131;27628:4;27502:131;:::i;:::-;27494:139;;27221:419;;;:::o;27646:224::-;27786:34;27782:1;27774:6;27770:14;27763:58;27855:7;27850:2;27842:6;27838:15;27831:32;27646:224;:::o;27876:366::-;28018:3;28039:67;28103:2;28098:3;28039:67;:::i;:::-;28032:74;;28115:93;28204:3;28115:93;:::i;:::-;28233:2;28228:3;28224:12;28217:19;;27876:366;;;:::o;28248:419::-;28414:4;28452:2;28441:9;28437:18;28429:26;;28501:9;28495:4;28491:20;28487:1;28476:9;28472:17;28465:47;28529:131;28655:4;28529:131;:::i;:::-;28521:139;;28248:419;;;:::o;28673:222::-;28813:34;28809:1;28801:6;28797:14;28790:58;28882:5;28877:2;28869:6;28865:15;28858:30;28673:222;:::o;28901:366::-;29043:3;29064:67;29128:2;29123:3;29064:67;:::i;:::-;29057:74;;29140:93;29229:3;29140:93;:::i;:::-;29258:2;29253:3;29249:12;29242:19;;28901:366;;;:::o;29273:419::-;29439:4;29477:2;29466:9;29462:18;29454:26;;29526:9;29520:4;29516:20;29512:1;29501:9;29497:17;29490:47;29554:131;29680:4;29554:131;:::i;:::-;29546:139;;29273:419;;;:::o;29698:225::-;29838:34;29834:1;29826:6;29822:14;29815:58;29907:8;29902:2;29894:6;29890:15;29883:33;29698:225;:::o;29929:366::-;30071:3;30092:67;30156:2;30151:3;30092:67;:::i;:::-;30085:74;;30168:93;30257:3;30168:93;:::i;:::-;30286:2;30281:3;30277:12;30270:19;;29929:366;;;:::o;30301:419::-;30467:4;30505:2;30494:9;30490:18;30482:26;;30554:9;30548:4;30544:20;30540:1;30529:9;30525:17;30518:47;30582:131;30708:4;30582:131;:::i;:::-;30574:139;;30301:419;;;:::o;30726:220::-;30866:34;30862:1;30854:6;30850:14;30843:58;30935:3;30930:2;30922:6;30918:15;30911:28;30726:220;:::o;30952:366::-;31094:3;31115:67;31179:2;31174:3;31115:67;:::i;:::-;31108:74;;31191:93;31280:3;31191:93;:::i;:::-;31309:2;31304:3;31300:12;31293:19;;30952:366;;;:::o;31324:419::-;31490:4;31528:2;31517:9;31513:18;31505:26;;31577:9;31571:4;31567:20;31563:1;31552:9;31548:17;31541:47;31605:131;31731:4;31605:131;:::i;:::-;31597:139;;31324:419;;;:::o;31749:221::-;31889:34;31885:1;31877:6;31873:14;31866:58;31958:4;31953:2;31945:6;31941:15;31934:29;31749:221;:::o;31976:366::-;32118:3;32139:67;32203:2;32198:3;32139:67;:::i;:::-;32132:74;;32215:93;32304:3;32215:93;:::i;:::-;32333:2;32328:3;32324:12;32317:19;;31976:366;;;:::o;32348:419::-;32514:4;32552:2;32541:9;32537:18;32529:26;;32601:9;32595:4;32591:20;32587:1;32576:9;32572:17;32565:47;32629:131;32755:4;32629:131;:::i;:::-;32621:139;;32348:419;;;:::o;32773:229::-;32913:34;32909:1;32901:6;32897:14;32890:58;32982:12;32977:2;32969:6;32965:15;32958:37;32773:229;:::o;33008:366::-;33150:3;33171:67;33235:2;33230:3;33171:67;:::i;:::-;33164:74;;33247:93;33336:3;33247:93;:::i;:::-;33365:2;33360:3;33356:12;33349:19;;33008:366;;;:::o;33380:419::-;33546:4;33584:2;33573:9;33569:18;33561:26;;33633:9;33627:4;33623:20;33619:1;33608:9;33604:17;33597:47;33661:131;33787:4;33661:131;:::i;:::-;33653:139;;33380:419;;;:::o;33805:180::-;33853:77;33850:1;33843:88;33950:4;33947:1;33940:15;33974:4;33971:1;33964:15;33991:185;34031:1;34048:20;34066:1;34048:20;:::i;:::-;34043:25;;34082:20;34100:1;34082:20;:::i;:::-;34077:25;;34121:1;34111:35;;34126:18;;:::i;:::-;34111:35;34168:1;34165;34161:9;34156:14;;33991:185;;;;:::o

Swarm Source

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