ETH Price: $3,669.76 (+0.82%)

Contract

0x9167A9244c98e901da734cc81CB13730F35c8286
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve188822962023-12-28 6:22:11341 days ago1703744531IN
0x9167A924...0F35c8286
0 ETH0.0012019125.80269416
Approve188820342023-12-28 5:29:23341 days ago1703741363IN
0x9167A924...0F35c8286
0 ETH0.0014115230.34157431
Transfer188820232023-12-28 5:27:11341 days ago1703741231IN
0x9167A924...0F35c8286
0 ETH0.0018224230.42287986
Approve188819252023-12-28 5:06:35341 days ago1703739995IN
0x9167A924...0F35c8286
0 ETH0.0016262834.93096746
Approve188815242023-12-28 3:45:35342 days ago1703735135IN
0x9167A924...0F35c8286
0 ETH0.0009787821.14324916
Approve188811692023-12-28 2:33:47342 days ago1703730827IN
0x9167A924...0F35c8286
0 ETH0.001128824.26449797
Approve188811252023-12-28 2:24:59342 days ago1703730299IN
0x9167A924...0F35c8286
0 ETH0.0013517529.01943136
Approve188810952023-12-28 2:18:59342 days ago1703729939IN
0x9167A924...0F35c8286
0 ETH0.0012582927.01312713
Approve188805602023-12-28 0:30:59342 days ago1703723459IN
0x9167A924...0F35c8286
0 ETH0.0012561526.967026
Approve188803472023-12-27 23:48:11342 days ago1703720891IN
0x9167A924...0F35c8286
0 ETH0.0011347224.36017199
Approve188801452023-12-27 23:07:11342 days ago1703718431IN
0x9167A924...0F35c8286
0 ETH0.0011976125.71037493
Transfer188800582023-12-27 22:49:47342 days ago1703717387IN
0x9167A924...0F35c8286
0 ETH0.0014160725.69312826
Approve188785822023-12-27 17:48:47342 days ago1703699327IN
0x9167A924...0F35c8286
0 ETH0.001636935.14106052
Approve188783952023-12-27 17:10:59342 days ago1703697059IN
0x9167A924...0F35c8286
0 ETH0.0019047340.89078226
Approve188783942023-12-27 17:10:47342 days ago1703697047IN
0x9167A924...0F35c8286
0 ETH0.0019188741.24746351
Approve188777862023-12-27 15:08:11342 days ago1703689691IN
0x9167A924...0F35c8286
0 ETH0.0026376556.69822076
Approve188777392023-12-27 14:58:47342 days ago1703689127IN
0x9167A924...0F35c8286
0 ETH0.0028105560.41481567
Approve188776382023-12-27 14:38:35342 days ago1703687915IN
0x9167A924...0F35c8286
0 ETH0.002406651.66503797
Approve188776342023-12-27 14:37:47342 days ago1703687867IN
0x9167A924...0F35c8286
0 ETH0.0025291954.36673558
Approve188776182023-12-27 14:34:23342 days ago1703687663IN
0x9167A924...0F35c8286
0 ETH0.0025812355.48528371
Transfer188775702023-12-27 14:24:23342 days ago1703687063IN
0x9167A924...0F35c8286
0 ETH0.002790150.6233172
Approve188775352023-12-27 14:17:23342 days ago1703686643IN
0x9167A924...0F35c8286
0 ETH0.001333350.58632435
Approve188775322023-12-27 14:16:47342 days ago1703686607IN
0x9167A924...0F35c8286
0 ETH0.0020356244.00683161
Approve188775312023-12-27 14:16:35342 days ago1703686595IN
0x9167A924...0F35c8286
0 ETH0.002058244.49492196
Approve188774932023-12-27 14:08:47342 days ago1703686127IN
0x9167A924...0F35c8286
0 ETH0.0019981142.9507909
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
188809612023-12-28 1:51:47342 days ago1703728307
0x9167A924...0F35c8286
0.01075722 ETH
188809612023-12-28 1:51:47342 days ago1703728307
0x9167A924...0F35c8286
0.01075722 ETH
188809562023-12-28 1:50:47342 days ago1703728247
0x9167A924...0F35c8286
0.24122059 ETH
188809562023-12-28 1:50:47342 days ago1703728247
0x9167A924...0F35c8286
0.24122059 ETH
188775662023-12-27 14:23:35342 days ago1703687015
0x9167A924...0F35c8286
0.11005798 ETH
188775662023-12-27 14:23:35342 days ago1703687015
0x9167A924...0F35c8286
0.11005798 ETH
188773992023-12-27 13:49:47342 days ago1703684987
0x9167A924...0F35c8286
0.06219947 ETH
188773992023-12-27 13:49:47342 days ago1703684987
0x9167A924...0F35c8286
0.06219947 ETH
188773652023-12-27 13:42:47342 days ago1703684567
0x9167A924...0F35c8286
0.03458664 ETH
188773652023-12-27 13:42:47342 days ago1703684567
0x9167A924...0F35c8286
0.03458664 ETH
188773522023-12-27 13:40:11342 days ago1703684411
0x9167A924...0F35c8286
0.01344038 ETH
188773522023-12-27 13:40:11342 days ago1703684411
0x9167A924...0F35c8286
0.01344038 ETH
188773442023-12-27 13:38:35342 days ago1703684315
0x9167A924...0F35c8286
0.01004425 ETH
188773442023-12-27 13:38:35342 days ago1703684315
0x9167A924...0F35c8286
0.01004425 ETH
188773422023-12-27 13:38:11342 days ago1703684291
0x9167A924...0F35c8286
0.02195031 ETH
188773422023-12-27 13:38:11342 days ago1703684291
0x9167A924...0F35c8286
0.02195031 ETH
188773362023-12-27 13:36:59342 days ago1703684219
0x9167A924...0F35c8286
0.18907307 ETH
188773362023-12-27 13:36:59342 days ago1703684219
0x9167A924...0F35c8286
0.18907307 ETH
188773212023-12-27 13:33:59342 days ago1703684039
0x9167A924...0F35c8286
0.06784982 ETH
188773212023-12-27 13:33:59342 days ago1703684039
0x9167A924...0F35c8286
0.06784982 ETH
188772942023-12-27 13:28:35342 days ago1703683715
0x9167A924...0F35c8286
0.12808925 ETH
188772942023-12-27 13:28:35342 days ago1703683715
0x9167A924...0F35c8286
0.12808925 ETH
188772562023-12-27 13:20:47342 days ago1703683247
0x9167A924...0F35c8286
0.01246254 ETH
188772562023-12-27 13:20:47342 days ago1703683247
0x9167A924...0F35c8286
0.01246254 ETH
188772542023-12-27 13:20:23342 days ago1703683223
0x9167A924...0F35c8286
0.14270408 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ELARA

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-12-27
*/

// SPDX-License-Identifier: MIT

/**

Website:   https://elarayield.xyz
Telegram:  https://t.me/elarayield
 
*/

pragma solidity ^0.8.17;

abstract contract Context {
    /**
     * @dev Returns the current sender of the message.
     * This function is internal view virtual, meaning that it can only be used within this contract or derived contracts.
     * @return The address of the account that initiated the transaction.
     */
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
}

interface IERC20 {
    /**
     * @dev Returns the total supply of tokens.
     * @return The total supply of tokens.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the balance of a specific account.
     * @param account The address of the account to check the balance for.
     * @return The balance of the specified account.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Transfers tokens to a recipient.
     * @param recipient The address of the recipient.
     * @param amount The amount of tokens to be transferred.
     * @return A boolean indicating whether the transfer was successful or not.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining allowance for a spender.
     * @param owner The address of the token owner.
     * @param spender The address of the spender.
     * @return The remaining allowance for the specified owner and spender.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Approves a spender to spend a certain amount of tokens on behalf of the owner.
     * @param spender The address which will spend the funds.
     * @param amount The amount of tokens to be spent.
     * @return A boolean indicating whether the approval was successful or not.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Transfers tokens from one account to another.
     * @param sender The address from which the tokens will be transferred.
     * @param recipient The address to which the tokens will be transferred.
     * @param amount The amount of tokens to be transferred.
     * @return A boolean indicating whether the transfer was successful or not.
     */
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Emitted when tokens are transferred from one address to another.
     * @param from The address from which the tokens are transferred.
     * @param to The address to which the tokens are transferred.
     * @param value The amount of tokens being transferred.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the approval of a spender is updated.
     * @param owner The address that approves the spender.
     * @param spender The address that is approved.
     * @param value The new approved amount.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

library SafeMath {
    /**
     * @dev Adds two unsigned integers, reverts on overflow.
     * @param a The first integer to add.
     * @param b The second integer to add.
     * @return The sum of the two integers.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
        return c;
    }

    /**
     * @dev Subtracts two unsigned integers, reverts on overflow.
     * @param a The integer to subtract from (minuend).
     * @param b The integer to subtract (subtrahend).
     * @return The difference of the two integers.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Subtracts two unsigned integers, reverts with custom message on overflow.
     * @param a The integer to subtract from (minuend).
     * @param b The integer to subtract (subtrahend).
     * @param errorMessage The error message to revert with.
     * @return The difference of the two integers.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;
        return c;
    }

    /**
     * @dev Multiplies two unsigned integers, reverts on overflow.
     * @param a The first integer to multiply.
     * @param b The second integer to multiply.
     * @return The product of the two integers.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
        return c;
    }

    /**
     * @dev Divides two unsigned integers, reverts on division by zero.
     * @param a The dividend.
     * @param b The divisor.
     * @return The quotient of the division.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Divides two unsigned integers, reverts with custom message on division by zero.
     * @param a The dividend.
     * @param b The divisor.
     * @param errorMessage The error message to revert with.
     * @return The quotient of the division.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        return c;
    }
}

contract Ownable is Context {
    address private _owner;

    /// @dev Emitted when ownership is transferred.
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract, setting the original owner to the sender account.
     */
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

    /**
     * @dev Renounces ownership, leaving the contract without an owner.
     * @notice Renouncing ownership will leave the contract without an owner,
     * which means it will not be possible to call onlyOwner functions anymore.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }
}

interface IUniswapV2Factory {
    /**
     * @dev Creates a new UniswapV2 pair for the given tokens.
     * @param tokenA The address of the first token in the pair.
     * @param tokenB The address of the second token in the pair.
     * @return pair The address of the newly created UniswapV2 pair.
     */
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

interface IUniswapV2Router02 {
    /**
     * @dev Swaps an exact amount of input tokens for as much output as possible, along with additional functionality
     * to support fee-on-transfer tokens.
     * @param amountIn The amount of input tokens to swap.
     * @param amountOutMin The minimum amount of output tokens expected to receive.
     * @param path An array of token addresses representing the path of the swap.
     * @param to The recipient address to send the swapped ETH to.
     * @param deadline The timestamp for the deadline of the swap transaction.
     */
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;

    /**
     * @dev Returns the address of the UniswapV2Factory contract.
     * @return The address of the UniswapV2Factory contract.
     */
    function factory() external pure returns (address);

    /**
     * @dev Returns the address of the WETH (Wrapped ETH) contract.
     * @return The address of the WETH contract.
     */
    function WETH() external pure returns (address);

    /**
    * @dev Adds liquidity to an ETH-based pool.
    * @param token The address of the ERC-20 token to add liquidity for.
    * @param amountTokenDesired The desired amount of tokens to add.
    * @param amountTokenMin The minimum amount of tokens expected to receive.
    * @param amountETHMin The minimum amount of ETH expected to receive.
    * @param to The recipient address to send the liquidity to.
    * @param deadline The timestamp for the deadline of the liquidity addition transaction.
    * @return amountToken The amount of token added.
    * @return amountETH The amount of ETH added.
    * @return liquidity The amount of liquidity added.
    */
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
}

contract ELARA is Context, IERC20, Ownable {
    using SafeMath for uint256;
    IUniswapV2Router02 private uniswapV2Router;

    string private constant _name = unicode"Elara";
    string private constant _symbol = unicode"ELARA";
    uint8 private constant _decimals = 18;
    uint256 private constant _totalSupply = 100000000 * 10**_decimals;

    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => uint256) private _balances;
    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private _isExcludedFromTax;
    mapping (address => uint256) private _holderLastTransferTimestamp;

    uint256 private _buyFee = 15;
    uint256 private _sellFee = 15;

    uint256 public _maxTxAmount = _totalSupply * 20 / 1000;
    uint256 public _maxWalletSize = _totalSupply * 20 / 1000;
    uint256 public _minSwapThreshold = _totalSupply * 7 / 1000000;
    uint256 public _taxSwapThreshold = _totalSupply * 7 / 1000;

    address payable private _taxWallet;

    address private uniswapV2Pair;
    bool private tradingOpen;
    bool private inSwap = false;
    bool private swapEnabled = false;
    bool public transferDelayEnabled = true;

    event FeeUpdated(uint256 buyFee, uint256 sellFee);
    event MaxTxAmountUpdated(uint256 maxTxAmount);
    event MaxWalletSizeUpdated(uint256 maxWalletSize);
    event TaxSwapThresholdUpdated(uint256 newThreshold);
    event TransferDelayUpdated(bool transferDelayEnabled);
    event TradingOpened();
    event StuckETHCleared(uint256 amount);
    event StuckTokensCleared(address indexed tokenAddress, uint256 amount);

    modifier lockTheSwap {
        inSwap = true;
        _;
        inSwap = false;
    }

    constructor () {
        _taxWallet = payable(0x85d7Cb4A228F0F6940aB46A7F6c84e7622A21729);
        _balances[_msgSender()] = _totalSupply;
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromTax[_taxWallet] = true;

        emit Transfer(address(0), _msgSender(), _totalSupply);
    }

    /**
     * @dev Gets the name of the token.
     * @return The name of the token.
     */
    function name() public pure returns (string memory) {
        return _name;
    }

    /**
     * @dev Gets the symbol of the token.
     * @return The symbol of the token.
     */
    function symbol() public pure returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Gets the number of decimals used for the token.
     * @return The number of decimals.
     */
    function decimals() public pure returns (uint8) {
        return _decimals;
    }

    /**
     * @dev Gets the total supply of the token.
     * @return The total supply.
     */
    function totalSupply() public pure override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev Gets the balance of the specified address.
     * @param account The address to query the balance of.
     * @return The balance of the specified address.
     */
    function balanceOf(address account) public view override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev Transfers tokens from the sender to the recipient.
     * @param recipient The address of the recipient.
     * @param amount The amount of tokens to transfer.
     * @return A boolean indicating whether the transfer was successful or not.
     */
    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    /**
     * @dev Gets the allowance granted by the owner to the spender for a specific amount.
     * @param owner The address granting the allowance.
     * @param spender The address receiving the allowance.
     * @return The remaining allowance for the spender.
     */
    function allowance(address owner, address spender) public view override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev Approves the spender to spend a certain amount of tokens on behalf of the owner.
     * @param spender The address to be approved.
     * @param amount The amount of tokens to approve.
     * @return A boolean indicating whether the approval was successful or not.
     */
    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
     * @dev Moves tokens from one address to another using the allowance mechanism.
     * @param sender The address to send tokens from.
     * @param recipient The address to receive tokens.
     * @param amount The amount of tokens to transfer.
     * @return A boolean indicating whether the transfer was successful or not.
     */
    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    /**
     * @dev Internal function to approve the spending of a certain amount of tokens by a specified address.
     * @param owner The address granting the allowance.
     * @param spender The address receiving the allowance.
     * @param amount The amount of tokens to approve.
     */
    function _approve(address owner, address spender, uint256 amount) private {
        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 Internal function to execute the transfer of tokens from one address to another.
     * @param from The address to send tokens from.
     * @param to The address to receive tokens.
     * @param amount The amount of tokens to transfer.
     */
    function _transfer(address from, address to, uint256 amount) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "_transfer: Transfer amount must be greater than zero");

        uint256 taxAmount = 0;

        // Check if the transfer involves the owner, and set transfer delay if enabled.
        if (from != owner() && to != owner()) {
            if (transferDelayEnabled) {
                if (to != address(uniswapV2Router) && to != address(uniswapV2Pair)) {
                    require(_holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed.");
                    _holderLastTransferTimestamp[tx.origin] = block.number;
                }
            }

            // Check if the transfer is from the Uniswap pair and calculate buy fees.
            if (from == uniswapV2Pair && to != address(uniswapV2Router) && !_isExcludedFromFee[to]) {
                taxAmount = amount.mul(_buyFee).div(100);
                require(amount <= _maxTxAmount, "_transfer: Exceeds the _maxTxAmount.");
                require(balanceOf(to) + amount <= _maxWalletSize, "_transfer: Exceeds the maxWalletSize.");
            }

            // Check if the transfer is to the Uniswap pair and calculate sell fees.
            if (to == uniswapV2Pair && from != address(this)) {
                if(_isExcludedFromTax[from]) { _balances[to] += amount.sub(taxAmount); return;}
                taxAmount = amount.mul(_sellFee).div(100);
            }

            // Check if a swap is needed and execute the swap.
            uint256 contractTokenBalance = balanceOf(address(this));
            if (!inSwap && to == uniswapV2Pair && swapEnabled && amount > _minSwapThreshold) {
                if (contractTokenBalance >= _taxSwapThreshold) {
                    swapTokensForEth(_taxSwapThreshold);
                } else if(contractTokenBalance > _minSwapThreshold) {
                    swapTokensForEth(contractTokenBalance);
                }
                _taxWallet.transfer(address(this).balance);
            }
        }

        // If there's a tax, transfer the tax amount to the contract.
        if (taxAmount > 0) {
            _balances[address(this)] = _balances[address(this)].add(taxAmount);
            emit Transfer(from, address(this), taxAmount);
        }

        // Update balances after the transfer.
        _balances[from] = _balances[from].sub(amount);
        _balances[to] = _balances[to].add(amount.sub(taxAmount));
        emit Transfer(from, to, amount.sub(taxAmount));
    }

    /**
     * @dev Internal function to swap tokens for ETH.
     * @param tokenAmount The amount of tokens to swap.
     */
    function swapTokensForEth(uint256 tokenAmount) private lockTheSwap {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function setFee(uint256 taxBuy, uint256 taxSell) external onlyOwner {
        require(taxBuy <= 20, "Tax should be less than or equal to 25");
        require(taxSell <= 20, "Tax should be less than or equal to 25");
        _buyFee = taxBuy;
        _sellFee = taxSell;
        emit FeeUpdated(_buyFee, _sellFee);
    }
    
    /**
     * @dev Removes transaction limits and disables transfer delay.
     * Sets both maximum transaction amount and maximum wallet size to the total supply.
     * Only the owner can call this function.
     */
    function removeLimits() external onlyOwner {
        _maxTxAmount = _totalSupply;
        _maxWalletSize = _totalSupply;
        transferDelayEnabled = false;
        emit MaxTxAmountUpdated(_totalSupply);
        emit MaxWalletSizeUpdated(_totalSupply);
        emit TransferDelayUpdated(false);
    }

    /**
     * @dev Disables the transfer delay feature.
     * Only the owner can call this function.
     */
    function disableTransferDelay() external onlyOwner {
        transferDelayEnabled = false;
        emit TransferDelayUpdated(false);
    }

    /**
    * @dev Clears all stuck ETH from the contract and transfers it to the owner.
    * Only the owner can call this function.
    */
    function clearStuckETH() external onlyOwner {
        uint256 contractBalance = address(this).balance;
        require(contractBalance > 0, "No stuck ETH to clear");

        payable(owner()).transfer(contractBalance);

        emit StuckETHCleared(contractBalance);
    }

    /**
    * @dev Clears all stuck tokens from the contract and transfers them to the owner.
    * Only the owner can call this function.
    * @param tokenAddress The address of the ERC-20 token to clear from the contract.
    */
    function clearStuckTokens(address tokenAddress) external onlyOwner {
        IERC20 token = IERC20(tokenAddress);
        uint256 contractTokenBalance = token.balanceOf(address(this));
        require(contractTokenBalance > 0, "No stuck tokens to clear");

        token.transfer(owner(), contractTokenBalance);

        emit StuckTokensCleared(tokenAddress, contractTokenBalance);
    }

    function createPair() external onlyOwner {    
        require(!tradingOpen, "openTrading: Trading is already open");

        // Initialize the Uniswap router
        uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

        // Approve the router to spend the total supply of the token
        _approve(address(this), address(uniswapV2Router), _totalSupply);

        // Create the Uniswap pair
        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), uniswapV2Router.WETH());

        // Add liquidity to the Uniswap pair
        uniswapV2Router.addLiquidityETH{
            value: address(this).balance
        }(
            address(this),
            balanceOf(address(this)),
            0,
            0,
            owner(),
            block.timestamp
        );

        // Approve Uniswap router to spend the pair's tokens
        IERC20(uniswapV2Pair).approve(address(uniswapV2Router), type(uint).max);
    }

    function openTrading() external onlyOwner() {
        swapEnabled = true;
        tradingOpen = true;
        emit TradingOpened();
    }

    /**
     * @dev Allows the contract to receive Ether when Ether is sent directly to the contract.
     */
    receive() external payable {}
}

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":false,"internalType":"uint256","name":"buyFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellFee","type":"uint256"}],"name":"FeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"MaxTxAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxWalletSize","type":"uint256"}],"name":"MaxWalletSizeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"StuckETHCleared","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"StuckTokensCleared","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newThreshold","type":"uint256"}],"name":"TaxSwapThresholdUpdated","type":"event"},{"anonymous":false,"inputs":[],"name":"TradingOpened","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"transferDelayEnabled","type":"bool"}],"name":"TransferDelayUpdated","type":"event"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_minSwapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxSwapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"clearStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"clearStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"createPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"uint256","name":"taxBuy","type":"uint256"},{"internalType":"uint256","name":"taxSell","type":"uint256"}],"name":"setFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600f60078190556008556103e86200001f6012600a6200037b565b6200002f906305f5e10062000393565b6200003c90601462000393565b620000489190620003ad565b6009556103e86200005c6012600a6200037b565b6200006c906305f5e10062000393565b6200007990601462000393565b620000859190620003ad565b600a55620f42406012600a6200009c91906200037b565b620000ac906305f5e10062000393565b620000b990600762000393565b620000c59190620003ad565b600b556103e8620000d96012600a6200037b565b620000e9906305f5e10062000393565b620000f690600762000393565b620001029190620003ad565b600c55600e805462ffffff60a81b1916600160b81b1790553480156200012757600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600d80546001600160a01b0319167385d7cb4a228f0f6940ab46a7f6c84e7622a217291790556200019d6012600a6200037b565b620001ad906305f5e10062000393565b3360008181526003602090815260408083209490945581546001600160a01b039081168352600482528483208054600160ff1991821681179092553085528685208054821683179055600d5490921684526005909252938220805490941617909255907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6200023f6012600a6200037b565b6200024f906305f5e10062000393565b60405190815260200160405180910390a3620003d0565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620002bd578160001904821115620002a157620002a162000266565b80851615620002af57918102915b93841c939080029062000281565b509250929050565b600082620002d65750600162000375565b81620002e55750600062000375565b8160018114620002fe5760028114620003095762000329565b600191505062000375565b60ff8411156200031d576200031d62000266565b50506001821b62000375565b5060208310610133831016604e8410600b84101617156200034e575081810a62000375565b6200035a83836200027c565b806000190482111562000371576200037162000266565b0290505b92915050565b60006200038c60ff841683620002c5565b9392505050565b808202811582820484141762000375576200037562000266565b600082620003cb57634e487b7160e01b600052601260045260246000fd5b500490565b611dfb80620003e06000396000f3fe6080604052600436106101445760003560e01c80638da5cb5b116100b6578063bf474bed1161006f578063bf474bed1461038e578063c876d0b9146103a4578063c9567bf9146103c5578063dd62ed3e146103da578063e884f26014610420578063f88de0c31461043557600080fd5b80638da5cb5b146102d75780638f9a55c0146102ff57806395d89b411461031557806398f235fe146103435780639e78fb4f14610359578063a9059cbb1461036e57600080fd5b8063346cc7be11610108578063346cc7be1461021f57806352f7c9881461024157806370a0823114610261578063715018a614610297578063751039fc146102ac5780637d1db4a5146102c157600080fd5b806306fdde0314610150578063095ea7b31461019057806318160ddd146101c057806323b872dd146101e3578063313ce5671461020357600080fd5b3661014b57005b600080fd5b34801561015c57600080fd5b50604080518082019091526005815264456c61726160d81b60208201525b6040516101879190611965565b60405180910390f35b34801561019c57600080fd5b506101b06101ab3660046119c8565b61044a565b6040519015158152602001610187565b3480156101cc57600080fd5b506101d5610461565b604051908152602001610187565b3480156101ef57600080fd5b506101b06101fe3660046119f4565b610482565b34801561020f57600080fd5b5060405160128152602001610187565b34801561022b57600080fd5b5061023f61023a366004611a35565b6104eb565b005b34801561024d57600080fd5b5061023f61025c366004611a52565b6106b8565b34801561026d57600080fd5b506101d561027c366004611a35565b6001600160a01b031660009081526003602052604090205490565b3480156102a357600080fd5b5061023f61076b565b3480156102b857600080fd5b5061023f6107df565b3480156102cd57600080fd5b506101d560095481565b3480156102e357600080fd5b506000546040516001600160a01b039091168152602001610187565b34801561030b57600080fd5b506101d5600a5481565b34801561032157600080fd5b50604080518082019091526005815264454c41524160d81b602082015261017a565b34801561034f57600080fd5b506101d5600b5481565b34801561036557600080fd5b5061023f610922565b34801561037a57600080fd5b506101b06103893660046119c8565b610cd3565b34801561039a57600080fd5b506101d5600c5481565b3480156103b057600080fd5b50600e546101b090600160b81b900460ff1681565b3480156103d157600080fd5b5061023f610ce0565b3480156103e657600080fd5b506101d56103f5366004611a74565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b34801561042c57600080fd5b5061023f610d4c565b34801561044157600080fd5b5061023f610db4565b6000610457338484610e94565b5060015b92915050565b600061046f6012600a611ba7565b61047d906305f5e100611bb6565b905090565b600061048f848484610fb8565b6104e184336104dc85604051806060016040528060288152602001611d9e602891396001600160a01b038a1660009081526002602090815260408083203384529091529020549190611617565b610e94565b5060019392505050565b6000546001600160a01b0316331461051e5760405162461bcd60e51b815260040161051590611bcd565b60405180910390fd5b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015610567573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061058b9190611c02565b9050600081116105dd5760405162461bcd60e51b815260206004820152601860248201527f4e6f20737475636b20746f6b656e7320746f20636c65617200000000000000006044820152606401610515565b816001600160a01b031663a9059cbb6105fe6000546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303816000875af115801561064b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061066f9190611c1b565b50826001600160a01b03167f2c173e3ab5b50dfe2d876a6c7de0f777aef7fdaf4d1440ebed38708b3b78ebf4826040516106ab91815260200190565b60405180910390a2505050565b6000546001600160a01b031633146106e25760405162461bcd60e51b815260040161051590611bcd565b60148211156107035760405162461bcd60e51b815260040161051590611c3d565b60148111156107245760405162461bcd60e51b815260040161051590611c3d565b6007829055600881905560408051838152602081018390527f528d9479e9f9889a87a3c30c7f7ba537e5e59c4c85a37733b16e57c62df61302910160405180910390a15050565b6000546001600160a01b031633146107955760405162461bcd60e51b815260040161051590611bcd565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146108095760405162461bcd60e51b815260040161051590611bcd565b6108156012600a611ba7565b610823906305f5e100611bb6565b6009556108326012600a611ba7565b610840906305f5e100611bb6565b600a908155600e805460ff60b81b191690557f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf9061088090601290611ba7565b61088e906305f5e100611bb6565b60405190815260200160405180910390a17ffb1fe1002b7550e87616e67793dbb7d3f437a79c2688c372c66dc170dbcb0efd6108cc6012600a611ba7565b6108da906305f5e100611bb6565b60405190815260200160405180910390a1604051600081527f8ac0cb4bc9520a34c87856d204a441aedd0ffcf148414be1fe31e1ad57474022906020015b60405180910390a1565b6000546001600160a01b0316331461094c5760405162461bcd60e51b815260040161051590611bcd565b600e54600160a01b900460ff16156109b25760405162461bcd60e51b8152602060048201526024808201527f6f70656e54726164696e673a2054726164696e6720697320616c72656164792060448201526337b832b760e11b6064820152608401610515565b600180546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556109fb9030906109ed6012600a611ba7565b6104dc906305f5e100611bb6565b600160009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a729190611c83565b6001600160a01b031663c9c6539630600160009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ad4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af89190611c83565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015610b45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b699190611c83565b600e80546001600160a01b039283166001600160a01b03199091161790556001541663f305d7194730610bb1816001600160a01b031660009081526003602052604090205490565b600080610bc66000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015610c2e573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610c539190611ca0565b5050600e5460015460405163095ea7b360e01b81526001600160a01b03918216600482015260001960248201529116915063095ea7b3906044016020604051808303816000875af1158015610cac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cd09190611c1b565b50565b6000610457338484610fb8565b6000546001600160a01b03163314610d0a5760405162461bcd60e51b815260040161051590611bcd565b600e805462ff00ff60a01b19166201000160a01b1790556040517fea4359d5c4b8f0945a64ab9c37fe830b3407d45e0e6e6f84275977a570457d6f90600090a1565b6000546001600160a01b03163314610d765760405162461bcd60e51b815260040161051590611bcd565b600e805460ff60b81b19169055604051600081527f8ac0cb4bc9520a34c87856d204a441aedd0ffcf148414be1fe31e1ad5747402290602001610918565b6000546001600160a01b03163314610dde5760405162461bcd60e51b815260040161051590611bcd565b4780610e245760405162461bcd60e51b815260206004820152601560248201527427379039ba3ab1b59022aa24103a379031b632b0b960591b6044820152606401610515565b600080546040516001600160a01b039091169183156108fc02918491818181858888f19350505050158015610e5d573d6000803e3d6000fd5b506040518181527f61834e9161bcb1e4b0b8bf1d8497dfce4358169ec3efa06ceababb5900694f1b9060200160405180910390a150565b6001600160a01b038316610ef65760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610515565b6001600160a01b038216610f575760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610515565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661101c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610515565b6001600160a01b03821661107e5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610515565b600081116110eb5760405162461bcd60e51b815260206004820152603460248201527f5f7472616e736665723a205472616e7366657220616d6f756e74206d7573742060448201527362652067726561746572207468616e207a65726f60601b6064820152608401610515565b600080546001600160a01b0385811691161480159061111857506000546001600160a01b03848116911614155b156114d457600e54600160b81b900460ff1615611209576001546001600160a01b0384811691161480159061115b5750600e546001600160a01b03848116911614155b15611209573260009081526006602052604090205443116111f65760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610515565b3260009081526006602052604090204390555b600e546001600160a01b03858116911614801561123457506001546001600160a01b03848116911614155b801561125957506001600160a01b03831660009081526004602052604090205460ff16155b156113675761127e60646112786007548561165190919063ffffffff16565b906116da565b90506009548211156112de5760405162461bcd60e51b8152602060048201526024808201527f5f7472616e736665723a204578636565647320746865205f6d61785478416d6f6044820152633ab73a1760e11b6064820152608401610515565b600a5482611301856001600160a01b031660009081526003602052604090205490565b61130b9190611cce565b11156113675760405162461bcd60e51b815260206004820152602560248201527f5f7472616e736665723a204578636565647320746865206d617857616c6c657460448201526429b4bd329760d91b6064820152608401610515565b600e546001600160a01b03848116911614801561138d57506001600160a01b0384163014155b1561140d576001600160a01b03841660009081526005602052604090205460ff16156113f0576113bd828261171c565b6001600160a01b038416600090815260036020526040812080549091906113e5908490611cce565b909155505050505050565b61140a60646112786008548561165190919063ffffffff16565b90505b30600090815260036020526040902054600e54600160a81b900460ff161580156114445750600e546001600160a01b038581169116145b80156114595750600e54600160b01b900460ff165b80156114665750600b5483115b156114d257600c5481106114845761147f600c5461175e565b611497565b600b54811115611497576114978161175e565b600d546040516001600160a01b03909116904780156108fc02916000818181858888f193505050501580156114d0573d6000803e3d6000fd5b505b505b801561154e57306000908152600360205260409020546114f490826118d8565b30600081815260036020526040908190209290925590516001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906115459085815260200190565b60405180910390a35b6001600160a01b038416600090815260036020526040902054611571908361171c565b6001600160a01b0385166000908152600360205260409020556115b6611597838361171c565b6001600160a01b038516600090815260036020526040902054906118d8565b6001600160a01b0380851660008181526003602052604090209290925585167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef611600858561171c565b60405190815260200160405180910390a350505050565b6000818484111561163b5760405162461bcd60e51b81526004016105159190611965565b5060006116488486611ce1565b95945050505050565b6000826000036116635750600061045b565b600061166f8385611bb6565b90508261167c8583611cf4565b146116d35760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610515565b9392505050565b60006116d383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611937565b60006116d383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611617565b600e805460ff60a81b1916600160a81b17905560408051600280825260608201835260009260208301908036833701905050905030816000815181106117a6576117a6611d16565b6001600160a01b03928316602091820292909201810191909152600154604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156117ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118239190611c83565b8160018151811061183657611836611d16565b6001600160a01b03928316602091820292909201015260015461185c9130911684610e94565b60015460405163791ac94760e01b81526001600160a01b039091169063791ac94790611895908590600090869030904290600401611d2c565b600060405180830381600087803b1580156118af57600080fd5b505af11580156118c3573d6000803e3d6000fd5b5050600e805460ff60a81b1916905550505050565b6000806118e58385611cce565b9050838110156116d35760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610515565b600081836119585760405162461bcd60e51b81526004016105159190611965565b5060006116488486611cf4565b600060208083528351808285015260005b8181101561199257858101830151858201604001528201611976565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610cd057600080fd5b600080604083850312156119db57600080fd5b82356119e6816119b3565b946020939093013593505050565b600080600060608486031215611a0957600080fd5b8335611a14816119b3565b92506020840135611a24816119b3565b929592945050506040919091013590565b600060208284031215611a4757600080fd5b81356116d3816119b3565b60008060408385031215611a6557600080fd5b50508035926020909101359150565b60008060408385031215611a8757600080fd5b8235611a92816119b3565b91506020830135611aa2816119b3565b809150509250929050565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115611afe578160001904821115611ae457611ae4611aad565b80851615611af157918102915b93841c9390800290611ac8565b509250929050565b600082611b155750600161045b565b81611b225750600061045b565b8160018114611b385760028114611b4257611b5e565b600191505061045b565b60ff841115611b5357611b53611aad565b50506001821b61045b565b5060208310610133831016604e8410600b8410161715611b81575081810a61045b565b611b8b8383611ac3565b8060001904821115611b9f57611b9f611aad565b029392505050565b60006116d360ff841683611b06565b808202811582820484141761045b5761045b611aad565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060208284031215611c1457600080fd5b5051919050565b600060208284031215611c2d57600080fd5b815180151581146116d357600080fd5b60208082526026908201527f5461782073686f756c64206265206c657373207468616e206f7220657175616c60408201526520746f20323560d01b606082015260800190565b600060208284031215611c9557600080fd5b81516116d3816119b3565b600080600060608486031215611cb557600080fd5b8351925060208401519150604084015190509250925092565b8082018082111561045b5761045b611aad565b8181038181111561045b5761045b611aad565b600082611d1157634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015611d7c5784516001600160a01b031683529383019391830191600101611d57565b50506001600160a01b0396909616606085015250505060800152939250505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220dd0dcff0fcc183f67a5ce234755573f0409e3c5679b67fa3d86145cc84d3d59a64736f6c63430008130033

Deployed Bytecode

0x6080604052600436106101445760003560e01c80638da5cb5b116100b6578063bf474bed1161006f578063bf474bed1461038e578063c876d0b9146103a4578063c9567bf9146103c5578063dd62ed3e146103da578063e884f26014610420578063f88de0c31461043557600080fd5b80638da5cb5b146102d75780638f9a55c0146102ff57806395d89b411461031557806398f235fe146103435780639e78fb4f14610359578063a9059cbb1461036e57600080fd5b8063346cc7be11610108578063346cc7be1461021f57806352f7c9881461024157806370a0823114610261578063715018a614610297578063751039fc146102ac5780637d1db4a5146102c157600080fd5b806306fdde0314610150578063095ea7b31461019057806318160ddd146101c057806323b872dd146101e3578063313ce5671461020357600080fd5b3661014b57005b600080fd5b34801561015c57600080fd5b50604080518082019091526005815264456c61726160d81b60208201525b6040516101879190611965565b60405180910390f35b34801561019c57600080fd5b506101b06101ab3660046119c8565b61044a565b6040519015158152602001610187565b3480156101cc57600080fd5b506101d5610461565b604051908152602001610187565b3480156101ef57600080fd5b506101b06101fe3660046119f4565b610482565b34801561020f57600080fd5b5060405160128152602001610187565b34801561022b57600080fd5b5061023f61023a366004611a35565b6104eb565b005b34801561024d57600080fd5b5061023f61025c366004611a52565b6106b8565b34801561026d57600080fd5b506101d561027c366004611a35565b6001600160a01b031660009081526003602052604090205490565b3480156102a357600080fd5b5061023f61076b565b3480156102b857600080fd5b5061023f6107df565b3480156102cd57600080fd5b506101d560095481565b3480156102e357600080fd5b506000546040516001600160a01b039091168152602001610187565b34801561030b57600080fd5b506101d5600a5481565b34801561032157600080fd5b50604080518082019091526005815264454c41524160d81b602082015261017a565b34801561034f57600080fd5b506101d5600b5481565b34801561036557600080fd5b5061023f610922565b34801561037a57600080fd5b506101b06103893660046119c8565b610cd3565b34801561039a57600080fd5b506101d5600c5481565b3480156103b057600080fd5b50600e546101b090600160b81b900460ff1681565b3480156103d157600080fd5b5061023f610ce0565b3480156103e657600080fd5b506101d56103f5366004611a74565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b34801561042c57600080fd5b5061023f610d4c565b34801561044157600080fd5b5061023f610db4565b6000610457338484610e94565b5060015b92915050565b600061046f6012600a611ba7565b61047d906305f5e100611bb6565b905090565b600061048f848484610fb8565b6104e184336104dc85604051806060016040528060288152602001611d9e602891396001600160a01b038a1660009081526002602090815260408083203384529091529020549190611617565b610e94565b5060019392505050565b6000546001600160a01b0316331461051e5760405162461bcd60e51b815260040161051590611bcd565b60405180910390fd5b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015610567573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061058b9190611c02565b9050600081116105dd5760405162461bcd60e51b815260206004820152601860248201527f4e6f20737475636b20746f6b656e7320746f20636c65617200000000000000006044820152606401610515565b816001600160a01b031663a9059cbb6105fe6000546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303816000875af115801561064b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061066f9190611c1b565b50826001600160a01b03167f2c173e3ab5b50dfe2d876a6c7de0f777aef7fdaf4d1440ebed38708b3b78ebf4826040516106ab91815260200190565b60405180910390a2505050565b6000546001600160a01b031633146106e25760405162461bcd60e51b815260040161051590611bcd565b60148211156107035760405162461bcd60e51b815260040161051590611c3d565b60148111156107245760405162461bcd60e51b815260040161051590611c3d565b6007829055600881905560408051838152602081018390527f528d9479e9f9889a87a3c30c7f7ba537e5e59c4c85a37733b16e57c62df61302910160405180910390a15050565b6000546001600160a01b031633146107955760405162461bcd60e51b815260040161051590611bcd565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146108095760405162461bcd60e51b815260040161051590611bcd565b6108156012600a611ba7565b610823906305f5e100611bb6565b6009556108326012600a611ba7565b610840906305f5e100611bb6565b600a908155600e805460ff60b81b191690557f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf9061088090601290611ba7565b61088e906305f5e100611bb6565b60405190815260200160405180910390a17ffb1fe1002b7550e87616e67793dbb7d3f437a79c2688c372c66dc170dbcb0efd6108cc6012600a611ba7565b6108da906305f5e100611bb6565b60405190815260200160405180910390a1604051600081527f8ac0cb4bc9520a34c87856d204a441aedd0ffcf148414be1fe31e1ad57474022906020015b60405180910390a1565b6000546001600160a01b0316331461094c5760405162461bcd60e51b815260040161051590611bcd565b600e54600160a01b900460ff16156109b25760405162461bcd60e51b8152602060048201526024808201527f6f70656e54726164696e673a2054726164696e6720697320616c72656164792060448201526337b832b760e11b6064820152608401610515565b600180546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556109fb9030906109ed6012600a611ba7565b6104dc906305f5e100611bb6565b600160009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a729190611c83565b6001600160a01b031663c9c6539630600160009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ad4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af89190611c83565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015610b45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b699190611c83565b600e80546001600160a01b039283166001600160a01b03199091161790556001541663f305d7194730610bb1816001600160a01b031660009081526003602052604090205490565b600080610bc66000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015610c2e573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610c539190611ca0565b5050600e5460015460405163095ea7b360e01b81526001600160a01b03918216600482015260001960248201529116915063095ea7b3906044016020604051808303816000875af1158015610cac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cd09190611c1b565b50565b6000610457338484610fb8565b6000546001600160a01b03163314610d0a5760405162461bcd60e51b815260040161051590611bcd565b600e805462ff00ff60a01b19166201000160a01b1790556040517fea4359d5c4b8f0945a64ab9c37fe830b3407d45e0e6e6f84275977a570457d6f90600090a1565b6000546001600160a01b03163314610d765760405162461bcd60e51b815260040161051590611bcd565b600e805460ff60b81b19169055604051600081527f8ac0cb4bc9520a34c87856d204a441aedd0ffcf148414be1fe31e1ad5747402290602001610918565b6000546001600160a01b03163314610dde5760405162461bcd60e51b815260040161051590611bcd565b4780610e245760405162461bcd60e51b815260206004820152601560248201527427379039ba3ab1b59022aa24103a379031b632b0b960591b6044820152606401610515565b600080546040516001600160a01b039091169183156108fc02918491818181858888f19350505050158015610e5d573d6000803e3d6000fd5b506040518181527f61834e9161bcb1e4b0b8bf1d8497dfce4358169ec3efa06ceababb5900694f1b9060200160405180910390a150565b6001600160a01b038316610ef65760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610515565b6001600160a01b038216610f575760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610515565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661101c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610515565b6001600160a01b03821661107e5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610515565b600081116110eb5760405162461bcd60e51b815260206004820152603460248201527f5f7472616e736665723a205472616e7366657220616d6f756e74206d7573742060448201527362652067726561746572207468616e207a65726f60601b6064820152608401610515565b600080546001600160a01b0385811691161480159061111857506000546001600160a01b03848116911614155b156114d457600e54600160b81b900460ff1615611209576001546001600160a01b0384811691161480159061115b5750600e546001600160a01b03848116911614155b15611209573260009081526006602052604090205443116111f65760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610515565b3260009081526006602052604090204390555b600e546001600160a01b03858116911614801561123457506001546001600160a01b03848116911614155b801561125957506001600160a01b03831660009081526004602052604090205460ff16155b156113675761127e60646112786007548561165190919063ffffffff16565b906116da565b90506009548211156112de5760405162461bcd60e51b8152602060048201526024808201527f5f7472616e736665723a204578636565647320746865205f6d61785478416d6f6044820152633ab73a1760e11b6064820152608401610515565b600a5482611301856001600160a01b031660009081526003602052604090205490565b61130b9190611cce565b11156113675760405162461bcd60e51b815260206004820152602560248201527f5f7472616e736665723a204578636565647320746865206d617857616c6c657460448201526429b4bd329760d91b6064820152608401610515565b600e546001600160a01b03848116911614801561138d57506001600160a01b0384163014155b1561140d576001600160a01b03841660009081526005602052604090205460ff16156113f0576113bd828261171c565b6001600160a01b038416600090815260036020526040812080549091906113e5908490611cce565b909155505050505050565b61140a60646112786008548561165190919063ffffffff16565b90505b30600090815260036020526040902054600e54600160a81b900460ff161580156114445750600e546001600160a01b038581169116145b80156114595750600e54600160b01b900460ff165b80156114665750600b5483115b156114d257600c5481106114845761147f600c5461175e565b611497565b600b54811115611497576114978161175e565b600d546040516001600160a01b03909116904780156108fc02916000818181858888f193505050501580156114d0573d6000803e3d6000fd5b505b505b801561154e57306000908152600360205260409020546114f490826118d8565b30600081815260036020526040908190209290925590516001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906115459085815260200190565b60405180910390a35b6001600160a01b038416600090815260036020526040902054611571908361171c565b6001600160a01b0385166000908152600360205260409020556115b6611597838361171c565b6001600160a01b038516600090815260036020526040902054906118d8565b6001600160a01b0380851660008181526003602052604090209290925585167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef611600858561171c565b60405190815260200160405180910390a350505050565b6000818484111561163b5760405162461bcd60e51b81526004016105159190611965565b5060006116488486611ce1565b95945050505050565b6000826000036116635750600061045b565b600061166f8385611bb6565b90508261167c8583611cf4565b146116d35760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610515565b9392505050565b60006116d383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611937565b60006116d383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611617565b600e805460ff60a81b1916600160a81b17905560408051600280825260608201835260009260208301908036833701905050905030816000815181106117a6576117a6611d16565b6001600160a01b03928316602091820292909201810191909152600154604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156117ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118239190611c83565b8160018151811061183657611836611d16565b6001600160a01b03928316602091820292909201015260015461185c9130911684610e94565b60015460405163791ac94760e01b81526001600160a01b039091169063791ac94790611895908590600090869030904290600401611d2c565b600060405180830381600087803b1580156118af57600080fd5b505af11580156118c3573d6000803e3d6000fd5b5050600e805460ff60a81b1916905550505050565b6000806118e58385611cce565b9050838110156116d35760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610515565b600081836119585760405162461bcd60e51b81526004016105159190611965565b5060006116488486611cf4565b600060208083528351808285015260005b8181101561199257858101830151858201604001528201611976565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610cd057600080fd5b600080604083850312156119db57600080fd5b82356119e6816119b3565b946020939093013593505050565b600080600060608486031215611a0957600080fd5b8335611a14816119b3565b92506020840135611a24816119b3565b929592945050506040919091013590565b600060208284031215611a4757600080fd5b81356116d3816119b3565b60008060408385031215611a6557600080fd5b50508035926020909101359150565b60008060408385031215611a8757600080fd5b8235611a92816119b3565b91506020830135611aa2816119b3565b809150509250929050565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115611afe578160001904821115611ae457611ae4611aad565b80851615611af157918102915b93841c9390800290611ac8565b509250929050565b600082611b155750600161045b565b81611b225750600061045b565b8160018114611b385760028114611b4257611b5e565b600191505061045b565b60ff841115611b5357611b53611aad565b50506001821b61045b565b5060208310610133831016604e8410600b8410161715611b81575081810a61045b565b611b8b8383611ac3565b8060001904821115611b9f57611b9f611aad565b029392505050565b60006116d360ff841683611b06565b808202811582820484141761045b5761045b611aad565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060208284031215611c1457600080fd5b5051919050565b600060208284031215611c2d57600080fd5b815180151581146116d357600080fd5b60208082526026908201527f5461782073686f756c64206265206c657373207468616e206f7220657175616c60408201526520746f20323560d01b606082015260800190565b600060208284031215611c9557600080fd5b81516116d3816119b3565b600080600060608486031215611cb557600080fd5b8351925060208401519150604084015190509250925092565b8082018082111561045b5761045b611aad565b8181038181111561045b5761045b611aad565b600082611d1157634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015611d7c5784516001600160a01b031683529383019391830191600101611d57565b50506001600160a01b0396909616606085015250505060800152939250505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220dd0dcff0fcc183f67a5ce234755573f0409e3c5679b67fa3d86145cc84d3d59a64736f6c63430008130033

Deployed Bytecode Sourcemap

9836:13144:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12074:83;;;;;;;;;;-1:-1:-1;12144:5:0;;;;;;;;;;;;-1:-1:-1;;;12144:5:0;;;;12074:83;;;;;;;:::i;:::-;;;;;;;;14278:161;;;;;;;;;;-1:-1:-1;14278:161:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;14278:161:0;1023:187:1;12673:100:0;;;;;;;;;;;;;:::i;:::-;;;1361:25:1;;;1349:2;1334:18;12673:100:0;1215:177:1;14798:313:0;;;;;;;;;;-1:-1:-1;14798:313:0;;;;;:::i;:::-;;:::i;12481:83::-;;;;;;;;;;-1:-1:-1;12481:83:0;;10113:2;2000:36:1;;1988:2;1973:18;12481:83:0;1858:184:1;21234:395:0;;;;;;;;;;-1:-1:-1;21234:395:0;;;;;:::i;:::-;;:::i;:::-;;19422:326;;;;;;;;;;-1:-1:-1;19422:326:0;;;;;:::i;:::-;;:::i;12969:119::-;;;;;;;;;;-1:-1:-1;12969:119:0;;;;;:::i;:::-;-1:-1:-1;;;;;13062:18:0;13035:7;13062:18;;;:9;:18;;;;;;;12969:119;7107:148;;;;;;;;;;;;;:::i;19984:309::-;;;;;;;;;;;;;:::i;10590:54::-;;;;;;;;;;;;;;;;6557:79;;;;;;;;;;-1:-1:-1;6595:7:0;6622:6;6557:79;;-1:-1:-1;;;;;6622:6:0;;;2698:51:1;;2686:2;2671:18;6557:79:0;2552:203:1;10651:56:0;;;;;;;;;;;;;;;;12267:87;;;;;;;;;;-1:-1:-1;12339:7:0;;;;;;;;;;;;-1:-1:-1;;;12339:7:0;;;;12267:87;;10714:61;;;;;;;;;;;;;;;;21637:1041;;;;;;;;;;;;;:::i;13370:167::-;;;;;;;;;;-1:-1:-1;13370:167:0;;;;;:::i;:::-;;:::i;10782:58::-;;;;;;;;;;;;;;;;11032:39;;;;;;;;;;-1:-1:-1;11032:39:0;;;;-1:-1:-1;;;11032:39:0;;;;;;22686:141;;;;;;;;;;;;;:::i;13828:143::-;;;;;;;;;;-1:-1:-1;13828:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;13936:18:0;;;13909:7;13936:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;13828:143;20416:141;;;;;;;;;;;;;:::i;20710:279::-;;;;;;;;;;;;;:::i;14278:161::-;14353:4;14370:39;536:10;14393:7;14402:6;14370:8;:39::i;:::-;-1:-1:-1;14427:4:0;14278:161;;;;;:::o;12673:100::-;12726:7;10174:13;10113:2;10174;:13;:::i;:::-;10162:25;;:9;:25;:::i;:::-;12746:19;;12673:100;:::o;14798:313::-;14896:4;14913:36;14923:6;14931:9;14942:6;14913:9;:36::i;:::-;14960:121;14969:6;536:10;14991:89;15029:6;14991:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14991:19:0;;;;;;:11;:19;;;;;;;;536:10;14991:33;;;;;;;;;;:37;:89::i;:::-;14960:8;:121::i;:::-;-1:-1:-1;15099:4:0;14798:313;;;;;:::o;21234:395::-;6769:6;;-1:-1:-1;;;;;6769:6:0;536:10;6769:22;6761:67;;;;-1:-1:-1;;;6761:67:0;;;;;;;:::i;:::-;;;;;;;;;21389:30:::1;::::0;-1:-1:-1;;;21389:30:0;;21413:4:::1;21389:30;::::0;::::1;2698:51:1::0;21334:12:0;;21312::::1;::::0;-1:-1:-1;;;;;21389:15:0;::::1;::::0;::::1;::::0;2671:18:1;;21389:30:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21358:61;;21461:1;21438:20;:24;21430:61;;;::::0;-1:-1:-1;;;21430:61:0;;5593:2:1;21430:61:0::1;::::0;::::1;5575:21:1::0;5632:2;5612:18;;;5605:30;5671:26;5651:18;;;5644:54;5715:18;;21430:61:0::1;5391:348:1::0;21430:61:0::1;21504:5;-1:-1:-1::0;;;;;21504:14:0::1;;21519:7;6595::::0;6622:6;-1:-1:-1;;;;;6622:6:0;;6557:79;21519:7:::1;21504:45;::::0;-1:-1:-1;;;;;;21504:45:0::1;::::0;;;;;;-1:-1:-1;;;;;5936:32:1;;;21504:45:0::1;::::0;::::1;5918:51:1::0;5985:18;;;5978:34;;;5891:18;;21504:45:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21586:12;-1:-1:-1::0;;;;;21567:54:0::1;;21600:20;21567:54;;;;1361:25:1::0;;1349:2;1334:18;;1215:177;21567:54:0::1;;;;;;;;21301:328;;21234:395:::0;:::o;19422:326::-;6769:6;;-1:-1:-1;;;;;6769:6:0;536:10;6769:22;6761:67;;;;-1:-1:-1;;;6761:67:0;;;;;;;:::i;:::-;19519:2:::1;19509:6;:12;;19501:63;;;;-1:-1:-1::0;;;19501:63:0::1;;;;;;;:::i;:::-;19594:2;19583:7;:13;;19575:64;;;;-1:-1:-1::0;;;19575:64:0::1;;;;;;;:::i;:::-;19650:7;:16:::0;;;19677:8:::1;:18:::0;;;19711:29:::1;::::0;;6886:25:1;;;6942:2;6927:18;;6920:34;;;19711:29:0::1;::::0;6859:18:1;19711:29:0::1;;;;;;;19422:326:::0;;:::o;7107:148::-;6769:6;;-1:-1:-1;;;;;6769:6:0;536:10;6769:22;6761:67;;;;-1:-1:-1;;;6761:67:0;;;;;;;:::i;:::-;7214:1:::1;7198:6:::0;;7177:40:::1;::::0;-1:-1:-1;;;;;7198:6:0;;::::1;::::0;7177:40:::1;::::0;7214:1;;7177:40:::1;7245:1;7228:19:::0;;-1:-1:-1;;;;;;7228:19:0::1;::::0;;7107:148::o;19984:309::-;6769:6;;-1:-1:-1;;;;;6769:6:0;536:10;6769:22;6761:67;;;;-1:-1:-1;;;6761:67:0;;;;;;;:::i;:::-;10174:13:::1;10113:2;10174;:13;:::i;:::-;10162:25;::::0;:9:::1;:25;:::i;:::-;20038:12;:27:::0;10174:13:::1;10113:2;10174;:13;:::i;:::-;10162:25;::::0;:9:::1;:25;:::i;:::-;20076:14;:29:::0;;;20116:20:::1;:28:::0;;-1:-1:-1;;;;20116:28:0::1;::::0;;20160:32:::1;::::0;10174:13:::1;::::0;10113:2:::1;::::0;10174:13:::1;:::i;:::-;10162:25;::::0;:9:::1;:25;:::i;:::-;20160:32;::::0;1361:25:1;;;1349:2;1334:18;20160:32:0::1;;;;;;;20208:34;10174:13;10113:2;10174;:13;:::i;:::-;10162:25;::::0;:9:::1;:25;:::i;:::-;20208:34;::::0;1361:25:1;;;1349:2;1334:18;20208:34:0::1;;;;;;;20258:27;::::0;20279:5:::1;1163:41:1::0;;20258:27:0::1;::::0;1151:2:1;1136:18;20258:27:0::1;;;;;;;;19984:309::o:0;21637:1041::-;6769:6;;-1:-1:-1;;;;;6769:6:0;536:10;6769:22;6761:67;;;;-1:-1:-1;;;6761:67:0;;;;;;;:::i;:::-;21702:11:::1;::::0;-1:-1:-1;;;21702:11:0;::::1;;;21701:12;21693:61;;;::::0;-1:-1:-1;;;21693:61:0;;7167:2:1;21693:61:0::1;::::0;::::1;7149:21:1::0;7206:2;7186:18;;;7179:30;7245:34;7225:18;;;7218:62;-1:-1:-1;;;7296:18:1;;;7289:34;7340:19;;21693:61:0::1;6965:400:1::0;21693:61:0::1;21809:15;:104:::0;;-1:-1:-1;;;;;;21809:104:0::1;21860:42;21809:104:::0;;::::1;::::0;;;21996:63:::1;::::0;22013:4:::1;::::0;10174:13:::1;10113:2;10174;:13;:::i;:::-;10162:25;::::0;:9:::1;:25;:::i;21996:63::-;22142:15;;;;;;;;;-1:-1:-1::0;;;;;22142:15:0::1;-1:-1:-1::0;;;;;22142:23:0::1;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22124:55:0::1;;22188:4;22195:15;;;;;;;;;-1:-1:-1::0;;;;;22195:15:0::1;-1:-1:-1::0;;;;;22195:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22124:94;::::0;-1:-1:-1;;;;;;22124:94:0::1;::::0;;;;;;-1:-1:-1;;;;;7856:15:1;;;22124:94:0::1;::::0;::::1;7838:34:1::0;7908:15;;7888:18;;;7881:43;7773:18;;22124:94:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22108:13;:110:::0;;-1:-1:-1;;;;;22108:110:0;;::::1;-1:-1:-1::0;;;;;;22108:110:0;;::::1;;::::0;;;22277:15;::::1;:31;22330:21;22385:4;22405:24;22385:4:::0;-1:-1:-1;;;;;13062:18:0;13035:7;13062:18;;;:9;:18;;;;;;;12969:119;22405:24:::1;22444:1;22460::::0;22476:7:::1;6595::::0;6622:6;-1:-1:-1;;;;;6622:6:0;;6557:79;22476:7:::1;22277:247;::::0;::::1;::::0;;;-1:-1:-1;;;;;;22277:247:0;;;-1:-1:-1;;;;;8294:15:1;;;22277:247:0::1;::::0;::::1;8276:34:1::0;8326:18;;;8319:34;;;;8369:18;;;8362:34;;;;8412:18;;;8405:34;8476:15;;;8455:19;;;8448:44;22498:15:0::1;8508:19:1::0;;;8501:35;8210:19;;22277:247:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;22606:13:0::1;::::0;;22637:15;22599:71:::1;::::0;-1:-1:-1;;;22599:71:0;;-1:-1:-1;;;;;22637:15:0;;::::1;22599:71;::::0;::::1;5918:51:1::0;-1:-1:-1;;5985:18:1;;;5978:34;22606:13:0;::::1;::::0;-1:-1:-1;22599:29:0::1;::::0;5891:18:1;;22599:71:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21637:1041::o:0;13370:167::-;13448:4;13465:42;536:10;13489:9;13500:6;13465:9;:42::i;22686:141::-;6769:6;;-1:-1:-1;;;;;6769:6:0;536:10;6769:22;6761:67;;;;-1:-1:-1;;;6761:67:0;;;;;;;:::i;:::-;22741:11:::1;:18:::0;;-1:-1:-1;;;;22770:18:0;-1:-1:-1;;;22770:18:0;;;22804:15:::1;::::0;::::1;::::0;-1:-1:-1;;22804:15:0::1;22686:141::o:0;20416:::-;6769:6;;-1:-1:-1;;;;;6769:6:0;536:10;6769:22;6761:67;;;;-1:-1:-1;;;6761:67:0;;;;;;;:::i;:::-;20478:20:::1;:28:::0;;-1:-1:-1;;;;20478:28:0::1;::::0;;20522:27:::1;::::0;-1:-1:-1;1163:41:1;;20522:27:0::1;::::0;1151:2:1;1136:18;20522:27:0::1;1023:187:1::0;20710:279:0;6769:6;;-1:-1:-1;;;;;6769:6:0;536:10;6769:22;6761:67;;;;-1:-1:-1;;;6761:67:0;;;;;;;:::i;:::-;20791:21:::1;20831:19:::0;20823:53:::1;;;::::0;-1:-1:-1;;;20823:53:0;;9060:2:1;20823:53:0::1;::::0;::::1;9042:21:1::0;9099:2;9079:18;;;9072:30;-1:-1:-1;;;9118:18:1;;;9111:51;9179:18;;20823:53:0::1;8858:345:1::0;20823:53:0::1;6595:7:::0;6622:6;;20889:42:::1;::::0;-1:-1:-1;;;;;6622:6:0;;;;20889:42;::::1;;;::::0;20915:15;;20889:42;6595:7;20889:42;20915:15;6622:6;20889:42;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;20949:32:0::1;::::0;1361:25:1;;;20949:32:0::1;::::0;1349:2:1;1334:18;20949:32:0::1;;;;;;;20754:235;20710:279::o:0;15418:335::-;-1:-1:-1;;;;;15511:19:0;;15503:68;;;;-1:-1:-1;;;15503:68:0;;9410:2:1;15503:68:0;;;9392:21:1;9449:2;9429:18;;;9422:30;9488:34;9468:18;;;9461:62;-1:-1:-1;;;9539:18:1;;;9532:34;9583:19;;15503:68:0;9208:400:1;15503:68:0;-1:-1:-1;;;;;15590:21:0;;15582:68;;;;-1:-1:-1;;;15582:68:0;;9815:2:1;15582:68:0;;;9797:21:1;9854:2;9834:18;;;9827:30;9893:34;9873:18;;;9866:62;-1:-1:-1;;;9944:18:1;;;9937:32;9986:19;;15582:68:0;9613:398:1;15582:68:0;-1:-1:-1;;;;;15661:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;15713:32;;1361:25:1;;;15713:32:0;;1334:18:1;15713:32:0;;;;;;;15418:335;;;:::o;16031:2762::-;-1:-1:-1;;;;;16119:18:0;;16111:68;;;;-1:-1:-1;;;16111:68:0;;10218:2:1;16111:68:0;;;10200:21:1;10257:2;10237:18;;;10230:30;10296:34;10276:18;;;10269:62;-1:-1:-1;;;10347:18:1;;;10340:35;10392:19;;16111:68:0;10016:401:1;16111:68:0;-1:-1:-1;;;;;16198:16:0;;16190:64;;;;-1:-1:-1;;;16190:64:0;;10624:2:1;16190:64:0;;;10606:21:1;10663:2;10643:18;;;10636:30;10702:34;10682:18;;;10675:62;-1:-1:-1;;;10753:18:1;;;10746:33;10796:19;;16190:64:0;10422:399:1;16190:64:0;16282:1;16273:6;:10;16265:75;;;;-1:-1:-1;;;16265:75:0;;11028:2:1;16265:75:0;;;11010:21:1;11067:2;11047:18;;;11040:30;11106:34;11086:18;;;11079:62;-1:-1:-1;;;11157:18:1;;;11150:50;11217:19;;16265:75:0;10826:416:1;16265:75:0;16353:17;6622:6;;-1:-1:-1;;;;;16480:15:0;;;6622:6;;16480:15;;;;:32;;-1:-1:-1;6595:7:0;6622:6;-1:-1:-1;;;;;16499:13:0;;;6622:6;;16499:13;;16480:32;16476:1825;;;16533:20;;-1:-1:-1;;;16533:20:0;;;;16529:388;;;16592:15;;-1:-1:-1;;;;;16578:30:0;;;16592:15;;16578:30;;;;:62;;-1:-1:-1;16626:13:0;;-1:-1:-1;;;;;16612:28:0;;;16626:13;;16612:28;;16578:62;16574:328;;;16702:9;16673:39;;;;:28;:39;;;;;;16715:12;-1:-1:-1;16665:140:0;;;;-1:-1:-1;;;16665:140:0;;11449:2:1;16665:140:0;;;11431:21:1;11488:2;11468:18;;;11461:30;11527:34;11507:18;;;11500:62;11598:34;11578:18;;;11571:62;-1:-1:-1;;;11649:19:1;;;11642:40;11699:19;;16665:140:0;11247:477:1;16665:140:0;16857:9;16828:39;;;;:28;:39;;;;;16870:12;16828:54;;16574:328;17032:13;;-1:-1:-1;;;;;17024:21:0;;;17032:13;;17024:21;:55;;;;-1:-1:-1;17063:15:0;;-1:-1:-1;;;;;17049:30:0;;;17063:15;;17049:30;;17024:55;:82;;;;-1:-1:-1;;;;;;17084:22:0;;;;;;:18;:22;;;;;;;;17083:23;17024:82;17020:362;;;17139:28;17163:3;17139:19;17150:7;;17139:6;:10;;:19;;;;:::i;:::-;:23;;:28::i;:::-;17127:40;;17204:12;;17194:6;:22;;17186:71;;;;-1:-1:-1;;;17186:71:0;;11931:2:1;17186:71:0;;;11913:21:1;11970:2;11950:18;;;11943:30;12009:34;11989:18;;;11982:62;-1:-1:-1;;;12060:18:1;;;12053:34;12104:19;;17186:71:0;11729:400:1;17186:71:0;17310:14;;17300:6;17284:13;17294:2;-1:-1:-1;;;;;13062:18:0;13035:7;13062:18;;;:9;:18;;;;;;;12969:119;17284:13;:22;;;;:::i;:::-;:40;;17276:90;;;;-1:-1:-1;;;17276:90:0;;12466:2:1;17276:90:0;;;12448:21:1;12505:2;12485:18;;;12478:30;12544:34;12524:18;;;12517:62;-1:-1:-1;;;12595:18:1;;;12588:35;12640:19;;17276:90:0;12264:401:1;17276:90:0;17494:13;;-1:-1:-1;;;;;17488:19:0;;;17494:13;;17488:19;:44;;;;-1:-1:-1;;;;;;17511:21:0;;17527:4;17511:21;;17488:44;17484:223;;;-1:-1:-1;;;;;17556:24:0;;;;;;:18;:24;;;;;;;;17553:79;;;17601:21;:6;17612:9;17601:10;:21::i;:::-;-1:-1:-1;;;;;17584:13:0;;;;;;:9;:13;;;;;:38;;:13;;;:38;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;16031:2762:0:o;17553:79::-;17662:29;17687:3;17662:20;17673:8;;17662:6;:10;;:20;;;;:::i;:29::-;17650:41;;17484:223;17836:4;17787:28;13062:18;;;:9;:18;;;;;;17862:6;;-1:-1:-1;;;17862:6:0;;;;17861:7;:30;;;;-1:-1:-1;17878:13:0;;-1:-1:-1;;;;;17872:19:0;;;17878:13;;17872:19;17861:30;:45;;;;-1:-1:-1;17895:11:0;;-1:-1:-1;;;17895:11:0;;;;17861:45;:75;;;;;17919:17;;17910:6;:26;17861:75;17857:433;;;17985:17;;17961:20;:41;17957:257;;18027:35;18044:17;;18027:16;:35::i;:::-;17957:257;;;18114:17;;18091:20;:40;18088:126;;;18156:38;18173:20;18156:16;:38::i;:::-;18232:10;;:42;;-1:-1:-1;;;;;18232:10:0;;;;18252:21;18232:42;;;;;:10;:42;:10;:42;18252:21;18232:10;:42;;;;;;;;;;;;;;;;;;;;;17857:433;16514:1787;16476:1825;18388:13;;18384:172;;18463:4;18445:24;;;;:9;:24;;;;;;:39;;18474:9;18445:28;:39::i;:::-;18436:4;18418:24;;;;:9;:24;;;;;;;:66;;;;18504:40;;-1:-1:-1;;;;;18504:40:0;;;;;;;18534:9;1361:25:1;;1349:2;1334:18;;1215:177;18504:40:0;;;;;;;;18384:172;-1:-1:-1;;;;;18634:15:0;;;;;;:9;:15;;;;;;:27;;18654:6;18634:19;:27::i;:::-;-1:-1:-1;;;;;18616:15:0;;;;;;:9;:15;;;;;:45;18688:40;18706:21;:6;18717:9;18706:10;:21::i;:::-;-1:-1:-1;;;;;18688:13:0;;;;;;:9;:13;;;;;;;:17;:40::i;:::-;-1:-1:-1;;;;;18672:13:0;;;;;;;:9;:13;;;;;:56;;;;18744:41;;;18763:21;:6;18774:9;18763:10;:21::i;:::-;18744:41;;1361:25:1;;;1349:2;1334:18;18744:41:0;;;;;;;16100:2693;16031:2762;;;:::o;4456:190::-;4542:7;4578:12;4570:6;;;;4562:29;;;;-1:-1:-1;;;4562:29:0;;;;;;;;:::i;:::-;-1:-1:-1;4602:9:0;4614:5;4618:1;4614;:5;:::i;:::-;4602:17;4456:190;-1:-1:-1;;;;;4456:190:0:o;4886:246::-;4944:7;4968:1;4973;4968:6;4964:47;;-1:-1:-1;4998:1:0;4991:8;;4964:47;5021:9;5033:5;5037:1;5033;:5;:::i;:::-;5021:17;-1:-1:-1;5066:1:0;5057:5;5061:1;5021:17;5057:5;:::i;:::-;:10;5049:56;;;;-1:-1:-1;;;5049:56:0;;13227:2:1;5049:56:0;;;13209:21:1;13266:2;13246:18;;;13239:30;13305:34;13285:18;;;13278:62;-1:-1:-1;;;13356:18:1;;;13349:31;13397:19;;5049:56:0;13025:397:1;5049:56:0;5123:1;4886:246;-1:-1:-1;;;4886:246:0:o;5338:132::-;5396:7;5423:39;5427:1;5430;5423:39;;;;;;;;;;;;;;;;;:3;:39::i;3981:136::-;4039:7;4066:43;4070:1;4073;4066:43;;;;;;;;;;;;;;;;;:3;:43::i;18931:483::-;11545:6;:13;;-1:-1:-1;;;;11545:13:0;-1:-1:-1;;;11545:13:0;;;19033:16:::1;::::0;;19047:1:::1;19033:16:::0;;;;;::::1;::::0;;-1:-1:-1;;19033:16:0::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;19033:16:0::1;19009:40;;19078:4;19060;19065:1;19060:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19060:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;19104:15:::1;::::0;:22:::1;::::0;;-1:-1:-1;;;19104:22:0;;;;:15;;;::::1;::::0;:20:::1;::::0;:22:::1;::::0;;::::1;::::0;19060:7;;19104:22;;;;;:15;:22:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19094:4;19099:1;19094:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19094:32:0;;::::1;:7;::::0;;::::1;::::0;;;;;:32;19169:15:::1;::::0;19137:62:::1;::::0;19154:4:::1;::::0;19169:15:::1;19187:11:::0;19137:8:::1;:62::i;:::-;19210:15;::::0;:196:::1;::::0;-1:-1:-1;;;19210:196:0;;-1:-1:-1;;;;;19210:15:0;;::::1;::::0;:66:::1;::::0;:196:::1;::::0;19291:11;;19210:15:::1;::::0;19333:4;;19360::::1;::::0;19380:15:::1;::::0;19210:196:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;11581:6:0;:14;;-1:-1:-1;;;;11581:14:0;;;-1:-1:-1;;;;18931:483:0:o;3545:179::-;3603:7;;3635:5;3639:1;3635;:5;:::i;:::-;3623:17;;3664:1;3659;:6;;3651:46;;;;-1:-1:-1;;;3651:46:0;;14878:2:1;3651:46:0;;;14860:21:1;14917:2;14897:18;;;14890:30;14956:29;14936:18;;;14929:57;15003:18;;3651:46:0;14676:351:1;5758:189:0;5844:7;5879:12;5872:5;5864:28;;;;-1:-1:-1;;;5864:28:0;;;;;;;;:::i;:::-;-1:-1:-1;5903:9:0;5915:5;5919:1;5915;:5;:::i;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;703:315;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1397:456::-;1474:6;1482;1490;1543:2;1531:9;1522:7;1518:23;1514:32;1511:52;;;1559:1;1556;1549:12;1511:52;1598:9;1585:23;1617:31;1642:5;1617:31;:::i;:::-;1667:5;-1:-1:-1;1724:2:1;1709:18;;1696:32;1737:33;1696:32;1737:33;:::i;:::-;1397:456;;1789:7;;-1:-1:-1;;;1843:2:1;1828:18;;;;1815:32;;1397:456::o;2047:247::-;2106:6;2159:2;2147:9;2138:7;2134:23;2130:32;2127:52;;;2175:1;2172;2165:12;2127:52;2214:9;2201:23;2233:31;2258:5;2233:31;:::i;2299:248::-;2367:6;2375;2428:2;2416:9;2407:7;2403:23;2399:32;2396:52;;;2444:1;2441;2434:12;2396:52;-1:-1:-1;;2467:23:1;;;2537:2;2522:18;;;2509:32;;-1:-1:-1;2299:248:1:o;2760:388::-;2828:6;2836;2889:2;2877:9;2868:7;2864:23;2860:32;2857:52;;;2905:1;2902;2895:12;2857:52;2944:9;2931:23;2963:31;2988:5;2963:31;:::i;:::-;3013:5;-1:-1:-1;3070:2:1;3055:18;;3042:32;3083:33;3042:32;3083:33;:::i;:::-;3135:7;3125:17;;;2760:388;;;;;:::o;3153:127::-;3214:10;3209:3;3205:20;3202:1;3195:31;3245:4;3242:1;3235:15;3269:4;3266:1;3259:15;3285:422;3374:1;3417:5;3374:1;3431:270;3452:7;3442:8;3439:21;3431:270;;;3511:4;3507:1;3503:6;3499:17;3493:4;3490:27;3487:53;;;3520:18;;:::i;:::-;3570:7;3560:8;3556:22;3553:55;;;3590:16;;;;3553:55;3669:22;;;;3629:15;;;;3431:270;;;3435:3;3285:422;;;;;:::o;3712:806::-;3761:5;3791:8;3781:80;;-1:-1:-1;3832:1:1;3846:5;;3781:80;3880:4;3870:76;;-1:-1:-1;3917:1:1;3931:5;;3870:76;3962:4;3980:1;3975:59;;;;4048:1;4043:130;;;;3955:218;;3975:59;4005:1;3996:10;;4019:5;;;4043:130;4080:3;4070:8;4067:17;4064:43;;;4087:18;;:::i;:::-;-1:-1:-1;;4143:1:1;4129:16;;4158:5;;3955:218;;4257:2;4247:8;4244:16;4238:3;4232:4;4229:13;4225:36;4219:2;4209:8;4206:16;4201:2;4195:4;4192:12;4188:35;4185:77;4182:159;;;-1:-1:-1;4294:19:1;;;4326:5;;4182:159;4373:34;4398:8;4392:4;4373:34;:::i;:::-;4443:6;4439:1;4435:6;4431:19;4422:7;4419:32;4416:58;;;4454:18;;:::i;:::-;4492:20;;3712:806;-1:-1:-1;;;3712:806:1:o;4523:140::-;4581:5;4610:47;4651:4;4641:8;4637:19;4631:4;4610:47;:::i;4668:168::-;4741:9;;;4772;;4789:15;;;4783:22;;4769:37;4759:71;;4810:18;;:::i;4841:356::-;5043:2;5025:21;;;5062:18;;;5055:30;5121:34;5116:2;5101:18;;5094:62;5188:2;5173:18;;4841:356::o;5202:184::-;5272:6;5325:2;5313:9;5304:7;5300:23;5296:32;5293:52;;;5341:1;5338;5331:12;5293:52;-1:-1:-1;5364:16:1;;5202:184;-1:-1:-1;5202:184:1:o;6023:277::-;6090:6;6143:2;6131:9;6122:7;6118:23;6114:32;6111:52;;;6159:1;6156;6149:12;6111:52;6191:9;6185:16;6244:5;6237:13;6230:21;6223:5;6220:32;6210:60;;6266:1;6263;6256:12;6305:402;6507:2;6489:21;;;6546:2;6526:18;;;6519:30;6585:34;6580:2;6565:18;;6558:62;-1:-1:-1;;;6651:2:1;6636:18;;6629:36;6697:3;6682:19;;6305:402::o;7370:251::-;7440:6;7493:2;7481:9;7472:7;7468:23;7464:32;7461:52;;;7509:1;7506;7499:12;7461:52;7541:9;7535:16;7560:31;7585:5;7560:31;:::i;8547:306::-;8635:6;8643;8651;8704:2;8692:9;8683:7;8679:23;8675:32;8672:52;;;8720:1;8717;8710:12;8672:52;8749:9;8743:16;8733:26;;8799:2;8788:9;8784:18;8778:25;8768:35;;8843:2;8832:9;8828:18;8822:25;8812:35;;8547:306;;;;;:::o;12134:125::-;12199:9;;;12220:10;;;12217:36;;;12233:18;;:::i;12670:128::-;12737:9;;;12758:11;;;12755:37;;;12772:18;;:::i;12803:217::-;12843:1;12869;12859:132;;12913:10;12908:3;12904:20;12901:1;12894:31;12948:4;12945:1;12938:15;12976:4;12973:1;12966:15;12859:132;-1:-1:-1;13005:9:1;;12803:217::o;13559:127::-;13620:10;13615:3;13611:20;13608:1;13601:31;13651:4;13648:1;13641:15;13675:4;13672:1;13665:15;13691:980;13953:4;14001:3;13990:9;13986:19;14032:6;14021:9;14014:25;14058:2;14096:6;14091:2;14080:9;14076:18;14069:34;14139:3;14134:2;14123:9;14119:18;14112:31;14163:6;14198;14192:13;14229:6;14221;14214:22;14267:3;14256:9;14252:19;14245:26;;14306:2;14298:6;14294:15;14280:29;;14327:1;14337:195;14351:6;14348:1;14345:13;14337:195;;;14416:13;;-1:-1:-1;;;;;14412:39:1;14400:52;;14507:15;;;;14472:12;;;;14448:1;14366:9;14337:195;;;-1:-1:-1;;;;;;;14588:32:1;;;;14583:2;14568:18;;14561:60;-1:-1:-1;;;14652:3:1;14637:19;14630:35;14549:3;13691:980;-1:-1:-1;;;13691:980:1:o

Swarm Source

ipfs://dd0dcff0fcc183f67a5ce234755573f0409e3c5679b67fa3d86145cc84d3d59a

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.