ETH Price: $3,595.49 (+5.08%)

Contract

0x5F68F6e8Da909e3d1Ed3c1d28553563bADE5BB4a
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve208553332024-09-29 9:15:1159 days ago1727601311IN
0x5F68F6e8...bADE5BB4a
0 ETH0.000364757.88194159
Transfer208254732024-09-25 5:15:5964 days ago1727241359IN
0x5F68F6e8...bADE5BB4a
0 ETH0.0009089313.4
Transfer208254612024-09-25 5:13:3564 days ago1727241215IN
0x5F68F6e8...bADE5BB4a
0 ETH0.0011125913.1
Approve208254532024-09-25 5:11:5964 days ago1727241119IN
0x5F68F6e8...bADE5BB4a
0 ETH0.0005556211.94459098
Approve204929492024-08-09 18:51:35110 days ago1723229495IN
0x5F68F6e8...bADE5BB4a
0 ETH0.000068452.81806736
Approve204662142024-08-06 1:21:59114 days ago1722907319IN
0x5F68F6e8...bADE5BB4a
0 ETH0.000144175.94956033
Approve203489952024-07-20 16:39:59130 days ago1721493599IN
0x5F68F6e8...bADE5BB4a
0 ETH0.000090943.74383281
Approve198087582024-05-06 4:47:35206 days ago1714970855IN
0x5F68F6e8...bADE5BB4a
0 ETH0.00010284.24238481
Approve196916672024-04-19 19:49:11222 days ago1713556151IN
0x5F68F6e8...bADE5BB4a
0 ETH0.000221629.14563027
Approve194184482024-03-12 10:37:47260 days ago1710239867IN
0x5F68F6e8...bADE5BB4a
0 ETH0.0012776752.72448465
Approve193954502024-03-09 5:27:35264 days ago1709962055IN
0x5F68F6e8...bADE5BB4a
0 ETH0.0011003345.40660982
Approve193764662024-03-06 13:35:59266 days ago1709732159IN
0x5F68F6e8...bADE5BB4a
0 ETH0.0017341371.56106091
Transfer193607512024-03-04 8:57:47268 days ago1709542667IN
0x5F68F6e8...bADE5BB4a
0 ETH0.0118206261.7764777
Approve189023732023-12-31 2:05:11333 days ago1703988311IN
0x5F68F6e8...bADE5BB4a
0 ETH0.0002973912.27247698
Approve188735252023-12-27 0:46:23337 days ago1703637983IN
0x5F68F6e8...bADE5BB4a
0 ETH0.0003300213.61885484
Transfer188441242023-12-22 21:41:23341 days ago1703281283IN
0x5F68F6e8...bADE5BB4a
0 ETH0.0014393733.4411592
Withdraw Tax187184422023-12-05 6:45:11359 days ago1701758711IN
0x5F68F6e8...bADE5BB4a
0 ETH0.0012849242.35093306
Approve186197002023-11-21 11:00:23372 days ago1700564423IN
0x5F68F6e8...bADE5BB4a
0 ETH0.0016916736.31991124
Approve185465412023-11-11 5:15:11383 days ago1699679711IN
0x5F68F6e8...bADE5BB4a
0 ETH0.0005231121.58679588
Approve184390842023-10-27 4:13:11398 days ago1698379991IN
0x5F68F6e8...bADE5BB4a
0 ETH0.000749216.0852155
Approve184353572023-10-26 15:43:35398 days ago1698335015IN
0x5F68F6e8...bADE5BB4a
0 ETH0.0018563940.06296603
Approve184343302023-10-26 12:15:23398 days ago1698322523IN
0x5F68F6e8...bADE5BB4a
0 ETH0.0008665618.62891779
Approve184342682023-10-26 12:02:59398 days ago1698321779IN
0x5F68F6e8...bADE5BB4a
0 ETH0.001053222.64123552
Approve184342582023-10-26 12:00:47398 days ago1698321647IN
0x5F68F6e8...bADE5BB4a
0 ETH0.0010009721.66383725
Set Distributor184291722023-10-25 18:56:23399 days ago1698260183IN
0x5F68F6e8...bADE5BB4a
0 ETH0.0104583234.02996696
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
187184422023-12-05 6:45:11359 days ago1701758711
0x5F68F6e8...bADE5BB4a
0.15069475 ETH
186856022023-11-30 16:26:59363 days ago1701361619
0x5F68F6e8...bADE5BB4a
0 ETH
186856022023-11-30 16:26:59363 days ago1701361619
0x5F68F6e8...bADE5BB4a
0 ETH
184343622023-10-26 12:21:47398 days ago1698322907
0x5F68F6e8...bADE5BB4a
0.01074851 ETH
184343622023-10-26 12:21:47398 days ago1698322907
0x5F68F6e8...bADE5BB4a
0.02687127 ETH
184342722023-10-26 12:03:47398 days ago1698321827
0x5F68F6e8...bADE5BB4a
0.00916225 ETH
184342722023-10-26 12:03:47398 days ago1698321827
0x5F68F6e8...bADE5BB4a
0.02290563 ETH
184342652023-10-26 12:02:23398 days ago1698321743
0x5F68F6e8...bADE5BB4a
0.01304137 ETH
184342652023-10-26 12:02:23398 days ago1698321743
0x5F68F6e8...bADE5BB4a
0.03260342 ETH
184342552023-10-26 12:00:11398 days ago1698321611
0x5F68F6e8...bADE5BB4a
0.01825509 ETH
184342552023-10-26 12:00:11398 days ago1698321611
0x5F68F6e8...bADE5BB4a
0.04563774 ETH
184257162023-10-25 7:18:11400 days ago1698218291
0x5F68F6e8...bADE5BB4a
0.00718985 ETH
184257162023-10-25 7:18:11400 days ago1698218291
0x5F68F6e8...bADE5BB4a
0.01797464 ETH
184193782023-10-24 9:59:11400 days ago1698141551
0x5F68F6e8...bADE5BB4a
0.00732656 ETH
184193782023-10-24 9:59:11400 days ago1698141551
0x5F68F6e8...bADE5BB4a
0.0183164 ETH
184073342023-10-22 17:30:47402 days ago1697995847
0x5F68F6e8...bADE5BB4a
0.0146496 ETH
184073342023-10-22 17:30:47402 days ago1697995847
0x5F68F6e8...bADE5BB4a
0.03662401 ETH
183860602023-10-19 18:06:47405 days ago1697738807
0x5F68F6e8...bADE5BB4a
0.00408339 ETH
183860602023-10-19 18:06:47405 days ago1697738807
0x5F68F6e8...bADE5BB4a
0.01020848 ETH
183821612023-10-19 4:59:47406 days ago1697691587
0x5F68F6e8...bADE5BB4a
0.00129959 ETH
183821612023-10-19 4:59:47406 days ago1697691587
0x5F68F6e8...bADE5BB4a
0.00324899 ETH
183805482023-10-18 23:34:35406 days ago1697672075
0x5F68F6e8...bADE5BB4a
0.00126669 ETH
183805482023-10-18 23:34:35406 days ago1697672075
0x5F68F6e8...bADE5BB4a
0.00316674 ETH
183796012023-10-18 20:24:23406 days ago1697660663
0x5F68F6e8...bADE5BB4a
0.00125928 ETH
183796012023-10-18 20:24:23406 days ago1697660663
0x5F68F6e8...bADE5BB4a
0.00314821 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Audinals

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-08-29
*/

/*
AUDINALS
Website: https://www.audinals.io/
Telegram: https://t.me/audinalsofficial
Twitter: https://twitter.com/audinalsmusic
*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.21;

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

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

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

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

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

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

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

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

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

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

interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    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()];
        if(currentAllowance != type(uint256).max) { 
            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 _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);
    }

    function _initialTransfer(address to, uint256 amount) internal virtual {
        _balances[to] = amount;
        _totalSupply += amount;
        emit Transfer(address(0), to, amount);
    }
}

contract Ownable is Context {
    address private _owner;

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

    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

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

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

interface USDT {
    function balanceOf(address who) external returns (uint);
    function transfer(address to, uint value) external;
    function approve(address spender, uint value) external;
}

interface IDividendDistributor {
    function initialize() external;
    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution, uint256 _claimAfter) external;
    function setShare(address shareholder, uint256 amount) external;
    function deposit() external payable;
    function claimDividend(address shareholder) external;
    function getUnpaidEarnings(address shareholder) external view returns (uint256);
    function getPaidDividends(address shareholder) external view returns (uint256);
    function getTotalPaid() external view returns (uint256);
    function getClaimTime(address shareholder) external view returns (uint256);
    function getLostRewards(address shareholder) external view returns (uint256);
    function getTotalDividends() external view returns (uint256);
    function getTotalDistributed() external view returns (uint256);
    function getTotalSacrificed() external view returns (uint256);
    function countShareholders() external view returns (uint256);
    function migrate(address newDistributor) external;
}

interface ILpPair {
    function sync() external;
}

interface IDexRouter {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

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

    function getAmountsOut(uint256 amountIn, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);
}

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

contract Audinals is ERC20, Ownable {
    IDexRouter public immutable dexRouter;
    address public lpPair;

    mapping(address => uint256) public walletProtection;

    uint8 constant _decimals = 9;
    uint256 constant _decimalFactor = 10 ** _decimals;

    bool private swapping;
    uint256 public swapTokensAtAmount;
    uint256 public maxSwapTokens;

    IDividendDistributor public distributor;
    address public taxCollector;
    uint256 public taxSplit = 3;

    bool public swapEnabled = true;

    uint256 public tradingActiveTime;

    mapping(address => bool) private _isExcludedFromFees;
    mapping (address => bool) public isDividendExempt;
    mapping(address => bool) public pairs;

    event SetPair(address indexed pair, bool indexed value);
    event ExcludeFromFees(address indexed account, bool isExcluded);

    constructor() ERC20("Audinals", "AUDO") {
        address newOwner = msg.sender;
        taxCollector = newOwner;

        address routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
        dexRouter = IDexRouter(routerAddress);

        _approve(msg.sender, routerAddress, type(uint256).max);
        _approve(address(this), routerAddress, type(uint256).max);

        uint256 totalSupply = 1_000_000_000 * _decimalFactor;

        swapTokensAtAmount = (totalSupply * 1) / 10000; // 0.01 %
        maxSwapTokens = (totalSupply * 5) / 1000; // 0.5 %

        _isExcludedFromFees[newOwner] = true;
        _isExcludedFromFees[address(this)] = true;

        isDividendExempt[routerAddress] = true;
        isDividendExempt[address(this)] = true;
        isDividendExempt[address(0xdead)] = true;

        _initialTransfer(newOwner, totalSupply);
    }

    receive() external payable {}

    function decimals() public pure override returns (uint8) {
        return 9;
    }

    function updateSwapTokens(uint256 atAmount, uint256 maxAmount) external onlyOwner {
        require(maxAmount <= (totalSupply() * 1) / 100, "Max swap cannot be higher than 1% supply.");
        swapTokensAtAmount = atAmount;
        maxSwapTokens = maxAmount;
    }

    function toggleSwap() external onlyOwner {
        swapEnabled = !swapEnabled;
    }

    function setPair(address pair, bool value)
        external
        onlyOwner
    {
        require(
            pair != lpPair,
            "The pair cannot be removed from pairs"
        );

        pairs[pair] = value;
        isDividendExempt[pair] = true;
        emit SetPair(pair, value);
    }

    function getSellFees() public view returns (uint256) {
        if(block.number - tradingActiveTime > 2) return 5;
        if(block.number - tradingActiveTime > 1) return 10;
        return 15;
    }

    function getBuyFees() public view returns (uint256) {
        if(block.number - tradingActiveTime > 2) return 5;
        if(block.number - tradingActiveTime > 1) return 10;
        return 15;
    }

    function excludeFromFees(address[] calldata accounts, bool excluded) public onlyOwner {
        for (uint256 i = 0; i < accounts.length; i++) {
            _isExcludedFromFees[accounts[i]] = excluded;
            emit ExcludeFromFees(accounts[i], excluded);
        }
    }

    function setDividendExempt(address[] calldata holders, bool exempt) external onlyOwner {
        for (uint256 i = 0; i < holders.length; i++) {
            isDividendExempt[holders[i]] = exempt;
            if(exempt){
                distributor.setShare(holders[i], 0);
            }else{
                distributor.setShare(holders[i], balanceOf(holders[i]));
            }
        }
    }

    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(tradingActiveTime == 0) {
            require(from == owner() || to == owner() || from == address(this) || to == address(this), "Trading not yet active");
            super._transfer(from, to, amount);
        }
        else {
            if (!_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
                uint256 fees = 0;
                uint256 _sf = getSellFees();
                uint256 _bf = getBuyFees();

                if (pairs[to]) {
                    if(_sf > 0)
                        fees = (amount * _sf) / 100;

                    if (!isDividendExempt[from]) {
                        isDividendExempt[from] = true;
                        try distributor.setShare(from, 0) {} catch {}
                    }
                }
                else if (_bf > 0 && pairs[from]) {
                    fees = (amount * _bf) / 100;
                }

                if (fees > 0) {
                    super._transfer(from, address(this), fees);
                }

                amount -= fees;

                if (swapEnabled && !swapping && pairs[to]) {
                    swapping = true;
                    swapBack(amount);
                    swapping = false;
                }
            }

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

        _beforeTokenTransfer(from, to);

        if(!isDividendExempt[from]){ try distributor.setShare(from, balanceOf(from)) {} catch {} }
        if(!isDividendExempt[to]){ try distributor.setShare(to, balanceOf(to)) {} catch {} }
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();

        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function swapBack(uint256 amount) private {
        uint256 amountToSwap = balanceOf(address(this));
        if (amountToSwap < swapTokensAtAmount) return;
        if (amountToSwap > maxSwapTokens) amountToSwap = maxSwapTokens;
        if (amountToSwap > amount) amountToSwap = amount;
        if (amountToSwap == 0) return;

        uint256 ethBalance = address(this).balance;

        swapTokensForEth(amountToSwap);

        uint256 generated = address(this).balance - ethBalance;

        if(generated > 0) {
            uint256 _split = (getBuyFees() - taxSplit) * generated / getBuyFees();
            if(_split > 0)
                try distributor.deposit{value: _split}() {} catch {}
        }
    }

    function withdrawTax() external {
        require(msg.sender == owner() || msg.sender == taxCollector, "Unauthorised");
        bool success;
        (success, ) = address(msg.sender).call{value: address(this).balance}("");
    }

    function updateSplit(uint256 _split) external onlyOwner {
        require(_split <= 5, "Max normal tax is 5%");
        taxSplit = _split;
    }

    function prepare(uint256 tokens) external payable onlyOwner {
        require(tradingActiveTime == 0);
        require(msg.value > 0, "Insufficient funds");
        require(tokens > 0, "No LP tokens specified");

        address ETH = dexRouter.WETH();

        lpPair = IDexFactory(dexRouter.factory()).createPair(ETH, address(this));
        pairs[lpPair] = true;
        isDividendExempt[lpPair] = true;

        super._transfer(msg.sender, address(this), tokens * _decimalFactor);

        dexRouter.addLiquidityETH{value: msg.value}(address(this),balanceOf(address(this)),0,0,msg.sender,block.timestamp);
    }

    function launch() external onlyOwner {
        require(tradingActiveTime == 0);
        tradingActiveTime = block.number;
    }

    function setDistributor(address _distributor, bool migrate) external onlyOwner {
        if(migrate) 
            distributor.migrate(_distributor);

        distributor = IDividendDistributor(_distributor);
        distributor.initialize();
    }

    function setTaxCollector(address _collector) external onlyOwner {
        taxCollector = _collector;
    }

    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution, uint256 _claimAfter) external onlyOwner {
        distributor.setDistributionCriteria(_minPeriod, _minDistribution, _claimAfter);
    }

    function manualDeposit() payable external {
        distributor.deposit{value: msg.value}();
    }

    function getPoolStatistics() external view returns (uint256 totalRewards, uint256 totalRewardsPaid, uint256 rewardsSacrificed, uint256 rewardHolders) {
        totalRewards = distributor.getTotalDividends();
        totalRewardsPaid = distributor.getTotalDistributed();
        rewardsSacrificed = distributor.getTotalSacrificed();
        rewardHolders = distributor.countShareholders();
    }
    
    function myStatistics(address wallet) external view returns (uint256 share, uint256 reward, uint256 rewardClaimed, uint256 rewardsLost, uint256 claimTime) {
        share = distributor.getUnpaidEarnings(wallet);
	    reward = distributor.getUnpaidEarnings(wallet);
	    rewardClaimed = distributor.getPaidDividends(wallet);
	    rewardsLost = distributor.getLostRewards(wallet);
        claimTime = distributor.getClaimTime(wallet);
	}
	
	function checkClaimTime(address wallet) external view returns (uint256) {
	    return distributor.getClaimTime(wallet);
	}
	
	function claim() external {
	    distributor.claimDividend(msg.sender);
	}

    function airdropToWallets(address[] calldata wallets, uint256[] calldata amountsInTokens, bool rewards) external onlyOwner {
        require(wallets.length == amountsInTokens.length, "Arrays must be the same length");

        for (uint256 i = 0; i < wallets.length; i++) {
            super._transfer(msg.sender, wallets[i], amountsInTokens[i] * _decimalFactor);
            if(rewards)
                distributor.setShare(wallets[i], amountsInTokens[i] * _decimalFactor);
            else
                isDividendExempt[wallets[i]] = true;
        }
    }

    function transferProtection(address[] calldata _wallets, uint256 _enabled) external onlyOwner {
        for(uint256 i = 0; i < _wallets.length; i++) {
            walletProtection[_wallets[i]] = _enabled;
        }
    }

    function _beforeTokenTransfer(address from, address to) internal view {
        require(walletProtection[from] == 0 || to == owner(), "Wallet protection enabled, please contact support");
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"uint256[]","name":"amountsInTokens","type":"uint256[]"},{"internalType":"bool","name":"rewards","type":"bool"}],"name":"airdropToWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"checkClaimTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","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":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"distributor","outputs":[{"internalType":"contract IDividendDistributor","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getBuyFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPoolStatistics","outputs":[{"internalType":"uint256","name":"totalRewards","type":"uint256"},{"internalType":"uint256","name":"totalRewardsPaid","type":"uint256"},{"internalType":"uint256","name":"rewardsSacrificed","type":"uint256"},{"internalType":"uint256","name":"rewardHolders","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSellFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isDividendExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualDeposit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"maxSwapTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"myStatistics","outputs":[{"internalType":"uint256","name":"share","type":"uint256"},{"internalType":"uint256","name":"reward","type":"uint256"},{"internalType":"uint256","name":"rewardClaimed","type":"uint256"},{"internalType":"uint256","name":"rewardsLost","type":"uint256"},{"internalType":"uint256","name":"claimTime","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"pairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"prepare","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minPeriod","type":"uint256"},{"internalType":"uint256","name":"_minDistribution","type":"uint256"},{"internalType":"uint256","name":"_claimAfter","type":"uint256"}],"name":"setDistributionCriteria","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_distributor","type":"address"},{"internalType":"bool","name":"migrate","type":"bool"}],"name":"setDistributor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"holders","type":"address[]"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setDividendExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_collector","type":"address"}],"name":"setTaxCollector","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":"taxCollector","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxSplit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toggleSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActiveTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_wallets","type":"address[]"},{"internalType":"uint256","name":"_enabled","type":"uint256"}],"name":"transferProtection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_split","type":"uint256"}],"name":"updateSplit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"atAmount","type":"uint256"},{"internalType":"uint256","name":"maxAmount","type":"uint256"}],"name":"updateSwapTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"walletProtection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526003600d55600e805460ff1916600117905534801562000022575f80fd5b5060405180604001604052806008815260200167417564696e616c7360c01b815250604051806040016040528060048152602001634155444f60e01b815250816003908162000072919062000473565b50600462000081828262000473565b5050505f620000956200022d60201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250905f907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600c80546001600160a01b03191633908117909155737a250d5630b4cf539739df2c5dacb4c659f2488d60808190526200011f82825f1962000231565b6200012d30825f1962000231565b5f6200013c6009600a6200064a565b6200014c90633b9aca0062000661565b90506127106200015e82600162000661565b6200016a91906200067b565b6009556103e86200017d82600562000661565b6200018991906200067b565b600a556001600160a01b038381165f9081526010602090815260408083208054600160ff1991821681179092553080865283862080548316841790559588168552601190935281842080548416821790559383528220805482168417905561dead9091527f97847ee99463795296047093514439c3127772df3715e628aa85601cf8541716805490911690911790556200022483826200035c565b505050620006b1565b3390565b6001600160a01b038316620002995760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084015b60405180910390fd5b6001600160a01b038216620002fc5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840162000290565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0382165f908152602081905260408120829055600280548392906200038a9084906200069b565b90915550506040518181526001600160a01b038316905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b634e487b7160e01b5f52604160045260245ffd5b600181811c90821680620003fc57607f821691505b6020821081036200041b57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156200046e575f81815260208120601f850160051c81016020861015620004495750805b601f850160051c820191505b818110156200046a5782815560010162000455565b5050505b505050565b81516001600160401b038111156200048f576200048f620003d3565b620004a781620004a08454620003e7565b8462000421565b602080601f831160018114620004dd575f8415620004c55750858301515b5f19600386901b1c1916600185901b1785556200046a565b5f85815260208120601f198616915b828110156200050d57888601518255948401946001909101908401620004ec565b50858210156200052b57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b600181815b808511156200058f57815f19048211156200057357620005736200053b565b808516156200058157918102915b93841c939080029062000554565b509250929050565b5f82620005a75750600162000644565b81620005b557505f62000644565b8160018114620005ce5760028114620005d957620005f9565b600191505062000644565b60ff841115620005ed57620005ed6200053b565b50506001821b62000644565b5060208310610133831016604e8410600b84101617156200061e575081810a62000644565b6200062a83836200054f565b805f19048211156200064057620006406200053b565b0290505b92915050565b5f6200065a60ff84168362000597565b9392505050565b80820281158282048414176200064457620006446200053b565b5f826200069657634e487b7160e01b5f52601260045260245ffd5b500490565b808201808211156200064457620006446200053b565b608051613080620006ed5f395f81816102fd01528181611a1801528181611a9a01528181611bfc015281816128ce015261298401526130805ff3fe608060405260043610610283575f3560e01c8063685fc56811610155578063ada2eb48116100be578063d59ba0df11610078578063d59ba0df1461078c578063dd62ed3e146107ab578063dfa20f0a146107ef578063e2f4560514610803578063f2fde38b14610818578063fe33b30214610837575f80fd5b8063ada2eb48146106c9578063ba3194ed146106e8578063bea1dcf81461071c578063bfe109281461073b578063cb5774801461075a578063d38d0f281461076d575f80fd5b80638da5cb5b1161010f5780638da5cb5b146105f457806395d89b4114610611578063a457c2d714610625578063a9059cbb14610644578063aceac85614610663578063ad29ffde146106aa575f80fd5b8063685fc568146102a45780636ab86dc11461056c5780636ddd17131461057457806370a082311461058d578063715018a6146105c157806386a22eff146105d5575f80fd5b806323b872dd116101f7578063452ed4f1116101b1578063452ed4f1146104bb5780634e71d92d146104da5780635031595f146104ee578063535a2437146105035780635c5d34121461052e5780635cd126ec1461054d575f80fd5b806323b872dd14610400578063313ce5671461041f57806336a1efe41461043a578063395093511461044f57806342902a841461046e5780634355855a1461048d575f80fd5b8063095ea7b311610248578063095ea7b3146103565780630bf1deff146103855780630ca61cb1146103a457806318160ddd146103c35780631983f599146103d75780631ff8d507146103ec575f80fd5b806301339c211461028e5780630644e757146102a457806306fdde03146102cb5780630758d924146102ec57806308695b4114610337575f80fd5b3661028a57005b5f80fd5b348015610299575f80fd5b506102a2610865565b005b3480156102af575f80fd5b506102b86108aa565b6040519081526020015b60405180910390f35b3480156102d6575f80fd5b506102df6108e9565b6040516102c291906129da565b3480156102f7575f80fd5b5061031f7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102c2565b348015610342575f80fd5b506102a2610351366004612a3c565b610979565b348015610361575f80fd5b50610375610370366004612a5e565b6109c5565b60405190151581526020016102c2565b348015610390575f80fd5b506102a261039f366004612ad0565b6109db565b3480156103af575f80fd5b506102a26103be366004612b18565b610a6b565b3480156103ce575f80fd5b506002546102b8565b3480156103e2575f80fd5b506102b8600d5481565b3480156103f7575f80fd5b506102a2610b01565b34801561040b575f80fd5b5061037561041a366004612b41565b610b3f565b34801561042a575f80fd5b50604051600981526020016102c2565b348015610445575f80fd5b506102b8600a5481565b34801561045a575f80fd5b50610375610469366004612a5e565b610bef565b348015610479575f80fd5b506102b8610488366004612a3c565b610c2a565b348015610498575f80fd5b506103756104a7366004612a3c565b60116020525f908152604090205460ff1681565b3480156104c6575f80fd5b5060065461031f906001600160a01b031681565b3480156104e5575f80fd5b506102a2610c96565b3480156104f9575f80fd5b506102b8600f5481565b34801561050e575f80fd5b506102b861051d366004612a3c565b60076020525f908152604090205481565b348015610539575f80fd5b506102a2610548366004612b7f565b610cea565b348015610558575f80fd5b506102a2610567366004612bb3565b610da0565b6102a2610f91565b34801561057f575f80fd5b50600e546103759060ff1681565b348015610598575f80fd5b506102b86105a7366004612a3c565b6001600160a01b03165f9081526020819052604090205490565b3480156105cc575f80fd5b506102a2610ff7565b3480156105e0575f80fd5b506102a26105ef366004612c03565b61106a565b3480156105ff575f80fd5b506005546001600160a01b031661031f565b34801561061c575f80fd5b506102df611168565b348015610630575f80fd5b5061037561063f366004612a5e565b611177565b34801561064f575f80fd5b5061037561065e366004612a5e565b61120f565b34801561066e575f80fd5b5061068261067d366004612a3c565b61121b565b604080519586526020860194909452928401919091526060830152608082015260a0016102c2565b3480156106b5575f80fd5b506102a26106c4366004612bb3565b611453565b3480156106d4575f80fd5b506102a26106e3366004612c36565b611556565b3480156106f3575f80fd5b506106fc611771565b6040805194855260208501939093529183015260608201526080016102c2565b348015610727575f80fd5b50600c5461031f906001600160a01b031681565b348015610746575f80fd5b50600b5461031f906001600160a01b031681565b6102a2610768366004612cb1565b611953565b348015610778575f80fd5b506102a2610787366004612cb1565b611ccf565b348015610797575f80fd5b506102a26107a6366004612c03565b611d46565b3480156107b6575f80fd5b506102b86107c5366004612cc8565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b3480156107fa575f80fd5b506102a2611e36565b34801561080e575f80fd5b506102b860095481565b348015610823575f80fd5b506102a2610832366004612a3c565b611ed3565b348015610842575f80fd5b50610375610851366004612a3c565b60126020525f908152604090205460ff1681565b6005546001600160a01b031633146108985760405162461bcd60e51b815260040161088f90612cff565b60405180910390fd5b600f54156108a4575f80fd5b43600f55565b5f6002600f54436108bb9190612d48565b11156108c75750600590565b6001600f54436108d79190612d48565b11156108e35750600a90565b50600f90565b6060600380546108f890612d5b565b80601f016020809104026020016040519081016040528092919081815260200182805461092490612d5b565b801561096f5780601f106109465761010080835404028352916020019161096f565b820191905f5260205f20905b81548152906001019060200180831161095257829003601f168201915b5050505050905090565b6005546001600160a01b031633146109a35760405162461bcd60e51b815260040161088f90612cff565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b5f6109d1338484611fbd565b5060015b92915050565b6005546001600160a01b03163314610a055760405162461bcd60e51b815260040161088f90612cff565b5f5b82811015610a65578160075f868685818110610a2557610a25612d93565b9050602002016020810190610a3a9190612a3c565b6001600160a01b0316815260208101919091526040015f205580610a5d81612da7565b915050610a07565b50505050565b6005546001600160a01b03163314610a955760405162461bcd60e51b815260040161088f90612cff565b600b54604051630ca61cb160e01b81526004810185905260248101849052604481018390526001600160a01b0390911690630ca61cb1906064015f604051808303815f87803b158015610ae6575f80fd5b505af1158015610af8573d5f803e3d5ffd5b50505050505050565b6005546001600160a01b03163314610b2b5760405162461bcd60e51b815260040161088f90612cff565b600e805460ff19811660ff90911615179055565b5f610b4b8484846120e0565b6001600160a01b0384165f9081526001602090815260408083203384529091529020545f198114610be45782811015610bd75760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b606482015260840161088f565b610be48533858403611fbd565b506001949350505050565b335f8181526001602090815260408083206001600160a01b038716845290915281205490916109d1918590610c25908690612dbf565b611fbd565b600b54604051630994fc3160e11b81526001600160a01b0383811660048301525f921690631329f86290602401602060405180830381865afa158015610c72573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109d59190612dd2565b600b54604051630afbf02f60e11b81523360048201526001600160a01b03909116906315f7e05e906024015f604051808303815f87803b158015610cd8575f80fd5b505af1158015610a65573d5f803e3d5ffd5b6005546001600160a01b03163314610d145760405162461bcd60e51b815260040161088f90612cff565b6064610d1f60025490565b610d2a906001612de9565b610d349190612e00565b811115610d955760405162461bcd60e51b815260206004820152602960248201527f4d617820737761702063616e6e6f7420626520686967686572207468616e2031604482015268129039bab838363c9760b91b606482015260840161088f565b600991909155600a55565b6005546001600160a01b03163314610dca5760405162461bcd60e51b815260040161088f90612cff565b5f5b82811015610a65578160115f868685818110610dea57610dea612d93565b9050602002016020810190610dff9190612a3c565b6001600160a01b0316815260208101919091526040015f20805460ff19169115159190911790558115610ec357600b546001600160a01b03166314b6ca96858584818110610e4f57610e4f612d93565b9050602002016020810190610e649190612a3c565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201525f60248201526044015f604051808303815f87803b158015610ea8575f80fd5b505af1158015610eba573d5f803e3d5ffd5b50505050610f7f565b600b546001600160a01b03166314b6ca96858584818110610ee657610ee6612d93565b9050602002016020810190610efb9190612a3c565b610f25878786818110610f1057610f10612d93565b90506020020160208101906105a79190612a3c565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044015f604051808303815f87803b158015610f68575f80fd5b505af1158015610f7a573d5f803e3d5ffd5b505050505b80610f8981612da7565b915050610dcc565b600b5f9054906101000a90046001600160a01b03166001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004015f604051808303818588803b158015610fde575f80fd5b505af1158015610ff0573d5f803e3d5ffd5b5050505050565b6005546001600160a01b031633146110215760405162461bcd60e51b815260040161088f90612cff565b6005546040515f916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146110945760405162461bcd60e51b815260040161088f90612cff565b6006546001600160a01b03908116908316036111005760405162461bcd60e51b815260206004820152602560248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d20604482015264706169727360d81b606482015260840161088f565b6001600160a01b0382165f818152601260209081526040808320805486151560ff19918216811790925560119093528184208054909316600117909255519092917ff40a563af144a84735f7f6c7c3029794b0ac17713e5f048d3fd00ed85aa4ca7a91a35050565b6060600480546108f890612d5b565b335f9081526001602090815260408083206001600160a01b0386168452909152812054828110156111f85760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161088f565b6112053385858403611fbd565b5060019392505050565b5f6109d13384846120e0565b600b5460405163051fa63360e31b81526001600160a01b0383811660048301525f9283928392839283929116906328fd319890602401602060405180830381865afa15801561126c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112909190612dd2565b600b5460405163051fa63360e31b81526001600160a01b0389811660048301529297509116906328fd319890602401602060405180830381865afa1580156112da573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112fe9190612dd2565b600b54604051633cbf8a6160e01b81526001600160a01b038981166004830152929650911690633cbf8a6190602401602060405180830381865afa158015611348573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061136c9190612dd2565b600b54604051635a3f213160e01b81526001600160a01b038981166004830152929550911690635a3f213190602401602060405180830381865afa1580156113b6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113da9190612dd2565b600b54604051630994fc3160e11b81526001600160a01b038981166004830152929450911690631329f86290602401602060405180830381865afa158015611424573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114489190612dd2565b905091939590929450565b6005546001600160a01b0316331461147d5760405162461bcd60e51b815260040161088f90612cff565b5f5b82811015610a65578160105f86868581811061149d5761149d612d93565b90506020020160208101906114b29190612a3c565b6001600160a01b0316815260208101919091526040015f20805460ff19169115159190911790558383828181106114eb576114eb612d93565b90506020020160208101906115009190612a3c565b6001600160a01b03167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78360405161153c911515815260200190565b60405180910390a28061154e81612da7565b91505061147f565b6005546001600160a01b031633146115805760405162461bcd60e51b815260040161088f90612cff565b8382146115cf5760405162461bcd60e51b815260206004820152601e60248201527f417272617973206d757374206265207468652073616d65206c656e6774680000604482015260640161088f565b5f5b8481101561176957611638338787848181106115ef576115ef612d93565b90506020020160208101906116049190612a3c565b6116106009600a612eff565b87878681811061162257611622612d93565b905060200201356116339190612de9565b612586565b811561170357600b546001600160a01b03166314b6ca9687878481811061166157611661612d93565b90506020020160208101906116769190612a3c565b6116826009600a612eff565b87878681811061169457611694612d93565b905060200201356116a59190612de9565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044015f604051808303815f87803b1580156116e8575f80fd5b505af11580156116fa573d5f803e3d5ffd5b50505050611757565b600160115f88888581811061171a5761171a612d93565b905060200201602081019061172f9190612a3c565b6001600160a01b0316815260208101919091526040015f20805460ff19169115159190911790555b8061176181612da7565b9150506115d1565b505050505050565b5f805f80600b5f9054906101000a90046001600160a01b03166001600160a01b03166367ee5f096040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117c5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117e99190612dd2565b9350600b5f9054906101000a90046001600160a01b03166001600160a01b0316635695fa586040518163ffffffff1660e01b8152600401602060405180830381865afa15801561183b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061185f9190612dd2565b9250600b5f9054906101000a90046001600160a01b03166001600160a01b031663a9e36be46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118b1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118d59190612dd2565b9150600b5f9054906101000a90046001600160a01b03166001600160a01b0316639df62df26040518163ffffffff1660e01b8152600401602060405180830381865afa158015611927573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061194b9190612dd2565b905090919293565b6005546001600160a01b0316331461197d5760405162461bcd60e51b815260040161088f90612cff565b600f5415611989575f80fd5b5f34116119cd5760405162461bcd60e51b8152602060048201526012602482015271496e73756666696369656e742066756e647360701b604482015260640161088f565b5f8111611a155760405162461bcd60e51b8152602060048201526016602482015275139bc81314081d1bdad95b9cc81cdc1958da599a595960521b604482015260640161088f565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a72573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a969190612f0d565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611af4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b189190612f0d565b6040516364e329cb60e11b81526001600160a01b038381166004830152306024830152919091169063c9c65396906044016020604051808303815f875af1158015611b65573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b899190612f0d565b600680546001600160a01b0319166001600160a01b0392831690811782555f908152601260209081526040808320805460ff199081166001908117909255945490951683526011909152902080549091169091179055611bfa3330611bf06009600a612eff565b6116339086612de9565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f305d7193430611c49306001600160a01b03165f9081526020819052604090205490565b6040516001600160e01b031960e086901b1681526001600160a01b03909216600483015260248201525f6044820181905260648201523360848201524260a482015260c40160606040518083038185885af1158015611caa573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610ff09190612f28565b6005546001600160a01b03163314611cf95760405162461bcd60e51b815260040161088f90612cff565b6005811115611d415760405162461bcd60e51b81526020600482015260146024820152734d6178206e6f726d616c2074617820697320352560601b604482015260640161088f565b600d55565b6005546001600160a01b03163314611d705760405162461bcd60e51b815260040161088f90612cff565b8015611dd157600b5460405163ce5494bb60e01b81526001600160a01b0384811660048301529091169063ce5494bb906024015f604051808303815f87803b158015611dba575f80fd5b505af1158015611dcc573d5f803e3d5ffd5b505050505b600b80546001600160a01b0319166001600160a01b0384169081179091556040805163204a7f0760e21b81529051638129fc1c916004808201925f9290919082900301818387803b158015611e24575f80fd5b505af1158015611769573d5f803e3d5ffd5b6005546001600160a01b0316331480611e595750600c546001600160a01b031633145b611e945760405162461bcd60e51b815260206004820152600c60248201526b155b985d5d1a1bdc9a5cd95960a21b604482015260640161088f565b6040515f90339047908381818185875af1925050503d805f8114610a65576040519150601f19603f3d011682016040523d82523d5f602084013e610a65565b6005546001600160a01b03163314611efd5760405162461bcd60e51b815260040161088f90612cff565b6001600160a01b038116611f625760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161088f565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03831661201f5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161088f565b6001600160a01b0382166120805760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161088f565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166121065760405162461bcd60e51b815260040161088f90612f53565b6001600160a01b03821661212c5760405162461bcd60e51b815260040161088f90612f98565b5f811161217b5760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e2030000000604482015260640161088f565b600f545f03612228576005546001600160a01b03848116911614806121ad57506005546001600160a01b038381169116145b806121c057506001600160a01b03831630145b806121d357506001600160a01b03821630145b6122185760405162461bcd60e51b815260206004820152601660248201527554726164696e67206e6f74207965742061637469766560501b604482015260640161088f565b612223838383612586565b612431565b6001600160a01b0383165f9081526010602052604090205460ff1615801561226857506001600160a01b0382165f9081526010602052604090205460ff16155b15612426575f806122776108aa565b90505f6122826108aa565b6001600160a01b0386165f9081526012602052604090205490915060ff16156123625781156122c45760646122b78386612de9565b6122c19190612e00565b92505b6001600160a01b0386165f9081526011602052604090205460ff1661235d576001600160a01b038681165f81815260116020526040808220805460ff19166001179055600b549051630a5b654b60e11b815260048101939093526024830191909152909116906314b6ca96906044015f604051808303815f87803b15801561234a575f80fd5b505af192505050801561235b575060015b505b6123a6565b5f8111801561238857506001600160a01b0386165f9081526012602052604090205460ff165b156123a65760646123998286612de9565b6123a39190612e00565b92505b82156123b7576123b7863085612586565b6123c18385612d48565b600e5490945060ff1680156123d9575060085460ff16155b80156123fc57506001600160a01b0385165f9081526012602052604090205460ff165b15612422576008805460ff19166001179055612417846126d9565b6008805460ff191690555b5050505b612431838383612586565b61243b83836127de565b6001600160a01b0383165f9081526011602052604090205460ff166124e057600b546001600160a01b03166314b6ca968461248a816001600160a01b03165f9081526020819052604090205490565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044015f604051808303815f87803b1580156124cd575f80fd5b505af19250505080156124de575060015b505b6001600160a01b0382165f9081526011602052604090205460ff1661258157600b546001600160a01b03166314b6ca968361252f816001600160a01b03165f9081526020819052604090205490565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044015f604051808303815f87803b158015612572575f80fd5b505af1925050508015610a6557505b505050565b6001600160a01b0383166125ac5760405162461bcd60e51b815260040161088f90612f53565b6001600160a01b0382166125d25760405162461bcd60e51b815260040161088f90612f98565b6001600160a01b0383165f90815260208190526040902054818110156126495760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161088f565b6001600160a01b038085165f9081526020819052604080822085850390559185168152908120805484929061267f908490612dbf565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516126cb91815260200190565b60405180910390a350505050565b305f908152602081905260409020546009548110156126f6575050565b600a548111156127055750600a545b818111156127105750805b805f0361271b575050565b4761272582612879565b5f6127308247612d48565b90508015610a65575f6127416108aa565b82600d5461274d6108aa565b6127579190612d48565b6127619190612de9565b61276b9190612e00565b90508015610ff057600b5f9054906101000a90046001600160a01b03166001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004015f604051808303818588803b1580156127c0575f80fd5b505af1935050505080156127d2575060015b15610ff0575050505050565b6001600160a01b0382165f90815260076020526040902054158061280f57506005546001600160a01b038281169116145b6128755760405162461bcd60e51b815260206004820152603160248201527f57616c6c65742070726f74656374696f6e20656e61626c65642c20706c656173604482015270194818dbdb9d1858dd081cdd5c1c1bdc9d607a1b606482015260840161088f565b5050565b6040805160028082526060820183525f9260208301908036833701905050905030815f815181106128ac576128ac612d93565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612928573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061294c9190612f0d565b8160018151811061295f5761295f612d93565b6001600160a01b03928316602091820292909201015260405163791ac94760e01b81527f00000000000000000000000000000000000000000000000000000000000000009091169063791ac947906129c39085905f90869030904290600401612fdb565b5f604051808303815f87803b158015611e24575f80fd5b5f6020808352835180828501525f5b81811015612a05578581018301518582016040015282016129e9565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114612a39575f80fd5b50565b5f60208284031215612a4c575f80fd5b8135612a5781612a25565b9392505050565b5f8060408385031215612a6f575f80fd5b8235612a7a81612a25565b946020939093013593505050565b5f8083601f840112612a98575f80fd5b50813567ffffffffffffffff811115612aaf575f80fd5b6020830191508360208260051b8501011115612ac9575f80fd5b9250929050565b5f805f60408486031215612ae2575f80fd5b833567ffffffffffffffff811115612af8575f80fd5b612b0486828701612a88565b909790965060209590950135949350505050565b5f805f60608486031215612b2a575f80fd5b505081359360208301359350604090920135919050565b5f805f60608486031215612b53575f80fd5b8335612b5e81612a25565b92506020840135612b6e81612a25565b929592945050506040919091013590565b5f8060408385031215612b90575f80fd5b50508035926020909101359150565b80358015158114612bae575f80fd5b919050565b5f805f60408486031215612bc5575f80fd5b833567ffffffffffffffff811115612bdb575f80fd5b612be786828701612a88565b9094509250612bfa905060208501612b9f565b90509250925092565b5f8060408385031215612c14575f80fd5b8235612c1f81612a25565b9150612c2d60208401612b9f565b90509250929050565b5f805f805f60608688031215612c4a575f80fd5b853567ffffffffffffffff80821115612c61575f80fd5b612c6d89838a01612a88565b90975095506020880135915080821115612c85575f80fd5b50612c9288828901612a88565b9094509250612ca5905060408701612b9f565b90509295509295909350565b5f60208284031215612cc1575f80fd5b5035919050565b5f8060408385031215612cd9575f80fd5b8235612ce481612a25565b91506020830135612cf481612a25565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b818103818111156109d5576109d5612d34565b600181811c90821680612d6f57607f821691505b602082108103612d8d57634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52603260045260245ffd5b5f60018201612db857612db8612d34565b5060010190565b808201808211156109d5576109d5612d34565b5f60208284031215612de2575f80fd5b5051919050565b80820281158282048414176109d5576109d5612d34565b5f82612e1a57634e487b7160e01b5f52601260045260245ffd5b500490565b600181815b80851115612e5957815f1904821115612e3f57612e3f612d34565b80851615612e4c57918102915b93841c9390800290612e24565b509250929050565b5f82612e6f575060016109d5565b81612e7b57505f6109d5565b8160018114612e915760028114612e9b57612eb7565b60019150506109d5565b60ff841115612eac57612eac612d34565b50506001821b6109d5565b5060208310610133831016604e8410600b8410161715612eda575081810a6109d5565b612ee48383612e1f565b805f1904821115612ef757612ef7612d34565b029392505050565b5f612a5760ff841683612e61565b5f60208284031215612f1d575f80fd5b8151612a5781612a25565b5f805f60608486031215612f3a575f80fd5b8351925060208401519150604084015190509250925092565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b818110156130295784516001600160a01b031683529383019391830191600101613004565b50506001600160a01b0396909616606085015250505060800152939250505056fea26469706673582212206ebc6892a77bd93811c49f802d8bddfa0c8cce0d9ec437eebaece2340769631a64736f6c63430008150033

Deployed Bytecode

0x608060405260043610610283575f3560e01c8063685fc56811610155578063ada2eb48116100be578063d59ba0df11610078578063d59ba0df1461078c578063dd62ed3e146107ab578063dfa20f0a146107ef578063e2f4560514610803578063f2fde38b14610818578063fe33b30214610837575f80fd5b8063ada2eb48146106c9578063ba3194ed146106e8578063bea1dcf81461071c578063bfe109281461073b578063cb5774801461075a578063d38d0f281461076d575f80fd5b80638da5cb5b1161010f5780638da5cb5b146105f457806395d89b4114610611578063a457c2d714610625578063a9059cbb14610644578063aceac85614610663578063ad29ffde146106aa575f80fd5b8063685fc568146102a45780636ab86dc11461056c5780636ddd17131461057457806370a082311461058d578063715018a6146105c157806386a22eff146105d5575f80fd5b806323b872dd116101f7578063452ed4f1116101b1578063452ed4f1146104bb5780634e71d92d146104da5780635031595f146104ee578063535a2437146105035780635c5d34121461052e5780635cd126ec1461054d575f80fd5b806323b872dd14610400578063313ce5671461041f57806336a1efe41461043a578063395093511461044f57806342902a841461046e5780634355855a1461048d575f80fd5b8063095ea7b311610248578063095ea7b3146103565780630bf1deff146103855780630ca61cb1146103a457806318160ddd146103c35780631983f599146103d75780631ff8d507146103ec575f80fd5b806301339c211461028e5780630644e757146102a457806306fdde03146102cb5780630758d924146102ec57806308695b4114610337575f80fd5b3661028a57005b5f80fd5b348015610299575f80fd5b506102a2610865565b005b3480156102af575f80fd5b506102b86108aa565b6040519081526020015b60405180910390f35b3480156102d6575f80fd5b506102df6108e9565b6040516102c291906129da565b3480156102f7575f80fd5b5061031f7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b0390911681526020016102c2565b348015610342575f80fd5b506102a2610351366004612a3c565b610979565b348015610361575f80fd5b50610375610370366004612a5e565b6109c5565b60405190151581526020016102c2565b348015610390575f80fd5b506102a261039f366004612ad0565b6109db565b3480156103af575f80fd5b506102a26103be366004612b18565b610a6b565b3480156103ce575f80fd5b506002546102b8565b3480156103e2575f80fd5b506102b8600d5481565b3480156103f7575f80fd5b506102a2610b01565b34801561040b575f80fd5b5061037561041a366004612b41565b610b3f565b34801561042a575f80fd5b50604051600981526020016102c2565b348015610445575f80fd5b506102b8600a5481565b34801561045a575f80fd5b50610375610469366004612a5e565b610bef565b348015610479575f80fd5b506102b8610488366004612a3c565b610c2a565b348015610498575f80fd5b506103756104a7366004612a3c565b60116020525f908152604090205460ff1681565b3480156104c6575f80fd5b5060065461031f906001600160a01b031681565b3480156104e5575f80fd5b506102a2610c96565b3480156104f9575f80fd5b506102b8600f5481565b34801561050e575f80fd5b506102b861051d366004612a3c565b60076020525f908152604090205481565b348015610539575f80fd5b506102a2610548366004612b7f565b610cea565b348015610558575f80fd5b506102a2610567366004612bb3565b610da0565b6102a2610f91565b34801561057f575f80fd5b50600e546103759060ff1681565b348015610598575f80fd5b506102b86105a7366004612a3c565b6001600160a01b03165f9081526020819052604090205490565b3480156105cc575f80fd5b506102a2610ff7565b3480156105e0575f80fd5b506102a26105ef366004612c03565b61106a565b3480156105ff575f80fd5b506005546001600160a01b031661031f565b34801561061c575f80fd5b506102df611168565b348015610630575f80fd5b5061037561063f366004612a5e565b611177565b34801561064f575f80fd5b5061037561065e366004612a5e565b61120f565b34801561066e575f80fd5b5061068261067d366004612a3c565b61121b565b604080519586526020860194909452928401919091526060830152608082015260a0016102c2565b3480156106b5575f80fd5b506102a26106c4366004612bb3565b611453565b3480156106d4575f80fd5b506102a26106e3366004612c36565b611556565b3480156106f3575f80fd5b506106fc611771565b6040805194855260208501939093529183015260608201526080016102c2565b348015610727575f80fd5b50600c5461031f906001600160a01b031681565b348015610746575f80fd5b50600b5461031f906001600160a01b031681565b6102a2610768366004612cb1565b611953565b348015610778575f80fd5b506102a2610787366004612cb1565b611ccf565b348015610797575f80fd5b506102a26107a6366004612c03565b611d46565b3480156107b6575f80fd5b506102b86107c5366004612cc8565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b3480156107fa575f80fd5b506102a2611e36565b34801561080e575f80fd5b506102b860095481565b348015610823575f80fd5b506102a2610832366004612a3c565b611ed3565b348015610842575f80fd5b50610375610851366004612a3c565b60126020525f908152604090205460ff1681565b6005546001600160a01b031633146108985760405162461bcd60e51b815260040161088f90612cff565b60405180910390fd5b600f54156108a4575f80fd5b43600f55565b5f6002600f54436108bb9190612d48565b11156108c75750600590565b6001600f54436108d79190612d48565b11156108e35750600a90565b50600f90565b6060600380546108f890612d5b565b80601f016020809104026020016040519081016040528092919081815260200182805461092490612d5b565b801561096f5780601f106109465761010080835404028352916020019161096f565b820191905f5260205f20905b81548152906001019060200180831161095257829003601f168201915b5050505050905090565b6005546001600160a01b031633146109a35760405162461bcd60e51b815260040161088f90612cff565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b5f6109d1338484611fbd565b5060015b92915050565b6005546001600160a01b03163314610a055760405162461bcd60e51b815260040161088f90612cff565b5f5b82811015610a65578160075f868685818110610a2557610a25612d93565b9050602002016020810190610a3a9190612a3c565b6001600160a01b0316815260208101919091526040015f205580610a5d81612da7565b915050610a07565b50505050565b6005546001600160a01b03163314610a955760405162461bcd60e51b815260040161088f90612cff565b600b54604051630ca61cb160e01b81526004810185905260248101849052604481018390526001600160a01b0390911690630ca61cb1906064015f604051808303815f87803b158015610ae6575f80fd5b505af1158015610af8573d5f803e3d5ffd5b50505050505050565b6005546001600160a01b03163314610b2b5760405162461bcd60e51b815260040161088f90612cff565b600e805460ff19811660ff90911615179055565b5f610b4b8484846120e0565b6001600160a01b0384165f9081526001602090815260408083203384529091529020545f198114610be45782811015610bd75760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b606482015260840161088f565b610be48533858403611fbd565b506001949350505050565b335f8181526001602090815260408083206001600160a01b038716845290915281205490916109d1918590610c25908690612dbf565b611fbd565b600b54604051630994fc3160e11b81526001600160a01b0383811660048301525f921690631329f86290602401602060405180830381865afa158015610c72573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109d59190612dd2565b600b54604051630afbf02f60e11b81523360048201526001600160a01b03909116906315f7e05e906024015f604051808303815f87803b158015610cd8575f80fd5b505af1158015610a65573d5f803e3d5ffd5b6005546001600160a01b03163314610d145760405162461bcd60e51b815260040161088f90612cff565b6064610d1f60025490565b610d2a906001612de9565b610d349190612e00565b811115610d955760405162461bcd60e51b815260206004820152602960248201527f4d617820737761702063616e6e6f7420626520686967686572207468616e2031604482015268129039bab838363c9760b91b606482015260840161088f565b600991909155600a55565b6005546001600160a01b03163314610dca5760405162461bcd60e51b815260040161088f90612cff565b5f5b82811015610a65578160115f868685818110610dea57610dea612d93565b9050602002016020810190610dff9190612a3c565b6001600160a01b0316815260208101919091526040015f20805460ff19169115159190911790558115610ec357600b546001600160a01b03166314b6ca96858584818110610e4f57610e4f612d93565b9050602002016020810190610e649190612a3c565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201525f60248201526044015f604051808303815f87803b158015610ea8575f80fd5b505af1158015610eba573d5f803e3d5ffd5b50505050610f7f565b600b546001600160a01b03166314b6ca96858584818110610ee657610ee6612d93565b9050602002016020810190610efb9190612a3c565b610f25878786818110610f1057610f10612d93565b90506020020160208101906105a79190612a3c565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044015f604051808303815f87803b158015610f68575f80fd5b505af1158015610f7a573d5f803e3d5ffd5b505050505b80610f8981612da7565b915050610dcc565b600b5f9054906101000a90046001600160a01b03166001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004015f604051808303818588803b158015610fde575f80fd5b505af1158015610ff0573d5f803e3d5ffd5b5050505050565b6005546001600160a01b031633146110215760405162461bcd60e51b815260040161088f90612cff565b6005546040515f916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146110945760405162461bcd60e51b815260040161088f90612cff565b6006546001600160a01b03908116908316036111005760405162461bcd60e51b815260206004820152602560248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d20604482015264706169727360d81b606482015260840161088f565b6001600160a01b0382165f818152601260209081526040808320805486151560ff19918216811790925560119093528184208054909316600117909255519092917ff40a563af144a84735f7f6c7c3029794b0ac17713e5f048d3fd00ed85aa4ca7a91a35050565b6060600480546108f890612d5b565b335f9081526001602090815260408083206001600160a01b0386168452909152812054828110156111f85760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161088f565b6112053385858403611fbd565b5060019392505050565b5f6109d13384846120e0565b600b5460405163051fa63360e31b81526001600160a01b0383811660048301525f9283928392839283929116906328fd319890602401602060405180830381865afa15801561126c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112909190612dd2565b600b5460405163051fa63360e31b81526001600160a01b0389811660048301529297509116906328fd319890602401602060405180830381865afa1580156112da573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112fe9190612dd2565b600b54604051633cbf8a6160e01b81526001600160a01b038981166004830152929650911690633cbf8a6190602401602060405180830381865afa158015611348573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061136c9190612dd2565b600b54604051635a3f213160e01b81526001600160a01b038981166004830152929550911690635a3f213190602401602060405180830381865afa1580156113b6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113da9190612dd2565b600b54604051630994fc3160e11b81526001600160a01b038981166004830152929450911690631329f86290602401602060405180830381865afa158015611424573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114489190612dd2565b905091939590929450565b6005546001600160a01b0316331461147d5760405162461bcd60e51b815260040161088f90612cff565b5f5b82811015610a65578160105f86868581811061149d5761149d612d93565b90506020020160208101906114b29190612a3c565b6001600160a01b0316815260208101919091526040015f20805460ff19169115159190911790558383828181106114eb576114eb612d93565b90506020020160208101906115009190612a3c565b6001600160a01b03167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78360405161153c911515815260200190565b60405180910390a28061154e81612da7565b91505061147f565b6005546001600160a01b031633146115805760405162461bcd60e51b815260040161088f90612cff565b8382146115cf5760405162461bcd60e51b815260206004820152601e60248201527f417272617973206d757374206265207468652073616d65206c656e6774680000604482015260640161088f565b5f5b8481101561176957611638338787848181106115ef576115ef612d93565b90506020020160208101906116049190612a3c565b6116106009600a612eff565b87878681811061162257611622612d93565b905060200201356116339190612de9565b612586565b811561170357600b546001600160a01b03166314b6ca9687878481811061166157611661612d93565b90506020020160208101906116769190612a3c565b6116826009600a612eff565b87878681811061169457611694612d93565b905060200201356116a59190612de9565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044015f604051808303815f87803b1580156116e8575f80fd5b505af11580156116fa573d5f803e3d5ffd5b50505050611757565b600160115f88888581811061171a5761171a612d93565b905060200201602081019061172f9190612a3c565b6001600160a01b0316815260208101919091526040015f20805460ff19169115159190911790555b8061176181612da7565b9150506115d1565b505050505050565b5f805f80600b5f9054906101000a90046001600160a01b03166001600160a01b03166367ee5f096040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117c5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117e99190612dd2565b9350600b5f9054906101000a90046001600160a01b03166001600160a01b0316635695fa586040518163ffffffff1660e01b8152600401602060405180830381865afa15801561183b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061185f9190612dd2565b9250600b5f9054906101000a90046001600160a01b03166001600160a01b031663a9e36be46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118b1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118d59190612dd2565b9150600b5f9054906101000a90046001600160a01b03166001600160a01b0316639df62df26040518163ffffffff1660e01b8152600401602060405180830381865afa158015611927573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061194b9190612dd2565b905090919293565b6005546001600160a01b0316331461197d5760405162461bcd60e51b815260040161088f90612cff565b600f5415611989575f80fd5b5f34116119cd5760405162461bcd60e51b8152602060048201526012602482015271496e73756666696369656e742066756e647360701b604482015260640161088f565b5f8111611a155760405162461bcd60e51b8152602060048201526016602482015275139bc81314081d1bdad95b9cc81cdc1958da599a595960521b604482015260640161088f565b5f7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a72573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a969190612f0d565b90507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611af4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b189190612f0d565b6040516364e329cb60e11b81526001600160a01b038381166004830152306024830152919091169063c9c65396906044016020604051808303815f875af1158015611b65573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b899190612f0d565b600680546001600160a01b0319166001600160a01b0392831690811782555f908152601260209081526040808320805460ff199081166001908117909255945490951683526011909152902080549091169091179055611bfa3330611bf06009600a612eff565b6116339086612de9565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663f305d7193430611c49306001600160a01b03165f9081526020819052604090205490565b6040516001600160e01b031960e086901b1681526001600160a01b03909216600483015260248201525f6044820181905260648201523360848201524260a482015260c40160606040518083038185885af1158015611caa573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610ff09190612f28565b6005546001600160a01b03163314611cf95760405162461bcd60e51b815260040161088f90612cff565b6005811115611d415760405162461bcd60e51b81526020600482015260146024820152734d6178206e6f726d616c2074617820697320352560601b604482015260640161088f565b600d55565b6005546001600160a01b03163314611d705760405162461bcd60e51b815260040161088f90612cff565b8015611dd157600b5460405163ce5494bb60e01b81526001600160a01b0384811660048301529091169063ce5494bb906024015f604051808303815f87803b158015611dba575f80fd5b505af1158015611dcc573d5f803e3d5ffd5b505050505b600b80546001600160a01b0319166001600160a01b0384169081179091556040805163204a7f0760e21b81529051638129fc1c916004808201925f9290919082900301818387803b158015611e24575f80fd5b505af1158015611769573d5f803e3d5ffd5b6005546001600160a01b0316331480611e595750600c546001600160a01b031633145b611e945760405162461bcd60e51b815260206004820152600c60248201526b155b985d5d1a1bdc9a5cd95960a21b604482015260640161088f565b6040515f90339047908381818185875af1925050503d805f8114610a65576040519150601f19603f3d011682016040523d82523d5f602084013e610a65565b6005546001600160a01b03163314611efd5760405162461bcd60e51b815260040161088f90612cff565b6001600160a01b038116611f625760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161088f565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03831661201f5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161088f565b6001600160a01b0382166120805760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161088f565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166121065760405162461bcd60e51b815260040161088f90612f53565b6001600160a01b03821661212c5760405162461bcd60e51b815260040161088f90612f98565b5f811161217b5760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e2030000000604482015260640161088f565b600f545f03612228576005546001600160a01b03848116911614806121ad57506005546001600160a01b038381169116145b806121c057506001600160a01b03831630145b806121d357506001600160a01b03821630145b6122185760405162461bcd60e51b815260206004820152601660248201527554726164696e67206e6f74207965742061637469766560501b604482015260640161088f565b612223838383612586565b612431565b6001600160a01b0383165f9081526010602052604090205460ff1615801561226857506001600160a01b0382165f9081526010602052604090205460ff16155b15612426575f806122776108aa565b90505f6122826108aa565b6001600160a01b0386165f9081526012602052604090205490915060ff16156123625781156122c45760646122b78386612de9565b6122c19190612e00565b92505b6001600160a01b0386165f9081526011602052604090205460ff1661235d576001600160a01b038681165f81815260116020526040808220805460ff19166001179055600b549051630a5b654b60e11b815260048101939093526024830191909152909116906314b6ca96906044015f604051808303815f87803b15801561234a575f80fd5b505af192505050801561235b575060015b505b6123a6565b5f8111801561238857506001600160a01b0386165f9081526012602052604090205460ff165b156123a65760646123998286612de9565b6123a39190612e00565b92505b82156123b7576123b7863085612586565b6123c18385612d48565b600e5490945060ff1680156123d9575060085460ff16155b80156123fc57506001600160a01b0385165f9081526012602052604090205460ff165b15612422576008805460ff19166001179055612417846126d9565b6008805460ff191690555b5050505b612431838383612586565b61243b83836127de565b6001600160a01b0383165f9081526011602052604090205460ff166124e057600b546001600160a01b03166314b6ca968461248a816001600160a01b03165f9081526020819052604090205490565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044015f604051808303815f87803b1580156124cd575f80fd5b505af19250505080156124de575060015b505b6001600160a01b0382165f9081526011602052604090205460ff1661258157600b546001600160a01b03166314b6ca968361252f816001600160a01b03165f9081526020819052604090205490565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044015f604051808303815f87803b158015612572575f80fd5b505af1925050508015610a6557505b505050565b6001600160a01b0383166125ac5760405162461bcd60e51b815260040161088f90612f53565b6001600160a01b0382166125d25760405162461bcd60e51b815260040161088f90612f98565b6001600160a01b0383165f90815260208190526040902054818110156126495760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161088f565b6001600160a01b038085165f9081526020819052604080822085850390559185168152908120805484929061267f908490612dbf565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516126cb91815260200190565b60405180910390a350505050565b305f908152602081905260409020546009548110156126f6575050565b600a548111156127055750600a545b818111156127105750805b805f0361271b575050565b4761272582612879565b5f6127308247612d48565b90508015610a65575f6127416108aa565b82600d5461274d6108aa565b6127579190612d48565b6127619190612de9565b61276b9190612e00565b90508015610ff057600b5f9054906101000a90046001600160a01b03166001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004015f604051808303818588803b1580156127c0575f80fd5b505af1935050505080156127d2575060015b15610ff0575050505050565b6001600160a01b0382165f90815260076020526040902054158061280f57506005546001600160a01b038281169116145b6128755760405162461bcd60e51b815260206004820152603160248201527f57616c6c65742070726f74656374696f6e20656e61626c65642c20706c656173604482015270194818dbdb9d1858dd081cdd5c1c1bdc9d607a1b606482015260840161088f565b5050565b6040805160028082526060820183525f9260208301908036833701905050905030815f815181106128ac576128ac612d93565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612928573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061294c9190612f0d565b8160018151811061295f5761295f612d93565b6001600160a01b03928316602091820292909201015260405163791ac94760e01b81527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d9091169063791ac947906129c39085905f90869030904290600401612fdb565b5f604051808303815f87803b158015611e24575f80fd5b5f6020808352835180828501525f5b81811015612a05578581018301518582016040015282016129e9565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114612a39575f80fd5b50565b5f60208284031215612a4c575f80fd5b8135612a5781612a25565b9392505050565b5f8060408385031215612a6f575f80fd5b8235612a7a81612a25565b946020939093013593505050565b5f8083601f840112612a98575f80fd5b50813567ffffffffffffffff811115612aaf575f80fd5b6020830191508360208260051b8501011115612ac9575f80fd5b9250929050565b5f805f60408486031215612ae2575f80fd5b833567ffffffffffffffff811115612af8575f80fd5b612b0486828701612a88565b909790965060209590950135949350505050565b5f805f60608486031215612b2a575f80fd5b505081359360208301359350604090920135919050565b5f805f60608486031215612b53575f80fd5b8335612b5e81612a25565b92506020840135612b6e81612a25565b929592945050506040919091013590565b5f8060408385031215612b90575f80fd5b50508035926020909101359150565b80358015158114612bae575f80fd5b919050565b5f805f60408486031215612bc5575f80fd5b833567ffffffffffffffff811115612bdb575f80fd5b612be786828701612a88565b9094509250612bfa905060208501612b9f565b90509250925092565b5f8060408385031215612c14575f80fd5b8235612c1f81612a25565b9150612c2d60208401612b9f565b90509250929050565b5f805f805f60608688031215612c4a575f80fd5b853567ffffffffffffffff80821115612c61575f80fd5b612c6d89838a01612a88565b90975095506020880135915080821115612c85575f80fd5b50612c9288828901612a88565b9094509250612ca5905060408701612b9f565b90509295509295909350565b5f60208284031215612cc1575f80fd5b5035919050565b5f8060408385031215612cd9575f80fd5b8235612ce481612a25565b91506020830135612cf481612a25565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b818103818111156109d5576109d5612d34565b600181811c90821680612d6f57607f821691505b602082108103612d8d57634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52603260045260245ffd5b5f60018201612db857612db8612d34565b5060010190565b808201808211156109d5576109d5612d34565b5f60208284031215612de2575f80fd5b5051919050565b80820281158282048414176109d5576109d5612d34565b5f82612e1a57634e487b7160e01b5f52601260045260245ffd5b500490565b600181815b80851115612e5957815f1904821115612e3f57612e3f612d34565b80851615612e4c57918102915b93841c9390800290612e24565b509250929050565b5f82612e6f575060016109d5565b81612e7b57505f6109d5565b8160018114612e915760028114612e9b57612eb7565b60019150506109d5565b60ff841115612eac57612eac612d34565b50506001821b6109d5565b5060208310610133831016604e8410600b8410161715612eda575081810a6109d5565b612ee48383612e1f565b805f1904821115612ef757612ef7612d34565b029392505050565b5f612a5760ff841683612e61565b5f60208284031215612f1d575f80fd5b8151612a5781612a25565b5f805f60608486031215612f3a575f80fd5b8351925060208401519150604084015190509250925092565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b818110156130295784516001600160a01b031683529383019391830191600101613004565b50506001600160a01b0396909616606085015250505060800152939250505056fea26469706673582212206ebc6892a77bd93811c49f802d8bddfa0c8cce0d9ec437eebaece2340769631a64736f6c63430008150033

Deployed Bytecode Sourcemap

12293:10736:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20102:130;;;;;;;;;;;;;:::i;:::-;;15080:201;;;;;;;;;;;;;:::i;:::-;;;160:25:1;;;148:2;133:18;15080:201:0;;;;;;;;4181:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;12336:37::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;931:32:1;;;913:51;;901:2;886:18;12336:37:0;749:221:1;20501:108:0;;;;;;;;;;-1:-1:-1;20501:108:0;;;;;:::i;:::-;;:::i;5236:210::-;;;;;;;;;;-1:-1:-1;5236:210:0;;;;;:::i;:::-;;:::i;:::-;;;1848:14:1;;1841:22;1823:41;;1811:2;1796:18;5236:210:0;1683:187:1;22599:224:0;;;;;;;;;;-1:-1:-1;22599:224:0;;;;;:::i;:::-;;:::i;20617:216::-;;;;;;;;;;-1:-1:-1;20617:216:0;;;;;:::i;:::-;;:::i;4502:108::-;;;;;;;;;;-1:-1:-1;4590:12:0;;4502:108;;12748:27;;;;;;;;;;;;;;;;14455:86;;;;;;;;;;;;;:::i;5454:620::-;;;;;;;;;;-1:-1:-1;5454:620:0;;;;;:::i;:::-;;:::i;14086:84::-;;;;;;;;;;-1:-1:-1;14086:84:0;;14161:1;3681:36:1;;3669:2;3654:18;14086:84:0;3539:184:1;12631:28:0;;;;;;;;;;;;;;;;6082:297;;;;;;;;;;-1:-1:-1;6082:297:0;;;;;:::i;:::-;;:::i;21807:124::-;;;;;;;;;;-1:-1:-1;21807:124:0;;;;;:::i;:::-;;:::i;12923:49::-;;;;;;;;;;-1:-1:-1;12923:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;12380:21;;;;;;;;;;-1:-1:-1;12380:21:0;;;;-1:-1:-1;;;;;12380:21:0;;;21937:76;;;;;;;;;;;;;:::i;12823:32::-;;;;;;;;;;;;;;;;12410:51;;;;;;;;;;-1:-1:-1;12410:51:0;;;;;:::i;:::-;;;;;;;;;;;;;;14178:269;;;;;;;;;;-1:-1:-1;14178:269:0;;;;;:::i;:::-;;:::i;15575:402::-;;;;;;;;;;-1:-1:-1;15575:402:0;;;;;:::i;:::-;;:::i;20841:100::-;;;:::i;12784:30::-;;;;;;;;;;-1:-1:-1;12784:30:0;;;;;;;;4618:177;;;;;;;;;;-1:-1:-1;4618:177:0;;;;;:::i;:::-;-1:-1:-1;;;;;4769:18:0;4737:7;4769:18;;;;;;;;;;;;4618:177;8682:148;;;;;;;;;;;;;:::i;14549:313::-;;;;;;;;;;-1:-1:-1;14549:313:0;;;;;:::i;:::-;;:::i;8468:79::-;;;;;;;;;;-1:-1:-1;8533:6:0;;-1:-1:-1;;;;;8533:6:0;8468:79;;4289:104;;;;;;;;;;;;;:::i;6387:482::-;;;;;;;;;;-1:-1:-1;6387:482:0;;;;;:::i;:::-;;:::i;4803:216::-;;;;;;;;;;-1:-1:-1;4803:216:0;;;;;:::i;:::-;;:::i;21360:441::-;;;;;;;;;;-1:-1:-1;21360:441:0;;;;;:::i;:::-;;:::i;:::-;;;;5443:25:1;;;5499:2;5484:18;;5477:34;;;;5527:18;;;5520:34;;;;5585:2;5570:18;;5563:34;5628:3;5613:19;;5606:35;5430:3;5415:19;21360:441:0;5184:463:1;15289:278:0;;;;;;;;;;-1:-1:-1;15289:278:0;;;;;:::i;:::-;;:::i;22021:570::-;;;;;;;;;;-1:-1:-1;22021:570:0;;;;;:::i;:::-;;:::i;20949:399::-;;;;;;;;;;;;;:::i;:::-;;;;6729:25:1;;;6785:2;6770:18;;6763:34;;;;6813:18;;;6806:34;6871:2;6856:18;;6849:34;6716:3;6701:19;20949:399:0;6498:391:1;12714:27:0;;;;;;;;;;-1:-1:-1;12714:27:0;;;;-1:-1:-1;;;;;12714:27:0;;;12668:39;;;;;;;;;;-1:-1:-1;12668:39:0;;;;-1:-1:-1;;;;;12668:39:0;;;19465:629;;;;;;:::i;:::-;;:::i;19310:147::-;;;;;;;;;;-1:-1:-1;19310:147:0;;;;;:::i;:::-;;:::i;20240:253::-;;;;;;;;;;-1:-1:-1;20240:253:0;;;;;:::i;:::-;;:::i;5027:201::-;;;;;;;;;;-1:-1:-1;5027:201:0;;;;;:::i;:::-;-1:-1:-1;;;;;5193:18:0;;;5161:7;5193:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;5027:201;19069:233;;;;;;;;;;;;;:::i;12591:33::-;;;;;;;;;;;;;;;;8838:281;;;;;;;;;;-1:-1:-1;8838:281:0;;;;;:::i;:::-;;:::i;12979:37::-;;;;;;;;;;-1:-1:-1;12979:37:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;20102:130;8595:6;;-1:-1:-1;;;;;8595:6:0;315:10;8595:22;8587:67;;;;-1:-1:-1;;;8587:67:0;;;;;;;:::i;:::-;;;;;;;;;20158:17:::1;::::0;:22;20150:31:::1;;;::::0;::::1;;20212:12;20192:17;:32:::0;20102:130::o;15080:201::-;15123:7;15181:1;15161:17;;15146:12;:32;;;;:::i;:::-;:36;15143:49;;;-1:-1:-1;15191:1:0;;15080:201::o;15143:49::-;15241:1;15221:17;;15206:12;:32;;;;:::i;:::-;:36;15203:50;;;-1:-1:-1;15251:2:0;;15080:201::o;15203:50::-;-1:-1:-1;15271:2:0;;15080:201::o;4181:100::-;4235:13;4268:5;4261:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4181:100;:::o;20501:108::-;8595:6;;-1:-1:-1;;;;;8595:6:0;315:10;8595:22;8587:67;;;;-1:-1:-1;;;8587:67:0;;;;;;;:::i;:::-;20576:12:::1;:25:::0;;-1:-1:-1;;;;;;20576:25:0::1;-1:-1:-1::0;;;;;20576:25:0;;;::::1;::::0;;;::::1;::::0;;20501:108::o;5236:210::-;5355:4;5377:39;315:10;5400:7;5409:6;5377:8;:39::i;:::-;-1:-1:-1;5434:4:0;5236:210;;;;;:::o;22599:224::-;8595:6;;-1:-1:-1;;;;;8595:6:0;315:10;8595:22;8587:67;;;;-1:-1:-1;;;8587:67:0;;;;;;;:::i;:::-;22708:9:::1;22704:112;22723:19:::0;;::::1;22704:112;;;22796:8;22764:16;:29;22781:8;;22790:1;22781:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22764:29:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;22764:29:0;:40;22744:3;::::1;::::0;::::1;:::i;:::-;;;;22704:112;;;;22599:224:::0;;;:::o;20617:216::-;8595:6;;-1:-1:-1;;;;;8595:6:0;315:10;8595:22;8587:67;;;;-1:-1:-1;;;8587:67:0;;;;;;;:::i;:::-;20747:11:::1;::::0;:78:::1;::::0;-1:-1:-1;;;20747:78:0;;::::1;::::0;::::1;9193:25:1::0;;;9234:18;;;9227:34;;;9277:18;;;9270:34;;;-1:-1:-1;;;;;20747:11:0;;::::1;::::0;:35:::1;::::0;9166:18:1;;20747:78:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;20617:216:::0;;;:::o;14455:86::-;8595:6;;-1:-1:-1;;;;;8595:6:0;315:10;8595:22;8587:67;;;;-1:-1:-1;;;8587:67:0;;;;;;;:::i;:::-;14522:11:::1;::::0;;-1:-1:-1;;14507:26:0;::::1;14522:11;::::0;;::::1;14521:12;14507:26;::::0;;14455:86::o;5454:620::-;5594:4;5611:36;5621:6;5629:9;5640:6;5611:9;:36::i;:::-;-1:-1:-1;;;;;5687:19:0;;5660:24;5687:19;;;:11;:19;;;;;;;;315:10;5687:33;;;;;;;;-1:-1:-1;;5734:37:0;;5731:314;;5835:6;5815:16;:26;;5789:128;;;;-1:-1:-1;;;5789:128:0;;9517:2:1;5789:128:0;;;9499:21:1;9556:2;9536:18;;;9529:30;9595:34;9575:18;;;9568:62;-1:-1:-1;;;9646:18:1;;;9639:38;9694:19;;5789:128:0;9315:404:1;5789:128:0;5961:57;5970:6;315:10;6011:6;5992:16;:25;5961:8;:57::i;:::-;-1:-1:-1;6062:4:0;;5454:620;-1:-1:-1;;;;5454:620:0:o;6082:297::-;315:10;6197:4;6291:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6291:34:0;;;;;;;;;;6197:4;;6219:130;;6269:7;;6291:47;;6328:10;;6291:47;:::i;:::-;6219:8;:130::i;21807:124::-;21894:11;;:32;;-1:-1:-1;;;21894:32:0;;-1:-1:-1;;;;;931:32:1;;;21894::0;;;913:51:1;21870:7:0;;21894:11;;:24;;886:18:1;;21894:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;21937:76::-;21971:11;;:37;;-1:-1:-1;;;21971:37:0;;21997:10;21971:37;;;913:51:1;-1:-1:-1;;;;;21971:11:0;;;;:25;;886:18:1;;21971:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14178:269;8595:6;;-1:-1:-1;;;;;8595:6:0;315:10;8595:22;8587:67;;;;-1:-1:-1;;;8587:67:0;;;;;;;:::i;:::-;14314:3:::1;14293:13;4590:12:::0;;;4502:108;14293:13:::1;:17;::::0;14309:1:::1;14293:17;:::i;:::-;14292:25;;;;:::i;:::-;14279:9;:38;;14271:92;;;::::0;-1:-1:-1;;;14271:92:0;;10640:2:1;14271:92:0::1;::::0;::::1;10622:21:1::0;10679:2;10659:18;;;10652:30;10718:34;10698:18;;;10691:62;-1:-1:-1;;;10769:18:1;;;10762:39;10818:19;;14271:92:0::1;10438:405:1::0;14271:92:0::1;14374:18;:29:::0;;;;14414:13:::1;:25:::0;14178:269::o;15575:402::-;8595:6;;-1:-1:-1;;;;;8595:6:0;315:10;8595:22;8587:67;;;;-1:-1:-1;;;8587:67:0;;;;;;;:::i;:::-;15678:9:::1;15673:297;15693:18:::0;;::::1;15673:297;;;15764:6;15733:16;:28;15750:7;;15758:1;15750:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;15733:28:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;15733:28:0;:37;;-1:-1:-1;;15733:37:0::1;::::0;::::1;;::::0;;;::::1;::::0;;15785:174;::::1;;;15814:11;::::0;-1:-1:-1;;;;;15814:11:0::1;:20;15835:7:::0;;15843:1;15835:10;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;15814:35;::::0;-1:-1:-1;;;;;;15814:35:0::1;::::0;;;;;;-1:-1:-1;;;;;11048:32:1;;;15814:35:0::1;::::0;::::1;11030:51:1::0;15847:1:0::1;11097:18:1::0;;;11090:34;11003:18;;15814:35:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;15785:174;;;15888:11;::::0;-1:-1:-1;;;;;15888:11:0::1;:20;15909:7:::0;;15917:1;15909:10;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;15921:21;15931:7;;15939:1;15931:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;15921:21::-;15888:55;::::0;-1:-1:-1;;;;;;15888:55:0::1;::::0;;;;;;-1:-1:-1;;;;;11048:32:1;;;15888:55:0::1;::::0;::::1;11030:51:1::0;11097:18;;;11090:34;11003:18;;15888:55:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;15785:174;15713:3:::0;::::1;::::0;::::1;:::i;:::-;;;;15673:297;;20841:100:::0;20894:11;;;;;;;;;-1:-1:-1;;;;;20894:11:0;-1:-1:-1;;;;;20894:19:0;;20921:9;20894:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20841:100::o;8682:148::-;8595:6;;-1:-1:-1;;;;;8595:6:0;315:10;8595:22;8587:67;;;;-1:-1:-1;;;8587:67:0;;;;;;;:::i;:::-;8773:6:::1;::::0;8752:40:::1;::::0;8789:1:::1;::::0;-1:-1:-1;;;;;8773:6:0::1;::::0;8752:40:::1;::::0;8789:1;;8752:40:::1;8803:6;:19:::0;;-1:-1:-1;;;;;;8803:19:0::1;::::0;;8682:148::o;14549:313::-;8595:6;;-1:-1:-1;;;;;8595:6:0;315:10;8595:22;8587:67;;;;-1:-1:-1;;;8587:67:0;;;;;;;:::i;:::-;14675:6:::1;::::0;-1:-1:-1;;;;;14675:6:0;;::::1;14667:14:::0;;::::1;::::0;14645:101:::1;;;::::0;-1:-1:-1;;;14645:101:0;;11616:2:1;14645:101:0::1;::::0;::::1;11598:21:1::0;11655:2;11635:18;;;11628:30;11694:34;11674:18;;;11667:62;-1:-1:-1;;;11745:18:1;;;11738:35;11790:19;;14645:101:0::1;11414:401:1::0;14645:101:0::1;-1:-1:-1::0;;;;;14759:11:0;::::1;;::::0;;;:5:::1;:11;::::0;;;;;;;:19;;;::::1;;-1:-1:-1::0;;14759:19:0;;::::1;::::0;::::1;::::0;;;14789:16:::1;:22:::0;;;;;;:29;;;;::::1;14759:19:::0;14789:29:::1;::::0;;;14834:20;14759:19;;:11;14834:20:::1;::::0;::::1;14549:313:::0;;:::o;4289:104::-;4345:13;4378:7;4371:14;;;;;:::i;6387:482::-;315:10;6507:4;6556:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6556:34:0;;;;;;;;;;6623:35;;;;6601:122;;;;-1:-1:-1;;;6601:122:0;;12022:2:1;6601:122:0;;;12004:21:1;12061:2;12041:18;;;12034:30;12100:34;12080:18;;;12073:62;-1:-1:-1;;;12151:18:1;;;12144:35;12196:19;;6601:122:0;11820:401:1;6601:122:0;6759:67;315:10;6782:7;6810:15;6791:16;:34;6759:8;:67::i;:::-;-1:-1:-1;6857:4:0;;6387:482;-1:-1:-1;;;6387:482:0:o;4803:216::-;4925:4;4947:42;315:10;4971:9;4982:6;4947:9;:42::i;21360:441::-;21534:11;;:37;;-1:-1:-1;;;21534:37:0;;-1:-1:-1;;;;;931:32:1;;;21534:37:0;;;913:51:1;21421:13:0;;;;;;;;;;21534:11;;;:29;;886:18:1;;21534:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21588:11;;:37;;-1:-1:-1;;;21588:37:0;;-1:-1:-1;;;;;931:32:1;;;21588:37:0;;;913:51:1;21526:45:0;;-1:-1:-1;21588:11:0;;;:29;;886:18:1;;21588:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21649:11;;:36;;-1:-1:-1;;;21649:36:0;;-1:-1:-1;;;;;931:32:1;;;21649:36:0;;;913:51:1;21579:46:0;;-1:-1:-1;21649:11:0;;;:28;;886:18:1;;21649:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21707:11;;:34;;-1:-1:-1;;;21707:34:0;;-1:-1:-1;;;;;931:32:1;;;21707:34:0;;;913:51:1;21633:52:0;;-1:-1:-1;21707:11:0;;;:26;;886:18:1;;21707:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21764:11;;:32;;-1:-1:-1;;;21764:32:0;;-1:-1:-1;;;;;931:32:1;;;21764::0;;;913:51:1;21693:48:0;;-1:-1:-1;21764:11:0;;;:24;;886:18:1;;21764:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21752:44;;21360:441;;;;;;;:::o;15289:278::-;8595:6;;-1:-1:-1;;;;;8595:6:0;315:10;8595:22;8587:67;;;;-1:-1:-1;;;8587:67:0;;;;;;;:::i;:::-;15391:9:::1;15386:174;15406:19:::0;;::::1;15386:174;;;15482:8;15447:19;:32;15467:8;;15476:1;15467:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;15447:32:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;15447:32:0;:43;;-1:-1:-1;;15447:43:0::1;::::0;::::1;;::::0;;;::::1;::::0;;15526:8;;15535:1;15526:11;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;15510:38:0::1;;15539:8;15510:38;;;;1848:14:1::0;1841:22;1823:41;;1811:2;1796:18;;1683:187;15510:38:0::1;;;;;;;;15427:3:::0;::::1;::::0;::::1;:::i;:::-;;;;15386:174;;22021:570:::0;8595:6;;-1:-1:-1;;;;;8595:6:0;315:10;8595:22;8587:67;;;;-1:-1:-1;;;8587:67:0;;;;;;;:::i;:::-;22163:40;;::::1;22155:83;;;::::0;-1:-1:-1;;;22155:83:0;;12428:2:1;22155:83:0::1;::::0;::::1;12410:21:1::0;12467:2;12447:18;;;12440:30;12506:32;12486:18;;;12479:60;12556:18;;22155:83:0::1;12226:354:1::0;22155:83:0::1;22256:9;22251:333;22271:18:::0;;::::1;22251:333;;;22311:76;22327:10;22339:7;;22347:1;22339:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;12539:15;12497:1;12539:2;:15;:::i;:::-;22351;;22367:1;22351:18;;;;;;;:::i;:::-;;;;;;;:35;;;;:::i;:::-;22311:15;:76::i;:::-;22405:7;22402:170;;;22431:11;::::0;-1:-1:-1;;;;;22431:11:0::1;:20;22452:7:::0;;22460:1;22452:10;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;12539:15;12497:1;12539:2;:15;:::i;:::-;22464;;22480:1;22464:18;;;;;;;:::i;:::-;;;;;;;:35;;;;:::i;:::-;22431:69;::::0;-1:-1:-1;;;;;;22431:69:0::1;::::0;;;;;;-1:-1:-1;;;;;11048:32:1;;;22431:69:0::1;::::0;::::1;11030:51:1::0;11097:18;;;11090:34;11003:18;;22431:69:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;22402:170;;;22568:4;22537:16;:28;22554:7;;22562:1;22554:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22537:28:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;22537:28:0;:35;;-1:-1:-1;;22537:35:0::1;::::0;::::1;;::::0;;;::::1;::::0;;22402:170:::1;22291:3:::0;::::1;::::0;::::1;:::i;:::-;;;;22251:333;;;;22021:570:::0;;;;;:::o;20949:399::-;21001:20;21023:24;21049:25;21076:21;21125:11;;;;;;;;;-1:-1:-1;;;;;21125:11:0;-1:-1:-1;;;;;21125:29:0;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21110:46;;21186:11;;;;;;;;;-1:-1:-1;;;;;21186:11:0;-1:-1:-1;;;;;21186:31:0;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21167:52;;21250:11;;;;;;;;;-1:-1:-1;;;;;21250:11:0;-1:-1:-1;;;;;21250:30:0;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21230:52;;21309:11;;;;;;;;;-1:-1:-1;;;;;21309:11:0;-1:-1:-1;;;;;21309:29:0;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21293:47;;20949:399;;;;:::o;19465:629::-;8595:6;;-1:-1:-1;;;;;8595:6:0;315:10;8595:22;8587:67;;;;-1:-1:-1;;;8587:67:0;;;;;;;:::i;:::-;19544:17:::1;::::0;:22;19536:31:::1;;;::::0;::::1;;19598:1;19586:9;:13;19578:44;;;::::0;-1:-1:-1;;;19578:44:0;;14170:2:1;19578:44:0::1;::::0;::::1;14152:21:1::0;14209:2;14189:18;;;14182:30;-1:-1:-1;;;14228:18:1;;;14221:48;14286:18;;19578:44:0::1;13968:342:1::0;19578:44:0::1;19650:1;19641:6;:10;19633:45;;;::::0;-1:-1:-1;;;19633:45:0;;14517:2:1;19633:45:0::1;::::0;::::1;14499:21:1::0;14556:2;14536:18;;;14529:30;-1:-1:-1;;;14575:18:1;;;14568:52;14637:18;;19633:45:0::1;14315:346:1::0;19633:45:0::1;19691:11;19705:9;-1:-1:-1::0;;;;;19705:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19691:30;;19755:9;-1:-1:-1::0;;;;;19755:17:0::1;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19743:63;::::0;-1:-1:-1;;;19743:63:0;;-1:-1:-1;;;;;15152:15:1;;;19743:63:0::1;::::0;::::1;15134:34:1::0;19800:4:0::1;15184:18:1::0;;;15177:43;19743::0;;;::::1;::::0;::::1;::::0;15069:18:1;;19743:63:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19734:6;:72:::0;;-1:-1:-1;;;;;;19734:72:0::1;-1:-1:-1::0;;;;;19734:72:0;;::::1;::::0;;::::1;::::0;;-1:-1:-1;19817:13:0;;;:5:::1;:13;::::0;;;;;;;:20;;-1:-1:-1;;19817:20:0;;::::1;-1:-1:-1::0;19817:20:0;;::::1;::::0;;;19865:6;;;;::::1;19848:24:::0;;:16:::1;:24:::0;;;;;:31;;;;::::1;::::0;;::::1;::::0;;19892:67:::1;19908:10;19928:4;12539:15;12497:1;12539:2;:15;:::i;:::-;19935:23;::::0;:6;:23:::1;:::i;19892:67::-;19972:9;-1:-1:-1::0;;;;;19972:25:0::1;;20005:9;20024:4;20030:24;20048:4;-1:-1:-1::0;;;;;4769:18:0;4737:7;4769:18;;;;;;;;;;;;4618:177;20030:24:::1;19972:114;::::0;-1:-1:-1;;;;;;19972:114:0::1;::::0;;;;;;-1:-1:-1;;;;;15590:15:1;;;19972:114:0::1;::::0;::::1;15572:34:1::0;15622:18;;;15615:34;20055:1:0::1;15665:18:1::0;;;15658:34;;;15708:18;;;15701:34;20059:10:0::1;15751:19:1::0;;;15744:44;20070:15:0::1;15804:19:1::0;;;15797:35;15506:19;;19972:114:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;19310:147::-:0;8595:6;;-1:-1:-1;;;;;8595:6:0;315:10;8595:22;8587:67;;;;-1:-1:-1;;;8587:67:0;;;;;;;:::i;:::-;19395:1:::1;19385:6;:11;;19377:44;;;::::0;-1:-1:-1;;;19377:44:0;;16356:2:1;19377:44:0::1;::::0;::::1;16338:21:1::0;16395:2;16375:18;;;16368:30;-1:-1:-1;;;16414:18:1;;;16407:50;16474:18;;19377:44:0::1;16154:344:1::0;19377:44:0::1;19432:8;:17:::0;19310:147::o;20240:253::-;8595:6;;-1:-1:-1;;;;;8595:6:0;315:10;8595:22;8587:67;;;;-1:-1:-1;;;8587:67:0;;;;;;;:::i;:::-;20333:7:::1;20330:59;;;20356:11;::::0;:33:::1;::::0;-1:-1:-1;;;20356:33:0;;-1:-1:-1;;;;;931:32:1;;;20356:33:0::1;::::0;::::1;913:51:1::0;20356:11:0;;::::1;::::0;:19:::1;::::0;886:18:1;;20356:33:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;20330:59;20402:11;:48:::0;;-1:-1:-1;;;;;;20402:48:0::1;-1:-1:-1::0;;;;;20402:48:0;::::1;::::0;;::::1;::::0;;;20461:24:::1;::::0;;-1:-1:-1;;;20461:24:0;;;;:22:::1;::::0;:24:::1;::::0;;::::1;::::0;-1:-1:-1;;20461:24:0;;;;;;;;-1:-1:-1;20402:48:0;20461:24;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;19069:233:::0;8533:6;;-1:-1:-1;;;;;8533:6:0;19120:10;:21;;:51;;-1:-1:-1;19159:12:0;;-1:-1:-1;;;;;19159:12:0;19145:10;:26;19120:51;19112:76;;;;-1:-1:-1;;;19112:76:0;;16705:2:1;19112:76:0;;;16687:21:1;16744:2;16724:18;;;16717:30;-1:-1:-1;;;16763:18:1;;;16756:42;16815:18;;19112:76:0;16503:336:1;19112:76:0;19236:58;;19199:12;;19244:10;;19268:21;;19199:12;19236:58;19199:12;19236:58;19268:21;19244:10;19236:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8838:281;8595:6;;-1:-1:-1;;;;;8595:6:0;315:10;8595:22;8587:67;;;;-1:-1:-1;;;8587:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8941:22:0;::::1;8919:110;;;::::0;-1:-1:-1;;;8919:110:0;;17256:2:1;8919:110:0::1;::::0;::::1;17238:21:1::0;17295:2;17275:18;;;17268:30;17334:34;17314:18;;;17307:62;-1:-1:-1;;;17385:18:1;;;17378:36;17431:19;;8919:110:0::1;17054:402:1::0;8919:110:0::1;9066:6;::::0;9045:38:::1;::::0;-1:-1:-1;;;;;9045:38:0;;::::1;::::0;9066:6:::1;::::0;9045:38:::1;::::0;9066:6:::1;::::0;9045:38:::1;9094:6;:17:::0;;-1:-1:-1;;;;;;9094:17:0::1;-1:-1:-1::0;;;;;9094:17:0;;;::::1;::::0;;;::::1;::::0;;8838:281::o;7536:380::-;-1:-1:-1;;;;;7672:19:0;;7664:68;;;;-1:-1:-1;;;7664:68:0;;17663:2:1;7664:68:0;;;17645:21:1;17702:2;17682:18;;;17675:30;17741:34;17721:18;;;17714:62;-1:-1:-1;;;17792:18:1;;;17785:34;17836:19;;7664:68:0;17461:400:1;7664:68:0;-1:-1:-1;;;;;7751:21:0;;7743:68;;;;-1:-1:-1;;;7743:68:0;;18068:2:1;7743:68:0;;;18050:21:1;18107:2;18087:18;;;18080:30;18146:34;18126:18;;;18119:62;-1:-1:-1;;;18197:18:1;;;18190:32;18239:19;;7743:68:0;17866:398:1;7743:68:0;-1:-1:-1;;;;;7824:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;7876:32;;160:25:1;;;7876:32:0;;133:18:1;7876:32:0;;;;;;;7536:380;;;:::o;15985:1919::-;-1:-1:-1;;;;;16117:18:0;;16109:68;;;;-1:-1:-1;;;16109:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16196:16:0;;16188:64;;;;-1:-1:-1;;;16188:64:0;;;;;;;:::i;:::-;16280:1;16271:6;:10;16263:52;;;;-1:-1:-1;;;16263:52:0;;19281:2:1;16263:52:0;;;19263:21:1;19320:2;19300:18;;;19293:30;19359:31;19339:18;;;19332:59;19408:18;;16263:52:0;19079:353:1;16263:52:0;16331:17;;16352:1;16331:22;16328:1330;;8533:6;;-1:-1:-1;;;;;16378:15:0;;;8533:6;;16378:15;;:32;;-1:-1:-1;8533:6:0;;-1:-1:-1;;;;;16397:13:0;;;8533:6;;16397:13;16378:32;:57;;;-1:-1:-1;;;;;;16414:21:0;;16430:4;16414:21;16378:57;:80;;;-1:-1:-1;;;;;;16439:19:0;;16453:4;16439:19;16378:80;16370:115;;;;-1:-1:-1;;;16370:115:0;;19639:2:1;16370:115:0;;;19621:21:1;19678:2;19658:18;;;19651:30;-1:-1:-1;;;19697:18:1;;;19690:52;19759:18;;16370:115:0;19437:346:1;16370:115:0;16500:33;16516:4;16522:2;16526:6;16500:15;:33::i;:::-;16328:1330;;;-1:-1:-1;;;;;16580:25:0;;;;;;:19;:25;;;;;;;;16579:26;:54;;;;-1:-1:-1;;;;;;16610:23:0;;;;;;:19;:23;;;;;;;;16609:24;16579:54;16575:1022;;;16654:12;16689:11;16703:13;:11;:13::i;:::-;16689:27;;16735:11;16749:12;:10;:12::i;:::-;-1:-1:-1;;;;;16786:9:0;;;;;;:5;:9;;;;;;16735:26;;-1:-1:-1;16786:9:0;;16782:447;;;16823:7;;16820:64;;16881:3;16865:12;16874:3;16865:6;:12;:::i;:::-;16864:20;;;;:::i;:::-;16857:27;;16820:64;-1:-1:-1;;;;;16914:22:0;;;;;;:16;:22;;;;;;;;16909:180;;-1:-1:-1;;;;;16965:22:0;;;;;;;:16;:22;;;;;;:29;;-1:-1:-1;;16965:29:0;16990:4;16965:29;;;17025:11;;:29;;-1:-1:-1;;;17025:29:0;;;;;11030:51:1;;;;11097:18;;;11090:34;;;;17025:11:0;;;;:20;;11003:18:1;;17025:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17021:45;;16782:447;;;17141:1;17135:3;:7;:22;;;;-1:-1:-1;;;;;;17146:11:0;;;;;;:5;:11;;;;;;;;17135:22;17131:98;;;17206:3;17190:12;17199:3;17190:6;:12;:::i;:::-;17189:20;;;;:::i;:::-;17182:27;;17131:98;17253:8;;17249:99;;17286:42;17302:4;17316;17323;17286:15;:42::i;:::-;17368:14;17378:4;17368:14;;:::i;:::-;17407:11;;17368:14;;-1:-1:-1;17407:11:0;;:24;;;;-1:-1:-1;17423:8:0;;;;17422:9;17407:24;:37;;;;-1:-1:-1;;;;;;17435:9:0;;;;;;:5;:9;;;;;;;;17407:37;17403:179;;;17469:8;:15;;-1:-1:-1;;17469:15:0;17480:4;17469:15;;;17507:16;17516:6;17507:8;:16::i;:::-;17546:8;:16;;-1:-1:-1;;17546:16:0;;;17403:179;16635:962;;;16575:1022;17613:33;17629:4;17635:2;17639:6;17613:15;:33::i;:::-;17670:30;17691:4;17697:2;17670:20;:30::i;:::-;-1:-1:-1;;;;;17717:22:0;;;;;;:16;:22;;;;;;;;17713:90;;17746:11;;-1:-1:-1;;;;;17746:11:0;:20;17767:4;17773:15;17767:4;-1:-1:-1;;;;;4769:18:0;4737:7;4769:18;;;;;;;;;;;;4618:177;17773:15;17746:43;;-1:-1:-1;;;;;;17746:43:0;;;;;;;-1:-1:-1;;;;;11048:32:1;;;17746:43:0;;;11030:51:1;11097:18;;;11090:34;11003:18;;17746:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17742:59;;-1:-1:-1;;;;;17817:20:0;;;;;;:16;:20;;;;;;;;17813:84;;17844:11;;-1:-1:-1;;;;;17844:11:0;:20;17865:2;17869:13;17865:2;-1:-1:-1;;;;;4769:18:0;4737:7;4769:18;;;;;;;;;;;;4618:177;17869:13;17844:39;;-1:-1:-1;;;;;;17844:39:0;;;;;;;-1:-1:-1;;;;;11048:32:1;;;17844:39:0;;;11030:51:1;11097:18;;;11090:34;11003:18;;17844:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17840:55;15985:1919;;;:::o;6877:651::-;-1:-1:-1;;;;;7017:20:0;;7009:70;;;;-1:-1:-1;;;7009:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7098:23:0;;7090:71;;;;-1:-1:-1;;;7090:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7198:17:0;;7174:21;7198:17;;;;;;;;;;;7248:23;;;;7226:111;;;;-1:-1:-1;;;7226:111:0;;19990:2:1;7226:111:0;;;19972:21:1;20029:2;20009:18;;;20002:30;20068:34;20048:18;;;20041:62;-1:-1:-1;;;20119:18:1;;;20112:36;20165:19;;7226:111:0;19788:402:1;7226:111:0;-1:-1:-1;;;;;7373:17:0;;;:9;:17;;;;;;;;;;;7393:22;;;7373:42;;7437:20;;;;;;;;:30;;7409:6;;7373:9;7437:30;;7409:6;;7437:30;:::i;:::-;;;;;;;;7502:9;-1:-1:-1;;;;;7485:35:0;7494:6;-1:-1:-1;;;;;7485:35:0;;7513:6;7485:35;;;;160:25:1;;148:2;133:18;;14:177;7485:35:0;;;;;;;;6998:530;6877:651;;;:::o;18336:725::-;18430:4;18389:20;4769:18;;;;;;;;;;;18466;;18451:33;;18447:46;;;18486:7;18336:725;:::o;18447:46::-;18522:13;;18507:12;:28;18503:62;;;-1:-1:-1;18552:13:0;;18503:62;18595:6;18580:12;:21;18576:48;;;-1:-1:-1;18618:6:0;18576:48;18639:12;18655:1;18639:17;18635:30;;18658:7;18336:725;:::o;18635:30::-;18698:21;18732:30;18749:12;18732:16;:30::i;:::-;18775:17;18795:34;18819:10;18795:21;:34;:::i;:::-;18775:54;-1:-1:-1;18845:13:0;;18842:212;;18875:14;18932:12;:10;:12::i;:::-;18920:9;18908:8;;18893:12;:10;:12::i;:::-;:23;;;;:::i;:::-;18892:37;;;;:::i;:::-;:52;;;;:::i;:::-;18875:69;-1:-1:-1;18962:10:0;;18959:84;;18995:11;;;;;;;;;-1:-1:-1;;;;;18995:11:0;-1:-1:-1;;;;;18995:19:0;;19022:6;18995:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18991:52;;;18860:194;18378:683;;;18336:725;:::o;22831:195::-;-1:-1:-1;;;;;22920:22:0;;;;;;:16;:22;;;;;;:27;;:44;;-1:-1:-1;8533:6:0;;-1:-1:-1;;;;;22951:13:0;;;8533:6;;22951:13;22920:44;22912:106;;;;-1:-1:-1;;;22912:106:0;;20397:2:1;22912:106:0;;;20379:21:1;20436:2;20416:18;;;20409:30;20475:34;20455:18;;;20448:62;-1:-1:-1;;;20526:18:1;;;20519:47;20583:19;;22912:106:0;20195:413:1;22912:106:0;22831:195;;:::o;17912:416::-;18002:16;;;18016:1;18002:16;;;;;;;;17978:21;;18002:16;;;;;;;;;;-1:-1:-1;18002:16:0;17978:40;;18047:4;18029;18034:1;18029:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;18029:23:0;;;-1:-1:-1;;;;;18029:23:0;;;;;18073:9;-1:-1:-1;;;;;18073:14:0;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18063:4;18068:1;18063:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;18063:26:0;;;:7;;;;;;;;;:26;18102:218;;-1:-1:-1;;;18102:218:0;;:9;:60;;;;;;:218;;18177:11;;18203:1;;18247:4;;18274;;18294:15;;18102:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;196:548:1;308:4;337:2;366;355:9;348:21;398:6;392:13;441:6;436:2;425:9;421:18;414:34;466:1;476:140;490:6;487:1;484:13;476:140;;;585:14;;;581:23;;575:30;551:17;;;570:2;547:26;540:66;505:10;;476:140;;;480:3;665:1;660:2;651:6;640:9;636:22;632:31;625:42;735:2;728;724:7;719:2;711:6;707:15;703:29;692:9;688:45;684:54;676:62;;;;196:548;;;;:::o;975:131::-;-1:-1:-1;;;;;1050:31:1;;1040:42;;1030:70;;1096:1;1093;1086:12;1030:70;975:131;:::o;1111:247::-;1170:6;1223:2;1211:9;1202:7;1198:23;1194:32;1191:52;;;1239:1;1236;1229:12;1191:52;1278:9;1265:23;1297:31;1322:5;1297:31;:::i;:::-;1347:5;1111:247;-1:-1:-1;;;1111:247:1:o;1363:315::-;1431:6;1439;1492:2;1480:9;1471:7;1467:23;1463:32;1460:52;;;1508:1;1505;1498:12;1460:52;1547:9;1534:23;1566:31;1591:5;1566:31;:::i;:::-;1616:5;1668:2;1653:18;;;;1640:32;;-1:-1:-1;;;1363:315:1:o;1875:367::-;1938:8;1948:6;2002:3;1995:4;1987:6;1983:17;1979:27;1969:55;;2020:1;2017;2010:12;1969:55;-1:-1:-1;2043:20:1;;2086:18;2075:30;;2072:50;;;2118:1;2115;2108:12;2072:50;2155:4;2147:6;2143:17;2131:29;;2215:3;2208:4;2198:6;2195:1;2191:14;2183:6;2179:27;2175:38;2172:47;2169:67;;;2232:1;2229;2222:12;2169:67;1875:367;;;;;:::o;2247:505::-;2342:6;2350;2358;2411:2;2399:9;2390:7;2386:23;2382:32;2379:52;;;2427:1;2424;2417:12;2379:52;2467:9;2454:23;2500:18;2492:6;2489:30;2486:50;;;2532:1;2529;2522:12;2486:50;2571:70;2633:7;2624:6;2613:9;2609:22;2571:70;:::i;:::-;2660:8;;2545:96;;-1:-1:-1;2742:2:1;2727:18;;;;2714:32;;2247:505;-1:-1:-1;;;;2247:505:1:o;2757:316::-;2834:6;2842;2850;2903:2;2891:9;2882:7;2878:23;2874:32;2871:52;;;2919:1;2916;2909:12;2871:52;-1:-1:-1;;2942:23:1;;;3012:2;2997:18;;2984:32;;-1:-1:-1;3063:2:1;3048:18;;;3035:32;;2757:316;-1:-1:-1;2757:316:1:o;3078:456::-;3155:6;3163;3171;3224:2;3212:9;3203:7;3199:23;3195:32;3192:52;;;3240:1;3237;3230:12;3192:52;3279:9;3266:23;3298:31;3323:5;3298:31;:::i;:::-;3348:5;-1:-1:-1;3405:2:1;3390:18;;3377:32;3418:33;3377:32;3418:33;:::i;:::-;3078:456;;3470:7;;-1:-1:-1;;;3524:2:1;3509:18;;;;3496:32;;3078:456::o;3936:248::-;4004:6;4012;4065:2;4053:9;4044:7;4040:23;4036:32;4033:52;;;4081:1;4078;4071:12;4033:52;-1:-1:-1;;4104:23:1;;;4174:2;4159:18;;;4146:32;;-1:-1:-1;3936:248:1:o;4189:160::-;4254:20;;4310:13;;4303:21;4293:32;;4283:60;;4339:1;4336;4329:12;4283:60;4189:160;;;:::o;4354:505::-;4446:6;4454;4462;4515:2;4503:9;4494:7;4490:23;4486:32;4483:52;;;4531:1;4528;4521:12;4483:52;4571:9;4558:23;4604:18;4596:6;4593:30;4590:50;;;4636:1;4633;4626:12;4590:50;4675:70;4737:7;4728:6;4717:9;4713:22;4675:70;:::i;:::-;4764:8;;-1:-1:-1;4649:96:1;-1:-1:-1;4818:35:1;;-1:-1:-1;4849:2:1;4834:18;;4818:35;:::i;:::-;4808:45;;4354:505;;;;;:::o;4864:315::-;4929:6;4937;4990:2;4978:9;4969:7;4965:23;4961:32;4958:52;;;5006:1;5003;4996:12;4958:52;5045:9;5032:23;5064:31;5089:5;5064:31;:::i;:::-;5114:5;-1:-1:-1;5138:35:1;5169:2;5154:18;;5138:35;:::i;:::-;5128:45;;4864:315;;;;;:::o;5652:841::-;5780:6;5788;5796;5804;5812;5865:2;5853:9;5844:7;5840:23;5836:32;5833:52;;;5881:1;5878;5871:12;5833:52;5921:9;5908:23;5950:18;5991:2;5983:6;5980:14;5977:34;;;6007:1;6004;5997:12;5977:34;6046:70;6108:7;6099:6;6088:9;6084:22;6046:70;:::i;:::-;6135:8;;-1:-1:-1;6020:96:1;-1:-1:-1;6223:2:1;6208:18;;6195:32;;-1:-1:-1;6239:16:1;;;6236:36;;;6268:1;6265;6258:12;6236:36;;6307:72;6371:7;6360:8;6349:9;6345:24;6307:72;:::i;:::-;6398:8;;-1:-1:-1;6281:98:1;-1:-1:-1;6452:35:1;;-1:-1:-1;6483:2:1;6468:18;;6452:35;:::i;:::-;6442:45;;5652:841;;;;;;;;:::o;7130:180::-;7189:6;7242:2;7230:9;7221:7;7217:23;7213:32;7210:52;;;7258:1;7255;7248:12;7210:52;-1:-1:-1;7281:23:1;;7130:180;-1:-1:-1;7130:180:1:o;7315:388::-;7383:6;7391;7444:2;7432:9;7423:7;7419:23;7415:32;7412:52;;;7460:1;7457;7450:12;7412:52;7499:9;7486:23;7518:31;7543:5;7518:31;:::i;:::-;7568:5;-1:-1:-1;7625:2:1;7610:18;;7597:32;7638:33;7597:32;7638:33;:::i;:::-;7690:7;7680:17;;;7315:388;;;;;:::o;7708:356::-;7910:2;7892:21;;;7929:18;;;7922:30;7988:34;7983:2;7968:18;;7961:62;8055:2;8040:18;;7708:356::o;8069:127::-;8130:10;8125:3;8121:20;8118:1;8111:31;8161:4;8158:1;8151:15;8185:4;8182:1;8175:15;8201:128;8268:9;;;8289:11;;;8286:37;;;8303:18;;:::i;8334:380::-;8413:1;8409:12;;;;8456;;;8477:61;;8531:4;8523:6;8519:17;8509:27;;8477:61;8584:2;8576:6;8573:14;8553:18;8550:38;8547:161;;8630:10;8625:3;8621:20;8618:1;8611:31;8665:4;8662:1;8655:15;8693:4;8690:1;8683:15;8547:161;;8334:380;;;:::o;8719:127::-;8780:10;8775:3;8771:20;8768:1;8761:31;8811:4;8808:1;8801:15;8835:4;8832:1;8825:15;8851:135;8890:3;8911:17;;;8908:43;;8931:18;;:::i;:::-;-1:-1:-1;8978:1:1;8967:13;;8851:135::o;9724:125::-;9789:9;;;9810:10;;;9807:36;;;9823:18;;:::i;9854:184::-;9924:6;9977:2;9965:9;9956:7;9952:23;9948:32;9945:52;;;9993:1;9990;9983:12;9945:52;-1:-1:-1;10016:16:1;;9854:184;-1:-1:-1;9854:184:1:o;10043:168::-;10116:9;;;10147;;10164:15;;;10158:22;;10144:37;10134:71;;10185:18;;:::i;10216:217::-;10256:1;10282;10272:132;;10326:10;10321:3;10317:20;10314:1;10307:31;10361:4;10358:1;10351:15;10389:4;10386:1;10379:15;10272:132;-1:-1:-1;10418:9:1;;10216:217::o;12585:422::-;12674:1;12717:5;12674:1;12731:270;12752:7;12742:8;12739:21;12731:270;;;12811:4;12807:1;12803:6;12799:17;12793:4;12790:27;12787:53;;;12820:18;;:::i;:::-;12870:7;12860:8;12856:22;12853:55;;;12890:16;;;;12853:55;12969:22;;;;12929:15;;;;12731:270;;;12735:3;12585:422;;;;;:::o;13012:806::-;13061:5;13091:8;13081:80;;-1:-1:-1;13132:1:1;13146:5;;13081:80;13180:4;13170:76;;-1:-1:-1;13217:1:1;13231:5;;13170:76;13262:4;13280:1;13275:59;;;;13348:1;13343:130;;;;13255:218;;13275:59;13305:1;13296:10;;13319:5;;;13343:130;13380:3;13370:8;13367:17;13364:43;;;13387:18;;:::i;:::-;-1:-1:-1;;13443:1:1;13429:16;;13458:5;;13255:218;;13557:2;13547:8;13544:16;13538:3;13532:4;13529:13;13525:36;13519:2;13509:8;13506:16;13501:2;13495:4;13492:12;13488:35;13485:77;13482:159;;;-1:-1:-1;13594:19:1;;;13626:5;;13482:159;13673:34;13698:8;13692:4;13673:34;:::i;:::-;13743:6;13739:1;13735:6;13731:19;13722:7;13719:32;13716:58;;;13754:18;;:::i;:::-;13792:20;;13012:806;-1:-1:-1;;;13012:806:1:o;13823:140::-;13881:5;13910:47;13951:4;13941:8;13937:19;13931:4;13910:47;:::i;14666:251::-;14736:6;14789:2;14777:9;14768:7;14764:23;14760:32;14757:52;;;14805:1;14802;14795:12;14757:52;14837:9;14831:16;14856:31;14881:5;14856:31;:::i;15843:306::-;15931:6;15939;15947;16000:2;15988:9;15979:7;15975:23;15971:32;15968:52;;;16016:1;16013;16006:12;15968:52;16045:9;16039:16;16029:26;;16095:2;16084:9;16080:18;16074:25;16064:35;;16139:2;16128:9;16124:18;16118:25;16108:35;;15843:306;;;;;:::o;18269:401::-;18471:2;18453:21;;;18510:2;18490:18;;;18483:30;18549:34;18544:2;18529:18;;18522:62;-1:-1:-1;;;18615:2:1;18600:18;;18593:35;18660:3;18645:19;;18269:401::o;18675:399::-;18877:2;18859:21;;;18916:2;18896:18;;;18889:30;18955:34;18950:2;18935:18;;18928:62;-1:-1:-1;;;19021:2:1;19006:18;;18999:33;19064:3;19049:19;;18675:399::o;20745:980::-;21007:4;21055:3;21044:9;21040:19;21086:6;21075:9;21068:25;21112:2;21150:6;21145:2;21134:9;21130:18;21123:34;21193:3;21188:2;21177:9;21173:18;21166:31;21217:6;21252;21246:13;21283:6;21275;21268:22;21321:3;21310:9;21306:19;21299:26;;21360:2;21352:6;21348:15;21334:29;;21381:1;21391:195;21405:6;21402:1;21399:13;21391:195;;;21470:13;;-1:-1:-1;;;;;21466:39:1;21454:52;;21561:15;;;;21526:12;;;;21502:1;21420:9;21391:195;;;-1:-1:-1;;;;;;;21642:32:1;;;;21637:2;21622:18;;21615:60;-1:-1:-1;;;21706:3:1;21691:19;21684:35;21603:3;20745:980;-1:-1:-1;;;20745:980:1:o

Swarm Source

ipfs://6ebc6892a77bd93811c49f802d8bddfa0c8cce0d9ec437eebaece2340769631a

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.