ETH Price: $3,354.22 (+2.80%)
 

Overview

Max Total Supply

100,000,000 DIOM

Holders

210

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
916,131.525334849544033613 DIOM

Value
$0.00
0x7491f28c11384473101bff73745f947ab73bef71
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
DIOM

Compiler Version
v0.8.25+commit.b61c2a91

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
File 1 of 1 : DIOM.sol
/* 

DIOM - Decentralized Identity and Ownership Matrix. Bringing Web5 to Ethereum.
Website: https://diom.digital
Documentation: https://docs.diom.digital
Medium: https://medium.com/@DiomWeb5
Twitter: https://twitter.com/DiomWeb5
Telegram: https://t.me/DiomWeb5    

*/

pragma solidity 0.8.25;

// SPDX-License-Identifier: MIT

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

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

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

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

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * 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 default value returned by this function, unless
     * it's overridden.
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

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

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

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

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

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

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

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

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

        return true;
    }

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

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
            // decrementing then incrementing.
            _balances[to] += amount;
        }

        emit Transfer(from, to, amount);
    }

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

        _totalSupply += amount;
        unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _balances[account] += amount;
        }
        emit Transfer(address(0), account, 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 Updates `owner` s allowance for `spender` based on spent `amount`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }
}

contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    function owner() public view returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

library Address {
    function isContract(address account) internal view returns (bool) {
        return account.code.length > 0;
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, "Address: low-level call failed");
    }

    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling
     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.
     *
     * _Available since v4.8._
     */
    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        if (success) {
            if (returndata.length == 0) {
                // only check isContract if the call was successful and the return data is empty
                // otherwise we already know that it was a contract
                require(isContract(target), "Address: call to non-contract");
            }
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    /**
     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason or using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    function _revert(bytes memory returndata, string memory errorMessage) private pure {
        // Look for revert reason and bubble it up if present
        if (returndata.length > 0) {
            // The easiest way to bubble the revert reason is using memory via assembly
            /// @solidity memory-safe-assembly
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert(errorMessage);
        }
    }
}

library SafeERC20 {
    using Address for address;

    function safeTransfer(IERC20 token, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
        if (returndata.length > 0) {
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }

    function safeApprove(IERC20 token, address spender, uint256 value) internal {
        // safeApprove should only be called when setting an initial allowance,
        // or when resetting it to zero. To increase and decrease it, use
        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
        require(
            (value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }
}

interface IPriceFeed {
    function latestAnswer() external view returns (int256);
}

interface ILpPair {
    function sync() external;
    function mint(address to) external;
}

interface IWETH {
    function deposit() external payable; 
}

interface IDexRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function swapExactTokensForETHSupportingFeeOnTransferTokens(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable returns (uint[] memory amounts);
}

interface IDexFactory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

contract DIOM is ERC20, Ownable {

    mapping (address => bool) public exemptFromFees;
    mapping (address => bool) public exemptFromLimits;

    bool public tradingAllowed;

    mapping (address => bool) public isAMMPair;

    address public developmentAddress;
    address public marketingAddress;

    uint24 public buyTax;
    uint24 public sellTax;

    uint24 public buyTaxStep1;
    uint24 public sellTaxStep1;
    uint128 public maxWalletStep1;
    bool public step1Activated;

    uint24 public buyTaxStep2;
    uint24 public sellTaxStep2;
    uint128 public maxWalletStep2;
    bool public step2Activated;

    uint24 public buyTaxStep3;
    uint24 public sellTaxStep3;
    uint128 public maxWalletStep3;
    bool public step3Activated;

    uint24 public buyTaxStepFinal;
    uint24 public sellTaxStepFinal;
    uint128 public maxWalletStepFinal;

    uint256 public lastSwapBackBlock;
    mapping(address => uint256) private _holderLastTransferBlock;

    bool public limited = true;
    uint256 public maxWallet;

    uint256 public immutable swapTokensAtAmt;

    address public immutable lpPair;
    IDexRouter public immutable dexRouter;
    address public immutable WETH;

    uint64 public constant FEE_DIVISOR = 10000;

    uint256 public launchTimestamp;
    bool public dynamicTaxOn;

    bool public transferDelayEnabled = false;

    // constructor

    constructor()
        ERC20("DIOM", "DIOM")
    {   
        uint256 _totalSupply = 100_000_000 * 1e18;
       
        developmentAddress = 0x62c5b206dd49DaD8E665E3E4d2560a04008E5333;
        marketingAddress = 0x0FaB1E670a6eed24dfBEa68e7194c272345A1FBC;

        address _v2Router;

        dynamicTaxOn = true;

        _v2Router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // Uniswap V2 Router for Ethereum Mainnet

        dexRouter = IDexRouter(_v2Router);

         _mint(address(msg.sender), _totalSupply);
        swapTokensAtAmt = totalSupply() * 25 / 100000;

        // Step 1 (0-5 minutes)
        buyTaxStep1 = 2500; // 25%
        sellTaxStep1 = 2500; // 25%
        maxWalletStep1 = uint128(totalSupply() * 5 / 1000); // 0.5%

        // Step 2 (5-10 minutes)
        buyTaxStep2 = 2000; // 20%
        sellTaxStep2 = 2000; // 20%
        maxWalletStep2 = uint128(totalSupply() * 10 / 1000); // 1%

        // Step 3 (10-20 minutes)
        buyTaxStep3 = 1000; // 10%
        sellTaxStep3 = 1000; // 10%
        maxWalletStep3 = uint128(totalSupply() * 15 / 1000); // 1.5%

        // StepFinal (20+ minutes)
        buyTaxStepFinal = 500; // 5%
        sellTaxStepFinal = 500; // 5%
        maxWalletStepFinal = uint128(totalSupply() * 20 / 1000); // 2%

        WETH = dexRouter.WETH();
        lpPair = IDexFactory(dexRouter.factory()).createPair(address(this), WETH);

        isAMMPair[lpPair] = true;

        exemptFromLimits[lpPair] = true;
        exemptFromLimits[msg.sender] = true;
        exemptFromLimits[address(this)] = true;
        exemptFromLimits[address(0xdead)] = true;

        exemptFromFees[msg.sender] = true;
        exemptFromFees[address(this)] = true;
        exemptFromFees[address(dexRouter)] = true;
        exemptFromFees[address(0xdead)] = true;

        // Exempt the Sablier Vesting contract address
        exemptFromFees[0x3962f6585946823440d274aD7C719B02b49DE51E] = true;
        exemptFromLimits[0x3962f6585946823440d274aD7C719B02b49DE51E] = true;

        _approve(address(this), address(dexRouter), type(uint256).max);
        _approve(address(msg.sender), address(dexRouter), totalSupply());
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual override {
        
        if(!exemptFromFees[from] && !exemptFromFees[to]){
            require(tradingAllowed, "Trading not active");
            amount -= handleTax(from, to, amount);
            checkLimits(from, to, amount);
        }

        super._transfer(from,to,amount);
    }

    function checkLimits(address from, address to, uint256 amount) internal {
        if(limited){
            
            bool exFromLimitsTo = exemptFromLimits[to];
            uint256 balanceOfTo = balanceOf(to);

            // buy
            if (isAMMPair[from] && !exFromLimitsTo) {
                require(amount + balanceOfTo <= maxWallet, "Max Wallet");
            }
            else if(!exFromLimitsTo) {
                require(amount + balanceOfTo <= maxWallet, "Max Wallet");
            }

            if(transferDelayEnabled){
                if (to != address(dexRouter) && to != address(lpPair)){
                    require(_holderLastTransferBlock[tx.origin] < block.number, "Transfer Delay");
                    if(from == address(lpPair)){
                        require(tx.origin == to, "no buying to external wallets yet");
                    }
                    _holderLastTransferBlock[to] = block.number;
                    _holderLastTransferBlock[tx.origin] = block.number;
                }
            }
        }
    }

    function handleTax(address from, address to, uint256 amount) internal returns (uint256){

        if(balanceOf(address(this)) >= swapTokensAtAmt && !isAMMPair[from] && lastSwapBackBlock + 1 <= block.number) {
            convertTaxes();
        }

        if(dynamicTaxOn){
            setInternalTaxes();
        }
        
        uint128 tax = 0;

        uint24 taxes;

        if (isAMMPair[to]){
            taxes = sellTax;
        } else if(isAMMPair[from]){
            taxes = buyTax;
        }

        if(taxes > 0){
            tax = uint128(amount * taxes / FEE_DIVISOR);
            super._transfer(from, address(this), tax);
        }
        
        return tax;
    }

    function swapTokensForETH(uint256 tokenAmt) private {

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = WETH;

        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmt,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function convertTaxes() private {

        uint256 contractBalance = balanceOf(address(this));
        
        if(contractBalance == 0) {return;}

        lastSwapBackBlock = block.number;

        if(contractBalance > swapTokensAtAmt * 10){
            contractBalance = swapTokensAtAmt * 10;
        }

        if(contractBalance > 0){

            swapTokensForETH(contractBalance);
            
            uint256 ethBalance = address(this).balance;

            bool success;

            if(marketingAddress != address(0)){
                uint256 amountForMarketing = ethBalance * 2 / 5;
                (success,) = marketingAddress.call{value: amountForMarketing}("");
                ethBalance -= amountForMarketing;
            }

            (success,) = developmentAddress.call{value: ethBalance}("");
        }
    }

    function enableTrading() external onlyOwner {
        require(!tradingAllowed, "Trading already enabled");
        tradingAllowed = true;
        launchTimestamp = block.timestamp;
        transferDelayEnabled = true;
        buyTax = buyTaxStep1;
        sellTax = sellTaxStep1;
        maxWallet = maxWalletStep1;
        step1Activated = true;
    }

    function updateTax(uint24 _buyTax, uint24 _sellTax) external onlyOwner {
        require(_buyTax < buyTax || _buyTax <= 500, "Cannot raise buy tax over 5%");
        require(_sellTax < sellTax || _sellTax <= 500, "Cannot raise buy tax over 5%");
        buyTax = _buyTax;
        sellTax = _sellTax;
    }

    function removeLimits() external onlyOwner {
        require(limited, "Limits already removed");
        limited = false;
    }

    receive() payable external {}

    function setInternalTaxes() internal {
        uint256 currentTimestamp = block.timestamp;

        uint256 timeSinceLaunch;

        if(currentTimestamp >= launchTimestamp){
            timeSinceLaunch = currentTimestamp - launchTimestamp;
        }

        if(transferDelayEnabled && timeSinceLaunch >= 1 minutes){
            transferDelayEnabled = false;
        }

        if(timeSinceLaunch >= 20 minutes){
            dynamicTaxOn = false;
            buyTax = buyTaxStepFinal;
            sellTax = sellTaxStepFinal;
            maxWallet = maxWalletStepFinal;
        } else if(timeSinceLaunch >= 10 minutes){
            if(!step3Activated){
                buyTax = buyTaxStep3;
                sellTax = sellTaxStep3;
                maxWallet = maxWalletStep3;
                step3Activated = true;
            }
        } else if(timeSinceLaunch >= 5 minutes){
            if(!step2Activated){
                buyTax = buyTaxStep2;
                sellTax = sellTaxStep2;
                maxWallet = maxWalletStep2;
                step2Activated = true;
            }
        }
    }
}

Settings
{
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "remappings": []
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"FEE_DIVISOR","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTax","outputs":[{"internalType":"uint24","name":"","type":"uint24"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTaxStep1","outputs":[{"internalType":"uint24","name":"","type":"uint24"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTaxStep2","outputs":[{"internalType":"uint24","name":"","type":"uint24"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTaxStep3","outputs":[{"internalType":"uint24","name":"","type":"uint24"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTaxStepFinal","outputs":[{"internalType":"uint24","name":"","type":"uint24"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"developmentAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dynamicTaxOn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"exemptFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"exemptFromLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isAMMPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastSwapBackBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limited","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletStep1","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletStep2","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletStep3","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletStepFinal","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"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":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTax","outputs":[{"internalType":"uint24","name":"","type":"uint24"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTaxStep1","outputs":[{"internalType":"uint24","name":"","type":"uint24"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTaxStep2","outputs":[{"internalType":"uint24","name":"","type":"uint24"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTaxStep3","outputs":[{"internalType":"uint24","name":"","type":"uint24"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTaxStepFinal","outputs":[{"internalType":"uint24","name":"","type":"uint24"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"step1Activated","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"step2Activated","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"step3Activated","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingAllowed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint24","name":"_buyTax","type":"uint24"},{"internalType":"uint24","name":"_sellTax","type":"uint24"}],"name":"updateTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

610100604052600160125f6101000a81548160ff0219169083151502179055505f601560016101000a81548160ff021916908315150217905550348015610044575f80fd5b506040518060400160405280600481526020017f44494f4d000000000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f44494f4d0000000000000000000000000000000000000000000000000000000081525081600390816100c09190611093565b5080600490816100d09190611093565b5050505f6100e2610b4e60201b60201c565b90508060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505f6a52b7d2dcc80cd2e400000090507362c5b206dd49dad8e665e3e4d2560a04008e5333600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550730fab1e670a6eed24dfbea68e7194c272345a1fbc600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f600160155f6101000a81548160ff021916908315150217905550737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff16815250506102ac3383610b5560201b60201c565b620186a060196102c0610c8d60201b60201c565b6102ca919061118f565b6102d491906111fd565b608081815250506109c4600b601a6101000a81548162ffffff021916908362ffffff1602179055506109c4600b601d6101000a81548162ffffff021916908362ffffff1602179055506103e86005610330610c8d60201b60201c565b61033a919061118f565b61034491906111fd565b600c5f6101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506107d0600c60116101000a81548162ffffff021916908362ffffff1602179055506107d0600c60146101000a81548162ffffff021916908362ffffff1602179055506103e8600a6103d0610c8d60201b60201c565b6103da919061118f565b6103e491906111fd565b600d5f6101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506103e8600d60116101000a81548162ffffff021916908362ffffff1602179055506103e8600d60146101000a81548162ffffff021916908362ffffff1602179055506103e8600f610470610c8d60201b60201c565b61047a919061118f565b61048491906111fd565b600e5f6101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506101f4600e60116101000a81548162ffffff021916908362ffffff1602179055506101f4600e60146101000a81548162ffffff021916908362ffffff1602179055506103e86014610510610c8d60201b60201c565b61051a919061118f565b61052491906111fd565b600f5f6101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060c05173ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105a6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105ca919061128b565b73ffffffffffffffffffffffffffffffffffffffff1660e08173ffffffffffffffffffffffffffffffffffffffff168152505060c05173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610648573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061066c919061128b565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060e0516040518363ffffffff1660e01b81526004016106a89291906112c5565b6020604051808303815f875af11580156106c4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106e8919061128b565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050600160095f60a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160075f60a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160075f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160075f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160075f61dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160065f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160065f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160065f60c05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160065f61dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160065f733962f6585946823440d274ad7c719b02b49de51e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160075f733962f6585946823440d274ad7c719b02b49de51e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550610b273060c0517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610c9660201b60201c565b610b473360c051610b3c610c8d60201b60201c565b610c9660201b60201c565b50506114db565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610bc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bba90611346565b60405180910390fd5b8060025f828254610bd49190611364565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610c8191906113a6565b60405180910390a35050565b5f600254905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610d04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfb9061142f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d69906114bd565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610e4c91906113a6565b60405180910390a3505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680610ed457607f821691505b602082108103610ee757610ee6610e90565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302610f497fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610f0e565b610f538683610f0e565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f610f97610f92610f8d84610f6b565b610f74565b610f6b565b9050919050565b5f819050919050565b610fb083610f7d565b610fc4610fbc82610f9e565b848454610f1a565b825550505050565b5f90565b610fd8610fcc565b610fe3818484610fa7565b505050565b5b8181101561100657610ffb5f82610fd0565b600181019050610fe9565b5050565b601f82111561104b5761101c81610eed565b61102584610eff565b81016020851015611034578190505b61104861104085610eff565b830182610fe8565b50505b505050565b5f82821c905092915050565b5f61106b5f1984600802611050565b1980831691505092915050565b5f611083838361105c565b9150826002028217905092915050565b61109c82610e59565b67ffffffffffffffff8111156110b5576110b4610e63565b5b6110bf8254610ebd565b6110ca82828561100a565b5f60209050601f8311600181146110fb575f84156110e9578287015190505b6110f38582611078565b86555061115a565b601f19841661110986610eed565b5f5b828110156111305784890151825560018201915060208501945060208101905061110b565b8683101561114d5784890151611149601f89168261105c565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61119982610f6b565b91506111a483610f6b565b92508282026111b281610f6b565b915082820484148315176111c9576111c8611162565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61120782610f6b565b915061121283610f6b565b925082611222576112216111d0565b5b828204905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61125a82611231565b9050919050565b61126a81611250565b8114611274575f80fd5b50565b5f8151905061128581611261565b92915050565b5f602082840312156112a05761129f61122d565b5b5f6112ad84828501611277565b91505092915050565b6112bf81611250565b82525050565b5f6040820190506112d85f8301856112b6565b6112e560208301846112b6565b9392505050565b5f82825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f611330601f836112ec565b915061133b826112fc565b602082019050919050565b5f6020820190508181035f83015261135d81611324565b9050919050565b5f61136e82610f6b565b915061137983610f6b565b925082820190508082111561139157611390611162565b5b92915050565b6113a081610f6b565b82525050565b5f6020820190506113b95f830184611397565b92915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6114196024836112ec565b9150611424826113bf565b604082019050919050565b5f6020820190508181035f8301526114468161140d565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6114a76022836112ec565b91506114b28261144d565b604082019050919050565b5f6020820190508181035f8301526114d48161149b565b9050919050565b60805160a05160c05160e051613be46115465f395f818161166c0152612b2f01525f8181610c56015281816120ca0152612b9e01525f8181610d740152818161212101526121f601525f81816116d701528181611d3d015281816125be01526125f20152613be45ff3fe6080604052600436106102e7575f3560e01c80637f5fd71c1161018f578063ad5c4648116100db578063cc1776d311610094578063dd62ed3e1161006e578063dd62ed3e14610b0c578063ed5a0ec014610b48578063f2fde38b14610b72578063f8b45b0514610b9a576102ee565b8063cc1776d314610a8e578063d0cd578a14610ab8578063d7e71bf814610ae2576102ee565b8063ad5c464814610980578063b0249cc6146109aa578063b3b19d39146109e6578063ba92c71c14610a10578063c78d0fa014610a3a578063c876d0b914610a64576102ee565b80638da5cb5b116101485780639e93ad8e116101225780639e93ad8e146108b4578063a457c2d7146108de578063a5ece9411461091a578063a9059cbb14610944576102ee565b80638da5cb5b146108365780638e385a2a1461086057806395d89b411461088a576102ee565b80637f5fd71c1461073c578063860a32ec146107665780638a7814c8146107905780638a8c523c146107ba5780638b799060146107d05780638d3e6e40146107fa576102ee565b8063452ed4f11161024e57806361286e771161020757806370a08231116101e157806370a08231146106aa578063715018a6146106e657806371ac0a18146106fc578063751039fc14610726576102ee565b806361286e771461062c578063638b1b141461065657806365cf7c9b14610680576102ee565b8063452ed4f11461052057806348792bd31461054a5780634b356f47146105745780634f7041a51461059c57806353371be0146105c65780635a90a49e146105f0576102ee565b80632645654f116102a05780632645654f146104125780632bdc2a491461043c578063313ce56714610466578063362919a71461049057806339509351146104ba578063432e95a5146104f6576102ee565b806306fdde03146102f25780630758d9241461031c578063095ea7b3146103465780630a2808731461038257806318160ddd146103ac57806323b872dd146103d6576102ee565b366102ee57005b5f80fd5b3480156102fd575f80fd5b50610306610bc4565b6040516103139190612c9e565b60405180910390f35b348015610327575f80fd5b50610330610c54565b60405161033d9190612d38565b60405180910390f35b348015610351575f80fd5b5061036c60048036038101906103679190612dc3565b610c78565b6040516103799190612e1b565b60405180910390f35b34801561038d575f80fd5b50610396610c9a565b6040516103a39190612e51565b60405180910390f35b3480156103b7575f80fd5b506103c0610caf565b6040516103cd9190612e79565b60405180910390f35b3480156103e1575f80fd5b506103fc60048036038101906103f79190612e92565b610cb8565b6040516104099190612e1b565b60405180910390f35b34801561041d575f80fd5b50610426610ce6565b6040516104339190612e51565b60405180910390f35b348015610447575f80fd5b50610450610cfb565b60405161045d9190612f0c565b60405180910390f35b348015610471575f80fd5b5061047a610d1c565b6040516104879190612f40565b60405180910390f35b34801561049b575f80fd5b506104a4610d24565b6040516104b19190612e1b565b60405180910390f35b3480156104c5575f80fd5b506104e060048036038101906104db9190612dc3565b610d36565b6040516104ed9190612e1b565b60405180910390f35b348015610501575f80fd5b5061050a610d6c565b6040516105179190612e79565b60405180910390f35b34801561052b575f80fd5b50610534610d72565b6040516105419190612f68565b60405180910390f35b348015610555575f80fd5b5061055e610d96565b60405161056b9190612e51565b60405180910390f35b34801561057f575f80fd5b5061059a60048036038101906105959190612fab565b610dab565b005b3480156105a7575f80fd5b506105b0610f61565b6040516105bd9190612e51565b60405180910390f35b3480156105d1575f80fd5b506105da610f76565b6040516105e79190612e1b565b60405180910390f35b3480156105fb575f80fd5b5061061660048036038101906106119190612fe9565b610f88565b6040516106239190612e1b565b60405180910390f35b348015610637575f80fd5b50610640610fa5565b60405161064d9190612e1b565b60405180910390f35b348015610661575f80fd5b5061066a610fb8565b6040516106779190612f68565b60405180910390f35b34801561068b575f80fd5b50610694610fdd565b6040516106a19190612e79565b60405180910390f35b3480156106b5575f80fd5b506106d060048036038101906106cb9190612fe9565b610fe3565b6040516106dd9190612e79565b60405180910390f35b3480156106f1575f80fd5b506106fa611028565b005b348015610707575f80fd5b5061071061117b565b60405161071d9190612e1b565b60405180910390f35b348015610731575f80fd5b5061073a61118e565b005b348015610747575f80fd5b5061075061128d565b60405161075d9190612e51565b60405180910390f35b348015610771575f80fd5b5061077a6112a2565b6040516107879190612e1b565b60405180910390f35b34801561079b575f80fd5b506107a46112b4565b6040516107b19190612e51565b60405180910390f35b3480156107c5575f80fd5b506107ce6112c9565b005b3480156107db575f80fd5b506107e461149d565b6040516107f19190612f0c565b60405180910390f35b348015610805575f80fd5b50610820600480360381019061081b9190612fe9565b6114be565b60405161082d9190612e1b565b60405180910390f35b348015610841575f80fd5b5061084a6114db565b6040516108579190612f68565b60405180910390f35b34801561086b575f80fd5b50610874611503565b6040516108819190612e51565b60405180910390f35b348015610895575f80fd5b5061089e611518565b6040516108ab9190612c9e565b60405180910390f35b3480156108bf575f80fd5b506108c86115a8565b6040516108d59190613036565b60405180910390f35b3480156108e9575f80fd5b5061090460048036038101906108ff9190612dc3565b6115ae565b6040516109119190612e1b565b60405180910390f35b348015610925575f80fd5b5061092e611623565b60405161093b9190612f68565b60405180910390f35b34801561094f575f80fd5b5061096a60048036038101906109659190612dc3565b611648565b6040516109779190612e1b565b60405180910390f35b34801561098b575f80fd5b5061099461166a565b6040516109a19190612f68565b60405180910390f35b3480156109b5575f80fd5b506109d060048036038101906109cb9190612fe9565b61168e565b6040516109dd9190612e1b565b60405180910390f35b3480156109f1575f80fd5b506109fa6116ab565b604051610a079190612e51565b60405180910390f35b348015610a1b575f80fd5b50610a246116c0565b604051610a319190612e51565b60405180910390f35b348015610a45575f80fd5b50610a4e6116d5565b604051610a5b9190612e79565b60405180910390f35b348015610a6f575f80fd5b50610a786116f9565b604051610a859190612e1b565b60405180910390f35b348015610a99575f80fd5b50610aa261170c565b604051610aaf9190612e51565b60405180910390f35b348015610ac3575f80fd5b50610acc611721565b604051610ad99190612f0c565b60405180910390f35b348015610aed575f80fd5b50610af6611742565b604051610b039190612f0c565b60405180910390f35b348015610b17575f80fd5b50610b326004803603810190610b2d919061304f565b611763565b604051610b3f9190612e79565b60405180910390f35b348015610b53575f80fd5b50610b5c6117e5565b604051610b699190612e1b565b60405180910390f35b348015610b7d575f80fd5b50610b986004803603810190610b939190612fe9565b6117f8565b005b348015610ba5575f80fd5b50610bae6119ba565b604051610bbb9190612e79565b60405180910390f35b606060038054610bd3906130ba565b80601f0160208091040260200160405190810160405280929190818152602001828054610bff906130ba565b8015610c4a5780601f10610c2157610100808354040283529160200191610c4a565b820191905f5260205f20905b815481529060010190602001808311610c2d57829003601f168201915b5050505050905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f80610c826119c0565b9050610c8f8185856119c7565b600191505092915050565b600b601a9054906101000a900462ffffff1681565b5f600254905090565b5f80610cc26119c0565b9050610ccf858285611b8a565b610cda858585611c15565b60019150509392505050565b600d60149054906101000a900462ffffff1681565b600f5f9054906101000a90046fffffffffffffffffffffffffffffffff1681565b5f6012905090565b60155f9054906101000a900460ff1681565b5f80610d406119c0565b9050610d61818585610d528589611763565b610d5c9190613117565b6119c7565b600191505092915050565b60105481565b7f000000000000000000000000000000000000000000000000000000000000000081565b600e60149054906101000a900462ffffff1681565b610db36119c0565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3890613194565b60405180910390fd5b600b60149054906101000a900462ffffff1662ffffff168262ffffff161080610e7157506101f48262ffffff1611155b610eb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea7906131fc565b60405180910390fd5b600b60179054906101000a900462ffffff1662ffffff168162ffffff161080610ee057506101f48162ffffff1611155b610f1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f16906131fc565b60405180910390fd5b81600b60146101000a81548162ffffff021916908362ffffff16021790555080600b60176101000a81548162ffffff021916908362ffffff1602179055505050565b600b60149054906101000a900462ffffff1681565b60085f9054906101000a900460ff1681565b6006602052805f5260405f205f915054906101000a900460ff1681565b600e60109054906101000a900460ff1681565b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60145481565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6110306119c0565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b590613194565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600c60109054906101000a900460ff1681565b6111966119c0565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611224576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121b90613194565b60405180910390fd5b60125f9054906101000a900460ff16611272576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126990613264565b60405180910390fd5b5f60125f6101000a81548160ff021916908315150217905550565b600b601d9054906101000a900462ffffff1681565b60125f9054906101000a900460ff1681565b600e60119054906101000a900462ffffff1681565b6112d16119c0565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461135f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135690613194565b60405180910390fd5b60085f9054906101000a900460ff16156113ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a5906132cc565b60405180910390fd5b600160085f6101000a81548160ff021916908315150217905550426014819055506001601560016101000a81548160ff021916908315150217905550600b601a9054906101000a900462ffffff16600b60146101000a81548162ffffff021916908362ffffff160217905550600b601d9054906101000a900462ffffff16600b60176101000a81548162ffffff021916908362ffffff160217905550600c5f9054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166013819055506001600c60106101000a81548160ff021916908315150217905550565b600d5f9054906101000a90046fffffffffffffffffffffffffffffffff1681565b6007602052805f5260405f205f915054906101000a900460ff1681565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600d60119054906101000a900462ffffff1681565b606060048054611527906130ba565b80601f0160208091040260200160405190810160405280929190818152602001828054611553906130ba565b801561159e5780601f106115755761010080835404028352916020019161159e565b820191905f5260205f20905b81548152906001019060200180831161158157829003601f168201915b5050505050905090565b61271081565b5f806115b86119c0565b90505f6115c58286611763565b90508381101561160a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116019061335a565b60405180910390fd5b61161782868684036119c7565b60019250505092915050565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f806116526119c0565b905061165f818585611c15565b600191505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6009602052805f5260405f205f915054906101000a900460ff1681565b600c60149054906101000a900462ffffff1681565b600c60119054906101000a900462ffffff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b601560019054906101000a900460ff1681565b600b60179054906101000a900462ffffff1681565b600c5f9054906101000a90046fffffffffffffffffffffffffffffffff1681565b600e5f9054906101000a90046fffffffffffffffffffffffffffffffff1681565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600d60109054906101000a900460ff1681565b6118006119c0565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461188e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188590613194565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036118fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f3906133e8565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60135481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611a35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2c90613476565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611aa3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9a90613504565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611b7d9190612e79565b60405180910390a3505050565b5f611b958484611763565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611c0f5781811015611c01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf89061356c565b60405180910390fd5b611c0e84848484036119c7565b5b50505050565b60065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015611cb3575060065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15611d2a5760085f9054906101000a900460ff16611d06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfd906135d4565b60405180910390fd5b611d11838383611d3a565b81611d1c91906135f2565b9050611d29838383611f41565b5b611d35838383612344565b505050565b5f7f0000000000000000000000000000000000000000000000000000000000000000611d6530610fe3565b10158015611dba575060095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015611dd45750436001601054611dd19190613117565b11155b15611de257611de161259a565b5b60155f9054906101000a900460ff1615611dff57611dfe6127cf565b5b5f8060095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615611e6957600b60179054906101000a900462ffffff169050611ece565b60095f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615611ecd57600b60149054906101000a900462ffffff1690505b5b5f8162ffffff161115611f235761271067ffffffffffffffff168162ffffff1685611ef99190613625565b611f039190613693565b9150611f228630846fffffffffffffffffffffffffffffffff16612344565b5b816fffffffffffffffffffffffffffffffff16925050509392505050565b60125f9054906101000a900460ff161561233f575f60075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1690505f611fac84610fe3565b905060095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612002575081155b1561205c5760135481846120169190613117565b1115612057576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204e9061370d565b60405180910390fd5b6120b3565b816120b25760135481846120709190613117565b11156120b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a89061370d565b60405180910390fd5b5b5b601560019054906101000a900460ff161561233c577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415801561217057507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b1561233b574360115f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054106121f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121eb90613775565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036122b6578373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146122b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ac90613803565b60405180910390fd5b5b4360115f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055504360115f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5b50505b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036123b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a990613891565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612420576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124179061391f565b60405180910390fd5b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156124a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249a906139ad565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161258c9190612e79565b60405180910390a350505050565b5f6125a430610fe3565b90505f81036125b357506127cd565b43601081905550600a7f00000000000000000000000000000000000000000000000000000000000000006125e79190613625565b81111561261e57600a7f000000000000000000000000000000000000000000000000000000000000000061261b9190613625565b90505b5f8111156127cb5761262f81612a92565b5f4790505f8073ffffffffffffffffffffffffffffffffffffffff16600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461273e575f60056002846126989190613625565b6126a29190613693565b9050600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16816040516126e9906139f8565b5f6040518083038185875af1925050503d805f8114612723576040519150601f19603f3d011682016040523d82523d5f602084013e612728565b606091505b505080925050808361273a91906135f2565b9250505b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051612783906139f8565b5f6040518083038185875af1925050503d805f81146127bd576040519150601f19603f3d011682016040523d82523d5f602084013e6127c2565b606091505b50508091505050505b505b565b5f4290505f60145482106127ee57601454826127eb91906135f2565b90505b601560019054906101000a900460ff16801561280b5750603c8110155b1561282b575f601560016101000a81548160ff0219169083151502179055505b6104b081106128e8575f60155f6101000a81548160ff021916908315150217905550600e60119054906101000a900462ffffff16600b60146101000a81548162ffffff021916908362ffffff160217905550600e60149054906101000a900462ffffff16600b60176101000a81548162ffffff021916908362ffffff160217905550600f5f9054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16601381905550612a8e565b61025881106129bc57600e60109054906101000a900460ff166129b757600d60119054906101000a900462ffffff16600b60146101000a81548162ffffff021916908362ffffff160217905550600d60149054906101000a900462ffffff16600b60176101000a81548162ffffff021916908362ffffff160217905550600e5f9054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166013819055506001600e60106101000a81548160ff0219169083151502179055505b612a8d565b61012c8110612a8c57600d60109054906101000a900460ff16612a8b57600c60119054906101000a900462ffffff16600b60146101000a81548162ffffff021916908362ffffff160217905550600c60149054906101000a900462ffffff16600b60176101000a81548162ffffff021916908362ffffff160217905550600d5f9054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166013819055506001600d60106101000a81548160ff0219169083151502179055505b5b5b5b5050565b5f600267ffffffffffffffff811115612aae57612aad613a0c565b5b604051908082528060200260200182016040528015612adc5781602001602082028036833780820191505090505b50905030815f81518110612af357612af2613a39565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000081600181518110612b6257612b61613a39565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401612bfd959493929190613b56565b5f604051808303815f87803b158015612c14575f80fd5b505af1158015612c26573d5f803e3d5ffd5b505050505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f612c7082612c2e565b612c7a8185612c38565b9350612c8a818560208601612c48565b612c9381612c56565b840191505092915050565b5f6020820190508181035f830152612cb68184612c66565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f819050919050565b5f612d00612cfb612cf684612cbe565b612cdd565b612cbe565b9050919050565b5f612d1182612ce6565b9050919050565b5f612d2282612d07565b9050919050565b612d3281612d18565b82525050565b5f602082019050612d4b5f830184612d29565b92915050565b5f80fd5b5f612d5f82612cbe565b9050919050565b612d6f81612d55565b8114612d79575f80fd5b50565b5f81359050612d8a81612d66565b92915050565b5f819050919050565b612da281612d90565b8114612dac575f80fd5b50565b5f81359050612dbd81612d99565b92915050565b5f8060408385031215612dd957612dd8612d51565b5b5f612de685828601612d7c565b9250506020612df785828601612daf565b9150509250929050565b5f8115159050919050565b612e1581612e01565b82525050565b5f602082019050612e2e5f830184612e0c565b92915050565b5f62ffffff82169050919050565b612e4b81612e34565b82525050565b5f602082019050612e645f830184612e42565b92915050565b612e7381612d90565b82525050565b5f602082019050612e8c5f830184612e6a565b92915050565b5f805f60608486031215612ea957612ea8612d51565b5b5f612eb686828701612d7c565b9350506020612ec786828701612d7c565b9250506040612ed886828701612daf565b9150509250925092565b5f6fffffffffffffffffffffffffffffffff82169050919050565b612f0681612ee2565b82525050565b5f602082019050612f1f5f830184612efd565b92915050565b5f60ff82169050919050565b612f3a81612f25565b82525050565b5f602082019050612f535f830184612f31565b92915050565b612f6281612d55565b82525050565b5f602082019050612f7b5f830184612f59565b92915050565b612f8a81612e34565b8114612f94575f80fd5b50565b5f81359050612fa581612f81565b92915050565b5f8060408385031215612fc157612fc0612d51565b5b5f612fce85828601612f97565b9250506020612fdf85828601612f97565b9150509250929050565b5f60208284031215612ffe57612ffd612d51565b5b5f61300b84828501612d7c565b91505092915050565b5f67ffffffffffffffff82169050919050565b61303081613014565b82525050565b5f6020820190506130495f830184613027565b92915050565b5f806040838503121561306557613064612d51565b5b5f61307285828601612d7c565b925050602061308385828601612d7c565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806130d157607f821691505b6020821081036130e4576130e361308d565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61312182612d90565b915061312c83612d90565b9250828201905080821115613144576131436130ea565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61317e602083612c38565b91506131898261314a565b602082019050919050565b5f6020820190508181035f8301526131ab81613172565b9050919050565b7f43616e6e6f742072616973652062757920746178206f766572203525000000005f82015250565b5f6131e6601c83612c38565b91506131f1826131b2565b602082019050919050565b5f6020820190508181035f830152613213816131da565b9050919050565b7f4c696d69747320616c72656164792072656d6f766564000000000000000000005f82015250565b5f61324e601683612c38565b91506132598261321a565b602082019050919050565b5f6020820190508181035f83015261327b81613242565b9050919050565b7f54726164696e6720616c726561647920656e61626c65640000000000000000005f82015250565b5f6132b6601783612c38565b91506132c182613282565b602082019050919050565b5f6020820190508181035f8301526132e3816132aa565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f613344602583612c38565b915061334f826132ea565b604082019050919050565b5f6020820190508181035f83015261337181613338565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6133d2602683612c38565b91506133dd82613378565b604082019050919050565b5f6020820190508181035f8301526133ff816133c6565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613460602483612c38565b915061346b82613406565b604082019050919050565b5f6020820190508181035f83015261348d81613454565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6134ee602283612c38565b91506134f982613494565b604082019050919050565b5f6020820190508181035f83015261351b816134e2565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f613556601d83612c38565b915061356182613522565b602082019050919050565b5f6020820190508181035f8301526135838161354a565b9050919050565b7f54726164696e67206e6f742061637469766500000000000000000000000000005f82015250565b5f6135be601283612c38565b91506135c98261358a565b602082019050919050565b5f6020820190508181035f8301526135eb816135b2565b9050919050565b5f6135fc82612d90565b915061360783612d90565b925082820390508181111561361f5761361e6130ea565b5b92915050565b5f61362f82612d90565b915061363a83612d90565b925082820261364881612d90565b9150828204841483151761365f5761365e6130ea565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61369d82612d90565b91506136a883612d90565b9250826136b8576136b7613666565b5b828204905092915050565b7f4d61782057616c6c6574000000000000000000000000000000000000000000005f82015250565b5f6136f7600a83612c38565b9150613702826136c3565b602082019050919050565b5f6020820190508181035f830152613724816136eb565b9050919050565b7f5472616e736665722044656c61790000000000000000000000000000000000005f82015250565b5f61375f600e83612c38565b915061376a8261372b565b602082019050919050565b5f6020820190508181035f83015261378c81613753565b9050919050565b7f6e6f20627579696e6720746f2065787465726e616c2077616c6c6574732079655f8201527f7400000000000000000000000000000000000000000000000000000000000000602082015250565b5f6137ed602183612c38565b91506137f882613793565b604082019050919050565b5f6020820190508181035f83015261381a816137e1565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f61387b602583612c38565b915061388682613821565b604082019050919050565b5f6020820190508181035f8301526138a88161386f565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f613909602383612c38565b9150613914826138af565b604082019050919050565b5f6020820190508181035f830152613936816138fd565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f613997602683612c38565b91506139a28261393d565b604082019050919050565b5f6020820190508181035f8301526139c48161398b565b9050919050565b5f81905092915050565b50565b5f6139e35f836139cb565b91506139ee826139d5565b5f82019050919050565b5f613a02826139d8565b9150819050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050919050565b5f613a89613a84613a7f84613a66565b612cdd565b612d90565b9050919050565b613a9981613a6f565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b613ad181612d55565b82525050565b5f613ae28383613ac8565b60208301905092915050565b5f602082019050919050565b5f613b0482613a9f565b613b0e8185613aa9565b9350613b1983613ab9565b805f5b83811015613b49578151613b308882613ad7565b9750613b3b83613aee565b925050600181019050613b1c565b5085935050505092915050565b5f60a082019050613b695f830188612e6a565b613b766020830187613a90565b8181036040830152613b888186613afa565b9050613b976060830185612f59565b613ba46080830184612e6a565b969550505050505056fea2646970667358221220cfa937792bdd325bf0823091088694cb83d89c6b6b57a3238d678e96f777abc464736f6c63430008190033

Deployed Bytecode

0x6080604052600436106102e7575f3560e01c80637f5fd71c1161018f578063ad5c4648116100db578063cc1776d311610094578063dd62ed3e1161006e578063dd62ed3e14610b0c578063ed5a0ec014610b48578063f2fde38b14610b72578063f8b45b0514610b9a576102ee565b8063cc1776d314610a8e578063d0cd578a14610ab8578063d7e71bf814610ae2576102ee565b8063ad5c464814610980578063b0249cc6146109aa578063b3b19d39146109e6578063ba92c71c14610a10578063c78d0fa014610a3a578063c876d0b914610a64576102ee565b80638da5cb5b116101485780639e93ad8e116101225780639e93ad8e146108b4578063a457c2d7146108de578063a5ece9411461091a578063a9059cbb14610944576102ee565b80638da5cb5b146108365780638e385a2a1461086057806395d89b411461088a576102ee565b80637f5fd71c1461073c578063860a32ec146107665780638a7814c8146107905780638a8c523c146107ba5780638b799060146107d05780638d3e6e40146107fa576102ee565b8063452ed4f11161024e57806361286e771161020757806370a08231116101e157806370a08231146106aa578063715018a6146106e657806371ac0a18146106fc578063751039fc14610726576102ee565b806361286e771461062c578063638b1b141461065657806365cf7c9b14610680576102ee565b8063452ed4f11461052057806348792bd31461054a5780634b356f47146105745780634f7041a51461059c57806353371be0146105c65780635a90a49e146105f0576102ee565b80632645654f116102a05780632645654f146104125780632bdc2a491461043c578063313ce56714610466578063362919a71461049057806339509351146104ba578063432e95a5146104f6576102ee565b806306fdde03146102f25780630758d9241461031c578063095ea7b3146103465780630a2808731461038257806318160ddd146103ac57806323b872dd146103d6576102ee565b366102ee57005b5f80fd5b3480156102fd575f80fd5b50610306610bc4565b6040516103139190612c9e565b60405180910390f35b348015610327575f80fd5b50610330610c54565b60405161033d9190612d38565b60405180910390f35b348015610351575f80fd5b5061036c60048036038101906103679190612dc3565b610c78565b6040516103799190612e1b565b60405180910390f35b34801561038d575f80fd5b50610396610c9a565b6040516103a39190612e51565b60405180910390f35b3480156103b7575f80fd5b506103c0610caf565b6040516103cd9190612e79565b60405180910390f35b3480156103e1575f80fd5b506103fc60048036038101906103f79190612e92565b610cb8565b6040516104099190612e1b565b60405180910390f35b34801561041d575f80fd5b50610426610ce6565b6040516104339190612e51565b60405180910390f35b348015610447575f80fd5b50610450610cfb565b60405161045d9190612f0c565b60405180910390f35b348015610471575f80fd5b5061047a610d1c565b6040516104879190612f40565b60405180910390f35b34801561049b575f80fd5b506104a4610d24565b6040516104b19190612e1b565b60405180910390f35b3480156104c5575f80fd5b506104e060048036038101906104db9190612dc3565b610d36565b6040516104ed9190612e1b565b60405180910390f35b348015610501575f80fd5b5061050a610d6c565b6040516105179190612e79565b60405180910390f35b34801561052b575f80fd5b50610534610d72565b6040516105419190612f68565b60405180910390f35b348015610555575f80fd5b5061055e610d96565b60405161056b9190612e51565b60405180910390f35b34801561057f575f80fd5b5061059a60048036038101906105959190612fab565b610dab565b005b3480156105a7575f80fd5b506105b0610f61565b6040516105bd9190612e51565b60405180910390f35b3480156105d1575f80fd5b506105da610f76565b6040516105e79190612e1b565b60405180910390f35b3480156105fb575f80fd5b5061061660048036038101906106119190612fe9565b610f88565b6040516106239190612e1b565b60405180910390f35b348015610637575f80fd5b50610640610fa5565b60405161064d9190612e1b565b60405180910390f35b348015610661575f80fd5b5061066a610fb8565b6040516106779190612f68565b60405180910390f35b34801561068b575f80fd5b50610694610fdd565b6040516106a19190612e79565b60405180910390f35b3480156106b5575f80fd5b506106d060048036038101906106cb9190612fe9565b610fe3565b6040516106dd9190612e79565b60405180910390f35b3480156106f1575f80fd5b506106fa611028565b005b348015610707575f80fd5b5061071061117b565b60405161071d9190612e1b565b60405180910390f35b348015610731575f80fd5b5061073a61118e565b005b348015610747575f80fd5b5061075061128d565b60405161075d9190612e51565b60405180910390f35b348015610771575f80fd5b5061077a6112a2565b6040516107879190612e1b565b60405180910390f35b34801561079b575f80fd5b506107a46112b4565b6040516107b19190612e51565b60405180910390f35b3480156107c5575f80fd5b506107ce6112c9565b005b3480156107db575f80fd5b506107e461149d565b6040516107f19190612f0c565b60405180910390f35b348015610805575f80fd5b50610820600480360381019061081b9190612fe9565b6114be565b60405161082d9190612e1b565b60405180910390f35b348015610841575f80fd5b5061084a6114db565b6040516108579190612f68565b60405180910390f35b34801561086b575f80fd5b50610874611503565b6040516108819190612e51565b60405180910390f35b348015610895575f80fd5b5061089e611518565b6040516108ab9190612c9e565b60405180910390f35b3480156108bf575f80fd5b506108c86115a8565b6040516108d59190613036565b60405180910390f35b3480156108e9575f80fd5b5061090460048036038101906108ff9190612dc3565b6115ae565b6040516109119190612e1b565b60405180910390f35b348015610925575f80fd5b5061092e611623565b60405161093b9190612f68565b60405180910390f35b34801561094f575f80fd5b5061096a60048036038101906109659190612dc3565b611648565b6040516109779190612e1b565b60405180910390f35b34801561098b575f80fd5b5061099461166a565b6040516109a19190612f68565b60405180910390f35b3480156109b5575f80fd5b506109d060048036038101906109cb9190612fe9565b61168e565b6040516109dd9190612e1b565b60405180910390f35b3480156109f1575f80fd5b506109fa6116ab565b604051610a079190612e51565b60405180910390f35b348015610a1b575f80fd5b50610a246116c0565b604051610a319190612e51565b60405180910390f35b348015610a45575f80fd5b50610a4e6116d5565b604051610a5b9190612e79565b60405180910390f35b348015610a6f575f80fd5b50610a786116f9565b604051610a859190612e1b565b60405180910390f35b348015610a99575f80fd5b50610aa261170c565b604051610aaf9190612e51565b60405180910390f35b348015610ac3575f80fd5b50610acc611721565b604051610ad99190612f0c565b60405180910390f35b348015610aed575f80fd5b50610af6611742565b604051610b039190612f0c565b60405180910390f35b348015610b17575f80fd5b50610b326004803603810190610b2d919061304f565b611763565b604051610b3f9190612e79565b60405180910390f35b348015610b53575f80fd5b50610b5c6117e5565b604051610b699190612e1b565b60405180910390f35b348015610b7d575f80fd5b50610b986004803603810190610b939190612fe9565b6117f8565b005b348015610ba5575f80fd5b50610bae6119ba565b604051610bbb9190612e79565b60405180910390f35b606060038054610bd3906130ba565b80601f0160208091040260200160405190810160405280929190818152602001828054610bff906130ba565b8015610c4a5780601f10610c2157610100808354040283529160200191610c4a565b820191905f5260205f20905b815481529060010190602001808311610c2d57829003601f168201915b5050505050905090565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b5f80610c826119c0565b9050610c8f8185856119c7565b600191505092915050565b600b601a9054906101000a900462ffffff1681565b5f600254905090565b5f80610cc26119c0565b9050610ccf858285611b8a565b610cda858585611c15565b60019150509392505050565b600d60149054906101000a900462ffffff1681565b600f5f9054906101000a90046fffffffffffffffffffffffffffffffff1681565b5f6012905090565b60155f9054906101000a900460ff1681565b5f80610d406119c0565b9050610d61818585610d528589611763565b610d5c9190613117565b6119c7565b600191505092915050565b60105481565b7f00000000000000000000000020070eaa347a83e58220fca8fd9086096b8f129f81565b600e60149054906101000a900462ffffff1681565b610db36119c0565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3890613194565b60405180910390fd5b600b60149054906101000a900462ffffff1662ffffff168262ffffff161080610e7157506101f48262ffffff1611155b610eb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea7906131fc565b60405180910390fd5b600b60179054906101000a900462ffffff1662ffffff168162ffffff161080610ee057506101f48162ffffff1611155b610f1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f16906131fc565b60405180910390fd5b81600b60146101000a81548162ffffff021916908362ffffff16021790555080600b60176101000a81548162ffffff021916908362ffffff1602179055505050565b600b60149054906101000a900462ffffff1681565b60085f9054906101000a900460ff1681565b6006602052805f5260405f205f915054906101000a900460ff1681565b600e60109054906101000a900460ff1681565b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60145481565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6110306119c0565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b590613194565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600c60109054906101000a900460ff1681565b6111966119c0565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611224576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121b90613194565b60405180910390fd5b60125f9054906101000a900460ff16611272576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126990613264565b60405180910390fd5b5f60125f6101000a81548160ff021916908315150217905550565b600b601d9054906101000a900462ffffff1681565b60125f9054906101000a900460ff1681565b600e60119054906101000a900462ffffff1681565b6112d16119c0565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461135f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135690613194565b60405180910390fd5b60085f9054906101000a900460ff16156113ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a5906132cc565b60405180910390fd5b600160085f6101000a81548160ff021916908315150217905550426014819055506001601560016101000a81548160ff021916908315150217905550600b601a9054906101000a900462ffffff16600b60146101000a81548162ffffff021916908362ffffff160217905550600b601d9054906101000a900462ffffff16600b60176101000a81548162ffffff021916908362ffffff160217905550600c5f9054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166013819055506001600c60106101000a81548160ff021916908315150217905550565b600d5f9054906101000a90046fffffffffffffffffffffffffffffffff1681565b6007602052805f5260405f205f915054906101000a900460ff1681565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600d60119054906101000a900462ffffff1681565b606060048054611527906130ba565b80601f0160208091040260200160405190810160405280929190818152602001828054611553906130ba565b801561159e5780601f106115755761010080835404028352916020019161159e565b820191905f5260205f20905b81548152906001019060200180831161158157829003601f168201915b5050505050905090565b61271081565b5f806115b86119c0565b90505f6115c58286611763565b90508381101561160a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116019061335a565b60405180910390fd5b61161782868684036119c7565b60019250505092915050565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f806116526119c0565b905061165f818585611c15565b600191505092915050565b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b6009602052805f5260405f205f915054906101000a900460ff1681565b600c60149054906101000a900462ffffff1681565b600c60119054906101000a900462ffffff1681565b7f00000000000000000000000000000000000000000000054b40b1f852bda0000081565b601560019054906101000a900460ff1681565b600b60179054906101000a900462ffffff1681565b600c5f9054906101000a90046fffffffffffffffffffffffffffffffff1681565b600e5f9054906101000a90046fffffffffffffffffffffffffffffffff1681565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600d60109054906101000a900460ff1681565b6118006119c0565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461188e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188590613194565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036118fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f3906133e8565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60135481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611a35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2c90613476565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611aa3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9a90613504565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611b7d9190612e79565b60405180910390a3505050565b5f611b958484611763565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611c0f5781811015611c01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf89061356c565b60405180910390fd5b611c0e84848484036119c7565b5b50505050565b60065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015611cb3575060065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15611d2a5760085f9054906101000a900460ff16611d06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfd906135d4565b60405180910390fd5b611d11838383611d3a565b81611d1c91906135f2565b9050611d29838383611f41565b5b611d35838383612344565b505050565b5f7f00000000000000000000000000000000000000000000054b40b1f852bda00000611d6530610fe3565b10158015611dba575060095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015611dd45750436001601054611dd19190613117565b11155b15611de257611de161259a565b5b60155f9054906101000a900460ff1615611dff57611dfe6127cf565b5b5f8060095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615611e6957600b60179054906101000a900462ffffff169050611ece565b60095f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615611ecd57600b60149054906101000a900462ffffff1690505b5b5f8162ffffff161115611f235761271067ffffffffffffffff168162ffffff1685611ef99190613625565b611f039190613693565b9150611f228630846fffffffffffffffffffffffffffffffff16612344565b5b816fffffffffffffffffffffffffffffffff16925050509392505050565b60125f9054906101000a900460ff161561233f575f60075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1690505f611fac84610fe3565b905060095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612002575081155b1561205c5760135481846120169190613117565b1115612057576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204e9061370d565b60405180910390fd5b6120b3565b816120b25760135481846120709190613117565b11156120b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a89061370d565b60405180910390fd5b5b5b601560019054906101000a900460ff161561233c577f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415801561217057507f00000000000000000000000020070eaa347a83e58220fca8fd9086096b8f129f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b1561233b574360115f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054106121f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121eb90613775565b60405180910390fd5b7f00000000000000000000000020070eaa347a83e58220fca8fd9086096b8f129f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036122b6578373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146122b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ac90613803565b60405180910390fd5b5b4360115f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055504360115f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5b50505b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036123b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a990613891565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612420576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124179061391f565b60405180910390fd5b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156124a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249a906139ad565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161258c9190612e79565b60405180910390a350505050565b5f6125a430610fe3565b90505f81036125b357506127cd565b43601081905550600a7f00000000000000000000000000000000000000000000054b40b1f852bda000006125e79190613625565b81111561261e57600a7f00000000000000000000000000000000000000000000054b40b1f852bda0000061261b9190613625565b90505b5f8111156127cb5761262f81612a92565b5f4790505f8073ffffffffffffffffffffffffffffffffffffffff16600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461273e575f60056002846126989190613625565b6126a29190613693565b9050600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16816040516126e9906139f8565b5f6040518083038185875af1925050503d805f8114612723576040519150601f19603f3d011682016040523d82523d5f602084013e612728565b606091505b505080925050808361273a91906135f2565b9250505b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051612783906139f8565b5f6040518083038185875af1925050503d805f81146127bd576040519150601f19603f3d011682016040523d82523d5f602084013e6127c2565b606091505b50508091505050505b505b565b5f4290505f60145482106127ee57601454826127eb91906135f2565b90505b601560019054906101000a900460ff16801561280b5750603c8110155b1561282b575f601560016101000a81548160ff0219169083151502179055505b6104b081106128e8575f60155f6101000a81548160ff021916908315150217905550600e60119054906101000a900462ffffff16600b60146101000a81548162ffffff021916908362ffffff160217905550600e60149054906101000a900462ffffff16600b60176101000a81548162ffffff021916908362ffffff160217905550600f5f9054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16601381905550612a8e565b61025881106129bc57600e60109054906101000a900460ff166129b757600d60119054906101000a900462ffffff16600b60146101000a81548162ffffff021916908362ffffff160217905550600d60149054906101000a900462ffffff16600b60176101000a81548162ffffff021916908362ffffff160217905550600e5f9054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166013819055506001600e60106101000a81548160ff0219169083151502179055505b612a8d565b61012c8110612a8c57600d60109054906101000a900460ff16612a8b57600c60119054906101000a900462ffffff16600b60146101000a81548162ffffff021916908362ffffff160217905550600c60149054906101000a900462ffffff16600b60176101000a81548162ffffff021916908362ffffff160217905550600d5f9054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166013819055506001600d60106101000a81548160ff0219169083151502179055505b5b5b5b5050565b5f600267ffffffffffffffff811115612aae57612aad613a0c565b5b604051908082528060200260200182016040528015612adc5781602001602082028036833780820191505090505b50905030815f81518110612af357612af2613a39565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281600181518110612b6257612b61613a39565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401612bfd959493929190613b56565b5f604051808303815f87803b158015612c14575f80fd5b505af1158015612c26573d5f803e3d5ffd5b505050505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f612c7082612c2e565b612c7a8185612c38565b9350612c8a818560208601612c48565b612c9381612c56565b840191505092915050565b5f6020820190508181035f830152612cb68184612c66565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f819050919050565b5f612d00612cfb612cf684612cbe565b612cdd565b612cbe565b9050919050565b5f612d1182612ce6565b9050919050565b5f612d2282612d07565b9050919050565b612d3281612d18565b82525050565b5f602082019050612d4b5f830184612d29565b92915050565b5f80fd5b5f612d5f82612cbe565b9050919050565b612d6f81612d55565b8114612d79575f80fd5b50565b5f81359050612d8a81612d66565b92915050565b5f819050919050565b612da281612d90565b8114612dac575f80fd5b50565b5f81359050612dbd81612d99565b92915050565b5f8060408385031215612dd957612dd8612d51565b5b5f612de685828601612d7c565b9250506020612df785828601612daf565b9150509250929050565b5f8115159050919050565b612e1581612e01565b82525050565b5f602082019050612e2e5f830184612e0c565b92915050565b5f62ffffff82169050919050565b612e4b81612e34565b82525050565b5f602082019050612e645f830184612e42565b92915050565b612e7381612d90565b82525050565b5f602082019050612e8c5f830184612e6a565b92915050565b5f805f60608486031215612ea957612ea8612d51565b5b5f612eb686828701612d7c565b9350506020612ec786828701612d7c565b9250506040612ed886828701612daf565b9150509250925092565b5f6fffffffffffffffffffffffffffffffff82169050919050565b612f0681612ee2565b82525050565b5f602082019050612f1f5f830184612efd565b92915050565b5f60ff82169050919050565b612f3a81612f25565b82525050565b5f602082019050612f535f830184612f31565b92915050565b612f6281612d55565b82525050565b5f602082019050612f7b5f830184612f59565b92915050565b612f8a81612e34565b8114612f94575f80fd5b50565b5f81359050612fa581612f81565b92915050565b5f8060408385031215612fc157612fc0612d51565b5b5f612fce85828601612f97565b9250506020612fdf85828601612f97565b9150509250929050565b5f60208284031215612ffe57612ffd612d51565b5b5f61300b84828501612d7c565b91505092915050565b5f67ffffffffffffffff82169050919050565b61303081613014565b82525050565b5f6020820190506130495f830184613027565b92915050565b5f806040838503121561306557613064612d51565b5b5f61307285828601612d7c565b925050602061308385828601612d7c565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806130d157607f821691505b6020821081036130e4576130e361308d565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61312182612d90565b915061312c83612d90565b9250828201905080821115613144576131436130ea565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61317e602083612c38565b91506131898261314a565b602082019050919050565b5f6020820190508181035f8301526131ab81613172565b9050919050565b7f43616e6e6f742072616973652062757920746178206f766572203525000000005f82015250565b5f6131e6601c83612c38565b91506131f1826131b2565b602082019050919050565b5f6020820190508181035f830152613213816131da565b9050919050565b7f4c696d69747320616c72656164792072656d6f766564000000000000000000005f82015250565b5f61324e601683612c38565b91506132598261321a565b602082019050919050565b5f6020820190508181035f83015261327b81613242565b9050919050565b7f54726164696e6720616c726561647920656e61626c65640000000000000000005f82015250565b5f6132b6601783612c38565b91506132c182613282565b602082019050919050565b5f6020820190508181035f8301526132e3816132aa565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f613344602583612c38565b915061334f826132ea565b604082019050919050565b5f6020820190508181035f83015261337181613338565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6133d2602683612c38565b91506133dd82613378565b604082019050919050565b5f6020820190508181035f8301526133ff816133c6565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613460602483612c38565b915061346b82613406565b604082019050919050565b5f6020820190508181035f83015261348d81613454565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6134ee602283612c38565b91506134f982613494565b604082019050919050565b5f6020820190508181035f83015261351b816134e2565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f613556601d83612c38565b915061356182613522565b602082019050919050565b5f6020820190508181035f8301526135838161354a565b9050919050565b7f54726164696e67206e6f742061637469766500000000000000000000000000005f82015250565b5f6135be601283612c38565b91506135c98261358a565b602082019050919050565b5f6020820190508181035f8301526135eb816135b2565b9050919050565b5f6135fc82612d90565b915061360783612d90565b925082820390508181111561361f5761361e6130ea565b5b92915050565b5f61362f82612d90565b915061363a83612d90565b925082820261364881612d90565b9150828204841483151761365f5761365e6130ea565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61369d82612d90565b91506136a883612d90565b9250826136b8576136b7613666565b5b828204905092915050565b7f4d61782057616c6c6574000000000000000000000000000000000000000000005f82015250565b5f6136f7600a83612c38565b9150613702826136c3565b602082019050919050565b5f6020820190508181035f830152613724816136eb565b9050919050565b7f5472616e736665722044656c61790000000000000000000000000000000000005f82015250565b5f61375f600e83612c38565b915061376a8261372b565b602082019050919050565b5f6020820190508181035f83015261378c81613753565b9050919050565b7f6e6f20627579696e6720746f2065787465726e616c2077616c6c6574732079655f8201527f7400000000000000000000000000000000000000000000000000000000000000602082015250565b5f6137ed602183612c38565b91506137f882613793565b604082019050919050565b5f6020820190508181035f83015261381a816137e1565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f61387b602583612c38565b915061388682613821565b604082019050919050565b5f6020820190508181035f8301526138a88161386f565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f613909602383612c38565b9150613914826138af565b604082019050919050565b5f6020820190508181035f830152613936816138fd565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f613997602683612c38565b91506139a28261393d565b604082019050919050565b5f6020820190508181035f8301526139c48161398b565b9050919050565b5f81905092915050565b50565b5f6139e35f836139cb565b91506139ee826139d5565b5f82019050919050565b5f613a02826139d8565b9150819050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050919050565b5f613a89613a84613a7f84613a66565b612cdd565b612d90565b9050919050565b613a9981613a6f565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b613ad181612d55565b82525050565b5f613ae28383613ac8565b60208301905092915050565b5f602082019050919050565b5f613b0482613a9f565b613b0e8185613aa9565b9350613b1983613ab9565b805f5b83811015613b49578151613b308882613ad7565b9750613b3b83613aee565b925050600181019050613b1c565b5085935050505092915050565b5f60a082019050613b695f830188612e6a565b613b766020830187613a90565b8181036040830152613b888186613afa565b9050613b976060830185612f59565b613ba46080830184612e6a565b969550505050505056fea2646970667358221220cfa937792bdd325bf0823091088694cb83d89c6b6b57a3238d678e96f777abc464736f6c63430008190033

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.