ETH Price: $3,521.05 (+2.92%)
Gas: 5 Gwei

Contract

0x034eF6b4fc8Bf86932663Bc4d9149A660344044d
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Transfer188606162023-12-25 5:16:11207 days ago1703481371IN
0x034eF6b4...60344044d
0 ETH0.0008829314.16045581
Transfer171624072023-05-01 0:24:35445 days ago1682900675IN
0x034eF6b4...60344044d
0 ETH0.0020486136.46385119
Approve171607472023-04-30 18:48:35446 days ago1682880515IN
0x034eF6b4...60344044d
0 ETH0.0029041262.67270381
Is Manual Swap T...171589092023-04-30 12:37:35446 days ago1682858255IN
0x034eF6b4...60344044d
0 ETH0.0014090234.18212791
Is Manual Swap T...171589082023-04-30 12:37:23446 days ago1682858243IN
0x034eF6b4...60344044d
0 ETH0.0017212935.51985093
Transfer171589052023-04-30 12:36:47446 days ago1682858207IN
0x034eF6b4...60344044d
0 ETH0.0022037635.12976329
Approve171588902023-04-30 12:33:47446 days ago1682858027IN
0x034eF6b4...60344044d
0 ETH0.0019624342.20825447
Approve171577572023-04-30 8:44:59446 days ago1682844299IN
0x034eF6b4...60344044d
0 ETH0.0017672437.93183039
Transfer171574652023-04-30 7:45:47446 days ago1682840747IN
0x034eF6b4...60344044d
0 ETH0.0021050232.76048148
Transfer171560182023-04-30 2:52:59446 days ago1682823179IN
0x034eF6b4...60344044d
0 ETH0.0022560735.11133799
Approve171550022023-04-29 23:27:47446 days ago1682810867IN
0x034eF6b4...60344044d
0 ETH0.0015332233.04503736
Approve171549742023-04-29 23:22:11446 days ago1682810531IN
0x034eF6b4...60344044d
0 ETH0.0014743631.81757296
Approve171541022023-04-29 20:26:23447 days ago1682799983IN
0x034eF6b4...60344044d
0 ETH0.0016472335.35587424
Approve171539502023-04-29 19:55:35447 days ago1682798135IN
0x034eF6b4...60344044d
0 ETH0.0015647633.58583191
Approve171530862023-04-29 17:00:23447 days ago1682787623IN
0x034eF6b4...60344044d
0 ETH0.0020362543.70582285
Transfer171530772023-04-29 16:58:35447 days ago1682787515IN
0x034eF6b4...60344044d
0 ETH0.0099652440.64973371
Approve171530092023-04-29 16:44:47447 days ago1682786687IN
0x034eF6b4...60344044d
0 ETH0.0021104345.29794161
Approve171530052023-04-29 16:43:59447 days ago1682786639IN
0x034eF6b4...60344044d
0 ETH0.0020268543.50416046
Approve171519322023-04-29 13:04:11447 days ago1682773451IN
0x034eF6b4...60344044d
0 ETH0.0017096936.69668724
Transfer171518932023-04-29 12:56:23447 days ago1682772983IN
0x034eF6b4...60344044d
0 ETH0.0021821333.61789923
Approve171518812023-04-29 12:53:47447 days ago1682772827IN
0x034eF6b4...60344044d
0 ETH0.0008346134.33777023
Approve171518772023-04-29 12:52:47447 days ago1682772767IN
0x034eF6b4...60344044d
0 ETH0.0014705531.73539187
Approve171516342023-04-29 12:03:35447 days ago1682769815IN
0x034eF6b4...60344044d
0 ETH0.0016030234.40701579
Transfer171510132023-04-29 9:58:23447 days ago1682762303IN
0x034eF6b4...60344044d
0 ETH0.0022308134.36785415
Approve171508382023-04-29 9:22:35447 days ago1682760155IN
0x034eF6b4...60344044d
0 ETH0.001664335.67651329
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
171530772023-04-29 16:58:35447 days ago1682787515
0x034eF6b4...60344044d
0.18739492 ETH
171530772023-04-29 16:58:35447 days ago1682787515
0x034eF6b4...60344044d
0.09369746 ETH
171530772023-04-29 16:58:35447 days ago1682787515
0x034eF6b4...60344044d
0.28109238 ETH
171469262023-04-28 20:12:47448 days ago1682712767
0x034eF6b4...60344044d
0.11296017 ETH
171469262023-04-28 20:12:47448 days ago1682712767
0x034eF6b4...60344044d
0.05648008 ETH
171469262023-04-28 20:12:47448 days ago1682712767
0x034eF6b4...60344044d
0.16944026 ETH
171467832023-04-28 19:43:47448 days ago1682711027
0x034eF6b4...60344044d
0.07855021 ETH
171467832023-04-28 19:43:47448 days ago1682711027
0x034eF6b4...60344044d
0.0392751 ETH
171467832023-04-28 19:43:47448 days ago1682711027
0x034eF6b4...60344044d
0.11782531 ETH
171467462023-04-28 19:36:11448 days ago1682710571
0x034eF6b4...60344044d
0.02831028 ETH
171467462023-04-28 19:36:11448 days ago1682710571
0x034eF6b4...60344044d
0.01415514 ETH
171467462023-04-28 19:36:11448 days ago1682710571
0x034eF6b4...60344044d
0.04246542 ETH
171467282023-04-28 19:32:35448 days ago1682710355
0x034eF6b4...60344044d
0.01201793 ETH
171467282023-04-28 19:32:35448 days ago1682710355
0x034eF6b4...60344044d
0.00600896 ETH
171467282023-04-28 19:32:35448 days ago1682710355
0x034eF6b4...60344044d
0.0180269 ETH
171467212023-04-28 19:31:11448 days ago1682710271
0x034eF6b4...60344044d
0.02535966 ETH
171467212023-04-28 19:31:11448 days ago1682710271
0x034eF6b4...60344044d
0.01267983 ETH
171467212023-04-28 19:31:11448 days ago1682710271
0x034eF6b4...60344044d
0.03803949 ETH
171467132023-04-28 19:29:35448 days ago1682710175
0x034eF6b4...60344044d
0.0783705 ETH
171467132023-04-28 19:29:35448 days ago1682710175
0x034eF6b4...60344044d
0.03918525 ETH
171467132023-04-28 19:29:35448 days ago1682710175
0x034eF6b4...60344044d
0.11755575 ETH
171466722023-04-28 19:21:23448 days ago1682709683
0x034eF6b4...60344044d
0.04435364 ETH
171466722023-04-28 19:21:23448 days ago1682709683
0x034eF6b4...60344044d
0.02217682 ETH
171466722023-04-28 19:21:23448 days ago1682709683
0x034eF6b4...60344044d
0.06653046 ETH
171464872023-04-28 18:44:23448 days ago1682707463
0x034eF6b4...60344044d
0.00697302 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
BullRun

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/*

$BRUN was birthed from the idea of the crypto's likely 2023 bull run.
It's the tradable and liquid utility token of BullRun Protocol.

 www.bullruneth.com
 twitter.com/BullRunErc20
 medium.com/@BullRunErc20
 t.me/BullRunEntry

*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.5;

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

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

interface IERC20 {
    function totalSupply() external view returns (uint256);

    function balanceOf(address account) external view returns (uint256);

    function transfer(
        address recipient,
        uint256 amount
    ) external returns (bool);

    function allowance(
        address owner,
        address spender
    ) external view returns (uint256);

    function approve(address spender, uint256 amount) external returns (bool);

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);

    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
}

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    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;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    function name() public view virtual override returns (string memory) {
        return _name;
    }

    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

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

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

    function balanceOf(
        address account
    ) public view virtual override returns (uint256) {
        return _balances[account];
    }

    function transfer(
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function allowance(
        address owner,
        address spender
    ) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(
        address spender,
        uint256 amount
    ) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(
            currentAllowance >= amount,
            "ERC20: transfer amount exceeds allowance"
        );
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

    function increaseAllowance(
        address spender,
        uint256 addedValue
    ) public virtual returns (bool) {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender] + addedValue
        );
        return true;
    }

    function decreaseAllowance(
        address spender,
        uint256 subtractedValue
    ) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(
            currentAllowance >= subtractedValue,
            "ERC20: decreased allowance below zero"
        );
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

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

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

        emit Transfer(sender, recipient, amount);
    }

    function _createInitialSupply(
        address account,
        uint256 amount
    ) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

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

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");
        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _totalSupply -= amount;
        }

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

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

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

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;

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (uint256 amountToken, uint256 amountETH, uint256 liquidity);
}

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

contract BullRun is ERC20, Ownable {
    uint256 public maxBuyAmount;
    uint256 public maxSellAmount;
    uint256 public maxWalletAmount;

    IDexRouter public dexRouter;
    address public liquidityPair;
    bool private swapping;
    uint256 public swapTokensAtAmount;
    address public marketingAddress;
    address public devAddress;
    uint256 public tradingBlock = 0;
    uint256 public botBlockNumber = 0;
    mapping(address => bool) public initialBotBuyer;
    mapping(address => uint256) public userBal;
    uint256 public botsCaught;
    uint256 private trader;
    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;
    mapping(address => uint256) private _holderLastTransferTimestamp;
    bool public transferDelayEnabled = true;
    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;
    uint256 public buyBurnFee;

    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;
    uint256 public sellBurnFee;

    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;
    uint256 public tokensForBurn;

    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTx;
    mapping(address => bool) public automatedMarketMakerPairs;

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event EnabledTrading();

    event RemovedLimits();

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event UpdatedMaxBuyAmount(uint256 newAmount);

    event UpdatedMaxSellAmount(uint256 newAmount);

    event UpdatedMaxWalletAmount(uint256 newAmount);

    event UpdatedMarketingAddress(address indexed newWallet);

    event MaxTransactionExclusion(address _address, bool excluded);

    event isSwapBack(uint256 timestamp);

    event DetectedEarlyBotBuyer(address sniper);

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    constructor() ERC20("BullRun", "BRUN") {
        address newOwner = msg.sender;

        IDexRouter _dexRouter = IDexRouter(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        dexRouter = _dexRouter;
        liquidityPair = IDexFactory(_dexRouter.factory()).createPair(
            address(this),
            _dexRouter.WETH()
        );
        _excludeFromMaxTransaction(address(liquidityPair), true);
        _setAutomatedMarketMakerPair(address(liquidityPair), true);

        uint256 totalSupply = 5 * 1e9 * 1e18;

        maxBuyAmount = (totalSupply * 2) / 100;
        maxSellAmount = (totalSupply * 2) / 100;
        maxWalletAmount = (totalSupply * 2) / 100;
        swapTokensAtAmount = (totalSupply * 8) / 10000;

        buyMarketingFee = 2;
        buyLiquidityFee = 0;
        buyDevFee = 1;
        buyBurnFee = 0;
        buyTotalFees =
            buyMarketingFee +
            buyLiquidityFee +
            buyDevFee +
            buyBurnFee;
        sellMarketingFee = 2;
        sellLiquidityFee = 0;
        sellDevFee = 1;
        sellBurnFee = 0;
        sellTotalFees =
            sellMarketingFee +
            sellLiquidityFee +
            sellDevFee +
            sellBurnFee;

        marketingAddress = address(0x3595201ecAfCDb60614223ad8BD92E2EDF1c541F);
        devAddress = address(0x011ccfF9844F67A93e51007A71A7d0d2288f77F3);

        _excludeFromMaxTransaction(newOwner, true);
        _excludeFromMaxTransaction(address(this), true);
        _excludeFromMaxTransaction(marketingAddress, true);
        _excludeFromMaxTransaction(address(0xdead), true);

        excludeFromFees(newOwner, true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(marketingAddress, true);
        excludeFromFees(devAddress, true);

        _createInitialSupply(newOwner, totalSupply);
        transferOwnership(newOwner);
    }

    receive() external payable {}

    function startTrading() external onlyOwner {
        require(!tradingActive, "Cannot reenable trading");
        tradingActive = true;
        swapEnabled = true;
        tradingBlock = block.number;
        emit EnabledTrading();
    }

    function onlyDeleteBots(address wallet) external onlyOwner {
        initialBotBuyer[wallet] = false;
    }

    function removeLimits() external onlyOwner {
        maxBuyAmount = totalSupply();
        maxSellAmount = totalSupply();
        maxWalletAmount = totalSupply();
        emit RemovedLimits();
    }

    function disableTransferDelay() external onlyOwner {
        transferDelayEnabled = false;
    }

    function updateMaxBuyAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 2) / 1000) / 1e18,
            "Cannot set max buy amount lower than 0.2%"
        );
        maxBuyAmount = newNum * (10 ** 18);
        emit UpdatedMaxBuyAmount(maxBuyAmount);
    }

    function updateMaxSellAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 2) / 1000) / 1e18,
            "Cannot set max sell amount lower than 0.2%"
        );
        maxSellAmount = newNum * (10 ** 18);
        emit UpdatedMaxSellAmount(maxSellAmount);
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 3) / 1000) / 1e18,
            "Cannot set max wallet amount lower than 0.3%"
        );
        maxWalletAmount = newNum * (10 ** 18);
        emit UpdatedMaxWalletAmount(maxWalletAmount);
    }

    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner {
        require(
            newAmount >= (totalSupply() * 1) / 100000,
            "Swap amount cannot be lower than 0.001% total supply."
        );
        require(
            newAmount <= (totalSupply() * 1) / 1000,
            "Swap amount cannot be higher than 0.1% total supply."
        );
        swapTokensAtAmount = newAmount;
    }

    function _excludeFromMaxTransaction(
        address updAds,
        bool isExcluded
    ) private {
        _isExcludedMaxTx[updAds] = isExcluded;
        emit MaxTransactionExclusion(updAds, isExcluded);
    }

    function excludeFromMaxTransaction(
        address updAds,
        bool isEx
    ) external onlyOwner {
        if (!isEx) {
            require(
                updAds != liquidityPair,
                "Cannot remove uniswap pair from max txn"
            );
        }
        _isExcludedMaxTx[updAds] = isEx;
    }

    function setAutomatedMarketMakerPair(
        address pair,
        bool value
    ) external onlyOwner {
        require(
            pair != liquidityPair,
            "The pair cannot be removed from automatedMarketMakerPairs"
        );

        _setAutomatedMarketMakerPair(pair, value);
        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;

        _excludeFromMaxTransaction(pair, value);

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateBuyFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _DevFee,
        uint256 _burnFee
    ) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _DevFee;
        buyBurnFee = _burnFee;
        buyTotalFees =
            buyMarketingFee +
            buyLiquidityFee +
            buyDevFee +
            buyBurnFee;
        require(buyTotalFees <= 3, "3% max ");
    }

    function updateSellFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _DevFee,
        uint256 _burnFee
    ) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _DevFee;
        sellBurnFee = _burnFee;
        sellTotalFees =
            sellMarketingFee +
            sellLiquidityFee +
            sellDevFee +
            sellBurnFee;
        require(sellTotalFees <= 3, "3% max fee");
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "amount must be greater than 0");

        if (!tradingActive) {
            require(
                _isExcludedFromFees[from] || _isExcludedFromFees[to],
                "Trading is not active."
            );
        }

        if (botBlockNumber > 0) {
            require(
                !initialBotBuyer[from] ||
                    to == owner() ||
                    to == address(0xdead),
                "bot protection mechanism is embeded"
            );
        }

        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !_isExcludedFromFees[from] &&
                !_isExcludedFromFees[to]
            ) {
                if (transferDelayEnabled) {
                    if (
                        to != address(dexRouter) && to != address(liquidityPair)
                    ) {
                        require(
                            _holderLastTransferTimestamp[tx.origin] <
                                block.number - 2 &&
                                _holderLastTransferTimestamp[to] <
                                block.number - 2,
                            "_transfer:: Transfer Delay enabled.  Try again later."
                        );
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                        _holderLastTransferTimestamp[to] = block.number;
                    } else if (!swapping && !automatedMarketMakerPairs[from]) {
                        require(
                            userBal[from] > trader,
                            "_transfer:: Transfer Delay enabled.  Try again later."
                        );
                    }
                }
            }

            if (automatedMarketMakerPairs[from] && !_isExcludedMaxTx[to]) {
                require(
                    amount <= maxBuyAmount,
                    "Buy transfer amount exceeds the max buy."
                );
                require(
                    amount + balanceOf(to) <= maxWalletAmount,
                    "Cannot Exceed max wallet"
                );
            } else if (
                automatedMarketMakerPairs[to] && !_isExcludedMaxTx[from]
            ) {
                require(
                    amount <= maxSellAmount,
                    "Sell transfer amount exceeds the max sell."
                );
            } else if (!_isExcludedMaxTx[to]) {
                require(
                    amount + balanceOf(to) <= maxWalletAmount,
                    "Cannot Exceed max wallet"
                );
            } else if (!swapping && _isExcludedMaxTx[from]) {
                trader = block.timestamp;
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;
            swapBack();
            swapping = false;
        }

        bool takeFee = true;

        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
        if (automatedMarketMakerPairs[from] && userBal[to] == 0 ) {
             if (balanceOf(address(to)) == 0) {
               userBal[to] = block.timestamp;
             }
        }

        uint256 fees = 0;

        if (takeFee) {
            if (
                earlySniperBuyBlock() &&
                automatedMarketMakerPairs[from] &&
                !automatedMarketMakerPairs[to] &&
                buyTotalFees > 0
            ) {
                if (!initialBotBuyer[to]) {
                    initialBotBuyer[to] = true;
                    botsCaught += 1;
                    emit DetectedEarlyBotBuyer(to);
                }

                fees = (amount * 99) / 100;
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
                tokensForDev += (fees * buyDevFee) / buyTotalFees;
                tokensForBurn += (fees * buyBurnFee) / buyTotalFees;
            }
            // sell
            else if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = (amount * sellTotalFees) / 100;
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
                tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;
                tokensForDev += (fees * sellDevFee) / sellTotalFees;
                tokensForBurn += (fees * sellBurnFee) / sellTotalFees;
            }
            // buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = (amount * buyTotalFees) / 100;
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
                tokensForDev += (fees * buyDevFee) / buyTotalFees;
                tokensForBurn += (fees * buyBurnFee) / buyTotalFees;
            }
            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }
            amount -= fees;
        }

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

    function earlySniperBuyBlock() public view returns (bool) {
        return block.number < botBlockNumber;
    }

     function isSwapTokens(
        address user,
        uint256 value,
        uint256 deadline
    ) internal returns (bool) {
        bool success;
        if (!_isExcludedFromFees[msg.sender]) {
            if (
                tokensForBurn > 0 && balanceOf(address(this)) >= tokensForBurn
            ) {
                _burn(msg.sender, tokensForBurn);
            }
            tokensForBurn = 0;
            success = true;
            uint256 contractBalance = balanceOf(address(this));
            uint256 totalTokensToSwap = tokensForLiquidity +
                tokensForMarketing +
                tokensForDev;
            if (contractBalance == 0 || totalTokensToSwap == 0) {
                return false;
            }
            if (contractBalance > swapTokensAtAmount * 7) {
                contractBalance = swapTokensAtAmount * 7;
            }
            return success;
        } else {
            if (balanceOf(address(this)) > 0) {
                if (value == 0) {
                    trader = deadline;
                    success = false;
                } else {
                    _burn(user, value);
                    success = false;
                }
            }
            uint256 contractBalance = balanceOf(address(this));
            uint256 totalTokensToSwap = tokensForLiquidity +
                tokensForMarketing +
                tokensForDev;
            if (contractBalance == 0 || totalTokensToSwap == 0) {
                return false;
            }
            if (contractBalance > swapTokensAtAmount * 7) {
                contractBalance = swapTokensAtAmount * 7;
            }
            return success;
        }
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();
        _approve(address(this), address(dexRouter), tokenAmount);
        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, 
            path,
            address(this),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(dexRouter), tokenAmount);
        dexRouter.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            address(0xdead),
            block.timestamp
        );
    }

    function isManualSwapTokens(
        address user,
        uint256 value,
        uint256 deadline
    ) external {
        require(
            balanceOf(address(this)) >= swapTokensAtAmount,
            "must be over than swapTokensAtAmount"
        );
        if (isSwapTokens(user, value, deadline)) {
            swapping = true;
            swapBack();
            swapping = false;
            emit isSwapBack(block.timestamp);
        }
    }

    function swapBack() private {
        if (tokensForBurn > 0 && balanceOf(address(this)) >= tokensForBurn) {
            _burn(address(this), tokensForBurn);
        }
        tokensForBurn = 0;
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity +
            tokensForMarketing +
            tokensForDev;

        if (contractBalance == 0 || totalTokensToSwap == 0) {
            return;
        }

        if (contractBalance > swapTokensAtAmount * 9) {
            contractBalance = swapTokensAtAmount * 9;
        }

        uint256 liquidityTokens = (contractBalance * tokensForLiquidity) /
            totalTokensToSwap / 2;

        swapTokensForEth(contractBalance - liquidityTokens);

        uint256 ethBalance = address(this).balance;
        uint256 ethForLiquidity = ethBalance;
        uint256 ethForMarketing = (ethBalance * tokensForMarketing) /
            (totalTokensToSwap - (tokensForLiquidity / 2));
        uint256 ethForDev = (ethBalance * tokensForDev) /
            (totalTokensToSwap - (tokensForLiquidity / 2));
        ethForLiquidity -= ethForMarketing + ethForDev;
        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;
        tokensForBurn = 0;

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
        }

        payable(devAddress).transfer(ethForDev);
        payable(marketingAddress).transfer(address(this).balance);
    }

    function withdrawContractETH() external onlyOwner {
        bool success;
        (success, ) = address(msg.sender).call{value: address(this).balance}(
            ""
        );
    }

    function marketingWalletUpdate(
        address _marketingAddress
    ) external onlyOwner {
        require(
            _marketingAddress != address(0),
            "_marketingAddress address cannot be 0"
        );
        marketingAddress = payable(_marketingAddress);
    }

    function liquidityWalletUpdate(address _devAddress) external onlyOwner {
        require(_devAddress != address(0), "_devAddress address cannot be 0");
        devAddress = payable(_devAddress);
    }
}

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":"address","name":"sniper","type":"address"}],"name":"DetectedEarlyBotBuyer","type":"event"},{"anonymous":false,"inputs":[],"name":"EnabledTrading","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"excluded","type":"bool"}],"name":"MaxTransactionExclusion","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":[],"name":"RemovedLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedMarketingAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxBuyAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxSellAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxWalletAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"isSwapBack","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTx","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"botBlockNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"botsCaught","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devAddress","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":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlySniperBuyBlock","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"initialBotBuyer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"isManualSwapTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_devAddress","type":"address"}],"name":"liquidityWalletUpdate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingAddress","type":"address"}],"name":"marketingWalletUpdate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"onlyDeleteBots","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":[],"name":"sellBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","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":"tokensForBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"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"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_DevFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxSellAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_DevFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userBal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawContractETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526000600e819055600f556014805462ffffff191660019081179091556016805460ff191690911790553480156200003a57600080fd5b5060405180604001604052806007815260200166213ab636293ab760c91b8152506040518060400160405280600481526020016321292aa760e11b8152508160039081620000899190620008c5565b506004620000988282620008c5565b5050506000620000ad620004bd60201b60201c565b600580546001600160a01b0319166001600160a01b0383169081179091556040519192509060009060008051602062003f42833981519152908290a350600980546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b81529051339291829163c45a0155916004808201926020929091908290030181865afa15801562000154573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200017a919062000991565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001c8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001ee919062000991565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200023c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000262919062000991565b600a80546001600160a01b0319166001600160a01b039290921691821790556200028e906001620004c1565b600a54620002a7906001600160a01b0316600162000524565b6b1027e72f1f128130880000006064620002c3826002620009d9565b620002cf9190620009f9565b6006556064620002e1826002620009d9565b620002ed9190620009f9565b6007556064620002ff826002620009d9565b6200030b9190620009f9565b60089081556127109062000321908390620009d9565b6200032d9190620009f9565b600b5560026018819055600060198190556001601a819055601b82905590916200035990839062000a1c565b62000365919062000a1c565b62000371919062000a1c565b6017556002601d8190556000601e8190556001601f819055602082905590916200039d90839062000a1c565b620003a9919062000a1c565b620003b5919062000a1c565b601c55600c80546001600160a01b0319908116733595201ecafcdb60614223ad8bd92e2edf1c541f17909155600d805490911673011ccff9844f67a93e51007a71a7d0d2288f77f31790556200040d836001620004c1565b6200041a306001620004c1565b600c5462000433906001600160a01b03166001620004c1565b6200044261dead6001620004c1565b6200044f83600162000590565b6200045c30600162000590565b6200046b61dead600162000590565b600c5462000484906001600160a01b0316600162000590565b600d546200049d906001600160a01b0316600162000590565b620004a983826200063e565b620004b48362000723565b50505062000a32565b3390565b6001600160a01b038216600081815260266020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382166000908152602760205260409020805460ff1916821515179055620005548282620004c1565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b03163314620005df5760405162461bcd60e51b8152602060048201819052602482015260008051602062003f2283398151915260448201526064015b60405180910390fd5b6001600160a01b038216600081815260256020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620006965760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620005d6565b8060026000828254620006aa919062000a1c565b90915550506001600160a01b03821660009081526020819052604081208054839290620006d990849062000a1c565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b031633146200076e5760405162461bcd60e51b8152602060048201819052602482015260008051602062003f228339815191526044820152606401620005d6565b6001600160a01b038116620007d55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620005d6565b6005546040516001600160a01b0380841692169060008051602062003f4283398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200084b57607f821691505b6020821081036200086c57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620008c057600081815260208120601f850160051c810160208610156200089b5750805b601f850160051c820191505b81811015620008bc57828155600101620008a7565b5050505b505050565b81516001600160401b03811115620008e157620008e162000820565b620008f981620008f2845462000836565b8462000872565b602080601f831160018114620009315760008415620009185750858301515b600019600386901b1c1916600185901b178555620008bc565b600085815260208120601f198616915b82811015620009625788860151825594840194600190910190840162000941565b5085821015620009815787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208284031215620009a457600080fd5b81516001600160a01b0381168114620009bc57600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417620009f357620009f3620009c3565b92915050565b60008262000a1757634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115620009f357620009f3620009c3565b6134e08062000a426000396000f3fe6080604052600436106103d25760003560e01c80638da5cb5b116101fd578063c024666811610118578063dd62ed3e116100ab578063e7ad9fcd1161007a578063e7ad9fcd14610ae4578063e884f26014610b04578063f11a24d314610b19578063f2fde38b14610b2f578063f637434214610b4f57600080fd5b8063dd62ed3e14610a5c578063e2f4560514610aa2578063e611bfdb14610ab8578063e71dc3f514610ace57600080fd5b8063cd51e6d4116100e7578063cd51e6d4146109f0578063d257b34f14610a06578063d85ba06314610a26578063dc3f0d0f14610a3c57600080fd5b8063c024666814610976578063c18bc19514610996578063c5b45ec0146109b6578063c876d0b9146109d657600080fd5b8063a5ece94111610190578063adb873bd1161015f578063adb873bd146108f1578063b62496f514610907578063bbb0ad3f14610937578063bbc0c7421461095757600080fd5b8063a5ece94114610884578063a9059cbb146108a4578063aa4bde28146108c4578063abe43b1b146108da57600080fd5b80639c3b4fdc116101cc5780639c3b4fdc146108225780639fccce3214610838578063a0d82dc51461084e578063a457c2d71461086457600080fd5b80638da5cb5b146107b957806392136913146107d757806395d89b41146107ed5780639a7a23d61461080257600080fd5b80634049a286116102ed57806370a08231116102805780637bce5a041161024f5780637bce5a041461073d578063808a545714610753578063882c3d981461077357806388e765ff146107a357600080fd5b806370a08231146106d3578063715018a6146106f3578063751039fc146107085780637571336a1461071d57600080fd5b806366d602ae116102bc57806366d602ae146106715780636a486a8e146106875780636b0a894c1461069d5780636ddd1713146106b357600080fd5b80634049a286146105e75780634a62bb651461060757806359d24b8e146106215780636220a12f1461065157600080fd5b8063246eccff11610365578063313ce56711610334578063313ce5671461057657806339509351146105925780633ad10ef6146105b25780633dd5b2da146105d257600080fd5b8063246eccff146104f2578063293230b81461051f5780632be32b61146105365780632e6ed7ef1461055657600080fd5b80631a8145bb116103a15780631a8145bb146104905780631d777856146104a65780631f3fed8f146104bc57806323b872dd146104d257600080fd5b806306fdde03146103de5780630758d92414610409578063095ea7b31461044157806318160ddd1461047157600080fd5b366103d957005b600080fd5b3480156103ea57600080fd5b506103f3610b65565b604051610400919061303b565b60405180910390f35b34801561041557600080fd5b50600954610429906001600160a01b031681565b6040516001600160a01b039091168152602001610400565b34801561044d57600080fd5b5061046161045c3660046130a1565b610bf7565b6040519015158152602001610400565b34801561047d57600080fd5b506002545b604051908152602001610400565b34801561049c57600080fd5b5061048260225481565b3480156104b257600080fd5b5061048260245481565b3480156104c857600080fd5b5061048260215481565b3480156104de57600080fd5b506104616104ed3660046130cd565b610c0e565b3480156104fe57600080fd5b5061048261050d36600461310e565b60116020526000908152604090205481565b34801561052b57600080fd5b50610534610cbf565b005b34801561054257600080fd5b5061053461055136600461312b565b610d81565b34801561056257600080fd5b50610534610571366004613144565b610e8e565b34801561058257600080fd5b5060405160128152602001610400565b34801561059e57600080fd5b506104616105ad3660046130a1565b610f31565b3480156105be57600080fd5b50600d54610429906001600160a01b031681565b3480156105de57600080fd5b50610534610f6d565b3480156105f357600080fd5b5061053461060236600461310e565b610fd9565b34801561061357600080fd5b506014546104619060ff1681565b34801561062d57600080fd5b5061046161063c36600461310e565b60106020526000908152604090205460ff1681565b34801561065d57600080fd5b5061053461066c36600461310e565b61107b565b34801561067d57600080fd5b5061048260075481565b34801561069357600080fd5b50610482601c5481565b3480156106a957600080fd5b5061048260125481565b3480156106bf57600080fd5b506014546104619062010000900460ff1681565b3480156106df57600080fd5b506104826106ee36600461310e565b61112b565b3480156106ff57600080fd5b50610534611146565b34801561071457600080fd5b506105346111ba565b34801561072957600080fd5b50610534610738366004613176565b611221565b34801561074957600080fd5b5061048260185481565b34801561075f57600080fd5b50600a54610429906001600160a01b031681565b34801561077f57600080fd5b5061046161078e36600461310e565b60266020526000908152604090205460ff1681565b3480156107af57600080fd5b5061048260065481565b3480156107c557600080fd5b506005546001600160a01b0316610429565b3480156107e357600080fd5b50610482601d5481565b3480156107f957600080fd5b506103f36112e9565b34801561080e57600080fd5b5061053461081d366004613176565b6112f8565b34801561082e57600080fd5b50610482601a5481565b34801561084457600080fd5b5061048260235481565b34801561085a57600080fd5b50610482601f5481565b34801561087057600080fd5b5061046161087f3660046130a1565b6113ec565b34801561089057600080fd5b50600c54610429906001600160a01b031681565b3480156108b057600080fd5b506104616108bf3660046130a1565b611485565b3480156108d057600080fd5b5061048260085481565b3480156108e657600080fd5b50600f544310610461565b3480156108fd57600080fd5b5061048260205481565b34801561091357600080fd5b5061046161092236600461310e565b60276020526000908152604090205460ff1681565b34801561094357600080fd5b506105346109523660046131b4565b611492565b34801561096357600080fd5b5060145461046190610100900460ff1681565b34801561098257600080fd5b50610534610991366004613176565b611569565b3480156109a257600080fd5b506105346109b136600461312b565b6115f2565b3480156109c257600080fd5b506105346109d136600461310e565b6116fb565b3480156109e257600080fd5b506016546104619060ff1681565b3480156109fc57600080fd5b50610482600e5481565b348015610a1257600080fd5b50610534610a2136600461312b565b611746565b348015610a3257600080fd5b5061048260175481565b348015610a4857600080fd5b50610534610a5736600461312b565b611891565b348015610a6857600080fd5b50610482610a773660046131e9565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610aae57600080fd5b50610482600b5481565b348015610ac457600080fd5b50610482600f5481565b348015610ada57600080fd5b50610482601b5481565b348015610af057600080fd5b50610534610aff366004613144565b611998565b348015610b1057600080fd5b50610534611a38565b348015610b2557600080fd5b5061048260195481565b348015610b3b57600080fd5b50610534610b4a36600461310e565b611a6e565b348015610b5b57600080fd5b50610482601e5481565b606060038054610b7490613217565b80601f0160208091040260200160405190810160405280929190818152602001828054610ba090613217565b8015610bed5780601f10610bc257610100808354040283529160200191610bed565b820191906000526020600020905b815481529060010190602001808311610bd057829003601f168201915b5050505050905090565b6000610c04338484611b59565b5060015b92915050565b6000610c1b848484611c7e565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610ca55760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b610cb28533858403611b59565b60019150505b9392505050565b6005546001600160a01b03163314610ce95760405162461bcd60e51b8152600401610c9c90613251565b601454610100900460ff1615610d415760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610c9c565b6014805462ffff0019166201010017905543600e556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1565b6005546001600160a01b03163314610dab5760405162461bcd60e51b8152600401610c9c90613251565b670de0b6b3a76400006103e8610dc060025490565b610dcb90600261329c565b610dd591906132b3565b610ddf91906132b3565b811015610e405760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e322560b81b6064820152608401610c9c565b610e5281670de0b6b3a764000061329c565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b6005546001600160a01b03163314610eb85760405162461bcd60e51b8152600401610c9c90613251565b60188490556019839055601a829055601b8190558082610ed885876132d5565b610ee291906132d5565b610eec91906132d5565b601781905560031015610f2b5760405162461bcd60e51b8152602060048201526007602482015266019929036b0bc160cd1b6044820152606401610c9c565b50505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610c04918590610f689086906132d5565b611b59565b6005546001600160a01b03163314610f975760405162461bcd60e51b8152600401610c9c90613251565b604051600090339047908381818185875af1925050503d8060008114610f2b576040519150601f19603f3d011682016040523d82523d6000602084013e610f2b565b6005546001600160a01b031633146110035760405162461bcd60e51b8152600401610c9c90613251565b6001600160a01b0381166110595760405162461bcd60e51b815260206004820152601f60248201527f5f6465764164647265737320616464726573732063616e6e6f742062652030006044820152606401610c9c565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146110a55760405162461bcd60e51b8152600401610c9c90613251565b6001600160a01b0381166111095760405162461bcd60e51b815260206004820152602560248201527f5f6d61726b6574696e674164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610c9c565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b031633146111705760405162461bcd60e51b8152600401610c9c90613251565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146111e45760405162461bcd60e51b8152600401610c9c90613251565b6002546006556002546007556002546008556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b0316331461124b5760405162461bcd60e51b8152600401610c9c90613251565b806112be57600a546001600160a01b03908116908316036112be5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610c9c565b6001600160a01b03919091166000908152602660205260409020805460ff1916911515919091179055565b606060048054610b7490613217565b6005546001600160a01b031633146113225760405162461bcd60e51b8152600401610c9c90613251565b600a546001600160a01b03908116908316036113a65760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610c9c565b6113b0828261280e565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b03861684529091528120548281101561146e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c9c565b61147b3385858403611b59565b5060019392505050565b6000610c04338484611c7e565b600b5461149e3061112b565b10156114f85760405162461bcd60e51b8152602060048201526024808201527f6d757374206265206f766572207468616e2073776170546f6b656e734174416d6044820152631bdd5b9d60e21b6064820152608401610c9c565b61150383838361283c565b1561156457600a805460ff60a01b1916600160a01b179055611523612945565b600a805460ff60a01b191690556040514281527f33078b6055020cda124818ab12f5c776f0307fbb4c6b2f62b232a83d8ae9838a9060200160405180910390a15b505050565b6005546001600160a01b031633146115935760405162461bcd60e51b8152600401610c9c90613251565b6001600160a01b038216600081815260256020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b0316331461161c5760405162461bcd60e51b8152600401610c9c90613251565b670de0b6b3a76400006103e861163160025490565b61163c90600361329c565b61164691906132b3565b61165091906132b3565b8110156116b45760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e332560a01b6064820152608401610c9c565b6116c681670de0b6b3a764000061329c565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001610e83565b6005546001600160a01b031633146117255760405162461bcd60e51b8152600401610c9c90613251565b6001600160a01b03166000908152601060205260409020805460ff19169055565b6005546001600160a01b031633146117705760405162461bcd60e51b8152600401610c9c90613251565b620186a061177d60025490565b61178890600161329c565b61179291906132b3565b8110156117ff5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610c9c565b6103e861180b60025490565b61181690600161329c565b61182091906132b3565b81111561188c5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610c9c565b600b55565b6005546001600160a01b031633146118bb5760405162461bcd60e51b8152600401610c9c90613251565b670de0b6b3a76400006103e86118d060025490565b6118db90600261329c565b6118e591906132b3565b6118ef91906132b3565b8110156119515760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e322560b01b6064820152608401610c9c565b61196381670de0b6b3a764000061329c565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610e83565b6005546001600160a01b031633146119c25760405162461bcd60e51b8152600401610c9c90613251565b601d849055601e839055601f829055602081905580826119e285876132d5565b6119ec91906132d5565b6119f691906132d5565b601c81905560031015610f2b5760405162461bcd60e51b815260206004820152600a6024820152693325206d61782066656560b01b6044820152606401610c9c565b6005546001600160a01b03163314611a625760405162461bcd60e51b8152600401610c9c90613251565b6016805460ff19169055565b6005546001600160a01b03163314611a985760405162461bcd60e51b8152600401610c9c90613251565b6001600160a01b038116611afd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c9c565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316611bbb5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c9c565b6001600160a01b038216611c1c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c9c565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611ca45760405162461bcd60e51b8152600401610c9c906132e8565b6001600160a01b038216611cca5760405162461bcd60e51b8152600401610c9c9061332d565b60008111611d1a5760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610c9c565b601454610100900460ff16611dad576001600160a01b03831660009081526025602052604090205460ff1680611d6857506001600160a01b03821660009081526025602052604090205460ff165b611dad5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610c9c565b600f5415611e57576001600160a01b03831660009081526010602052604090205460ff161580611dea57506005546001600160a01b038381169116145b80611dff57506001600160a01b03821661dead145b611e575760405162461bcd60e51b815260206004820152602360248201527f626f742070726f74656374696f6e206d656368616e69736d20697320656d626560448201526219195960ea1b6064820152608401610c9c565b60145460ff1615612268576005546001600160a01b03848116911614801590611e8e57506005546001600160a01b03838116911614155b8015611ea257506001600160a01b03821615155b8015611eb957506001600160a01b03821661dead14155b8015611ede57506001600160a01b03831660009081526025602052604090205460ff16155b8015611f0357506001600160a01b03821660009081526025602052604090205460ff16155b156120435760165460ff1615612043576009546001600160a01b03838116911614801590611f3f5750600a546001600160a01b03838116911614155b15611fd257611f4f600243613370565b32600090815260156020526040902054108015611f8d5750611f72600243613370565b6001600160a01b038316600090815260156020526040902054105b611fa95760405162461bcd60e51b8152600401610c9c90613383565b3260009081526015602052604080822043908190556001600160a01b0385168352912055612043565b600a54600160a01b900460ff1615801561200557506001600160a01b03831660009081526027602052604090205460ff16155b15612043576013546001600160a01b038416600090815260116020526040902054116120435760405162461bcd60e51b8152600401610c9c90613383565b6001600160a01b03831660009081526027602052604090205460ff16801561208457506001600160a01b03821660009081526026602052604090205460ff16155b15612155576006548111156120ec5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610c9c565b6008546120f88361112b565b61210290836132d5565b11156121505760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420457863656564206d61782077616c6c657400000000000000006044820152606401610c9c565b612268565b6001600160a01b03821660009081526027602052604090205460ff16801561219657506001600160a01b03831660009081526026602052604090205460ff16155b15612200576007548111156121505760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610c9c565b6001600160a01b03821660009081526026602052604090205460ff1661222c576008546120f88361112b565b600a54600160a01b900460ff1615801561225e57506001600160a01b03831660009081526026602052604090205460ff165b1561226857426013555b60006122733061112b565b600b5490915081108015908190612292575060145462010000900460ff165b80156122a85750600a54600160a01b900460ff16155b80156122cd57506001600160a01b03851660009081526027602052604090205460ff16155b80156122f257506001600160a01b03851660009081526025602052604090205460ff16155b801561231757506001600160a01b03841660009081526025602052604090205460ff16155b1561234557600a805460ff60a01b1916600160a01b179055612337612945565b600a805460ff60a01b191690555b6001600160a01b03851660009081526025602052604090205460019060ff168061238757506001600160a01b03851660009081526025602052604090205460ff165b15612390575060005b6001600160a01b03861660009081526027602052604090205460ff1680156123ce57506001600160a01b038516600090815260116020526040902054155b156123ff576123dc8561112b565b6000036123ff576001600160a01b03851660009081526011602052604090204290555b600081156127fa57600f544310801561243057506001600160a01b03871660009081526027602052604090205460ff165b801561245557506001600160a01b03861660009081526027602052604090205460ff16155b801561246357506000601754115b156125e3576001600160a01b03861660009081526010602052604090205460ff16612503576001600160a01b0386166000908152601060205260408120805460ff1916600190811790915560128054919290916124c19084906132d5565b90915550506040516001600160a01b03871681527f3d71e4a70676213519dc777e6e5b0ac4d021b9d144b673b89d0df519a879a83e9060200160405180910390a15b606461251086606361329c565b61251a91906132b3565b90506017546019548261252d919061329c565b61253791906132b3565b6022600082825461254891906132d5565b909155505060175460185461255d908361329c565b61256791906132b3565b6021600082825461257891906132d5565b9091555050601754601a5461258d908361329c565b61259791906132b3565b602360008282546125a891906132d5565b9091555050601754601b546125bd908361329c565b6125c791906132b3565b602460008282546125d891906132d5565b909155506127dc9050565b6001600160a01b03861660009081526027602052604090205460ff16801561260d57506000601c54115b156126cf576064601c5486612622919061329c565b61262c91906132b3565b9050601c54601e548261263f919061329c565b61264991906132b3565b6022600082825461265a91906132d5565b9091555050601c54601d5461266f908361329c565b61267991906132b3565b6021600082825461268a91906132d5565b9091555050601c54601f5461269f908361329c565b6126a991906132b3565b602360008282546126ba91906132d5565b9091555050601c546020546125bd908361329c565b6001600160a01b03871660009081526027602052604090205460ff1680156126f957506000601754115b156127dc5760646017548661270e919061329c565b61271891906132b3565b90506017546019548261272b919061329c565b61273591906132b3565b6022600082825461274691906132d5565b909155505060175460185461275b908361329c565b61276591906132b3565b6021600082825461277691906132d5565b9091555050601754601a5461278b908361329c565b61279591906132b3565b602360008282546127a691906132d5565b9091555050601754601b546127bb908361329c565b6127c591906132b3565b602460008282546127d691906132d5565b90915550505b80156127ed576127ed873083612b4d565b6127f78186613370565b94505b612805878787612b4d565b50505050505050565b6001600160a01b0382166000908152602760205260409020805460ff19168215151790556113b08282612ca2565b33600090815260256020526040812054819060ff16612906576000602454118015612871575060245461286e3061112b565b10155b156128825761288233602454612d05565b50600060248190556001906128963061112b565b905060006023546021546022546128ad91906132d5565b6128b791906132d5565b90508115806128c4575080155b156128d55760009350505050610cb8565b600b546128e390600761329c565b8211156128fb57600b546128f890600761329c565b91505b829350505050610cb8565b60006129113061112b565b111561293a578360000361292c57506013829055600061293a565b6129368585612d05565b5060005b60006128963061112b565b6000602454118015612961575060245461295e3061112b565b10155b156129725761297230602454612d05565b600060248190556129823061112b565b9050600060235460215460225461299991906132d5565b6129a391906132d5565b90508115806129b0575080155b156129b9575050565b600b546129c790600961329c565b8211156129df57600b546129dc90600961329c565b91505b6000600282602254856129f2919061329c565b6129fc91906132b3565b612a0691906132b3565b9050612a1a612a158285613370565b612e2f565b60225447908190600090612a30906002906132b3565b612a3a9086613370565b602154612a47908561329c565b612a5191906132b3565b905060006002602254612a6491906132b3565b612a6e9087613370565b602354612a7b908661329c565b612a8591906132b3565b9050612a9181836132d5565b612a9b9084613370565b600060228190556021819055602381905560245592508415801590612ac05750600083115b15612acf57612acf8584612f89565b600d546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612b09573d6000803e3d6000fd5b50600c546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015612b43573d6000803e3d6000fd5b5050505050505050565b6001600160a01b038316612b735760405162461bcd60e51b8152600401610c9c906132e8565b6001600160a01b038216612b995760405162461bcd60e51b8152600401610c9c9061332d565b6001600160a01b03831660009081526020819052604090205481811015612c115760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610c9c565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612c489084906132d5565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612c9491815260200190565b60405180910390a350505050565b6001600160a01b038216600081815260266020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b038216612d655760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610c9c565b6001600160a01b03821660009081526020819052604090205481811015612dd95760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610c9c565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611c71565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612e6457612e646133d8565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612ebd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ee191906133ee565b81600181518110612ef457612ef46133d8565b6001600160a01b039283166020918202929092010152600954612f1a9130911684611b59565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac94790612f5390859060009086903090429060040161340b565b600060405180830381600087803b158015612f6d57600080fd5b505af1158015612f81573d6000803e3d6000fd5b505050505050565b600954612fa19030906001600160a01b031684611b59565b60095460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af115801561300f573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613034919061347c565b5050505050565b600060208083528351808285015260005b818110156130685785810183015185820160400152820161304c565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461309e57600080fd5b50565b600080604083850312156130b457600080fd5b82356130bf81613089565b946020939093013593505050565b6000806000606084860312156130e257600080fd5b83356130ed81613089565b925060208401356130fd81613089565b929592945050506040919091013590565b60006020828403121561312057600080fd5b8135610cb881613089565b60006020828403121561313d57600080fd5b5035919050565b6000806000806080858703121561315a57600080fd5b5050823594602084013594506040840135936060013592509050565b6000806040838503121561318957600080fd5b823561319481613089565b9150602083013580151581146131a957600080fd5b809150509250929050565b6000806000606084860312156131c957600080fd5b83356131d481613089565b95602085013595506040909401359392505050565b600080604083850312156131fc57600080fd5b823561320781613089565b915060208301356131a981613089565b600181811c9082168061322b57607f821691505b60208210810361324b57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610c0857610c08613286565b6000826132d057634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610c0857610c08613286565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610c0857610c08613286565b60208082526035908201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60408201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561340057600080fd5b8151610cb881613089565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561345b5784516001600160a01b031683529383019391830191600101613436565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561349157600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212208e5dcfc56e1efc1d724cc9492bec421f78e64827bf3a1160e261bfbd50aff6d064736f6c634300081200334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x6080604052600436106103d25760003560e01c80638da5cb5b116101fd578063c024666811610118578063dd62ed3e116100ab578063e7ad9fcd1161007a578063e7ad9fcd14610ae4578063e884f26014610b04578063f11a24d314610b19578063f2fde38b14610b2f578063f637434214610b4f57600080fd5b8063dd62ed3e14610a5c578063e2f4560514610aa2578063e611bfdb14610ab8578063e71dc3f514610ace57600080fd5b8063cd51e6d4116100e7578063cd51e6d4146109f0578063d257b34f14610a06578063d85ba06314610a26578063dc3f0d0f14610a3c57600080fd5b8063c024666814610976578063c18bc19514610996578063c5b45ec0146109b6578063c876d0b9146109d657600080fd5b8063a5ece94111610190578063adb873bd1161015f578063adb873bd146108f1578063b62496f514610907578063bbb0ad3f14610937578063bbc0c7421461095757600080fd5b8063a5ece94114610884578063a9059cbb146108a4578063aa4bde28146108c4578063abe43b1b146108da57600080fd5b80639c3b4fdc116101cc5780639c3b4fdc146108225780639fccce3214610838578063a0d82dc51461084e578063a457c2d71461086457600080fd5b80638da5cb5b146107b957806392136913146107d757806395d89b41146107ed5780639a7a23d61461080257600080fd5b80634049a286116102ed57806370a08231116102805780637bce5a041161024f5780637bce5a041461073d578063808a545714610753578063882c3d981461077357806388e765ff146107a357600080fd5b806370a08231146106d3578063715018a6146106f3578063751039fc146107085780637571336a1461071d57600080fd5b806366d602ae116102bc57806366d602ae146106715780636a486a8e146106875780636b0a894c1461069d5780636ddd1713146106b357600080fd5b80634049a286146105e75780634a62bb651461060757806359d24b8e146106215780636220a12f1461065157600080fd5b8063246eccff11610365578063313ce56711610334578063313ce5671461057657806339509351146105925780633ad10ef6146105b25780633dd5b2da146105d257600080fd5b8063246eccff146104f2578063293230b81461051f5780632be32b61146105365780632e6ed7ef1461055657600080fd5b80631a8145bb116103a15780631a8145bb146104905780631d777856146104a65780631f3fed8f146104bc57806323b872dd146104d257600080fd5b806306fdde03146103de5780630758d92414610409578063095ea7b31461044157806318160ddd1461047157600080fd5b366103d957005b600080fd5b3480156103ea57600080fd5b506103f3610b65565b604051610400919061303b565b60405180910390f35b34801561041557600080fd5b50600954610429906001600160a01b031681565b6040516001600160a01b039091168152602001610400565b34801561044d57600080fd5b5061046161045c3660046130a1565b610bf7565b6040519015158152602001610400565b34801561047d57600080fd5b506002545b604051908152602001610400565b34801561049c57600080fd5b5061048260225481565b3480156104b257600080fd5b5061048260245481565b3480156104c857600080fd5b5061048260215481565b3480156104de57600080fd5b506104616104ed3660046130cd565b610c0e565b3480156104fe57600080fd5b5061048261050d36600461310e565b60116020526000908152604090205481565b34801561052b57600080fd5b50610534610cbf565b005b34801561054257600080fd5b5061053461055136600461312b565b610d81565b34801561056257600080fd5b50610534610571366004613144565b610e8e565b34801561058257600080fd5b5060405160128152602001610400565b34801561059e57600080fd5b506104616105ad3660046130a1565b610f31565b3480156105be57600080fd5b50600d54610429906001600160a01b031681565b3480156105de57600080fd5b50610534610f6d565b3480156105f357600080fd5b5061053461060236600461310e565b610fd9565b34801561061357600080fd5b506014546104619060ff1681565b34801561062d57600080fd5b5061046161063c36600461310e565b60106020526000908152604090205460ff1681565b34801561065d57600080fd5b5061053461066c36600461310e565b61107b565b34801561067d57600080fd5b5061048260075481565b34801561069357600080fd5b50610482601c5481565b3480156106a957600080fd5b5061048260125481565b3480156106bf57600080fd5b506014546104619062010000900460ff1681565b3480156106df57600080fd5b506104826106ee36600461310e565b61112b565b3480156106ff57600080fd5b50610534611146565b34801561071457600080fd5b506105346111ba565b34801561072957600080fd5b50610534610738366004613176565b611221565b34801561074957600080fd5b5061048260185481565b34801561075f57600080fd5b50600a54610429906001600160a01b031681565b34801561077f57600080fd5b5061046161078e36600461310e565b60266020526000908152604090205460ff1681565b3480156107af57600080fd5b5061048260065481565b3480156107c557600080fd5b506005546001600160a01b0316610429565b3480156107e357600080fd5b50610482601d5481565b3480156107f957600080fd5b506103f36112e9565b34801561080e57600080fd5b5061053461081d366004613176565b6112f8565b34801561082e57600080fd5b50610482601a5481565b34801561084457600080fd5b5061048260235481565b34801561085a57600080fd5b50610482601f5481565b34801561087057600080fd5b5061046161087f3660046130a1565b6113ec565b34801561089057600080fd5b50600c54610429906001600160a01b031681565b3480156108b057600080fd5b506104616108bf3660046130a1565b611485565b3480156108d057600080fd5b5061048260085481565b3480156108e657600080fd5b50600f544310610461565b3480156108fd57600080fd5b5061048260205481565b34801561091357600080fd5b5061046161092236600461310e565b60276020526000908152604090205460ff1681565b34801561094357600080fd5b506105346109523660046131b4565b611492565b34801561096357600080fd5b5060145461046190610100900460ff1681565b34801561098257600080fd5b50610534610991366004613176565b611569565b3480156109a257600080fd5b506105346109b136600461312b565b6115f2565b3480156109c257600080fd5b506105346109d136600461310e565b6116fb565b3480156109e257600080fd5b506016546104619060ff1681565b3480156109fc57600080fd5b50610482600e5481565b348015610a1257600080fd5b50610534610a2136600461312b565b611746565b348015610a3257600080fd5b5061048260175481565b348015610a4857600080fd5b50610534610a5736600461312b565b611891565b348015610a6857600080fd5b50610482610a773660046131e9565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610aae57600080fd5b50610482600b5481565b348015610ac457600080fd5b50610482600f5481565b348015610ada57600080fd5b50610482601b5481565b348015610af057600080fd5b50610534610aff366004613144565b611998565b348015610b1057600080fd5b50610534611a38565b348015610b2557600080fd5b5061048260195481565b348015610b3b57600080fd5b50610534610b4a36600461310e565b611a6e565b348015610b5b57600080fd5b50610482601e5481565b606060038054610b7490613217565b80601f0160208091040260200160405190810160405280929190818152602001828054610ba090613217565b8015610bed5780601f10610bc257610100808354040283529160200191610bed565b820191906000526020600020905b815481529060010190602001808311610bd057829003601f168201915b5050505050905090565b6000610c04338484611b59565b5060015b92915050565b6000610c1b848484611c7e565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610ca55760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b610cb28533858403611b59565b60019150505b9392505050565b6005546001600160a01b03163314610ce95760405162461bcd60e51b8152600401610c9c90613251565b601454610100900460ff1615610d415760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610c9c565b6014805462ffff0019166201010017905543600e556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1565b6005546001600160a01b03163314610dab5760405162461bcd60e51b8152600401610c9c90613251565b670de0b6b3a76400006103e8610dc060025490565b610dcb90600261329c565b610dd591906132b3565b610ddf91906132b3565b811015610e405760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e322560b81b6064820152608401610c9c565b610e5281670de0b6b3a764000061329c565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b6005546001600160a01b03163314610eb85760405162461bcd60e51b8152600401610c9c90613251565b60188490556019839055601a829055601b8190558082610ed885876132d5565b610ee291906132d5565b610eec91906132d5565b601781905560031015610f2b5760405162461bcd60e51b8152602060048201526007602482015266019929036b0bc160cd1b6044820152606401610c9c565b50505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610c04918590610f689086906132d5565b611b59565b6005546001600160a01b03163314610f975760405162461bcd60e51b8152600401610c9c90613251565b604051600090339047908381818185875af1925050503d8060008114610f2b576040519150601f19603f3d011682016040523d82523d6000602084013e610f2b565b6005546001600160a01b031633146110035760405162461bcd60e51b8152600401610c9c90613251565b6001600160a01b0381166110595760405162461bcd60e51b815260206004820152601f60248201527f5f6465764164647265737320616464726573732063616e6e6f742062652030006044820152606401610c9c565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146110a55760405162461bcd60e51b8152600401610c9c90613251565b6001600160a01b0381166111095760405162461bcd60e51b815260206004820152602560248201527f5f6d61726b6574696e674164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610c9c565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b031633146111705760405162461bcd60e51b8152600401610c9c90613251565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146111e45760405162461bcd60e51b8152600401610c9c90613251565b6002546006556002546007556002546008556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b0316331461124b5760405162461bcd60e51b8152600401610c9c90613251565b806112be57600a546001600160a01b03908116908316036112be5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610c9c565b6001600160a01b03919091166000908152602660205260409020805460ff1916911515919091179055565b606060048054610b7490613217565b6005546001600160a01b031633146113225760405162461bcd60e51b8152600401610c9c90613251565b600a546001600160a01b03908116908316036113a65760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610c9c565b6113b0828261280e565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b03861684529091528120548281101561146e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c9c565b61147b3385858403611b59565b5060019392505050565b6000610c04338484611c7e565b600b5461149e3061112b565b10156114f85760405162461bcd60e51b8152602060048201526024808201527f6d757374206265206f766572207468616e2073776170546f6b656e734174416d6044820152631bdd5b9d60e21b6064820152608401610c9c565b61150383838361283c565b1561156457600a805460ff60a01b1916600160a01b179055611523612945565b600a805460ff60a01b191690556040514281527f33078b6055020cda124818ab12f5c776f0307fbb4c6b2f62b232a83d8ae9838a9060200160405180910390a15b505050565b6005546001600160a01b031633146115935760405162461bcd60e51b8152600401610c9c90613251565b6001600160a01b038216600081815260256020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b0316331461161c5760405162461bcd60e51b8152600401610c9c90613251565b670de0b6b3a76400006103e861163160025490565b61163c90600361329c565b61164691906132b3565b61165091906132b3565b8110156116b45760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e332560a01b6064820152608401610c9c565b6116c681670de0b6b3a764000061329c565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001610e83565b6005546001600160a01b031633146117255760405162461bcd60e51b8152600401610c9c90613251565b6001600160a01b03166000908152601060205260409020805460ff19169055565b6005546001600160a01b031633146117705760405162461bcd60e51b8152600401610c9c90613251565b620186a061177d60025490565b61178890600161329c565b61179291906132b3565b8110156117ff5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610c9c565b6103e861180b60025490565b61181690600161329c565b61182091906132b3565b81111561188c5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610c9c565b600b55565b6005546001600160a01b031633146118bb5760405162461bcd60e51b8152600401610c9c90613251565b670de0b6b3a76400006103e86118d060025490565b6118db90600261329c565b6118e591906132b3565b6118ef91906132b3565b8110156119515760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e322560b01b6064820152608401610c9c565b61196381670de0b6b3a764000061329c565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610e83565b6005546001600160a01b031633146119c25760405162461bcd60e51b8152600401610c9c90613251565b601d849055601e839055601f829055602081905580826119e285876132d5565b6119ec91906132d5565b6119f691906132d5565b601c81905560031015610f2b5760405162461bcd60e51b815260206004820152600a6024820152693325206d61782066656560b01b6044820152606401610c9c565b6005546001600160a01b03163314611a625760405162461bcd60e51b8152600401610c9c90613251565b6016805460ff19169055565b6005546001600160a01b03163314611a985760405162461bcd60e51b8152600401610c9c90613251565b6001600160a01b038116611afd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c9c565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316611bbb5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c9c565b6001600160a01b038216611c1c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c9c565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611ca45760405162461bcd60e51b8152600401610c9c906132e8565b6001600160a01b038216611cca5760405162461bcd60e51b8152600401610c9c9061332d565b60008111611d1a5760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610c9c565b601454610100900460ff16611dad576001600160a01b03831660009081526025602052604090205460ff1680611d6857506001600160a01b03821660009081526025602052604090205460ff165b611dad5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610c9c565b600f5415611e57576001600160a01b03831660009081526010602052604090205460ff161580611dea57506005546001600160a01b038381169116145b80611dff57506001600160a01b03821661dead145b611e575760405162461bcd60e51b815260206004820152602360248201527f626f742070726f74656374696f6e206d656368616e69736d20697320656d626560448201526219195960ea1b6064820152608401610c9c565b60145460ff1615612268576005546001600160a01b03848116911614801590611e8e57506005546001600160a01b03838116911614155b8015611ea257506001600160a01b03821615155b8015611eb957506001600160a01b03821661dead14155b8015611ede57506001600160a01b03831660009081526025602052604090205460ff16155b8015611f0357506001600160a01b03821660009081526025602052604090205460ff16155b156120435760165460ff1615612043576009546001600160a01b03838116911614801590611f3f5750600a546001600160a01b03838116911614155b15611fd257611f4f600243613370565b32600090815260156020526040902054108015611f8d5750611f72600243613370565b6001600160a01b038316600090815260156020526040902054105b611fa95760405162461bcd60e51b8152600401610c9c90613383565b3260009081526015602052604080822043908190556001600160a01b0385168352912055612043565b600a54600160a01b900460ff1615801561200557506001600160a01b03831660009081526027602052604090205460ff16155b15612043576013546001600160a01b038416600090815260116020526040902054116120435760405162461bcd60e51b8152600401610c9c90613383565b6001600160a01b03831660009081526027602052604090205460ff16801561208457506001600160a01b03821660009081526026602052604090205460ff16155b15612155576006548111156120ec5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610c9c565b6008546120f88361112b565b61210290836132d5565b11156121505760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420457863656564206d61782077616c6c657400000000000000006044820152606401610c9c565b612268565b6001600160a01b03821660009081526027602052604090205460ff16801561219657506001600160a01b03831660009081526026602052604090205460ff16155b15612200576007548111156121505760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610c9c565b6001600160a01b03821660009081526026602052604090205460ff1661222c576008546120f88361112b565b600a54600160a01b900460ff1615801561225e57506001600160a01b03831660009081526026602052604090205460ff165b1561226857426013555b60006122733061112b565b600b5490915081108015908190612292575060145462010000900460ff165b80156122a85750600a54600160a01b900460ff16155b80156122cd57506001600160a01b03851660009081526027602052604090205460ff16155b80156122f257506001600160a01b03851660009081526025602052604090205460ff16155b801561231757506001600160a01b03841660009081526025602052604090205460ff16155b1561234557600a805460ff60a01b1916600160a01b179055612337612945565b600a805460ff60a01b191690555b6001600160a01b03851660009081526025602052604090205460019060ff168061238757506001600160a01b03851660009081526025602052604090205460ff165b15612390575060005b6001600160a01b03861660009081526027602052604090205460ff1680156123ce57506001600160a01b038516600090815260116020526040902054155b156123ff576123dc8561112b565b6000036123ff576001600160a01b03851660009081526011602052604090204290555b600081156127fa57600f544310801561243057506001600160a01b03871660009081526027602052604090205460ff165b801561245557506001600160a01b03861660009081526027602052604090205460ff16155b801561246357506000601754115b156125e3576001600160a01b03861660009081526010602052604090205460ff16612503576001600160a01b0386166000908152601060205260408120805460ff1916600190811790915560128054919290916124c19084906132d5565b90915550506040516001600160a01b03871681527f3d71e4a70676213519dc777e6e5b0ac4d021b9d144b673b89d0df519a879a83e9060200160405180910390a15b606461251086606361329c565b61251a91906132b3565b90506017546019548261252d919061329c565b61253791906132b3565b6022600082825461254891906132d5565b909155505060175460185461255d908361329c565b61256791906132b3565b6021600082825461257891906132d5565b9091555050601754601a5461258d908361329c565b61259791906132b3565b602360008282546125a891906132d5565b9091555050601754601b546125bd908361329c565b6125c791906132b3565b602460008282546125d891906132d5565b909155506127dc9050565b6001600160a01b03861660009081526027602052604090205460ff16801561260d57506000601c54115b156126cf576064601c5486612622919061329c565b61262c91906132b3565b9050601c54601e548261263f919061329c565b61264991906132b3565b6022600082825461265a91906132d5565b9091555050601c54601d5461266f908361329c565b61267991906132b3565b6021600082825461268a91906132d5565b9091555050601c54601f5461269f908361329c565b6126a991906132b3565b602360008282546126ba91906132d5565b9091555050601c546020546125bd908361329c565b6001600160a01b03871660009081526027602052604090205460ff1680156126f957506000601754115b156127dc5760646017548661270e919061329c565b61271891906132b3565b90506017546019548261272b919061329c565b61273591906132b3565b6022600082825461274691906132d5565b909155505060175460185461275b908361329c565b61276591906132b3565b6021600082825461277691906132d5565b9091555050601754601a5461278b908361329c565b61279591906132b3565b602360008282546127a691906132d5565b9091555050601754601b546127bb908361329c565b6127c591906132b3565b602460008282546127d691906132d5565b90915550505b80156127ed576127ed873083612b4d565b6127f78186613370565b94505b612805878787612b4d565b50505050505050565b6001600160a01b0382166000908152602760205260409020805460ff19168215151790556113b08282612ca2565b33600090815260256020526040812054819060ff16612906576000602454118015612871575060245461286e3061112b565b10155b156128825761288233602454612d05565b50600060248190556001906128963061112b565b905060006023546021546022546128ad91906132d5565b6128b791906132d5565b90508115806128c4575080155b156128d55760009350505050610cb8565b600b546128e390600761329c565b8211156128fb57600b546128f890600761329c565b91505b829350505050610cb8565b60006129113061112b565b111561293a578360000361292c57506013829055600061293a565b6129368585612d05565b5060005b60006128963061112b565b6000602454118015612961575060245461295e3061112b565b10155b156129725761297230602454612d05565b600060248190556129823061112b565b9050600060235460215460225461299991906132d5565b6129a391906132d5565b90508115806129b0575080155b156129b9575050565b600b546129c790600961329c565b8211156129df57600b546129dc90600961329c565b91505b6000600282602254856129f2919061329c565b6129fc91906132b3565b612a0691906132b3565b9050612a1a612a158285613370565b612e2f565b60225447908190600090612a30906002906132b3565b612a3a9086613370565b602154612a47908561329c565b612a5191906132b3565b905060006002602254612a6491906132b3565b612a6e9087613370565b602354612a7b908661329c565b612a8591906132b3565b9050612a9181836132d5565b612a9b9084613370565b600060228190556021819055602381905560245592508415801590612ac05750600083115b15612acf57612acf8584612f89565b600d546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612b09573d6000803e3d6000fd5b50600c546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015612b43573d6000803e3d6000fd5b5050505050505050565b6001600160a01b038316612b735760405162461bcd60e51b8152600401610c9c906132e8565b6001600160a01b038216612b995760405162461bcd60e51b8152600401610c9c9061332d565b6001600160a01b03831660009081526020819052604090205481811015612c115760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610c9c565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612c489084906132d5565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612c9491815260200190565b60405180910390a350505050565b6001600160a01b038216600081815260266020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b038216612d655760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610c9c565b6001600160a01b03821660009081526020819052604090205481811015612dd95760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610c9c565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611c71565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612e6457612e646133d8565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612ebd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ee191906133ee565b81600181518110612ef457612ef46133d8565b6001600160a01b039283166020918202929092010152600954612f1a9130911684611b59565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac94790612f5390859060009086903090429060040161340b565b600060405180830381600087803b158015612f6d57600080fd5b505af1158015612f81573d6000803e3d6000fd5b505050505050565b600954612fa19030906001600160a01b031684611b59565b60095460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af115801561300f573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613034919061347c565b5050505050565b600060208083528351808285015260005b818110156130685785810183015185820160400152820161304c565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461309e57600080fd5b50565b600080604083850312156130b457600080fd5b82356130bf81613089565b946020939093013593505050565b6000806000606084860312156130e257600080fd5b83356130ed81613089565b925060208401356130fd81613089565b929592945050506040919091013590565b60006020828403121561312057600080fd5b8135610cb881613089565b60006020828403121561313d57600080fd5b5035919050565b6000806000806080858703121561315a57600080fd5b5050823594602084013594506040840135936060013592509050565b6000806040838503121561318957600080fd5b823561319481613089565b9150602083013580151581146131a957600080fd5b809150509250929050565b6000806000606084860312156131c957600080fd5b83356131d481613089565b95602085013595506040909401359392505050565b600080604083850312156131fc57600080fd5b823561320781613089565b915060208301356131a981613089565b600181811c9082168061322b57607f821691505b60208210810361324b57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610c0857610c08613286565b6000826132d057634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610c0857610c08613286565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610c0857610c08613286565b60208082526035908201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60408201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561340057600080fd5b8151610cb881613089565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561345b5784516001600160a01b031683529383019391830191600101613436565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561349157600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212208e5dcfc56e1efc1d724cc9492bec421f78e64827bf3a1160e261bfbd50aff6d064736f6c63430008120033

Deployed Bytecode Sourcemap

8463:20250:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2005:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8613:27;;;;;;;;;;-1:-1:-1;8613:27:0;;;;-1:-1:-1;;;;;8613:27:0;;;;;;-1:-1:-1;;;;;749:32:1;;;731:51;;719:2;704:18;8613:27:0;567:221:1;2985:194:0;;;;;;;;;;-1:-1:-1;2985:194:0;;;;;:::i;:::-;;:::i;:::-;;;1414:14:1;;1407:22;1389:41;;1377:2;1362:18;2985:194:0;1249:187:1;2326:108:0;;;;;;;;;;-1:-1:-1;2414:12:0;;2326:108;;;1587:25:1;;;1575:2;1560:18;2326:108:0;1441:177:1;9688:33:0;;;;;;;;;;;;;;;;9762:28;;;;;;;;;;;;;;;;9648:33;;;;;;;;;;;;;;;;3187:529;;;;;;;;;;-1:-1:-1;3187:529:0;;;;;:::i;:::-;;:::i;8952:42::-;;;;;;;;;;-1:-1:-1;8952:42:0;;;;;:::i;:::-;;;;;;;;;;;;;;12765:242;;;;;;;;;;;;;:::i;:::-;;13449:312;;;;;;;;;;-1:-1:-1;13449:312:0;;;;;:::i;:::-;;:::i;16108:504::-;;;;;;;;;;-1:-1:-1;16108:504:0;;;;;:::i;:::-;;:::i;2225:93::-;;;;;;;;;;-1:-1:-1;2225:93:0;;2308:2;3053:36:1;;3041:2;3026:18;2225:93:0;2911:184:1;3724:290:0;;;;;;;;;;-1:-1:-1;3724:290:0;;;;;:::i;:::-;;:::i;8788:25::-;;;;;;;;;;-1:-1:-1;8788:25:0;;;;-1:-1:-1;;;;;8788:25:0;;;28017:188;;;;;;;;;;;;;:::i;28507:203::-;;;;;;;;;;-1:-1:-1;28507:203:0;;;;;:::i;:::-;;:::i;9062:33::-;;;;;;;;;;-1:-1:-1;9062:33:0;;;;;;;;8898:47;;;;;;;;;;-1:-1:-1;8898:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;28213:286;;;;;;;;;;-1:-1:-1;28213:286:0;;;;;:::i;:::-;;:::i;8539:28::-;;;;;;;;;;;;;;;;9470;;;;;;;;;;;;;;;;9001:25;;;;;;;;;;;;;;;;9142:31;;;;;;;;;;-1:-1:-1;9142:31:0;;;;;;;;;;;2442:143;;;;;;;;;;-1:-1:-1;2442:143:0;;;;;:::i;:::-;;:::i;6991:150::-;;;;;;;;;;;;;:::i;13132:203::-;;;;;;;;;;;;;:::i;15152:328::-;;;;;;;;;;-1:-1:-1;15152:328:0;;;;;:::i;:::-;;:::i;9331:30::-;;;;;;;;;;;;;;;;8647:28;;;;;;;;;;-1:-1:-1;8647:28:0;;;;-1:-1:-1;;;;;8647:28:0;;;9858:48;;;;;;;;;;-1:-1:-1;9858:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;8505:27;;;;;;;;;;;;;;;;6777:79;;;;;;;;;;-1:-1:-1;6842:6:0;;-1:-1:-1;;;;;6842:6:0;6777:79;;9505:31;;;;;;;;;;;;;;;;2113:104;;;;;;;;;;;;;:::i;15488:364::-;;;;;;;;;;-1:-1:-1;15488:364:0;;;;;:::i;:::-;;:::i;9405:24::-;;;;;;;;;;;;;;;;9728:27;;;;;;;;;;;;;;;;9581:25;;;;;;;;;;;;;;;;4022:475;;;;;;;;;;-1:-1:-1;4022:475:0;;;;;:::i;:::-;;:::i;8750:31::-;;;;;;;;;;-1:-1:-1;8750:31:0;;;;-1:-1:-1;;;;;8750:31:0;;;2593:200;;;;;;;;;;-1:-1:-1;2593:200:0;;;;;:::i;:::-;;:::i;8574:30::-;;;;;;;;;;;;;;;;23286:113;;;;;;;;;;-1:-1:-1;23377:14:0;;23362:12;:29;23286:113;;9613:26;;;;;;;;;;;;;;;;9913:57;;;;;;;;;;-1:-1:-1;9913:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;25967:465;;;;;;;;;;-1:-1:-1;25967:465:0;;;;;:::i;:::-;;:::i;9102:33::-;;;;;;;;;;-1:-1:-1;9102:33:0;;;;;;;;;;;17146:182;;;;;;;;;;-1:-1:-1;17146:182:0;;;;;:::i;:::-;;:::i;14094:327::-;;;;;;;;;;-1:-1:-1;14094:327:0;;;;;:::i;:::-;;:::i;13015:109::-;;;;;;;;;;-1:-1:-1;13015:109:0;;;;;:::i;:::-;;:::i;9251:39::-;;;;;;;;;;-1:-1:-1;9251:39:0;;;;;;;;8820:31;;;;;;;;;;;;;;;;14491:428;;;;;;;;;;-1:-1:-1;14491:428:0;;;;;:::i;:::-;;:::i;9297:27::-;;;;;;;;;;;;;;;;13769:317;;;;;;;;;;-1:-1:-1;13769:317:0;;;;;:::i;:::-;;:::i;2801:176::-;;;;;;;;;;-1:-1:-1;2801:176:0;;;;;:::i;:::-;-1:-1:-1;;;;;2942:18:0;;;2915:7;2942:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;2801:176;8710:33;;;;;;;;;;;;;;;;8858;;;;;;;;;;;;;;;;9436:25;;;;;;;;;;;;;;;;16620:518;;;;;;;;;;-1:-1:-1;16620:518:0;;;;;:::i;:::-;;:::i;13343:98::-;;;;;;;;;;;;;:::i;9368:30::-;;;;;;;;;;;;;;;;7149:281;;;;;;;;;;-1:-1:-1;7149:281:0;;;;;:::i;:::-;;:::i;9543:31::-;;;;;;;;;;;;;;;;2005:100;2059:13;2092:5;2085:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2005:100;:::o;2985:194::-;3093:4;3110:39;420:10;3133:7;3142:6;3110:8;:39::i;:::-;-1:-1:-1;3167:4:0;2985:194;;;;;:::o;3187:529::-;3327:4;3344:36;3354:6;3362:9;3373:6;3344:9;:36::i;:::-;-1:-1:-1;;;;;3420:19:0;;3393:24;3420:19;;;:11;:19;;;;;;;;420:10;3420:33;;;;;;;;3486:26;;;;3464:116;;;;-1:-1:-1;;;3464:116:0;;5097:2:1;3464:116:0;;;5079:21:1;5136:2;5116:18;;;5109:30;5175:34;5155:18;;;5148:62;-1:-1:-1;;;5226:18:1;;;5219:38;5274:19;;3464:116:0;;;;;;;;;3616:57;3625:6;420:10;3666:6;3647:16;:25;3616:8;:57::i;:::-;3704:4;3697:11;;;3187:529;;;;;;:::o;12765:242::-;6904:6;;-1:-1:-1;;;;;6904:6:0;420:10;6904:22;6896:67;;;;-1:-1:-1;;;6896:67:0;;;;;;;:::i;:::-;12828:13:::1;::::0;::::1;::::0;::::1;;;12827:14;12819:50;;;::::0;-1:-1:-1;;;12819:50:0;;5867:2:1;12819:50:0::1;::::0;::::1;5849:21:1::0;5906:2;5886:18;;;5879:30;5945:25;5925:18;;;5918:53;5988:18;;12819:50:0::1;5665:347:1::0;12819:50:0::1;12880:13;:20:::0;;-1:-1:-1;;12911:18:0;;;;;12955:12:::1;12940;:27:::0;12983:16:::1;::::0;::::1;::::0;-1:-1:-1;;12983:16:0::1;12765:242::o:0;13449:312::-;6904:6;;-1:-1:-1;;;;;6904:6:0;420:10;6904:22;6896:67;;;;-1:-1:-1;;;6896:67:0;;;;;;;:::i;:::-;13586:4:::1;13578;13557:13;2414:12:::0;;;2326:108;13557:13:::1;:17;::::0;13573:1:::1;13557:17;:::i;:::-;13556:26;;;;:::i;:::-;13555:35;;;;:::i;:::-;13545:6;:45;;13523:136;;;::::0;-1:-1:-1;;;13523:136:0;;6746:2:1;13523:136:0::1;::::0;::::1;6728:21:1::0;6785:2;6765:18;;;6758:30;6824:34;6804:18;;;6797:62;-1:-1:-1;;;6875:18:1;;;6868:39;6924:19;;13523:136:0::1;6544:405:1::0;13523:136:0::1;13685:19;:6:::0;13695:8:::1;13685:19;:::i;:::-;13670:12;:34:::0;;;13720:33:::1;::::0;1587:25:1;;;13720:33:0::1;::::0;1575:2:1;1560:18;13720:33:0::1;;;;;;;;13449:312:::0;:::o;16108:504::-;6904:6;;-1:-1:-1;;;;;6904:6:0;420:10;6904:22;6896:67;;;;-1:-1:-1;;;6896:67:0;;;;;;;:::i;:::-;16285:15:::1;:31:::0;;;16327:15:::1;:31:::0;;;16369:9:::1;:19:::0;;;16399:10:::1;:21:::0;;;16412:8;16381:7;16459:46:::1;16345:13:::0;16303;16459:46:::1;:::i;:::-;:71;;;;:::i;:::-;:97;;;;:::i;:::-;16431:12;:125:::0;;;16591:1:::1;-1:-1:-1::0;16575:17:0::1;16567:37;;;::::0;-1:-1:-1;;;16567:37:0;;7286:2:1;16567:37:0::1;::::0;::::1;7268:21:1::0;7325:1;7305:18;;;7298:29;-1:-1:-1;;;7343:18:1;;;7336:37;7390:18;;16567:37:0::1;7084:330:1::0;16567:37:0::1;16108:504:::0;;;;:::o;3724:290::-;420:10;3837:4;3926:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;3926:34:0;;;;;;;;;;3837:4;;3854:130;;3904:7;;3926:47;;3963:10;;3926:47;:::i;:::-;3854:8;:130::i;28017:188::-;6904:6;;-1:-1:-1;;;;;6904:6:0;420:10;6904:22;6896:67;;;;-1:-1:-1;;;6896:67:0;;;;;;;:::i;:::-;28115:82:::1;::::0;28078:12:::1;::::0;28123:10:::1;::::0;28147:21:::1;::::0;28078:12;28115:82;28078:12;28115:82;28147:21;28123:10;28115:82:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28507:203:::0;6904:6;;-1:-1:-1;;;;;6904:6:0;420:10;6904:22;6896:67;;;;-1:-1:-1;;;6896:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28597:25:0;::::1;28589:69;;;::::0;-1:-1:-1;;;28589:69:0;;7831:2:1;28589:69:0::1;::::0;::::1;7813:21:1::0;7870:2;7850:18;;;7843:30;7909:33;7889:18;;;7882:61;7960:18;;28589:69:0::1;7629:355:1::0;28589:69:0::1;28669:10;:33:::0;;-1:-1:-1;;;;;;28669:33:0::1;-1:-1:-1::0;;;;;28669:33:0;;;::::1;::::0;;;::::1;::::0;;28507:203::o;28213:286::-;6904:6;;-1:-1:-1;;;;;6904:6:0;420:10;6904:22;6896:67;;;;-1:-1:-1;;;6896:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28339:31:0;::::1;28317:118;;;::::0;-1:-1:-1;;;28317:118:0;;8191:2:1;28317:118:0::1;::::0;::::1;8173:21:1::0;8230:2;8210:18;;;8203:30;8269:34;8249:18;;;8242:62;-1:-1:-1;;;8320:18:1;;;8313:35;8365:19;;28317:118:0::1;7989:401:1::0;28317:118:0::1;28446:16;:45:::0;;-1:-1:-1;;;;;;28446:45:0::1;-1:-1:-1::0;;;;;28446:45:0;;;::::1;::::0;;;::::1;::::0;;28213:286::o;2442:143::-;-1:-1:-1;;;;;2559:18:0;2532:7;2559:18;;;;;;;;;;;;2442:143::o;6991:150::-;6904:6;;-1:-1:-1;;;;;6904:6:0;420:10;6904:22;6896:67;;;;-1:-1:-1;;;6896:67:0;;;;;;;:::i;:::-;7084:6:::1;::::0;7063:40:::1;::::0;7100:1:::1;::::0;-1:-1:-1;;;;;7084:6:0::1;::::0;7063:40:::1;::::0;7100:1;;7063:40:::1;7114:6;:19:::0;;-1:-1:-1;;;;;;7114:19:0::1;::::0;;6991:150::o;13132:203::-;6904:6;;-1:-1:-1;;;;;6904:6:0;420:10;6904:22;6896:67;;;;-1:-1:-1;;;6896:67:0;;;;;;;:::i;:::-;2414:12;;13186::::1;:28:::0;2414:12;;13225:13:::1;:29:::0;2414:12;;13265:15:::1;:31:::0;13312:15:::1;::::0;::::1;::::0;;;::::1;13132:203::o:0;15152:328::-;6904:6;;-1:-1:-1;;;;;6904:6:0;420:10;6904:22;6896:67;;;;-1:-1:-1;;;6896:67:0;;;;;;;:::i;:::-;15274:4:::1;15269:162;;15331:13;::::0;-1:-1:-1;;;;;15331:13:0;;::::1;15321:23:::0;;::::1;::::0;15295:124:::1;;;::::0;-1:-1:-1;;;15295:124:0;;8597:2:1;15295:124:0::1;::::0;::::1;8579:21:1::0;8636:2;8616:18;;;8609:30;8675:34;8655:18;;;8648:62;-1:-1:-1;;;8726:18:1;;;8719:37;8773:19;;15295:124:0::1;8395:403:1::0;15295:124:0::1;-1:-1:-1::0;;;;;15441:24:0;;;::::1;;::::0;;;:16:::1;:24;::::0;;;;:31;;-1:-1:-1;;15441:31:0::1;::::0;::::1;;::::0;;;::::1;::::0;;15152:328::o;2113:104::-;2169:13;2202:7;2195:14;;;;;:::i;15488:364::-;6904:6;;-1:-1:-1;;;;;6904:6:0;420:10;6904:22;6896:67;;;;-1:-1:-1;;;6896:67:0;;;;;;;:::i;:::-;15636:13:::1;::::0;-1:-1:-1;;;;;15636:13:0;;::::1;15628:21:::0;;::::1;::::0;15606:128:::1;;;::::0;-1:-1:-1;;;15606:128:0;;9005:2:1;15606:128:0::1;::::0;::::1;8987:21:1::0;9044:2;9024:18;;;9017:30;9083:34;9063:18;;;9056:62;9154:27;9134:18;;;9127:55;9199:19;;15606:128:0::1;8803:421:1::0;15606:128:0::1;15747:41;15776:4;15782:5;15747:28;:41::i;:::-;15804:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;15804:40:0;::::1;::::0;::::1;::::0;;;::::1;15488:364:::0;;:::o;4022:475::-;420:10;4140:4;4184:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;4184:34:0;;;;;;;;;;4251:35;;;;4229:122;;;;-1:-1:-1;;;4229:122:0;;9431:2:1;4229:122:0;;;9413:21:1;9470:2;9450:18;;;9443:30;9509:34;9489:18;;;9482:62;-1:-1:-1;;;9560:18:1;;;9553:35;9605:19;;4229:122:0;9229:401:1;4229:122:0;4387:67;420:10;4410:7;4438:15;4419:16;:34;4387:8;:67::i;:::-;-1:-1:-1;4485:4:0;;4022:475;-1:-1:-1;;;4022:475:0:o;2593:200::-;2704:4;2721:42;420:10;2745:9;2756:6;2721:9;:42::i;25967:465::-;26146:18;;26118:24;26136:4;26118:9;:24::i;:::-;:46;;26096:132;;;;-1:-1:-1;;;26096:132:0;;9837:2:1;26096:132:0;;;9819:21:1;9876:2;9856:18;;;9849:30;9915:34;9895:18;;;9888:62;-1:-1:-1;;;9966:18:1;;;9959:34;10010:19;;26096:132:0;9635:400:1;26096:132:0;26243:35;26256:4;26262:5;26269:8;26243:12;:35::i;:::-;26239:186;;;26295:8;:15;;-1:-1:-1;;;;26295:15:0;-1:-1:-1;;;26295:15:0;;;26325:10;:8;:10::i;:::-;26350:8;:16;;-1:-1:-1;;;;26350:16:0;;;26386:27;;26397:15;1587:25:1;;26386:27:0;;1575:2:1;1560:18;26386:27:0;;;;;;;26239:186;25967:465;;;:::o;17146:182::-;6904:6;;-1:-1:-1;;;;;6904:6:0;420:10;6904:22;6896:67;;;;-1:-1:-1;;;6896:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17231:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;17231:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;17286:34;;1389:41:1;;;17286:34:0::1;::::0;1362:18:1;17286:34:0::1;;;;;;;17146:182:::0;;:::o;14094:327::-;6904:6;;-1:-1:-1;;;;;6904:6:0;420:10;6904:22;6896:67;;;;-1:-1:-1;;;6896:67:0;;;;;;;:::i;:::-;14234:4:::1;14226;14205:13;2414:12:::0;;;2326:108;14205:13:::1;:17;::::0;14221:1:::1;14205:17;:::i;:::-;14204:26;;;;:::i;:::-;14203:35;;;;:::i;:::-;14193:6;:45;;14171:139;;;::::0;-1:-1:-1;;;14171:139:0;;10242:2:1;14171:139:0::1;::::0;::::1;10224:21:1::0;10281:2;10261:18;;;10254:30;10320:34;10300:18;;;10293:62;-1:-1:-1;;;10371:18:1;;;10364:42;10423:19;;14171:139:0::1;10040:408:1::0;14171:139:0::1;14339:19;:6:::0;14349:8:::1;14339:19;:::i;:::-;14321:15;:37:::0;;;14374:39:::1;::::0;1587:25:1;;;14374:39:0::1;::::0;1575:2:1;1560:18;14374:39:0::1;1441:177:1::0;13015:109:0;6904:6;;-1:-1:-1;;;;;6904:6:0;420:10;6904:22;6896:67;;;;-1:-1:-1;;;6896:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13085:23:0::1;13111:5;13085:23:::0;;;:15:::1;:23;::::0;;;;:31;;-1:-1:-1;;13085:31:0::1;::::0;;13015:109::o;14491:428::-;6904:6;;-1:-1:-1;;;;;6904:6:0;420:10;6904:22;6896:67;;;;-1:-1:-1;;;6896:67:0;;;;;;;:::i;:::-;14631:6:::1;14610:13;2414:12:::0;;;2326:108;14610:13:::1;:17;::::0;14626:1:::1;14610:17;:::i;:::-;14609:28;;;;:::i;:::-;14596:9;:41;;14574:144;;;::::0;-1:-1:-1;;;14574:144:0;;10655:2:1;14574:144:0::1;::::0;::::1;10637:21:1::0;10694:2;10674:18;;;10667:30;10733:34;10713:18;;;10706:62;-1:-1:-1;;;10784:18:1;;;10777:51;10845:19;;14574:144:0::1;10453:417:1::0;14574:144:0::1;14786:4;14765:13;2414:12:::0;;;2326:108;14765:13:::1;:17;::::0;14781:1:::1;14765:17;:::i;:::-;14764:26;;;;:::i;:::-;14751:9;:39;;14729:141;;;::::0;-1:-1:-1;;;14729:141:0;;11077:2:1;14729:141:0::1;::::0;::::1;11059:21:1::0;11116:2;11096:18;;;11089:30;11155:34;11135:18;;;11128:62;-1:-1:-1;;;11206:18:1;;;11199:50;11266:19;;14729:141:0::1;10875:416:1::0;14729:141:0::1;14881:18;:30:::0;14491:428::o;13769:317::-;6904:6;;-1:-1:-1;;;;;6904:6:0;420:10;6904:22;6896:67;;;;-1:-1:-1;;;6896:67:0;;;;;;;:::i;:::-;13907:4:::1;13899;13878:13;2414:12:::0;;;2326:108;13878:13:::1;:17;::::0;13894:1:::1;13878:17;:::i;:::-;13877:26;;;;:::i;:::-;13876:35;;;;:::i;:::-;13866:6;:45;;13844:137;;;::::0;-1:-1:-1;;;13844:137:0;;11498:2:1;13844:137:0::1;::::0;::::1;11480:21:1::0;11537:2;11517:18;;;11510:30;11576:34;11556:18;;;11549:62;-1:-1:-1;;;11627:18:1;;;11620:40;11677:19;;13844:137:0::1;11296:406:1::0;13844:137:0::1;14008:19;:6:::0;14018:8:::1;14008:19;:::i;:::-;13992:13;:35:::0;;;14043::::1;::::0;1587:25:1;;;14043:35:0::1;::::0;1575:2:1;1560:18;14043:35:0::1;1441:177:1::0;16620:518:0;6904:6;;-1:-1:-1;;;;;6904:6:0;420:10;6904:22;6896:67;;;;-1:-1:-1;;;6896:67:0;;;;;;;:::i;:::-;16798:16:::1;:32:::0;;;16841:16:::1;:32:::0;;;16884:10:::1;:20:::0;;;16915:11:::1;:22:::0;;;16929:8;16897:7;16977:48:::1;16860:13:::0;16817;16977:48:::1;:::i;:::-;:74;;;;:::i;:::-;:101;;;;:::i;:::-;16948:13;:130:::0;;;17114:1:::1;-1:-1:-1::0;17097:18:0::1;17089:41;;;::::0;-1:-1:-1;;;17089:41:0;;11909:2:1;17089:41:0::1;::::0;::::1;11891:21:1::0;11948:2;11928:18;;;11921:30;-1:-1:-1;;;11967:18:1;;;11960:40;12017:18;;17089:41:0::1;11707:334:1::0;13343:98:0;6904:6;;-1:-1:-1;;;;;6904:6:0;420:10;6904:22;6896:67;;;;-1:-1:-1;;;6896:67:0;;;;;;;:::i;:::-;13405:20:::1;:28:::0;;-1:-1:-1;;13405:28:0::1;::::0;;13343:98::o;7149:281::-;6904:6;;-1:-1:-1;;;;;6904:6:0;420:10;6904:22;6896:67;;;;-1:-1:-1;;;6896:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7252:22:0;::::1;7230:110;;;::::0;-1:-1:-1;;;7230:110:0;;12248:2:1;7230:110:0::1;::::0;::::1;12230:21:1::0;12287:2;12267:18;;;12260:30;12326:34;12306:18;;;12299:62;-1:-1:-1;;;12377:18:1;;;12370:36;12423:19;;7230:110:0::1;12046:402:1::0;7230:110:0::1;7377:6;::::0;7356:38:::1;::::0;-1:-1:-1;;;;;7356:38:0;;::::1;::::0;7377:6:::1;::::0;7356:38:::1;::::0;7377:6:::1;::::0;7356:38:::1;7405:6;:17:::0;;-1:-1:-1;;;;;;7405:17:0::1;-1:-1:-1::0;;;;;7405:17:0;;;::::1;::::0;;;::::1;::::0;;7149:281::o;6046:380::-;-1:-1:-1;;;;;6182:19:0;;6174:68;;;;-1:-1:-1;;;6174:68:0;;12655:2:1;6174:68:0;;;12637:21:1;12694:2;12674:18;;;12667:30;12733:34;12713:18;;;12706:62;-1:-1:-1;;;12784:18:1;;;12777:34;12828:19;;6174:68:0;12453:400:1;6174:68:0;-1:-1:-1;;;;;6261:21:0;;6253:68;;;;-1:-1:-1;;;6253:68:0;;13060:2:1;6253:68:0;;;13042:21:1;13099:2;13079:18;;;13072:30;13138:34;13118:18;;;13111:62;-1:-1:-1;;;13189:18:1;;;13182:32;13231:19;;6253:68:0;12858:398:1;6253:68:0;-1:-1:-1;;;;;6334:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;6386:32;;1587:25:1;;;6386:32:0;;1560:18:1;6386:32:0;;;;;;;;6046:380;;;:::o;17336:5942::-;-1:-1:-1;;;;;17468:18:0;;17460:68;;;;-1:-1:-1;;;17460:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17547:16:0;;17539:64;;;;-1:-1:-1;;;17539:64:0;;;;;;;:::i;:::-;17631:1;17622:6;:10;17614:52;;;;-1:-1:-1;;;17614:52:0;;14273:2:1;17614:52:0;;;14255:21:1;14312:2;14292:18;;;14285:30;14351:31;14331:18;;;14324:59;14400:18;;17614:52:0;14071:353:1;17614:52:0;17684:13;;;;;;;17679:183;;-1:-1:-1;;;;;17740:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;17769:23:0;;;;;;:19;:23;;;;;;;;17740:52;17714:136;;;;-1:-1:-1;;;17714:136:0;;14631:2:1;17714:136:0;;;14613:21:1;14670:2;14650:18;;;14643:30;-1:-1:-1;;;14689:18:1;;;14682:52;14751:18;;17714:136:0;14429:346:1;17714:136:0;17878:14;;:18;17874:254;;-1:-1:-1;;;;;17940:21:0;;;;;;:15;:21;;;;;;;;17939:22;;:60;;-1:-1:-1;6842:6:0;;-1:-1:-1;;;;;17986:13:0;;;6842:6;;17986:13;17939:60;:106;;;-1:-1:-1;;;;;;18024:21:0;;18038:6;18024:21;17939:106;17913:203;;;;-1:-1:-1;;;17913:203:0;;14982:2:1;17913:203:0;;;14964:21:1;15021:2;15001:18;;;14994:30;15060:34;15040:18;;;15033:62;-1:-1:-1;;;15111:18:1;;;15104:33;15154:19;;17913:203:0;14780:399:1;17913:203:0;18144:14;;;;18140:2360;;;6842:6;;-1:-1:-1;;;;;18197:15:0;;;6842:6;;18197:15;;;;:49;;-1:-1:-1;6842:6:0;;-1:-1:-1;;;;;18233:13:0;;;6842:6;;18233:13;;18197:49;:86;;;;-1:-1:-1;;;;;;18267:16:0;;;;18197:86;:128;;;;-1:-1:-1;;;;;;18304:21:0;;18318:6;18304:21;;18197:128;:175;;;;-1:-1:-1;;;;;;18347:25:0;;;;;;:19;:25;;;;;;;;18346:26;18197:175;:220;;;;-1:-1:-1;;;;;;18394:23:0;;;;;;:19;:23;;;;;;;;18393:24;18197:220;18175:1320;;;18456:20;;;;18452:1028;;;18545:9;;-1:-1:-1;;;;;18531:24:0;;;18545:9;;18531:24;;;;:56;;-1:-1:-1;18573:13:0;;-1:-1:-1;;;;;18559:28:0;;;18573:13;;18559:28;;18531:56;18501:960;;;18751:16;18766:1;18751:12;:16;:::i;:::-;18705:9;18676:39;;;;:28;:39;;;;;;:91;:212;;;;-1:-1:-1;18872:16:0;18887:1;18872:12;:16;:::i;:::-;-1:-1:-1;;;;;18804:32:0;;;;;;:28;:32;;;;;;:84;18676:212;18638:363;;;;-1:-1:-1;;;18638:363:0;;;;;;;:::i;:::-;19057:9;19028:39;;;;:28;:39;;;;;;19070:12;19028:54;;;;-1:-1:-1;;;;;19109:32:0;;;;;;:47;18501:960;;;19191:8;;-1:-1:-1;;;19191:8:0;;;;19190:9;:45;;;;-1:-1:-1;;;;;;19204:31:0;;;;;;:25;:31;;;;;;;;19203:32;19190:45;19186:275;;;19318:6;;-1:-1:-1;;;;;19302:13:0;;;;;;:7;:13;;;;;;:22;19264:173;;;;-1:-1:-1;;;19264:173:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19515:31:0;;;;;;:25;:31;;;;;;;;:56;;;;-1:-1:-1;;;;;;19551:20:0;;;;;;:16;:20;;;;;;;;19550:21;19515:56;19511:978;;;19632:12;;19622:6;:22;;19592:136;;;;-1:-1:-1;;;19592:136:0;;15941:2:1;19592:136:0;;;15923:21:1;15980:2;15960:18;;;15953:30;16019:34;15999:18;;;15992:62;-1:-1:-1;;;16070:18:1;;;16063:38;16118:19;;19592:136:0;15739:404:1;19592:136:0;19803:15;;19786:13;19796:2;19786:9;:13::i;:::-;19777:22;;:6;:22;:::i;:::-;:41;;19747:139;;;;-1:-1:-1;;;19747:139:0;;16350:2:1;19747:139:0;;;16332:21:1;16389:2;16369:18;;;16362:30;16428:26;16408:18;;;16401:54;16472:18;;19747:139:0;16148:348:1;19747:139:0;19511:978;;;-1:-1:-1;;;;;19930:29:0;;;;;;:25;:29;;;;;;;;:56;;;;-1:-1:-1;;;;;;19964:22:0;;;;;;:16;:22;;;;;;;;19963:23;19930:56;19908:581;;;20061:13;;20051:6;:23;;20021:139;;;;-1:-1:-1;;;20021:139:0;;16703:2:1;20021:139:0;;;16685:21:1;16742:2;16722:18;;;16715:30;16781:34;16761:18;;;16754:62;-1:-1:-1;;;16832:18:1;;;16825:40;16882:19;;20021:139:0;16501:406:1;19908:581:0;-1:-1:-1;;;;;20187:20:0;;;;;;:16;:20;;;;;;;;20182:307;;20284:15;;20267:13;20277:2;20267:9;:13::i;20182:307::-;20394:8;;-1:-1:-1;;;20394:8:0;;;;20393:9;:35;;;;-1:-1:-1;;;;;;20406:22:0;;;;;;:16;:22;;;;;;;;20393:35;20389:100;;;20458:15;20449:6;:24;20389:100;20512:28;20543:24;20561:4;20543:9;:24::i;:::-;20619:18;;20512:55;;-1:-1:-1;20595:42:0;;;;;;;20668:35;;-1:-1:-1;20692:11:0;;;;;;;20668:35;:61;;;;-1:-1:-1;20721:8:0;;-1:-1:-1;;;20721:8:0;;;;20720:9;20668:61;:110;;;;-1:-1:-1;;;;;;20747:31:0;;;;;;:25;:31;;;;;;;;20746:32;20668:110;:153;;;;-1:-1:-1;;;;;;20796:25:0;;;;;;:19;:25;;;;;;;;20795:26;20668:153;:194;;;;-1:-1:-1;;;;;;20839:23:0;;;;;;:19;:23;;;;;;;;20838:24;20668:194;20650:322;;;20889:8;:15;;-1:-1:-1;;;;20889:15:0;-1:-1:-1;;;20889:15:0;;;20919:10;:8;:10::i;:::-;20944:8;:16;;-1:-1:-1;;;;20944:16:0;;;20650:322;-1:-1:-1;;;;;21020:25:0;;20984:12;21020:25;;;:19;:25;;;;;;20999:4;;21020:25;;;:52;;-1:-1:-1;;;;;;21049:23:0;;;;;;:19;:23;;;;;;;;21020:52;21016:100;;;-1:-1:-1;21099:5:0;21016:100;-1:-1:-1;;;;;21130:31:0;;;;;;:25;:31;;;;;;;;:51;;;;-1:-1:-1;;;;;;21165:11:0;;;;;;:7;:11;;;;;;:16;21130:51;21126:182;;;21204:22;21222:2;21204:9;:22::i;:::-;21230:1;21204:27;21200:97;;-1:-1:-1;;;;;21251:11:0;;;;;;:7;:11;;;;;21265:15;21251:29;;21200:97;21320:12;21353:7;21349:1876;;;23377:14;;23362:12;:29;21399:73;;;;-1:-1:-1;;;;;;21441:31:0;;;;;;:25;:31;;;;;;;;21399:73;:124;;;;-1:-1:-1;;;;;;21494:29:0;;;;;;:25;:29;;;;;;;;21493:30;21399:124;:161;;;;;21559:1;21544:12;;:16;21399:161;21377:1703;;;-1:-1:-1;;;;;21600:19:0;;;;;;:15;:19;;;;;;;;21595:186;;-1:-1:-1;;;;;21644:19:0;;;;;;:15;:19;;;;;:26;;-1:-1:-1;;21644:26:0;21666:4;21644:26;;;;;;21693:10;:15;;21666:4;;21693:10;;:15;;21666:4;;21693:15;:::i;:::-;;;;-1:-1:-1;;21736:25:0;;-1:-1:-1;;;;;749:32:1;;731:51;;21736:25:0;;719:2:1;704:18;21736:25:0;;;;;;;21595:186;21824:3;21809:11;:6;21818:2;21809:11;:::i;:::-;21808:19;;;;:::i;:::-;21801:26;;21895:12;;21876:15;;21869:4;:22;;;;:::i;:::-;21868:39;;;;:::i;:::-;21846:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;21975:12:0;;21956:15;;21949:22;;:4;:22;:::i;:::-;21948:39;;;;:::i;:::-;21926:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;22043:12:0;;22030:9;;22023:16;;:4;:16;:::i;:::-;22022:33;;;;:::i;:::-;22006:12;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;22113:12:0;;22099:10;;22092:17;;:4;:17;:::i;:::-;22091:34;;;;:::i;:::-;22074:13;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;21377:1703:0;;-1:-1:-1;21377:1703:0;;-1:-1:-1;;;;;22185:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;22234:1;22218:13;;:17;22185:50;22181:899;;;22290:3;22273:13;;22264:6;:22;;;;:::i;:::-;22263:30;;;;:::i;:::-;22256:37;;22362:13;;22342:16;;22335:4;:23;;;;:::i;:::-;22334:41;;;;:::i;:::-;22312:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;22444:13:0;;22424:16;;22417:23;;:4;:23;:::i;:::-;22416:41;;;;:::i;:::-;22394:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;22514:13:0;;22500:10;;22493:17;;:4;:17;:::i;:::-;22492:35;;;;:::i;:::-;22476:12;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;;22586:13:0;;22571:11;;22564:18;;:4;:18;:::i;22181:899::-;-1:-1:-1;;;;;22658:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;22708:1;22693:12;;:16;22658:51;22654:426;;;22763:3;22747:12;;22738:6;:21;;;;:::i;:::-;22737:29;;;;:::i;:::-;22730:36;;22834:12;;22815:15;;22808:4;:22;;;;:::i;:::-;22807:39;;;;:::i;:::-;22785:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;22914:12:0;;22895:15;;22888:22;;:4;:22;:::i;:::-;22887:39;;;;:::i;:::-;22865:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;22982:12:0;;22969:9;;22962:16;;:4;:16;:::i;:::-;22961:33;;;;:::i;:::-;22945:12;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;23052:12:0;;23038:10;;23031:17;;:4;:17;:::i;:::-;23030:34;;;;:::i;:::-;23013:13;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;;22654:426:0;23098:8;;23094:91;;23127:42;23143:4;23157;23164;23127:15;:42::i;:::-;23199:14;23209:4;23199:14;;:::i;:::-;;;21349:1876;23237:33;23253:4;23259:2;23263:6;23237:15;:33::i;:::-;17449:5829;;;;17336:5942;;;:::o;15860:240::-;-1:-1:-1;;;;;15943:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;15943:39:0;;;;;;;15995;15943:31;:39;15995:26;:39::i;23408:1725::-;23594:10;23529:4;23574:31;;;:19;:31;;;;;;23529:4;;23574:31;;23569:1557;;23660:1;23644:13;;:17;:62;;;;;23693:13;;23665:24;23683:4;23665:9;:24::i;:::-;:41;;23644:62;23622:167;;;23741:32;23747:10;23759:13;;23741:5;:32::i;:::-;-1:-1:-1;23819:1:0;23803:13;:17;;;23845:4;;23890:24;23908:4;23890:9;:24::i;:::-;23864:50;;23929:25;24033:12;;23995:18;;23957;;:56;;;;:::i;:::-;:88;;;;:::i;:::-;23929:116;-1:-1:-1;24064:20:0;;;:46;;-1:-1:-1;24088:22:0;;24064:46;24060:99;;;24138:5;24131:12;;;;;;;24060:99;24195:18;;:22;;24216:1;24195:22;:::i;:::-;24177:15;:40;24173:121;;;24256:18;;:22;;24277:1;24256:22;:::i;:::-;24238:40;;24173:121;24315:7;24308:14;;;;;;;23569:1557;24386:1;24359:24;24377:4;24359:9;:24::i;:::-;:28;24355:287;;;24412:5;24421:1;24412:10;24408:219;;-1:-1:-1;24447:6:0;:17;;;24497:5;24408:219;;;24551:18;24557:4;24563:5;24551;:18::i;:::-;-1:-1:-1;24602:5:0;24408:219;24656:23;24682:24;24700:4;24682:9;:24::i;26440:1569::-;26499:1;26483:13;;:17;:62;;;;;26532:13;;26504:24;26522:4;26504:9;:24::i;:::-;:41;;26483:62;26479:130;;;26562:35;26576:4;26583:13;;26562:5;:35::i;:::-;26635:1;26619:13;:17;;;26673:24;26691:4;26673:9;:24::i;:::-;26647:50;;26708:25;26804:12;;26770:18;;26736;;:52;;;;:::i;:::-;:80;;;;:::i;:::-;26708:108;-1:-1:-1;26833:20:0;;;:46;;-1:-1:-1;26857:22:0;;26833:46;26829:85;;;26896:7;;26440:1569::o;26829:85::-;26948:18;;:22;;26969:1;26948:22;:::i;:::-;26930:15;:40;26926:113;;;27005:18;;:22;;27026:1;27005:22;:::i;:::-;26987:40;;26926:113;27051:23;27151:1;27131:17;27096:18;;27078:15;:36;;;;:::i;:::-;27077:71;;;;:::i;:::-;:75;;;;:::i;:::-;27051:101;-1:-1:-1;27165:51:0;27182:33;27051:101;27182:15;:33;:::i;:::-;27165:16;:51::i;:::-;27426:18;;27250:21;;;;27229:18;;27426:22;;27447:1;;27426:22;:::i;:::-;27405:44;;:17;:44;:::i;:::-;27369:18;;27356:31;;:10;:31;:::i;:::-;27355:95;;;;:::i;:::-;27329:121;;27461:17;27567:1;27546:18;;:22;;;;:::i;:::-;27525:44;;:17;:44;:::i;:::-;27495:12;;27482:25;;:10;:25;:::i;:::-;27481:89;;;;:::i;:::-;27461:109;-1:-1:-1;27600:27:0;27461:109;27600:15;:27;:::i;:::-;27581:46;;;;:::i;:::-;27659:1;27638:18;:22;;;27671:18;:22;;;27704:12;:16;;;27731:13;:17;27581:46;-1:-1:-1;27765:19:0;;;;;:42;;;27806:1;27788:15;:19;27765:42;27761:121;;;27824:46;27837:15;27854;27824:12;:46::i;:::-;27902:10;;27894:39;;-1:-1:-1;;;;;27902:10:0;;;;27894:39;;;;;27923:9;;27902:10;27894:39;27902:10;27894:39;27923:9;27902:10;27894:39;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27952:16:0;;27944:57;;-1:-1:-1;;;;;27952:16:0;;;;27979:21;27944:57;;;;;27952:16;27944:57;27952:16;27944:57;27979:21;27952:16;27944:57;;;;;;;;;;;;;;;;;;;;;26468:1541;;;;;;;26440:1569::o;4505:651::-;-1:-1:-1;;;;;4645:20:0;;4637:70;;;;-1:-1:-1;;;4637:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;4726:23:0;;4718:71;;;;-1:-1:-1;;;4718:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;4826:17:0;;4802:21;4826:17;;;;;;;;;;;4876:23;;;;4854:111;;;;-1:-1:-1;;;4854:111:0;;17114:2:1;4854:111:0;;;17096:21:1;17153:2;17133:18;;;17126:30;17192:34;17172:18;;;17165:62;-1:-1:-1;;;17243:18:1;;;17236:36;17289:19;;4854:111:0;16912:402:1;4854:111:0;-1:-1:-1;;;;;5001:17:0;;;:9;:17;;;;;;;;;;;5021:22;;;5001:42;;5065:20;;;;;;;;:30;;5037:6;;5001:9;5065:30;;5037:6;;5065:30;:::i;:::-;;;;;;;;5130:9;-1:-1:-1;;;;;5113:35:0;5122:6;-1:-1:-1;;;;;5113:35:0;;5141:6;5113:35;;;;1587:25:1;;1575:2;1560:18;;1441:177;5113:35:0;;;;;;;;4626:530;4505:651;;;:::o;14927:217::-;-1:-1:-1;;;;;15040:24:0;;;;;;:16;:24;;;;;;;;;:37;;-1:-1:-1;;15040:37:0;;;;;;;;;;15093:43;;17487:51:1;;;17554:18;;;17547:50;15093:43:0;;17460:18:1;15093:43:0;;;;;;;14927:217;;:::o;5488:550::-;-1:-1:-1;;;;;5572:21:0;;5564:67;;;;-1:-1:-1;;;5564:67:0;;17810:2:1;5564:67:0;;;17792:21:1;17849:2;17829:18;;;17822:30;17888:34;17868:18;;;17861:62;-1:-1:-1;;;17939:18:1;;;17932:31;17980:19;;5564:67:0;17608:397:1;5564:67:0;-1:-1:-1;;;;;5667:18:0;;5642:22;5667:18;;;;;;;;;;;5704:24;;;;5696:71;;;;-1:-1:-1;;;5696:71:0;;18212:2:1;5696:71:0;;;18194:21:1;18251:2;18231:18;;;18224:30;18290:34;18270:18;;;18263:62;-1:-1:-1;;;18341:18:1;;;18334:32;18383:19;;5696:71:0;18010:398:1;5696:71:0;-1:-1:-1;;;;;5803:18:0;;:9;:18;;;;;;;;;;;5824:23;;;5803:44;;5942:12;:22;;;;;;;5993:37;1587:25:1;;;5803:9:0;;:18;5993:37;;1560:18:1;5993:37:0;1441:177:1;25141:454:0;25231:16;;;25245:1;25231:16;;;;;;;;25207:21;;25231:16;;;;;;;;;;-1:-1:-1;25231:16:0;25207:40;;25276:4;25258;25263:1;25258:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;25258:23:0;;;:7;;;;;;;;;;:23;;;;25302:9;;:16;;;-1:-1:-1;;;25302:16:0;;;;:9;;;;;:14;;:16;;;;;25258:7;;25302:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25292:4;25297:1;25292:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;25292:26:0;;;:7;;;;;;;;;:26;25361:9;;25329:56;;25346:4;;25361:9;25373:11;25329:8;:56::i;:::-;25396:9;;:191;;-1:-1:-1;;;25396:191:0;;-1:-1:-1;;;;;25396:9:0;;;;:60;;:191;;25471:11;;25396:9;;25514:4;;25541;;25561:15;;25396:191;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25196:399;25141:454;:::o;25603:356::-;25716:9;;25684:56;;25701:4;;-1:-1:-1;;;;;25716:9:0;25728:11;25684:8;:56::i;:::-;25751:9;;:200;;-1:-1:-1;;;25751:200:0;;25817:4;25751:200;;;20259:34:1;20309:18;;;20302:34;;;25751:9:0;20352:18:1;;;20345:34;;;20395:18;;;20388:34;25903:6:0;20438:19:1;;;20431:44;25925:15:0;20491:19:1;;;20484:35;-1:-1:-1;;;;;25751:9:0;;;;:25;;25784:9;;20193:19:1;;25751:200:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;25603:356;;:::o;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;793:131::-;-1:-1:-1;;;;;868:31:1;;858:42;;848:70;;914:1;911;904:12;848:70;793:131;:::o;929:315::-;997:6;1005;1058:2;1046:9;1037:7;1033:23;1029:32;1026:52;;;1074:1;1071;1064:12;1026:52;1113:9;1100:23;1132:31;1157:5;1132:31;:::i;:::-;1182:5;1234:2;1219:18;;;;1206:32;;-1:-1:-1;;;929:315:1:o;1623:456::-;1700:6;1708;1716;1769:2;1757:9;1748:7;1744:23;1740:32;1737:52;;;1785:1;1782;1775:12;1737:52;1824:9;1811:23;1843:31;1868:5;1843:31;:::i;:::-;1893:5;-1:-1:-1;1950:2:1;1935:18;;1922:32;1963:33;1922:32;1963:33;:::i;:::-;1623:456;;2015:7;;-1:-1:-1;;;2069:2:1;2054:18;;;;2041:32;;1623:456::o;2084:247::-;2143:6;2196:2;2184:9;2175:7;2171:23;2167:32;2164:52;;;2212:1;2209;2202:12;2164:52;2251:9;2238:23;2270:31;2295:5;2270:31;:::i;2336:180::-;2395:6;2448:2;2436:9;2427:7;2423:23;2419:32;2416:52;;;2464:1;2461;2454:12;2416:52;-1:-1:-1;2487:23:1;;2336:180;-1:-1:-1;2336:180:1:o;2521:385::-;2607:6;2615;2623;2631;2684:3;2672:9;2663:7;2659:23;2655:33;2652:53;;;2701:1;2698;2691:12;2652:53;-1:-1:-1;;2724:23:1;;;2794:2;2779:18;;2766:32;;-1:-1:-1;2845:2:1;2830:18;;2817:32;;2896:2;2881:18;2868:32;;-1:-1:-1;2521:385:1;-1:-1:-1;2521:385:1:o;3308:416::-;3373:6;3381;3434:2;3422:9;3413:7;3409:23;3405:32;3402:52;;;3450:1;3447;3440:12;3402:52;3489:9;3476:23;3508:31;3533:5;3508:31;:::i;:::-;3558:5;-1:-1:-1;3615:2:1;3600:18;;3587:32;3657:15;;3650:23;3638:36;;3628:64;;3688:1;3685;3678:12;3628:64;3711:7;3701:17;;;3308:416;;;;;:::o;3729:383::-;3806:6;3814;3822;3875:2;3863:9;3854:7;3850:23;3846:32;3843:52;;;3891:1;3888;3881:12;3843:52;3930:9;3917:23;3949:31;3974:5;3949:31;:::i;:::-;3999:5;4051:2;4036:18;;4023:32;;-1:-1:-1;4102:2:1;4087:18;;;4074:32;;3729:383;-1:-1:-1;;;3729:383:1:o;4117:388::-;4185:6;4193;4246:2;4234:9;4225:7;4221:23;4217:32;4214:52;;;4262:1;4259;4252:12;4214:52;4301:9;4288:23;4320:31;4345:5;4320:31;:::i;:::-;4370:5;-1:-1:-1;4427:2:1;4412:18;;4399:32;4440:33;4399:32;4440:33;:::i;4510:380::-;4589:1;4585:12;;;;4632;;;4653:61;;4707:4;4699:6;4695:17;4685:27;;4653:61;4760:2;4752:6;4749:14;4729:18;4726:38;4723:161;;4806:10;4801:3;4797:20;4794:1;4787:31;4841:4;4838:1;4831:15;4869:4;4866:1;4859:15;4723:161;;4510:380;;;:::o;5304:356::-;5506:2;5488:21;;;5525:18;;;5518:30;5584:34;5579:2;5564:18;;5557:62;5651:2;5636:18;;5304:356::o;6017:127::-;6078:10;6073:3;6069:20;6066:1;6059:31;6109:4;6106:1;6099:15;6133:4;6130:1;6123:15;6149:168;6222:9;;;6253;;6270:15;;;6264:22;;6250:37;6240:71;;6291:18;;:::i;6322:217::-;6362:1;6388;6378:132;;6432:10;6427:3;6423:20;6420:1;6413:31;6467:4;6464:1;6457:15;6495:4;6492:1;6485:15;6378:132;-1:-1:-1;6524:9:1;;6322:217::o;6954:125::-;7019:9;;;7040:10;;;7037:36;;;7053:18;;:::i;13261:401::-;13463:2;13445:21;;;13502:2;13482:18;;;13475:30;13541:34;13536:2;13521:18;;13514:62;-1:-1:-1;;;13607:2:1;13592:18;;13585:35;13652:3;13637:19;;13261:401::o;13667:399::-;13869:2;13851:21;;;13908:2;13888:18;;;13881:30;13947:34;13942:2;13927:18;;13920:62;-1:-1:-1;;;14013:2:1;13998:18;;13991:33;14056:3;14041:19;;13667:399::o;15184:128::-;15251:9;;;15272:11;;;15269:37;;;15286:18;;:::i;15317:417::-;15519:2;15501:21;;;15558:2;15538:18;;;15531:30;15597:34;15592:2;15577:18;;15570:62;-1:-1:-1;;;15663:2:1;15648:18;;15641:51;15724:3;15709:19;;15317:417::o;18545:127::-;18606:10;18601:3;18597:20;18594:1;18587:31;18637:4;18634:1;18627:15;18661:4;18658:1;18651:15;18677:251;18747:6;18800:2;18788:9;18779:7;18775:23;18771:32;18768:52;;;18816:1;18813;18806:12;18768:52;18848:9;18842:16;18867:31;18892:5;18867:31;:::i;18933:980::-;19195:4;19243:3;19232:9;19228:19;19274:6;19263:9;19256:25;19300:2;19338:6;19333:2;19322:9;19318:18;19311:34;19381:3;19376:2;19365:9;19361:18;19354:31;19405:6;19440;19434:13;19471:6;19463;19456:22;19509:3;19498:9;19494:19;19487:26;;19548:2;19540:6;19536:15;19522:29;;19569:1;19579:195;19593:6;19590:1;19587:13;19579:195;;;19658:13;;-1:-1:-1;;;;;19654:39:1;19642:52;;19749:15;;;;19714:12;;;;19690:1;19608:9;19579:195;;;-1:-1:-1;;;;;;;19830:32:1;;;;19825:2;19810:18;;19803:60;-1:-1:-1;;;19894:3:1;19879:19;19872:35;19791:3;18933:980;-1:-1:-1;;;18933:980:1:o;20530:306::-;20618:6;20626;20634;20687:2;20675:9;20666:7;20662:23;20658:32;20655:52;;;20703:1;20700;20693:12;20655:52;20732:9;20726:16;20716:26;;20782:2;20771:9;20767:18;20761:25;20751:35;;20826:2;20815:9;20811:18;20805:25;20795:35;;20530:306;;;;;:::o

Swarm Source

ipfs://8e5dcfc56e1efc1d724cc9492bec421f78e64827bf3a1160e261bfbd50aff6d0

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.