ETH Price: $3,453.40 (-1.12%)
Gas: 10 Gwei

Contract

0xf315EC7B1063E21d5AbaF12cA3470F57AbF47ea5
 

Overview

ETH Balance

0.249776463872350648 ETH

Eth Value

$862.58 (@ $3,453.40/ETH)

Token Holdings

More Info

Private Name Tags

TokenTracker

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve191205272024-01-30 16:30:23169 days ago1706632223IN
0xf315EC7B...7AbF47ea5
0 ETH0.0028680761.98557747
Transfer182061492023-09-24 14:07:35297 days ago1695564455IN
0xf315EC7B...7AbF47ea5
0 ETH0.001074219.11737633
Transfer181460612023-09-16 3:30:47306 days ago1694835047IN
0xf315EC7B...7AbF47ea5
0 ETH0.001047378.89015553
Approve180561962023-09-03 13:14:23318 days ago1693746863IN
0xf315EC7B...7AbF47ea5
0 ETH0.0005578912.00140496
Approve179915652023-08-25 11:59:35327 days ago1692964775IN
0xf315EC7B...7AbF47ea5
0 ETH0.0004014216.54529282
Approve178667982023-08-08 1:02:11345 days ago1691456531IN
0xf315EC7B...7AbF47ea5
0 ETH0.0003898714.84554943
Approve178667962023-08-08 1:01:47345 days ago1691456507IN
0xf315EC7B...7AbF47ea5
0 ETH0.0003838614.61663577
Approve178667312023-08-08 0:48:47345 days ago1691455727IN
0xf315EC7B...7AbF47ea5
0 ETH0.0003664513.95374482
Approve178667282023-08-08 0:48:11345 days ago1691455691IN
0xf315EC7B...7AbF47ea5
0 ETH0.0003550214.63291977
Approve178667262023-08-08 0:47:47345 days ago1691455667IN
0xf315EC7B...7AbF47ea5
0 ETH0.0003413914.07128635
Approve178667012023-08-08 0:42:47345 days ago1691455367IN
0xf315EC7B...7AbF47ea5
0 ETH0.0003513314.48101468
Approve177764692023-07-26 9:50:47357 days ago1690365047IN
0xf315EC7B...7AbF47ea5
0 ETH0.0008797118.9
Approve176884252023-07-14 1:25:47370 days ago1689297947IN
0xf315EC7B...7AbF47ea5
0 ETH0.0010263322.05
Approve176544272023-07-09 6:39:47375 days ago1688884787IN
0xf315EC7B...7AbF47ea5
0 ETH0.0007330915.75
Transfer176543392023-07-09 6:21:59375 days ago1688883719IN
0xf315EC7B...7AbF47ea5
0 ETH0.0007490914.7
Transfer176543172023-07-09 6:17:23375 days ago1688883443IN
0xf315EC7B...7AbF47ea5
0 ETH0.0007643815
Approve176465802023-07-08 4:09:11376 days ago1688789351IN
0xf315EC7B...7AbF47ea5
0 ETH0.000339613.99728801
Approve176424172023-07-07 14:07:35376 days ago1688738855IN
0xf315EC7B...7AbF47ea5
0 ETH0.0011808448.67049246
Approve175643282023-06-26 14:55:35387 days ago1687791335IN
0xf315EC7B...7AbF47ea5
0 ETH0.0013221128.58866483
Approve175434122023-06-23 16:19:11390 days ago1687537151IN
0xf315EC7B...7AbF47ea5
0 ETH0.002212747.59936719
Transfer175408222023-06-23 7:34:59391 days ago1687505699IN
0xf315EC7B...7AbF47ea5
0 ETH0.0016085813.65
Transfer175194212023-06-20 7:26:59394 days ago1687246019IN
0xf315EC7B...7AbF47ea5
0 ETH0.0008563116.8
Approve175135222023-06-19 11:32:59394 days ago1687174379IN
0xf315EC7B...7AbF47ea5
0 ETH0.0008401718.05042531
Approve175129122023-06-19 9:30:23395 days ago1687167023IN
0xf315EC7B...7AbF47ea5
0 ETH0.0016271934.95887505
Transfer175104642023-06-19 1:16:11395 days ago1687137371IN
0xf315EC7B...7AbF47ea5
0 ETH0.0007382414.47793758
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
176544362023-07-09 6:41:35375 days ago1688884895
0xf315EC7B...7AbF47ea5
0.00038253 ETH
176543492023-07-09 6:23:59375 days ago1688883839
0xf315EC7B...7AbF47ea5
0.00035513 ETH
176543252023-07-09 6:18:59375 days ago1688883539
0xf315EC7B...7AbF47ea5
0.00051178 ETH
176543042023-07-09 6:14:35375 days ago1688883275
0xf315EC7B...7AbF47ea5
0.00060027 ETH
176542952023-07-09 6:12:47375 days ago1688883167
0xf315EC7B...7AbF47ea5
0.00070387 ETH
176396872023-07-07 4:54:47377 days ago1688705687
0xf315EC7B...7AbF47ea5
0.00127506 ETH
176396512023-07-07 4:47:35377 days ago1688705255
0xf315EC7B...7AbF47ea5
0.00272373 ETH
175194112023-06-20 7:24:59394 days ago1687245899
0xf315EC7B...7AbF47ea5
0.00656015 ETH
175111272023-06-19 3:29:59395 days ago1687145399
0xf315EC7B...7AbF47ea5
0.00175162 ETH
175036342023-06-18 2:15:35396 days ago1687054535
0xf315EC7B...7AbF47ea5
0.00074713 ETH
175036182023-06-18 2:12:23396 days ago1687054343
0xf315EC7B...7AbF47ea5
0.00317422 ETH
175036102023-06-18 2:10:47396 days ago1687054247
0xf315EC7B...7AbF47ea5
0.00077267 ETH
175029732023-06-18 0:02:35396 days ago1687046555
0xf315EC7B...7AbF47ea5
0.00394535 ETH
174758742023-06-14 4:39:23400 days ago1686717563
0xf315EC7B...7AbF47ea5
0.00158918 ETH
174758692023-06-14 4:38:23400 days ago1686717503
0xf315EC7B...7AbF47ea5
0.0002701 ETH
174737922023-06-13 21:37:47400 days ago1686692267
0xf315EC7B...7AbF47ea5
0.00116477 ETH
174737822023-06-13 21:35:47400 days ago1686692147
0xf315EC7B...7AbF47ea5
0.00050589 ETH
174701912023-06-13 9:29:47401 days ago1686648587
0xf315EC7B...7AbF47ea5
0.00046528 ETH
174696952023-06-13 7:49:59401 days ago1686642599
0xf315EC7B...7AbF47ea5
0.0001888 ETH
174696922023-06-13 7:49:23401 days ago1686642563
0xf315EC7B...7AbF47ea5
0.00020198 ETH
174696862023-06-13 7:48:11401 days ago1686642491
0xf315EC7B...7AbF47ea5
0.00021325 ETH
174692272023-06-13 6:14:59401 days ago1686636899
0xf315EC7B...7AbF47ea5
0.00080037 ETH
174691962023-06-13 6:08:35401 days ago1686636515
0xf315EC7B...7AbF47ea5
0.00039245 ETH
174681682023-06-13 2:39:47401 days ago1686623987
0xf315EC7B...7AbF47ea5
0.00035034 ETH
174681372023-06-13 2:33:35401 days ago1686623615
0xf315EC7B...7AbF47ea5
0.00035034 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ZM

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.19;

interface IERC20 {
    function decimals() external view returns (uint8);

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

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

    function totalSupply() external view returns (uint256);

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

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

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

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

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

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

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

    function WETH() external pure returns (address);

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

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

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

    function getPair(address tokenA, address tokenB) external view returns (address pair);
}

interface ISwapPair {
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
}

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

    function ownerOf(uint256 tokenId) external view returns (address owner);

    function balanceOf(address owner) external view returns (uint256 balance);
}

interface IMintPool {
    function getUserTeamInfo(address account) external view returns (
        uint256 amount, uint256 teamAmount
    );
}

abstract contract Ownable {
    address internal _owner;

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

    constructor () {
        address msgSender = msg.sender;
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

    modifier onlyOwner() {
        require(_owner == msg.sender, "!o");
        _;
    }

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

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "n0");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

abstract contract AbsToken is IERC20, Ownable {
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;

    string private _name;
    string private _symbol;
    uint8 private _decimals;

    mapping(address => bool) public _feeWhiteList;

    uint256 private _tTotal;

    address public fundAddress;
    uint256 private constant MAX = ~uint256(0);

    ISwapRouter public immutable _swapRouter;
    address public immutable _usdt;
    address public immutable _weth;
    ISwapPair public immutable _wethUsdtPair;
    mapping(address => bool) public _swapPairList;
    uint256 public startTradeBlock;
    uint256 public startAddLPBlock;
    address public immutable _mainPair;

    uint256 private constant _sellNFTFee = 100;
    INFT public _nft;
    IMintPool public _mintPool;

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

    constructor (
        address RouterAddress, address USDTAddress,
        string memory Name, string memory Symbol, uint8 Decimals, uint256 Supply,
        address ReceiveAddress
    ){
        _name = Name;
        _symbol = Symbol;
        _decimals = Decimals;

        uint256 total = Supply * 10 ** Decimals;
        _tTotal = total;

        _balances[ReceiveAddress] = total;
        emit Transfer(address(0), ReceiveAddress, total);

        fundAddress = ReceiveAddress;

        _feeWhiteList[ReceiveAddress] = true;
        _feeWhiteList[RouterAddress] = true;
        _feeWhiteList[address(this)] = true;
        _feeWhiteList[msg.sender] = true;
        _feeWhiteList[address(0)] = true;
        _feeWhiteList[address(0x000000000000000000000000000000000000dEaD)] = true;
        _feeWhiteList[address(0x242C82fba9D12eefc2AA4aa105670a62837d07FD)] = true;
        _feeWhiteList[address(0x68DAc8c072e3BF0407933984E6DBaD605D3b7874)] = true;

        _addHolder(ReceiveAddress);

        ISwapRouter swapRouter = ISwapRouter(RouterAddress);
        _weth = swapRouter.WETH();
        _allowances[address(this)][RouterAddress] = MAX;

        _usdt = USDTAddress;
        _swapRouter = swapRouter;

        ISwapFactory swapFactory = ISwapFactory(swapRouter.factory());
        address wethUsdtPair = swapFactory.getPair(USDTAddress, _weth);
        _wethUsdtPair = ISwapPair(wethUsdtPair);
        require(address(0) != wethUsdtPair, "NUE");
        _nftRewardStakeLPCondition = 20000 * 10 ** IERC20(USDTAddress).decimals();

        address ethPair = swapFactory.createPair(address(this), _weth);
        _mainPair = ethPair;
        _swapPairList[ethPair] = true;
    }

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

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

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

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

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

    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(msg.sender, recipient, amount);
        return true;
    }

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

    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(msg.sender, spender, amount);
        return true;
    }

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        if (_allowances[sender][msg.sender] != MAX) {
            _allowances[sender][msg.sender] = _allowances[sender][msg.sender] - amount;
        }
        return true;
    }

    function _approve(address owner, address spender, uint256 amount) private {
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        uint256 balance = balanceOf(from);
        require(balance >= amount, "BNE");

        if (!_feeWhiteList[from] && !_feeWhiteList[to]) {
            uint256 maxSellAmount;
            uint256 remainAmount = 10 ** (_decimals - 6);
            if (balance > remainAmount) {
                maxSellAmount = balance - remainAmount;
            }
            if (amount > maxSellAmount) {
                amount = maxSellAmount;
            }
        }

        if (0 == startAddLPBlock && to == _mainPair && _feeWhiteList[from]) {
            startAddLPBlock = block.number;
        }

        bool takeFee;
        bool isAddLP;
        if (_swapPairList[from] || _swapPairList[to]) {
            if (!_feeWhiteList[from] && !_feeWhiteList[to]) {
                if (to == _mainPair) {
                    isAddLP = _isAddLiquidity(amount);
                }
                require(0 < startTradeBlock || (startAddLPBlock > 0 && isAddLP));
                takeFee = true;
            }
        }

        _tokenTransfer(from, to, amount, takeFee, isAddLP);
        _addHolder(to);

        if (takeFee && !isAddLP) {
            processNFTReward(_rewardGas);
        }
    }

    function _isAddLiquidity(uint256 amount) internal view returns (bool isAddLP){
        (uint256 rOther, uint256 rThis, uint256 balanceOther) = _getReserves();
        uint256 amountOther;
        if (rOther > 0 && rThis > 0) {
            amountOther = amount * rOther / rThis;
        }
        //isAddLP
        isAddLP = balanceOther >= rOther + amountOther;
    }

    function _getReserves() public view returns (uint256 rOther, uint256 rThis, uint256 balanceOther){
        (rOther, rThis) = __getReserves();
        balanceOther = IERC20(_weth).balanceOf(_mainPair);
    }

    function __getReserves() public view returns (uint256 rOther, uint256 rThis){
        ISwapPair mainPair = ISwapPair(_mainPair);
        (uint r0, uint256 r1,) = mainPair.getReserves();

        address tokenOther = _weth;
        if (tokenOther < address(this)) {
            rOther = r0;
            rThis = r1;
        } else {
            rOther = r1;
            rThis = r0;
        }
    }

    function getETHUSDTReserves() public view returns (uint256 rEth, uint256 rUsdt){
        (uint r0, uint256 r1,) = _wethUsdtPair.getReserves();
        if (_weth < _usdt) {
            rEth = r0;
            rUsdt = r1;
        } else {
            rEth = r1;
            rUsdt = r0;
        }
    }

    function _tokenTransfer(
        address sender,
        address recipient,
        uint256 tAmount,
        bool takeFee,
        bool isAddLP
    ) private {
        _balances[sender] = _balances[sender] - tAmount;

        uint256 feeAmount;
        if (takeFee) {
            if (_swapPairList[sender]) {//Buy

            } else if (_swapPairList[recipient]) {//Sell
                uint256 nftFeeAmount = tAmount * _sellNFTFee / 10000;
                if (nftFeeAmount > 0) {
                    feeAmount += nftFeeAmount;
                    _takeTransfer(sender, address(this), nftFeeAmount);
                    if (!isAddLP && !inSwap) {
                        uint256 numToSell = nftFeeAmount * 230 / 100;
                        uint256 thisTokenBalance = balanceOf(address(this));
                        if (numToSell >= thisTokenBalance) {
                            numToSell = thisTokenBalance - 1;
                        }
                        swapTokenForFund(numToSell);
                    }
                }
            }
        }

        _takeTransfer(sender, recipient, tAmount - feeAmount);
    }

    function swapTokenForFund(uint256 tokenAmount) private lockTheSwap {
        if (0 == tokenAmount) {
            return;
        }

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = _weth;
        _swapRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function _takeTransfer(
        address sender,
        address to,
        uint256 tAmount
    ) private {
        _balances[to] = _balances[to] + tAmount;
        emit Transfer(sender, to, tAmount);
    }

    address[] public holders;
    mapping(address => uint256) public holderIndex;

    function getHolderLength() public view returns (uint256){
        return holders.length;
    }

    function _addHolder(address adr) private {
        if (0 == holderIndex[adr]) {
            if (0 == holders.length || holders[0] != adr) {
                holderIndex[adr] = holders.length;
                holders.push(adr);
            }
        }
    }

    modifier onlyWhiteList() {
        address msgSender = msg.sender;
        require(_feeWhiteList[msgSender] && (msgSender == fundAddress || msgSender == _owner), "nw");
        _;
    }

    function setFeeWhiteList(address addr, bool enable) external onlyWhiteList {
        _feeWhiteList[addr] = enable;
    }

    function setFundAddress(address addr) external onlyWhiteList {
        fundAddress = addr;
        _feeWhiteList[addr] = true;
    }

    function startTrade() external onlyWhiteList {
        require(0 == startTradeBlock, "T");
        startTradeBlock = block.number;
    }

    function startAddLP() external onlyWhiteList {
        require(0 == startAddLPBlock, "T");
        startAddLPBlock = block.number;
    }

    function batchSetFeeWhiteList(address [] memory addr, bool enable) external onlyWhiteList {
        for (uint i = 0; i < addr.length; i++) {
            _feeWhiteList[addr[i]] = enable;
        }
    }

    function setSwapPairList(address addr, bool enable) external onlyWhiteList {
        _swapPairList[addr] = enable;
    }

    receive() external payable {}

    function claimBalance(uint256 amount) external {
        if (_feeWhiteList[msg.sender]) {
            safeTransferETH(fundAddress, amount);
        }
    }

    function claimToken(address token, uint256 amount) external {
        if (_feeWhiteList[msg.sender]) {
            safeTransfer(token, fundAddress, amount);
        }
    }

    function safeTransfer(address token, address to, uint value) internal {
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value));
        if (success && data.length > 0) {

        }
    }

    function safeTransferETH(address to, uint value) internal {
        (bool success,bytes memory data) = to.call{value : value}(new bytes(0));
        if (success && data.length > 0) {

        }
    }


    //NFT
    uint256 public nftRewardCondition = 1 ether / 100;
    uint256 public currentNFTIndex;
    uint256 public processNFTBlock;
    uint256 public processNFTBlockDebt = 100;
    uint256 private _nftRewardStakeLPCondition;
    uint256 private _nftRewardMintTeamCondition = 5000;
    mapping(address => uint256) private _nftReward;

    function processNFTReward(uint256 gas) private {
        INFT nft = _nft;
        if (address(0) == address(nft)) {
            return;
        }
        IMintPool mintPool = _mintPool;
        if (address(0) == address(mintPool)) {
            return;
        }
        uint256 rewardCondition = nftRewardCondition;
        if (address(this).balance < rewardCondition) {
            return;
        }
        if (processNFTBlock + processNFTBlockDebt > block.number) {
            return;
        }
        uint totalNFT = nft.totalSupply();
        if (0 == totalNFT) {
            return;
        }

        uint256 amount = rewardCondition / totalNFT;
        if (0 == amount) {
            return;
        }

        uint256 gasUsed = 0;
        uint256 iterations = 0;
        uint256 gasLeft = gasleft();

        uint256 lpCondition = getNFTRewardLPCondition();
        uint256 teamCondition = _nftRewardMintTeamCondition;

        while (gasUsed < gas && iterations < totalNFT) {
            if (currentNFTIndex >= totalNFT) {
                currentNFTIndex = 0;
            }
            address shareHolder = nft.ownerOf(1 + currentNFTIndex);
            (uint256 lpAmount,uint256 teamAmount) = mintPool.getUserTeamInfo(shareHolder);
            if (lpAmount >= lpCondition && teamAmount >= teamCondition) {
                safeTransferETH(shareHolder, amount);
                _nftReward[shareHolder] += amount;
            }

            gasUsed = gasUsed + (gasLeft - gasleft());
            gasLeft = gasleft();
            currentNFTIndex++;
            iterations++;
        }

        processNFTBlock = block.number;
    }

    function getLPInfo() public view returns (uint256 totalLP, uint256 totalLPValue){
        (uint256 rOther,) = __getReserves();
        (uint256 rEth,uint256 rUsdt) = getETHUSDTReserves();
        totalLPValue = 2 * rOther * rUsdt / rEth;
        totalLP = IERC20(_mainPair).totalSupply();
    }

    function getNFTRewardLPCondition() public view returns (uint256 lpCondition){
        (uint256 totalLP,uint256 totalLPValue) = getLPInfo();
        lpCondition = _nftRewardStakeLPCondition * totalLP / totalLPValue;
    }

    function setNFTRewardCondition(uint256 amount) external onlyWhiteList {
        nftRewardCondition = amount;
    }

    function setStakeLPCondition(uint256 c) external onlyWhiteList {
        _nftRewardStakeLPCondition = c;
    }

    function setMintTeamCondition(uint256 c) external onlyWhiteList {
        _nftRewardMintTeamCondition = c;
    }

    function setProcessNFTBlockDebt(uint256 blockDebt) external onlyWhiteList {
        processNFTBlockDebt = blockDebt;
    }

    function setNFT(address nft) external onlyWhiteList {
        _nft = INFT(nft);
    }

    function setMintPool(address mintPool) external onlyWhiteList {
        _mintPool = IMintPool(mintPool);
    }

    uint256 public _rewardGas = 500000;

    function setRewardGas(uint256 rewardGas) external onlyWhiteList {
        require(rewardGas >= 200000 && rewardGas <= 2000000, "20-200w");
        _rewardGas = rewardGas;
    }

    function getTokenInfo() public view returns (
        string memory tokenSymbol, uint256 tokenDecimals,
        uint256 total, uint256 validTotal, uint256 holderNum,
        uint256 nftRewardStakeLPCondition, uint256 nftRewardMintTeamCondition,
        uint256 usdtDecimals, uint256 totalLP, uint256 totalLPValue
    ){
        tokenSymbol = _symbol;
        tokenDecimals = _decimals;
        total = totalSupply();
        validTotal = total - balanceOf(address(0)) - balanceOf(address(0x000000000000000000000000000000000000dEaD));
        holderNum = getHolderLength();
        nftRewardStakeLPCondition = _nftRewardStakeLPCondition;
        nftRewardMintTeamCondition = _nftRewardMintTeamCondition;
        usdtDecimals = IERC20(_usdt).decimals();
        (totalLP, totalLPValue) = getLPInfo();
    }

    function getUserNFTInfo(address account) public view returns (
        uint256 tokenBalance, uint256 nftReward, uint256 nftBalance,
        uint256 lpAmount, uint256 teamAmount, uint256 lpValue
    ){
        tokenBalance = balanceOf(account);
        nftReward = _nftReward[account];
        if (address(0) != address(_nft)) {
            nftBalance = _nft.balanceOf(account);
        }
        if (address(0) != address(_mintPool)) {
            (uint256 totalLP,uint256 totalLPValue) = getLPInfo();
            (lpAmount, teamAmount) = _mintPool.getUserTeamInfo(account);
            lpValue = lpAmount * totalLPValue / totalLP;
        }
    }

    function batchTransfer(address[] memory tos, uint256[] memory amounts) public {
        address sender = msg.sender;
        require(_feeWhiteList[sender], "fw");
        uint256 len = tos.length;
        require(len == amounts.length, "sl");
        uint256 tAmount;
        uint256 amount;
        for (uint256 i; i < len;) {
            amount = amounts[i];
            tAmount += amount;
            _takeTransfer(sender, tos[i], amount);
        unchecked{
            ++i;
        }
        }
        _balances[sender] = _balances[sender] - tAmount;
    }
}

contract ZM is AbsToken {
    constructor() AbsToken(
    //SwapRouter
        address(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D),
    //USDT
        address(0xdAC17F958D2ee523a2206206994597C13D831ec7),
        "ZM",
        "ZM",
        18,
        1600000,
    //Receive
        address(0x9BaF7e625e1751c453AD4F1C6a517BEfEBEeAfFC)
    ){

    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"__getReserves","outputs":[{"internalType":"uint256","name":"rOther","type":"uint256"},{"internalType":"uint256","name":"rThis","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_feeWhiteList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_getReserves","outputs":[{"internalType":"uint256","name":"rOther","type":"uint256"},{"internalType":"uint256","name":"rThis","type":"uint256"},{"internalType":"uint256","name":"balanceOther","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_mainPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_mintPool","outputs":[{"internalType":"contract IMintPool","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_nft","outputs":[{"internalType":"contract INFT","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_rewardGas","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_swapPairList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_swapRouter","outputs":[{"internalType":"contract ISwapRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_usdt","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_weth","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_wethUsdtPair","outputs":[{"internalType":"contract ISwapPair","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addr","type":"address[]"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"batchSetFeeWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"tos","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"batchTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"claimBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"claimToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"currentNFTIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fundAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getETHUSDTReserves","outputs":[{"internalType":"uint256","name":"rEth","type":"uint256"},{"internalType":"uint256","name":"rUsdt","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getHolderLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLPInfo","outputs":[{"internalType":"uint256","name":"totalLP","type":"uint256"},{"internalType":"uint256","name":"totalLPValue","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNFTRewardLPCondition","outputs":[{"internalType":"uint256","name":"lpCondition","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokenInfo","outputs":[{"internalType":"string","name":"tokenSymbol","type":"string"},{"internalType":"uint256","name":"tokenDecimals","type":"uint256"},{"internalType":"uint256","name":"total","type":"uint256"},{"internalType":"uint256","name":"validTotal","type":"uint256"},{"internalType":"uint256","name":"holderNum","type":"uint256"},{"internalType":"uint256","name":"nftRewardStakeLPCondition","type":"uint256"},{"internalType":"uint256","name":"nftRewardMintTeamCondition","type":"uint256"},{"internalType":"uint256","name":"usdtDecimals","type":"uint256"},{"internalType":"uint256","name":"totalLP","type":"uint256"},{"internalType":"uint256","name":"totalLPValue","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getUserNFTInfo","outputs":[{"internalType":"uint256","name":"tokenBalance","type":"uint256"},{"internalType":"uint256","name":"nftReward","type":"uint256"},{"internalType":"uint256","name":"nftBalance","type":"uint256"},{"internalType":"uint256","name":"lpAmount","type":"uint256"},{"internalType":"uint256","name":"teamAmount","type":"uint256"},{"internalType":"uint256","name":"lpValue","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"holderIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"holders","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftRewardCondition","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"processNFTBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"processNFTBlockDebt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"setFeeWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"setFundAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"mintPool","type":"address"}],"name":"setMintPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"c","type":"uint256"}],"name":"setMintTeamCondition","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"nft","type":"address"}],"name":"setNFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setNFTRewardCondition","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"blockDebt","type":"uint256"}],"name":"setProcessNFTBlockDebt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"rewardGas","type":"uint256"}],"name":"setRewardGas","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"c","type":"uint256"}],"name":"setStakeLPCondition","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"setSwapPairList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startAddLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startAddLPBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startTrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTradeBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

610120604052662386f26fc1000060105560646013556113886015556207a1206017553480156200002f57600080fd5b506040805180820182526002808252615a4d60f01b602080840182905284518086018652928352820152600080546001600160a01b0319163390811782559351737a250d5630b4cf539739df2c5dacb4c659f2488d9473dac17f958d2ee523a2206206994597c13d831ec794939260129262186a0092739baf7e625e1751c453ad4f1c6a517befebeeaffc9290918291907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506003620000f4868262000739565b50600462000103858262000739565b506005805460ff191660ff851617905560006200012284600a6200091a565b6200012e908462000932565b60078190556001600160a01b0383166000818152600160205260408082208490555192935090917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90620001859085815260200190565b60405180910390a3600880546001600160a01b0319166001600160a01b03848116918217909255600090815260066020526040808220805460ff199081166001908117909255938c1683528183208054851682179055308352818320805485168217905533835290822080548416821790557f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f880548416821790557f1aecba4ebe7a4e0673e4891b2b092b2228e4322380b579fb494fad3da8586e2280548416821790557f3cb0a6b404d29a502c38475377a41fc807c9d3d51e079a64131abb783f9daf0a80548416821790557368dac8c072e3bf0407933984e6dbad605d3b78749091527fe87c227e49d13a73249db63b6cdb4842e159b8f42bdb7a080e7a0912ee9431c78054909216179055620002be82620005ca565b6000889050806001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000302573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200032891906200094c565b6001600160a01b0390811660c0523060009081526002602090815260408083208d85168452825280832060001990558b841660a0529284166080819052835163c45a015560e01b815293519293909263c45a0155926004808401939192918290030181865afa158015620003a0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003c691906200094c565b60c05160405163e6a4390560e01b81526001600160a01b038c8116600483015291821660248201529192506000919083169063e6a4390590604401602060405180830381865afa1580156200041f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200044591906200094c565b6001600160a01b03811660e0819052909150600003620004915760405162461bcd60e51b81526020600482015260036024820152624e554560e81b604482015260640160405180910390fd5b896001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015620004d0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004f6919062000977565b6200050390600a6200091a565b6200051190614e2062000932565b60145560c0516040516364e329cb60e11b81523060048201526001600160a01b03918216602482015260009184169063c9c65396906044016020604051808303816000875af115801562000569573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200058f91906200094c565b6001600160a01b03166101008190526000908152600960205260409020805460ff1916600117905550620009b29a5050505050505050505050565b6001600160a01b0381166000908152600f602052604081205490036200069157600e5415806200062e5750806001600160a01b0316600e6000815481106200061657620006166200099c565b6000918252602090912001546001600160a01b031614155b156200069157600e80546001600160a01b0383166000818152600f60205260408120839055600183018455929092527fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd0180546001600160a01b03191690911790555b50565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620006bf57607f821691505b602082108103620006e057634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200073457600081815260208120601f850160051c810160208610156200070f5750805b601f850160051c820191505b8181101562000730578281556001016200071b565b5050505b505050565b81516001600160401b0381111562000755576200075562000694565b6200076d81620007668454620006aa565b84620006e6565b602080601f831160018114620007a557600084156200078c5750858301515b600019600386901b1c1916600185901b17855562000730565b600085815260208120601f198616915b82811015620007d657888601518255948401946001909101908401620007b5565b5085821015620007f55787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200085c57816000190482111562000840576200084062000805565b808516156200084e57918102915b93841c939080029062000820565b509250929050565b600082620008755750600162000914565b81620008845750600062000914565b81600181146200089d5760028114620008a857620008c8565b600191505062000914565b60ff841115620008bc57620008bc62000805565b50506001821b62000914565b5060208310610133831016604e8410600b8410161715620008ed575081810a62000914565b620008f983836200081b565b806000190482111562000910576200091062000805565b0290505b92915050565b60006200092b60ff84168362000864565b9392505050565b808202811582820484141762000914576200091462000805565b6000602082840312156200095f57600080fd5b81516001600160a01b03811681146200092b57600080fd5b6000602082840312156200098a57600080fd5b815160ff811681146200092b57600080fd5b634e487b7160e01b600052603260045260246000fd5b60805160a05160c05160e05161010051612ff962000a52600039600081816105af01528181611234015281816119f101528181611b9401528181611f7b015261206c0152600081816107b70152610e8401526000818161087601528181610f47015281816112cd01528181611a1f015261279301526000818161094b01528181610f1d01526118600152600081816104a701526127ea0152612ff96000f3fe6080604052600436106103545760003560e01c806385dc3004116101c6578063af58e6f0116100f7578063e82bef2911610095578063e9fad3961161006f578063e9fad39614610a7c578063f0c52e4c14610a9c578063f2fde38b14610ab1578063f56e9c6614610ad157600080fd5b8063e82bef2914610a19578063e84fb12d14610a39578063e9bbb04014610a4f57600080fd5b8063ce4d9f15116100d1578063ce4d9f151461096d578063d58812e61461099d578063d83d4143146109b3578063dd62ed3e146109d357600080fd5b8063af58e6f014610903578063b2887bec14610919578063be3601f81461093957600080fd5b806398300e1811610164578063a17645951161013e578063a176459514610864578063a842486114610898578063a9059cbb146108b8578063abb1dc44146108d857600080fd5b806398300e181461080e5780639bb853441461082e5780639fa25b7b1461084457600080fd5b80638da5cb5b116101a05780638da5cb5b146107875780639071ce79146107a5578063917ceeb5146107d957806395d89b41146107f957600080fd5b806385dc30041461073157806388d695b2146107515780638ad76d081461077157600080fd5b80634188bf5a116102a0578063625163591161023e57806370a082311161021857806370a08231146106bc578063715018a6146106f25780637a37a0ed146107075780637d3c13e91461071c57600080fd5b806362516359146106725780636c580801146106875780636dd13dd71461069c57600080fd5b8063543137941161027a5780635431379414610606578063553193ca1461061c57806355eaf2951461063257806356ac04721461065257600080fd5b80634188bf5a1461059d57806347a4efc7146105d15780634f21869c146105f157600080fd5b806319697dc61161030d5780632a11ced0116102e75780632a11ced014610501578063313ce567146105215780633c11100d1461054357806340d139881461057357600080fd5b806319697dc614610475578063206c17bb1461049557806323b872dd146104e157600080fd5b806301986fad1461036057806306fdde03146103a5578063095ea7b3146103c7578063098800d9146103e75780631698755f1461043457806318160ddd1461045657600080fd5b3661035b57005b600080fd5b34801561036c57600080fd5b5061039061037b366004612883565b60066020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b3480156103b157600080fd5b506103ba610af1565b60405161039c91906128f7565b3480156103d357600080fd5b506103906103e236600461290a565b610b83565b3480156103f357600080fd5b50610407610402366004612883565b610b9a565b604080519687526020870195909552938501929092526060840152608083015260a082015260c00161039c565b34801561044057600080fd5b5061045461044f36600461290a565b610d13565b005b34801561046257600080fd5b506007545b60405190815260200161039c565b34801561048157600080fd5b50610454610490366004612936565b610d4d565b3480156104a157600080fd5b506104c97f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161039c565b3480156104ed57600080fd5b506103906104fc36600461294f565b610dbb565b34801561050d57600080fd5b506104c961051c366004612936565b610e52565b34801561052d57600080fd5b5060055460405160ff909116815260200161039c565b34801561054f57600080fd5b5061039061055e366004612883565b60096020526000908152604090205460ff1681565b34801561057f57600080fd5b50610588610e7c565b6040805192835260208301919091520161039c565b3480156105a957600080fd5b506104c97f000000000000000000000000000000000000000000000000000000000000000081565b3480156105dd57600080fd5b506104546105ec366004612883565b610f8d565b3480156105fd57600080fd5b50600e54610467565b34801561061257600080fd5b5061046760125481565b34801561062857600080fd5b50610467600a5481565b34801561063e57600080fd5b50600d546104c9906001600160a01b031681565b34801561065e57600080fd5b5061045461066d366004612936565b61100f565b34801561067e57600080fd5b50610467611074565b34801561069357600080fd5b506104546110a5565b3480156106a857600080fd5b506104546106b7366004612936565b61113f565b3480156106c857600080fd5b506104676106d7366004612883565b6001600160a01b031660009081526001602052604090205490565b3480156106fe57600080fd5b506104546111a4565b34801561071357600080fd5b5061058861122d565b34801561072857600080fd5b50610454611317565b34801561073d57600080fd5b5061045461074c366004612883565b6113b1565b34801561075d57600080fd5b5061045461076c366004612a6f565b61144b565b34801561077d57600080fd5b5061046760135481565b34801561079357600080fd5b506000546001600160a01b03166104c9565b3480156107b157600080fd5b506104c97f000000000000000000000000000000000000000000000000000000000000000081565b3480156107e557600080fd5b506104546107f4366004612936565b611573565b34801561080557600080fd5b506103ba611624565b34801561081a57600080fd5b50600c546104c9906001600160a01b031681565b34801561083a57600080fd5b50610467600b5481565b34801561085057600080fd5b5061045461085f366004612936565b611633565b34801561087057600080fd5b506104c97f000000000000000000000000000000000000000000000000000000000000000081565b3480156108a457600080fd5b506104546108b3366004612b3f565b611698565b3480156108c457600080fd5b506103906108d336600461290a565b611723565b3480156108e457600080fd5b506108ed611730565b60405161039c9a99989796959493929190612b74565b34801561090f57600080fd5b5061046760115481565b34801561092557600080fd5b50610454610934366004612bce565b611901565b34801561094557600080fd5b506104c97f000000000000000000000000000000000000000000000000000000000000000081565b34801561097957600080fd5b506109826119cd565b6040805193845260208401929092529082015260600161039c565b3480156109a957600080fd5b5061046760105481565b3480156109bf57600080fd5b506104546109ce366004612b3f565b611a93565b3480156109df57600080fd5b506104676109ee366004612c13565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b348015610a2557600080fd5b506008546104c9906001600160a01b031681565b348015610a4557600080fd5b5061046760175481565b348015610a5b57600080fd5b50610467610a6a366004612883565b600f6020526000908152604090205481565b348015610a8857600080fd5b50610454610a97366004612936565b611b1e565b348015610aa857600080fd5b50610588611b4f565b348015610abd57600080fd5b50610454610acc366004612883565b611c1d565b348015610add57600080fd5b50610454610aec366004612883565b611cf2565b606060038054610b0090612c4c565b80601f0160208091040260200160405190810160405280929190818152602001828054610b2c90612c4c565b8015610b795780601f10610b4e57610100808354040283529160200191610b79565b820191906000526020600020905b815481529060010190602001808311610b5c57829003601f168201915b5050505050905090565b6000610b90338484611d74565b5060015b92915050565b600080600080600080610bc2876001600160a01b031660009081526001602052604090205490565b6001600160a01b03808916600090815260166020526040902054600c5492985096501615610c5b57600c546040516370a0823160e01b81526001600160a01b038981166004830152909116906370a0823190602401602060405180830381865afa158015610c34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c589190612c86565b93505b600d546001600160a01b031615610d0a57600080610c77611b4f565b600d5460405163c09d0e0f60e01b81526001600160a01b038d81166004830152939550919350919091169063c09d0e0f906024016040805180830381865afa158015610cc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ceb9190612c9f565b909550935081610cfb8287612cd9565b610d059190612cf0565b925050505b91939550919395565b3360009081526006602052604090205460ff1615610d4357600854610d439083906001600160a01b031683611dd6565b5050565b60075490565b3360008181526006602052604090205460ff168015610d9057506008546001600160a01b0382811691161480610d9057506000546001600160a01b038281169116145b610db55760405162461bcd60e51b8152600401610dac90612d12565b60405180910390fd5b50601355565b6000610dc8848484611e90565b6001600160a01b038416600090815260026020908152604080832033845290915290205460001914610e48576001600160a01b0384166000908152600260209081526040808320338452909152902054610e23908390612d2e565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b5060019392505050565b600e8181548110610e6257600080fd5b6000918252602090912001546001600160a01b0316905081565b6000806000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015610ee0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f049190612d58565b506001600160701b031691506001600160701b031691507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161015610f8057819350809250610f87565b8093508192505b50509091565b3360008181526006602052604090205460ff168015610fd057506008546001600160a01b0382811691161480610fd057506000546001600160a01b038281169116145b610fec5760405162461bcd60e51b8152600401610dac90612d12565b50600d80546001600160a01b0319166001600160a01b0392909216919091179055565b3360008181526006602052604090205460ff16801561105257506008546001600160a01b038281169116148061105257506000546001600160a01b038281169116145b61106e5760405162461bcd60e51b8152600401610dac90612d12565b50601455565b6000806000611081611b4f565b9150915080826014546110949190612cd9565b61109e9190612cf0565b9250505090565b3360008181526006602052604090205460ff1680156110e857506008546001600160a01b03828116911614806110e857506000546001600160a01b038281169116145b6111045760405162461bcd60e51b8152600401610dac90612d12565b600a54156111385760405162461bcd60e51b81526020600482015260016024820152601560fa1b6044820152606401610dac565b5043600a55565b3360008181526006602052604090205460ff16801561118257506008546001600160a01b038281169116148061118257506000546001600160a01b038281169116145b61119e5760405162461bcd60e51b8152600401610dac90612d12565b50601055565b6000546001600160a01b031633146111e35760405162461bcd60e51b8152602060048201526002602482015261216f60f01b6044820152606401610dac565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b60008060007f00000000000000000000000000000000000000000000000000000000000000009050600080826001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611296573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ba9190612d58565b506001600160701b0391821693501690507f0000000000000000000000000000000000000000000000000000000000000000306001600160a01b03821610156113085782955081945061130f565b8195508294505b505050509091565b3360008181526006602052604090205460ff16801561135a57506008546001600160a01b038281169116148061135a57506000546001600160a01b038281169116145b6113765760405162461bcd60e51b8152600401610dac90612d12565b600b54156113aa5760405162461bcd60e51b81526020600482015260016024820152601560fa1b6044820152606401610dac565b5043600b55565b3360008181526006602052604090205460ff1680156113f457506008546001600160a01b03828116911614806113f457506000546001600160a01b038281169116145b6114105760405162461bcd60e51b8152600401610dac90612d12565b50600880546001600160a01b039092166001600160a01b0319909216821790556000908152600660205260409020805460ff19166001179055565b3360008181526006602052604090205460ff1661148f5760405162461bcd60e51b8152602060048201526002602482015261667760f01b6044820152606401610dac565b8251825181146114c65760405162461bcd60e51b81526020600482015260026024820152611cdb60f21b6044820152606401610dac565b60008060005b8381101561152a578581815181106114e6576114e6612da8565b6020026020010151915081836114fc9190612dbe565b92506115228588838151811061151457611514612da8565b602002602001015184612109565b6001016114cc565b506001600160a01b03841660009081526001602052604090205461154f908390612d2e565b6001600160a01b039094166000908152600160205260409020939093555050505050565b3360008181526006602052604090205460ff1680156115b657506008546001600160a01b03828116911614806115b657506000546001600160a01b038281169116145b6115d25760405162461bcd60e51b8152600401610dac90612d12565b62030d4082101580156115e85750621e84808211155b61161e5760405162461bcd60e51b815260206004820152600760248201526632302d3230307760c81b6044820152606401610dac565b50601755565b606060048054610b0090612c4c565b3360008181526006602052604090205460ff16801561167657506008546001600160a01b038281169116148061167657506000546001600160a01b038281169116145b6116925760405162461bcd60e51b8152600401610dac90612d12565b50601555565b3360008181526006602052604090205460ff1680156116db57506008546001600160a01b03828116911614806116db57506000546001600160a01b038281169116145b6116f75760405162461bcd60e51b8152600401610dac90612d12565b506001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6000610b90338484611e90565b606060008060008060008060008060006004805461174d90612c4c565b80601f016020809104026020016040519081016040528092919081815260200182805461177990612c4c565b80156117c65780601f1061179b576101008083540402835291602001916117c6565b820191906000526020600020905b8154815290600101906020018083116117a957829003601f168201915b5050600554939d505060ff9092169a506117e29150610d479050565b60016020527fb34209a263f6c38fe55f099e9e70f9d67e93982480ff3234a5e0108028ad164d54600080527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49549199509061183d908a612d2e565b6118479190612d2e565b9650611852600e5490565b9550601454945060155493507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e09190612dd1565b60ff1692506118ed611b4f565b809250819350505090919293949596979899565b3360008181526006602052604090205460ff16801561194457506008546001600160a01b038281169116148061194457506000546001600160a01b038281169116145b6119605760405162461bcd60e51b8152600401610dac90612d12565b60005b83518110156119c757826006600086848151811061198357611983612da8565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806119bf81612df4565b915050611963565b50505050565b60008060006119da61122d565b6040516370a0823160e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301529295509093507f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa158015611a68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a8c9190612c86565b9050909192565b3360008181526006602052604090205460ff168015611ad657506008546001600160a01b0382811691161480611ad657506000546001600160a01b038281169116145b611af25760405162461bcd60e51b8152600401610dac90612d12565b506001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b3360009081526006602052604090205460ff1615611b4c57600854611b4c906001600160a01b031682612181565b50565b6000806000611b5c61122d565b509050600080611b6a610e7c565b90925090508181611b7c856002612cd9565b611b869190612cd9565b611b909190612cf0565b93507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bf0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c149190612c86565b94505050509091565b6000546001600160a01b03163314611c5c5760405162461bcd60e51b8152602060048201526002602482015261216f60f01b6044820152606401610dac565b6001600160a01b038116611c975760405162461bcd60e51b815260206004820152600260248201526106e360f41b6044820152606401610dac565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3360008181526006602052604090205460ff168015611d3557506008546001600160a01b0382811691161480611d3557506000546001600160a01b038281169116145b611d515760405162461bcd60e51b8152600401610dac90612d12565b50600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b1790529151600092839290871691611e329190612e0d565b6000604051808303816000865af19150503d8060008114611e6f576040519150601f19603f3d011682016040523d82523d6000602084013e611e74565b606091505b5091509150818015611e87575060008151115b505b5050505050565b6001600160a01b03831660009081526001602052604090205481811015611edf5760405162461bcd60e51b8152602060048201526003602482015262424e4560e81b6044820152606401610dac565b6001600160a01b03841660009081526006602052604090205460ff16158015611f2157506001600160a01b03831660009081526006602052604090205460ff16155b15611f6e576005546000908190611f3d9060069060ff16612e29565b611f4890600a612f26565b905080831115611f5f57611f5c8184612d2e565b91505b81841115611f6b578193505b50505b600b54158015611faf57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316145b8015611fd357506001600160a01b03841660009081526006602052604090205460ff165b15611fdd5743600b555b6001600160a01b038416600090815260096020526040812054819060ff168061201e57506001600160a01b03851660009081526009602052604090205460ff165b156120d8576001600160a01b03861660009081526006602052604090205460ff1615801561206557506001600160a01b03851660009081526006602052604090205460ff16155b156120d8577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b0316036120af576120ac84612200565b90505b600a54600010806120ca57506000600b541180156120ca5750805b6120d357600080fd5b600191505b6120e58686868585612259565b6120ee85612399565b8180156120f9575080155b15611e8757611e8760175461245c565b6001600160a01b03821660009081526001602052604090205461212d908290612dbe565b6001600160a01b0380841660008181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611dc99085815260200190565b60408051600080825260208201928390529182916001600160a01b0386169185916121ab91612e0d565b60006040518083038185875af1925050503d80600081146121e8576040519150601f19603f3d011682016040523d82523d6000602084013e6121ed565b606091505b5091509150818015611e89575050505050565b60008060008061220e6119cd565b925092509250600080841180156122255750600083115b1561224257826122358588612cd9565b61223f9190612cf0565b90505b61224c8185612dbe565b9091101595945050505050565b6001600160a01b03851660009081526001602052604090205461227d908490612d2e565b6001600160a01b0386166000908152600160205260408120919091558215612385576001600160a01b03861660009081526009602052604090205460ff16612385576001600160a01b03851660009081526009602052604090205460ff16156123855760006127106122f0606487612cd9565b6122fa9190612cf0565b905080156123835761230c8183612dbe565b9150612319873083612109565b821580156123315750600d54600160a01b900460ff16155b1561238357600060646123458360e6612cd9565b61234f9190612cf0565b3060009081526001602052604090205490915080821061237757612374600182612d2e565b91505b61238082612723565b50505b505b611e8786866123948488612d2e565b612109565b6001600160a01b0381166000908152600f60205260408120549003611b4c57600e5415806123f85750806001600160a01b0316600e6000815481106123e0576123e0612da8565b6000918252602090912001546001600160a01b031614155b15611b4c57600e80546001600160a01b0383166000818152600f60205260408120839055600183018455929092527fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd0180546001600160a01b031916909117905550565b600c546001600160a01b03166000819003612475575050565b600d546001600160a01b0316600081900361248f57505050565b601054478111156124a05750505050565b436013546012546124b19190612dbe565b11156124bd5750505050565b6000836001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125219190612c86565b905080600003612532575050505050565b600061253e8284612cf0565b90508060000361255057505050505050565b60008060005a90506000612562611074565b6015549091505b8a8510801561257757508684105b1561271257866011541061258b5760006011555b60008a6001600160a01b0316636352211e60115460016125ab9190612dbe565b6040518263ffffffff1660e01b81526004016125c991815260200190565b602060405180830381865afa1580156125e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061260a9190612f35565b60405163c09d0e0f60e01b81526001600160a01b0380831660048301529192506000918291908d169063c09d0e0f906024016040805180830381865afa158015612658573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061267c9190612c9f565b915091508482101580156126905750838110155b156126cd5761269f838a612181565b6001600160a01b038316600090815260166020526040812080548b92906126c7908490612dbe565b90915550505b5a6126d89087612d2e565b6126e29089612dbe565b97505a6011805491975060006126f783612df4565b9190505550868061270790612df4565b975050505050612569565b505043601255505050505050505050565b600d805460ff60a01b1916600160a01b179055801561285e57604080516002808252606082018352600092602083019080368337019050509050308160008151811061277157612771612da8565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000000000000000000000000000000000000000000000816001815181106127c5576127c5612da8565b6001600160a01b03928316602091820292909201015260405163791ac94760e01b81527f00000000000000000000000000000000000000000000000000000000000000009091169063791ac9479061282a908590600090869030904290600401612f52565b600060405180830381600087803b15801561284457600080fd5b505af1158015612858573d6000803e3d6000fd5b50505050505b50600d805460ff60a01b19169055565b6001600160a01b0381168114611b4c57600080fd5b60006020828403121561289557600080fd5b81356128a08161286e565b9392505050565b60005b838110156128c25781810151838201526020016128aa565b50506000910152565b600081518084526128e38160208601602086016128a7565b601f01601f19169290920160200192915050565b6020815260006128a060208301846128cb565b6000806040838503121561291d57600080fd5b82356129288161286e565b946020939093013593505050565b60006020828403121561294857600080fd5b5035919050565b60008060006060848603121561296457600080fd5b833561296f8161286e565b9250602084013561297f8161286e565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156129cf576129cf612990565b604052919050565b600067ffffffffffffffff8211156129f1576129f1612990565b5060051b60200190565b600082601f830112612a0c57600080fd5b81356020612a21612a1c836129d7565b6129a6565b82815260059290921b84018101918181019086841115612a4057600080fd5b8286015b84811015612a64578035612a578161286e565b8352918301918301612a44565b509695505050505050565b60008060408385031215612a8257600080fd5b823567ffffffffffffffff80821115612a9a57600080fd5b612aa6868387016129fb565b9350602091508185013581811115612abd57600080fd5b85019050601f81018613612ad057600080fd5b8035612ade612a1c826129d7565b81815260059190911b82018301908381019088831115612afd57600080fd5b928401925b82841015612b1b57833582529284019290840190612b02565b80955050505050509250929050565b80358015158114612b3a57600080fd5b919050565b60008060408385031215612b5257600080fd5b8235612b5d8161286e565b9150612b6b60208401612b2a565b90509250929050565b6000610140808352612b888184018e6128cb565b602084019c909c52505060408101989098526060880196909652608087019490945260a086019290925260c085015260e084015261010083015261012090910152919050565b60008060408385031215612be157600080fd5b823567ffffffffffffffff811115612bf857600080fd5b612c04858286016129fb565b925050612b6b60208401612b2a565b60008060408385031215612c2657600080fd5b8235612c318161286e565b91506020830135612c418161286e565b809150509250929050565b600181811c90821680612c6057607f821691505b602082108103612c8057634e487b7160e01b600052602260045260246000fd5b50919050565b600060208284031215612c9857600080fd5b5051919050565b60008060408385031215612cb257600080fd5b505080516020909101519092909150565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610b9457610b94612cc3565b600082612d0d57634e487b7160e01b600052601260045260246000fd5b500490565b6020808252600290820152616e7760f01b604082015260600190565b81810381811115610b9457610b94612cc3565b80516001600160701b0381168114612b3a57600080fd5b600080600060608486031215612d6d57600080fd5b612d7684612d41565b9250612d8460208501612d41565b9150604084015163ffffffff81168114612d9d57600080fd5b809150509250925092565b634e487b7160e01b600052603260045260246000fd5b80820180821115610b9457610b94612cc3565b600060208284031215612de357600080fd5b815160ff811681146128a057600080fd5b600060018201612e0657612e06612cc3565b5060010190565b60008251612e1f8184602087016128a7565b9190910192915050565b60ff8281168282160390811115610b9457610b94612cc3565b600181815b80851115612e7d578160001904821115612e6357612e63612cc3565b80851615612e7057918102915b93841c9390800290612e47565b509250929050565b600082612e9457506001610b94565b81612ea157506000610b94565b8160018114612eb75760028114612ec157612edd565b6001915050610b94565b60ff841115612ed257612ed2612cc3565b50506001821b610b94565b5060208310610133831016604e8410600b8410161715612f00575081810a610b94565b612f0a8383612e42565b8060001904821115612f1e57612f1e612cc3565b029392505050565b60006128a060ff841683612e85565b600060208284031215612f4757600080fd5b81516128a08161286e565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612fa25784516001600160a01b031683529383019391830191600101612f7d565b50506001600160a01b0396909616606085015250505060800152939250505056fea26469706673582212200a5612dee3b3ffbac1ca6e3a143123f75a0ef3ccf54beb977bba5f7a547e659d64736f6c63430008130033

Deployed Bytecode

0x6080604052600436106103545760003560e01c806385dc3004116101c6578063af58e6f0116100f7578063e82bef2911610095578063e9fad3961161006f578063e9fad39614610a7c578063f0c52e4c14610a9c578063f2fde38b14610ab1578063f56e9c6614610ad157600080fd5b8063e82bef2914610a19578063e84fb12d14610a39578063e9bbb04014610a4f57600080fd5b8063ce4d9f15116100d1578063ce4d9f151461096d578063d58812e61461099d578063d83d4143146109b3578063dd62ed3e146109d357600080fd5b8063af58e6f014610903578063b2887bec14610919578063be3601f81461093957600080fd5b806398300e1811610164578063a17645951161013e578063a176459514610864578063a842486114610898578063a9059cbb146108b8578063abb1dc44146108d857600080fd5b806398300e181461080e5780639bb853441461082e5780639fa25b7b1461084457600080fd5b80638da5cb5b116101a05780638da5cb5b146107875780639071ce79146107a5578063917ceeb5146107d957806395d89b41146107f957600080fd5b806385dc30041461073157806388d695b2146107515780638ad76d081461077157600080fd5b80634188bf5a116102a0578063625163591161023e57806370a082311161021857806370a08231146106bc578063715018a6146106f25780637a37a0ed146107075780637d3c13e91461071c57600080fd5b806362516359146106725780636c580801146106875780636dd13dd71461069c57600080fd5b8063543137941161027a5780635431379414610606578063553193ca1461061c57806355eaf2951461063257806356ac04721461065257600080fd5b80634188bf5a1461059d57806347a4efc7146105d15780634f21869c146105f157600080fd5b806319697dc61161030d5780632a11ced0116102e75780632a11ced014610501578063313ce567146105215780633c11100d1461054357806340d139881461057357600080fd5b806319697dc614610475578063206c17bb1461049557806323b872dd146104e157600080fd5b806301986fad1461036057806306fdde03146103a5578063095ea7b3146103c7578063098800d9146103e75780631698755f1461043457806318160ddd1461045657600080fd5b3661035b57005b600080fd5b34801561036c57600080fd5b5061039061037b366004612883565b60066020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b3480156103b157600080fd5b506103ba610af1565b60405161039c91906128f7565b3480156103d357600080fd5b506103906103e236600461290a565b610b83565b3480156103f357600080fd5b50610407610402366004612883565b610b9a565b604080519687526020870195909552938501929092526060840152608083015260a082015260c00161039c565b34801561044057600080fd5b5061045461044f36600461290a565b610d13565b005b34801561046257600080fd5b506007545b60405190815260200161039c565b34801561048157600080fd5b50610454610490366004612936565b610d4d565b3480156104a157600080fd5b506104c97f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b03909116815260200161039c565b3480156104ed57600080fd5b506103906104fc36600461294f565b610dbb565b34801561050d57600080fd5b506104c961051c366004612936565b610e52565b34801561052d57600080fd5b5060055460405160ff909116815260200161039c565b34801561054f57600080fd5b5061039061055e366004612883565b60096020526000908152604090205460ff1681565b34801561057f57600080fd5b50610588610e7c565b6040805192835260208301919091520161039c565b3480156105a957600080fd5b506104c97f00000000000000000000000086e6c6fd93ea7bb809026dbe7ccaa9f571a6026c81565b3480156105dd57600080fd5b506104546105ec366004612883565b610f8d565b3480156105fd57600080fd5b50600e54610467565b34801561061257600080fd5b5061046760125481565b34801561062857600080fd5b50610467600a5481565b34801561063e57600080fd5b50600d546104c9906001600160a01b031681565b34801561065e57600080fd5b5061045461066d366004612936565b61100f565b34801561067e57600080fd5b50610467611074565b34801561069357600080fd5b506104546110a5565b3480156106a857600080fd5b506104546106b7366004612936565b61113f565b3480156106c857600080fd5b506104676106d7366004612883565b6001600160a01b031660009081526001602052604090205490565b3480156106fe57600080fd5b506104546111a4565b34801561071357600080fd5b5061058861122d565b34801561072857600080fd5b50610454611317565b34801561073d57600080fd5b5061045461074c366004612883565b6113b1565b34801561075d57600080fd5b5061045461076c366004612a6f565b61144b565b34801561077d57600080fd5b5061046760135481565b34801561079357600080fd5b506000546001600160a01b03166104c9565b3480156107b157600080fd5b506104c97f0000000000000000000000000d4a11d5eeaac28ec3f61d100daf4d40471f185281565b3480156107e557600080fd5b506104546107f4366004612936565b611573565b34801561080557600080fd5b506103ba611624565b34801561081a57600080fd5b50600c546104c9906001600160a01b031681565b34801561083a57600080fd5b50610467600b5481565b34801561085057600080fd5b5061045461085f366004612936565b611633565b34801561087057600080fd5b506104c97f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b3480156108a457600080fd5b506104546108b3366004612b3f565b611698565b3480156108c457600080fd5b506103906108d336600461290a565b611723565b3480156108e457600080fd5b506108ed611730565b60405161039c9a99989796959493929190612b74565b34801561090f57600080fd5b5061046760115481565b34801561092557600080fd5b50610454610934366004612bce565b611901565b34801561094557600080fd5b506104c97f000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec781565b34801561097957600080fd5b506109826119cd565b6040805193845260208401929092529082015260600161039c565b3480156109a957600080fd5b5061046760105481565b3480156109bf57600080fd5b506104546109ce366004612b3f565b611a93565b3480156109df57600080fd5b506104676109ee366004612c13565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b348015610a2557600080fd5b506008546104c9906001600160a01b031681565b348015610a4557600080fd5b5061046760175481565b348015610a5b57600080fd5b50610467610a6a366004612883565b600f6020526000908152604090205481565b348015610a8857600080fd5b50610454610a97366004612936565b611b1e565b348015610aa857600080fd5b50610588611b4f565b348015610abd57600080fd5b50610454610acc366004612883565b611c1d565b348015610add57600080fd5b50610454610aec366004612883565b611cf2565b606060038054610b0090612c4c565b80601f0160208091040260200160405190810160405280929190818152602001828054610b2c90612c4c565b8015610b795780601f10610b4e57610100808354040283529160200191610b79565b820191906000526020600020905b815481529060010190602001808311610b5c57829003601f168201915b5050505050905090565b6000610b90338484611d74565b5060015b92915050565b600080600080600080610bc2876001600160a01b031660009081526001602052604090205490565b6001600160a01b03808916600090815260166020526040902054600c5492985096501615610c5b57600c546040516370a0823160e01b81526001600160a01b038981166004830152909116906370a0823190602401602060405180830381865afa158015610c34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c589190612c86565b93505b600d546001600160a01b031615610d0a57600080610c77611b4f565b600d5460405163c09d0e0f60e01b81526001600160a01b038d81166004830152939550919350919091169063c09d0e0f906024016040805180830381865afa158015610cc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ceb9190612c9f565b909550935081610cfb8287612cd9565b610d059190612cf0565b925050505b91939550919395565b3360009081526006602052604090205460ff1615610d4357600854610d439083906001600160a01b031683611dd6565b5050565b60075490565b3360008181526006602052604090205460ff168015610d9057506008546001600160a01b0382811691161480610d9057506000546001600160a01b038281169116145b610db55760405162461bcd60e51b8152600401610dac90612d12565b60405180910390fd5b50601355565b6000610dc8848484611e90565b6001600160a01b038416600090815260026020908152604080832033845290915290205460001914610e48576001600160a01b0384166000908152600260209081526040808320338452909152902054610e23908390612d2e565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b5060019392505050565b600e8181548110610e6257600080fd5b6000918252602090912001546001600160a01b0316905081565b6000806000807f0000000000000000000000000d4a11d5eeaac28ec3f61d100daf4d40471f18526001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015610ee0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f049190612d58565b506001600160701b031691506001600160701b031691507f000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec76001600160a01b03167f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b03161015610f8057819350809250610f87565b8093508192505b50509091565b3360008181526006602052604090205460ff168015610fd057506008546001600160a01b0382811691161480610fd057506000546001600160a01b038281169116145b610fec5760405162461bcd60e51b8152600401610dac90612d12565b50600d80546001600160a01b0319166001600160a01b0392909216919091179055565b3360008181526006602052604090205460ff16801561105257506008546001600160a01b038281169116148061105257506000546001600160a01b038281169116145b61106e5760405162461bcd60e51b8152600401610dac90612d12565b50601455565b6000806000611081611b4f565b9150915080826014546110949190612cd9565b61109e9190612cf0565b9250505090565b3360008181526006602052604090205460ff1680156110e857506008546001600160a01b03828116911614806110e857506000546001600160a01b038281169116145b6111045760405162461bcd60e51b8152600401610dac90612d12565b600a54156111385760405162461bcd60e51b81526020600482015260016024820152601560fa1b6044820152606401610dac565b5043600a55565b3360008181526006602052604090205460ff16801561118257506008546001600160a01b038281169116148061118257506000546001600160a01b038281169116145b61119e5760405162461bcd60e51b8152600401610dac90612d12565b50601055565b6000546001600160a01b031633146111e35760405162461bcd60e51b8152602060048201526002602482015261216f60f01b6044820152606401610dac565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b60008060007f00000000000000000000000086e6c6fd93ea7bb809026dbe7ccaa9f571a6026c9050600080826001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611296573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ba9190612d58565b506001600160701b0391821693501690507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2306001600160a01b03821610156113085782955081945061130f565b8195508294505b505050509091565b3360008181526006602052604090205460ff16801561135a57506008546001600160a01b038281169116148061135a57506000546001600160a01b038281169116145b6113765760405162461bcd60e51b8152600401610dac90612d12565b600b54156113aa5760405162461bcd60e51b81526020600482015260016024820152601560fa1b6044820152606401610dac565b5043600b55565b3360008181526006602052604090205460ff1680156113f457506008546001600160a01b03828116911614806113f457506000546001600160a01b038281169116145b6114105760405162461bcd60e51b8152600401610dac90612d12565b50600880546001600160a01b039092166001600160a01b0319909216821790556000908152600660205260409020805460ff19166001179055565b3360008181526006602052604090205460ff1661148f5760405162461bcd60e51b8152602060048201526002602482015261667760f01b6044820152606401610dac565b8251825181146114c65760405162461bcd60e51b81526020600482015260026024820152611cdb60f21b6044820152606401610dac565b60008060005b8381101561152a578581815181106114e6576114e6612da8565b6020026020010151915081836114fc9190612dbe565b92506115228588838151811061151457611514612da8565b602002602001015184612109565b6001016114cc565b506001600160a01b03841660009081526001602052604090205461154f908390612d2e565b6001600160a01b039094166000908152600160205260409020939093555050505050565b3360008181526006602052604090205460ff1680156115b657506008546001600160a01b03828116911614806115b657506000546001600160a01b038281169116145b6115d25760405162461bcd60e51b8152600401610dac90612d12565b62030d4082101580156115e85750621e84808211155b61161e5760405162461bcd60e51b815260206004820152600760248201526632302d3230307760c81b6044820152606401610dac565b50601755565b606060048054610b0090612c4c565b3360008181526006602052604090205460ff16801561167657506008546001600160a01b038281169116148061167657506000546001600160a01b038281169116145b6116925760405162461bcd60e51b8152600401610dac90612d12565b50601555565b3360008181526006602052604090205460ff1680156116db57506008546001600160a01b03828116911614806116db57506000546001600160a01b038281169116145b6116f75760405162461bcd60e51b8152600401610dac90612d12565b506001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6000610b90338484611e90565b606060008060008060008060008060006004805461174d90612c4c565b80601f016020809104026020016040519081016040528092919081815260200182805461177990612c4c565b80156117c65780601f1061179b576101008083540402835291602001916117c6565b820191906000526020600020905b8154815290600101906020018083116117a957829003601f168201915b5050600554939d505060ff9092169a506117e29150610d479050565b60016020527fb34209a263f6c38fe55f099e9e70f9d67e93982480ff3234a5e0108028ad164d54600080527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49549199509061183d908a612d2e565b6118479190612d2e565b9650611852600e5490565b9550601454945060155493507f000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec76001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e09190612dd1565b60ff1692506118ed611b4f565b809250819350505090919293949596979899565b3360008181526006602052604090205460ff16801561194457506008546001600160a01b038281169116148061194457506000546001600160a01b038281169116145b6119605760405162461bcd60e51b8152600401610dac90612d12565b60005b83518110156119c757826006600086848151811061198357611983612da8565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806119bf81612df4565b915050611963565b50505050565b60008060006119da61122d565b6040516370a0823160e01b81526001600160a01b037f00000000000000000000000086e6c6fd93ea7bb809026dbe7ccaa9f571a6026c811660048301529295509093507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2909116906370a0823190602401602060405180830381865afa158015611a68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a8c9190612c86565b9050909192565b3360008181526006602052604090205460ff168015611ad657506008546001600160a01b0382811691161480611ad657506000546001600160a01b038281169116145b611af25760405162461bcd60e51b8152600401610dac90612d12565b506001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b3360009081526006602052604090205460ff1615611b4c57600854611b4c906001600160a01b031682612181565b50565b6000806000611b5c61122d565b509050600080611b6a610e7c565b90925090508181611b7c856002612cd9565b611b869190612cd9565b611b909190612cf0565b93507f00000000000000000000000086e6c6fd93ea7bb809026dbe7ccaa9f571a6026c6001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bf0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c149190612c86565b94505050509091565b6000546001600160a01b03163314611c5c5760405162461bcd60e51b8152602060048201526002602482015261216f60f01b6044820152606401610dac565b6001600160a01b038116611c975760405162461bcd60e51b815260206004820152600260248201526106e360f41b6044820152606401610dac565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3360008181526006602052604090205460ff168015611d3557506008546001600160a01b0382811691161480611d3557506000546001600160a01b038281169116145b611d515760405162461bcd60e51b8152600401610dac90612d12565b50600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b1790529151600092839290871691611e329190612e0d565b6000604051808303816000865af19150503d8060008114611e6f576040519150601f19603f3d011682016040523d82523d6000602084013e611e74565b606091505b5091509150818015611e87575060008151115b505b5050505050565b6001600160a01b03831660009081526001602052604090205481811015611edf5760405162461bcd60e51b8152602060048201526003602482015262424e4560e81b6044820152606401610dac565b6001600160a01b03841660009081526006602052604090205460ff16158015611f2157506001600160a01b03831660009081526006602052604090205460ff16155b15611f6e576005546000908190611f3d9060069060ff16612e29565b611f4890600a612f26565b905080831115611f5f57611f5c8184612d2e565b91505b81841115611f6b578193505b50505b600b54158015611faf57507f00000000000000000000000086e6c6fd93ea7bb809026dbe7ccaa9f571a6026c6001600160a01b0316836001600160a01b0316145b8015611fd357506001600160a01b03841660009081526006602052604090205460ff165b15611fdd5743600b555b6001600160a01b038416600090815260096020526040812054819060ff168061201e57506001600160a01b03851660009081526009602052604090205460ff165b156120d8576001600160a01b03861660009081526006602052604090205460ff1615801561206557506001600160a01b03851660009081526006602052604090205460ff16155b156120d8577f00000000000000000000000086e6c6fd93ea7bb809026dbe7ccaa9f571a6026c6001600160a01b0316856001600160a01b0316036120af576120ac84612200565b90505b600a54600010806120ca57506000600b541180156120ca5750805b6120d357600080fd5b600191505b6120e58686868585612259565b6120ee85612399565b8180156120f9575080155b15611e8757611e8760175461245c565b6001600160a01b03821660009081526001602052604090205461212d908290612dbe565b6001600160a01b0380841660008181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611dc99085815260200190565b60408051600080825260208201928390529182916001600160a01b0386169185916121ab91612e0d565b60006040518083038185875af1925050503d80600081146121e8576040519150601f19603f3d011682016040523d82523d6000602084013e6121ed565b606091505b5091509150818015611e89575050505050565b60008060008061220e6119cd565b925092509250600080841180156122255750600083115b1561224257826122358588612cd9565b61223f9190612cf0565b90505b61224c8185612dbe565b9091101595945050505050565b6001600160a01b03851660009081526001602052604090205461227d908490612d2e565b6001600160a01b0386166000908152600160205260408120919091558215612385576001600160a01b03861660009081526009602052604090205460ff16612385576001600160a01b03851660009081526009602052604090205460ff16156123855760006127106122f0606487612cd9565b6122fa9190612cf0565b905080156123835761230c8183612dbe565b9150612319873083612109565b821580156123315750600d54600160a01b900460ff16155b1561238357600060646123458360e6612cd9565b61234f9190612cf0565b3060009081526001602052604090205490915080821061237757612374600182612d2e565b91505b61238082612723565b50505b505b611e8786866123948488612d2e565b612109565b6001600160a01b0381166000908152600f60205260408120549003611b4c57600e5415806123f85750806001600160a01b0316600e6000815481106123e0576123e0612da8565b6000918252602090912001546001600160a01b031614155b15611b4c57600e80546001600160a01b0383166000818152600f60205260408120839055600183018455929092527fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd0180546001600160a01b031916909117905550565b600c546001600160a01b03166000819003612475575050565b600d546001600160a01b0316600081900361248f57505050565b601054478111156124a05750505050565b436013546012546124b19190612dbe565b11156124bd5750505050565b6000836001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125219190612c86565b905080600003612532575050505050565b600061253e8284612cf0565b90508060000361255057505050505050565b60008060005a90506000612562611074565b6015549091505b8a8510801561257757508684105b1561271257866011541061258b5760006011555b60008a6001600160a01b0316636352211e60115460016125ab9190612dbe565b6040518263ffffffff1660e01b81526004016125c991815260200190565b602060405180830381865afa1580156125e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061260a9190612f35565b60405163c09d0e0f60e01b81526001600160a01b0380831660048301529192506000918291908d169063c09d0e0f906024016040805180830381865afa158015612658573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061267c9190612c9f565b915091508482101580156126905750838110155b156126cd5761269f838a612181565b6001600160a01b038316600090815260166020526040812080548b92906126c7908490612dbe565b90915550505b5a6126d89087612d2e565b6126e29089612dbe565b97505a6011805491975060006126f783612df4565b9190505550868061270790612df4565b975050505050612569565b505043601255505050505050505050565b600d805460ff60a01b1916600160a01b179055801561285e57604080516002808252606082018352600092602083019080368337019050509050308160008151811061277157612771612da8565b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2816001815181106127c5576127c5612da8565b6001600160a01b03928316602091820292909201015260405163791ac94760e01b81527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d9091169063791ac9479061282a908590600090869030904290600401612f52565b600060405180830381600087803b15801561284457600080fd5b505af1158015612858573d6000803e3d6000fd5b50505050505b50600d805460ff60a01b19169055565b6001600160a01b0381168114611b4c57600080fd5b60006020828403121561289557600080fd5b81356128a08161286e565b9392505050565b60005b838110156128c25781810151838201526020016128aa565b50506000910152565b600081518084526128e38160208601602086016128a7565b601f01601f19169290920160200192915050565b6020815260006128a060208301846128cb565b6000806040838503121561291d57600080fd5b82356129288161286e565b946020939093013593505050565b60006020828403121561294857600080fd5b5035919050565b60008060006060848603121561296457600080fd5b833561296f8161286e565b9250602084013561297f8161286e565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156129cf576129cf612990565b604052919050565b600067ffffffffffffffff8211156129f1576129f1612990565b5060051b60200190565b600082601f830112612a0c57600080fd5b81356020612a21612a1c836129d7565b6129a6565b82815260059290921b84018101918181019086841115612a4057600080fd5b8286015b84811015612a64578035612a578161286e565b8352918301918301612a44565b509695505050505050565b60008060408385031215612a8257600080fd5b823567ffffffffffffffff80821115612a9a57600080fd5b612aa6868387016129fb565b9350602091508185013581811115612abd57600080fd5b85019050601f81018613612ad057600080fd5b8035612ade612a1c826129d7565b81815260059190911b82018301908381019088831115612afd57600080fd5b928401925b82841015612b1b57833582529284019290840190612b02565b80955050505050509250929050565b80358015158114612b3a57600080fd5b919050565b60008060408385031215612b5257600080fd5b8235612b5d8161286e565b9150612b6b60208401612b2a565b90509250929050565b6000610140808352612b888184018e6128cb565b602084019c909c52505060408101989098526060880196909652608087019490945260a086019290925260c085015260e084015261010083015261012090910152919050565b60008060408385031215612be157600080fd5b823567ffffffffffffffff811115612bf857600080fd5b612c04858286016129fb565b925050612b6b60208401612b2a565b60008060408385031215612c2657600080fd5b8235612c318161286e565b91506020830135612c418161286e565b809150509250929050565b600181811c90821680612c6057607f821691505b602082108103612c8057634e487b7160e01b600052602260045260246000fd5b50919050565b600060208284031215612c9857600080fd5b5051919050565b60008060408385031215612cb257600080fd5b505080516020909101519092909150565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610b9457610b94612cc3565b600082612d0d57634e487b7160e01b600052601260045260246000fd5b500490565b6020808252600290820152616e7760f01b604082015260600190565b81810381811115610b9457610b94612cc3565b80516001600160701b0381168114612b3a57600080fd5b600080600060608486031215612d6d57600080fd5b612d7684612d41565b9250612d8460208501612d41565b9150604084015163ffffffff81168114612d9d57600080fd5b809150509250925092565b634e487b7160e01b600052603260045260246000fd5b80820180821115610b9457610b94612cc3565b600060208284031215612de357600080fd5b815160ff811681146128a057600080fd5b600060018201612e0657612e06612cc3565b5060010190565b60008251612e1f8184602087016128a7565b9190910192915050565b60ff8281168282160390811115610b9457610b94612cc3565b600181815b80851115612e7d578160001904821115612e6357612e63612cc3565b80851615612e7057918102915b93841c9390800290612e47565b509250929050565b600082612e9457506001610b94565b81612ea157506000610b94565b8160018114612eb75760028114612ec157612edd565b6001915050610b94565b60ff841115612ed257612ed2612cc3565b50506001821b610b94565b5060208310610133831016604e8410600b8410161715612f00575081810a610b94565b612f0a8383612e42565b8060001904821115612f1e57612f1e612cc3565b029392505050565b60006128a060ff841683612e85565b600060208284031215612f4757600080fd5b81516128a08161286e565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612fa25784516001600160a01b031683529383019391830191600101612f7d565b50506001600160a01b0396909616606085015250505060800152939250505056fea26469706673582212200a5612dee3b3ffbac1ca6e3a143123f75a0ef3ccf54beb977bba5f7a547e659d64736f6c63430008130033

Deployed Bytecode Sourcemap

19873:365:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3305:45;;;;;;;;;;-1:-1:-1;3305:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;567:14:1;;560:22;542:41;;530:2;515:18;3305:45:0;;;;;;;;5880:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;6638:159::-;;;;;;;;;;-1:-1:-1;6638:159:0;;;;;:::i;:::-;;:::i;18620:661::-;;;;;;;;;;-1:-1:-1;18620:661:0;;;;;:::i;:::-;;:::i;:::-;;;;1957:25:1;;;2013:2;1998:18;;1991:34;;;;2041:18;;;2034:34;;;;2099:2;2084:18;;2077:34;2142:3;2127:19;;2120:35;2186:3;2171:19;;2164:35;1944:3;1929:19;18620:661:0;1670:535:1;13619:176:0;;;;;;;;;;-1:-1:-1;13619:176:0;;;;;:::i;:::-;;:::i;:::-;;6084:95;;;;;;;;;;-1:-1:-1;6164:7:0;;6084:95;;;2356:25:1;;;2344:2;2329:18;6084:95:0;2210:177:1;17216:124:0;;;;;;;;;;-1:-1:-1;17216:124:0;;;;;:::i;:::-;;:::i;3475:40::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2760:32:1;;;2742:51;;2730:2;2715:18;3475:40:0;2577:222:1;6805:336:0;;;;;;;;;;-1:-1:-1;6805:336:0;;;;;:::i;:::-;;:::i;11848:24::-;;;;;;;;;;-1:-1:-1;11848:24:0;;;;;:::i;:::-;;:::i;5982:94::-;;;;;;;;;;-1:-1:-1;6059:9:0;;5982:94;;6059:9;;;;3615:36:1;;3603:2;3588:18;5982:94:0;3473:184:1;3643:45:0;;;;;;;;;;-1:-1:-1;3643:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;9679:307;;;;;;;;;;;;;:::i;:::-;;;;3836:25:1;;;3892:2;3877:18;;3870:34;;;;3809:18;9679:307:0;3662:248:1;3769:34:0;;;;;;;;;;;;;;;17443:112;;;;;;;;;;-1:-1:-1;17443:112:0;;;;;:::i;:::-;;:::i;11934:96::-;;;;;;;;;;-1:-1:-1;12008:7:0;:14;11934:96;;14367:30;;;;;;;;;;;;;;;;3695;;;;;;;;;;;;;;;;3884:26;;;;;;;;;;-1:-1:-1;3884:26:0;;;;-1:-1:-1;;;;;3884:26:0;;;16974:112;;;;;;;;;;-1:-1:-1;16974:112:0;;;;;:::i;:::-;;:::i;16619:223::-;;;;;;;;;;;;;:::i;12778:139::-;;;;;;;;;;;;;:::i;16850:116::-;;;;;;;;;;-1:-1:-1;16850:116:0;;;;;:::i;:::-;;:::i;6187:119::-;;;;;;;;;;-1:-1:-1;6187:119:0;;;;;:::i;:::-;-1:-1:-1;;;;;6280:18:0;6253:7;6280:18;;;:9;:18;;;;;;;6187:119;2665:148;;;;;;;;;;;;;:::i;9264:407::-;;;;;;;;;;;;;:::i;12925:139::-;;;;;;;;;;;;;:::i;12635:135::-;;;;;;;;;;-1:-1:-1;12635:135:0;;;;;:::i;:::-;;:::i;19289:577::-;;;;;;;;;;-1:-1:-1;19289:577:0;;;;;:::i;:::-;;:::i;14404:40::-;;;;;;;;;;;;;;;;2483:79;;;;;;;;;;-1:-1:-1;2521:7:0;2548:6;-1:-1:-1;;;;;2548:6:0;2483:79;;3596:40;;;;;;;;;;;;;;;17606:179;;;;;;;;;;-1:-1:-1;17606:179:0;;;;;:::i;:::-;;:::i;5774:98::-;;;;;;;;;;;;;:::i;3861:16::-;;;;;;;;;;-1:-1:-1;3861:16:0;;;;-1:-1:-1;;;;;3861:16:0;;;3732:30;;;;;;;;;;;;;;;;17094:114;;;;;;;;;;-1:-1:-1;17094:114:0;;;;;:::i;:::-;;:::i;3559:30::-;;;;;;;;;;;;;;;13285:122;;;;;;;;;;-1:-1:-1;13285:122:0;;;;;:::i;:::-;;:::i;6314:165::-;;;;;;;;;;-1:-1:-1;6314:165:0;;;;;:::i;:::-;;:::i;17793:819::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;14330:30::-;;;;;;;;;;;;;;;;13072:205;;;;;;;;;;-1:-1:-1;13072:205:0;;;;;:::i;:::-;;:::i;3522:30::-;;;;;;;;;;;;;;;9047:209;;;;;;;;;;;;;:::i;:::-;;;;9070:25:1;;;9126:2;9111:18;;9104:34;;;;9154:18;;;9147:34;9058:2;9043:18;9047:209:0;8868:319:1;14274:49:0;;;;;;;;;;;;;;;;12505:122;;;;;;;;;;-1:-1:-1;12505:122:0;;;;;:::i;:::-;;:::i;6487:143::-;;;;;;;;;;-1:-1:-1;6487:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;6595:18:0;;;6568:7;6595:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;6487:143;3391:26;;;;;;;;;;-1:-1:-1;3391:26:0;;;;-1:-1:-1;;;;;3391:26:0;;;17563:34;;;;;;;;;;;;;;;;11879:46;;;;;;;;;;-1:-1:-1;11879:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;13452:159;;;;;;;;;;-1:-1:-1;13452:159:0;;;;;:::i;:::-;;:::i;16312:299::-;;;;;;;;;;;;;:::i;2821:208::-;;;;;;;;;;-1:-1:-1;2821:208:0;;;;;:::i;:::-;;:::i;17348:87::-;;;;;;;;;;-1:-1:-1;17348:87:0;;;;;:::i;:::-;;:::i;5880:94::-;5928:13;5961:5;5954:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5880:94;:::o;6638:159::-;6713:4;6730:37;6739:10;6751:7;6760:6;6730:8;:37::i;:::-;-1:-1:-1;6785:4:0;6638:159;;;;;:::o;18620:661::-;18692:20;18714:17;18733:18;18762:16;18780:18;18800:15;18848:18;18858:7;-1:-1:-1;;;;;6280:18:0;6253:7;6280:18;;;:9;:18;;;;;;;6187:119;18848:18;-1:-1:-1;;;;;18889:19:0;;;;;;;:10;:19;;;;;;18945:4;;18833:33;;-1:-1:-1;18889:19:0;-1:-1:-1;18945:4:0;18923:27;18919:96;;18980:4;;:23;;-1:-1:-1;;;18980:23:0;;-1:-1:-1;;;;;2760:32:1;;;18980:23:0;;;2742:51:1;18980:4:0;;;;:14;;2715:18:1;;18980:23:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18967:36;;18919:96;19051:9;;-1:-1:-1;;;;;19051:9:0;19029:32;19025:249;;19079:15;19095:20;19119:11;:9;:11::i;:::-;19170:9;;:34;;-1:-1:-1;;;19170:34:0;;-1:-1:-1;;;;;2760:32:1;;;19170:34:0;;;2742:51:1;19078:52:0;;-1:-1:-1;19078:52:0;;-1:-1:-1;19170:9:0;;;;;:25;;2715:18:1;;19170:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19145:59;;-1:-1:-1;19145:59:0;-1:-1:-1;19255:7:0;19229:23;19240:12;19145:59;19229:23;:::i;:::-;:33;;;;:::i;:::-;19219:43;;19063:211;;19025:249;18620:661;;;;;;;:::o;13619:176::-;13708:10;13694:25;;;;:13;:25;;;;;;;;13690:98;;;13756:11;;13736:40;;13749:5;;-1:-1:-1;;;;;13756:11:0;13769:6;13736:12;:40::i;:::-;13619:176;;:::o;6084:95::-;6164:7;;;6084:95::o;17216:124::-;12364:10;12344:17;12393:24;;;:13;:24;;;;;;;;:77;;;;-1:-1:-1;12435:11:0;;-1:-1:-1;;;;;12422:24:0;;;12435:11;;12422:24;;:47;;-1:-1:-1;12463:6:0;;-1:-1:-1;;;;;12450:19:0;;;12463:6;;12450:19;12422:47;12385:92;;;;-1:-1:-1;;;12385:92:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;17301:19:0::1;:31:::0;17216:124::o;6805:336::-;6903:4;6920:36;6930:6;6938:9;6949:6;6920:9;:36::i;:::-;-1:-1:-1;;;;;6971:19:0;;3464:1;6971:19;;;:11;:19;;;;;;;;6991:10;6971:31;;;;;;;;-1:-1:-1;;6971:38:0;6967:145;;-1:-1:-1;;;;;7060:19:0;;;;;;:11;:19;;;;;;;;7080:10;7060:31;;;;;;;;:40;;7094:6;;7060:40;:::i;:::-;-1:-1:-1;;;;;7026:19:0;;;;;;:11;:19;;;;;;;;7046:10;7026:31;;;;;;;:74;6967:145;-1:-1:-1;7129:4:0;6805:336;;;;;:::o;11848:24::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11848:24:0;;-1:-1:-1;11848:24:0;:::o;9679:307::-;9730:12;9744:13;9770:7;9779:10;9794:13;-1:-1:-1;;;;;9794:25:0;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9769:52;-1:-1:-1;;;;;9769:52:0;;;-1:-1:-1;;;;;9769:52:0;;;9844:5;-1:-1:-1;;;;;9836:13:0;:5;-1:-1:-1;;;;;9836:13:0;;9832:147;;;9873:2;9866:9;;9898:2;9890:10;;9832:147;;;9940:2;9933:9;;9965:2;9957:10;;9832:147;9758:228;;9679:307;;:::o;17443:112::-;12364:10;12344:17;12393:24;;;:13;:24;;;;;;;;:77;;;;-1:-1:-1;12435:11:0;;-1:-1:-1;;;;;12422:24:0;;;12435:11;;12422:24;;:47;;-1:-1:-1;12463:6:0;;-1:-1:-1;;;;;12450:19:0;;;12463:6;;12450:19;12422:47;12385:92;;;;-1:-1:-1;;;12385:92:0;;;;;;;:::i;:::-;-1:-1:-1;17516:9:0::1;:31:::0;;-1:-1:-1;;;;;;17516:31:0::1;-1:-1:-1::0;;;;;17516:31:0;;;::::1;::::0;;;::::1;::::0;;17443:112::o;16974:::-;12364:10;12344:17;12393:24;;;:13;:24;;;;;;;;:77;;;;-1:-1:-1;12435:11:0;;-1:-1:-1;;;;;12422:24:0;;;12435:11;;12422:24;;:47;;-1:-1:-1;12463:6:0;;-1:-1:-1;;;;;12450:19:0;;;12463:6;;12450:19;12422:47;12385:92;;;;-1:-1:-1;;;12385:92:0;;;;;;;:::i;:::-;-1:-1:-1;17048:26:0::1;:30:::0;16974:112::o;16619:223::-;16675:19;16707:15;16723:20;16747:11;:9;:11::i;:::-;16706:52;;;;16822:12;16812:7;16783:26;;:36;;;;:::i;:::-;:51;;;;:::i;:::-;16769:65;;16695:147;;16619:223;:::o;12778:139::-;12364:10;12344:17;12393:24;;;:13;:24;;;;;;;;:77;;;;-1:-1:-1;12435:11:0;;-1:-1:-1;;;;;12422:24:0;;;12435:11;;12422:24;;:47;;-1:-1:-1;12463:6:0;;-1:-1:-1;;;;;12450:19:0;;;12463:6;;12450:19;12422:47;12385:92;;;;-1:-1:-1;;;12385:92:0;;;;;;;:::i;:::-;12847:15:::1;::::0;12842:20;12834:34:::1;;;::::0;-1:-1:-1;;;12834:34:0;;12249:2:1;12834:34:0::1;::::0;::::1;12231:21:1::0;12288:1;12268:18;;;12261:29;-1:-1:-1;;;12306:18:1;;;12299:31;12347:18;;12834:34:0::1;12047:324:1::0;12834:34:0::1;-1:-1:-1::0;12897:12:0::1;12879:15;:30:::0;12778:139::o;16850:116::-;12364:10;12344:17;12393:24;;;:13;:24;;;;;;;;:77;;;;-1:-1:-1;12435:11:0;;-1:-1:-1;;;;;12422:24:0;;;12435:11;;12422:24;;:47;;-1:-1:-1;12463:6:0;;-1:-1:-1;;;;;12450:19:0;;;12463:6;;12450:19;12422:47;12385:92;;;;-1:-1:-1;;;12385:92:0;;;;;;;:::i;:::-;-1:-1:-1;16931:18:0::1;:27:::0;16850:116::o;2665:148::-;2610:6;;-1:-1:-1;;;;;2610:6:0;2620:10;2610:20;2602:35;;;;-1:-1:-1;;;2602:35:0;;12578:2:1;2602:35:0;;;12560:21:1;12617:1;12597:18;;;12590:29;-1:-1:-1;;;12635:18:1;;;12628:32;12677:18;;2602:35:0;12376:325:1;2602:35:0;2772:1:::1;2756:6:::0;;2735:40:::1;::::0;-1:-1:-1;;;;;2756:6:0;;::::1;::::0;2735:40:::1;::::0;2772:1;;2735:40:::1;2803:1;2786:19:::0;;-1:-1:-1;;;;;;2786:19:0::1;::::0;;2665:148::o;9264:407::-;9310:14;9326:13;9351:18;9382:9;9351:41;;9404:7;9413:10;9428:8;-1:-1:-1;;;;;9428:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;9403:47:0;;;;-1:-1:-1;9403:47:0;;-1:-1:-1;9484:5:0;9525:4;-1:-1:-1;;;;;9504:26:0;;;9500:164;;;9556:2;9547:11;;9581:2;9573:10;;9500:164;;;9625:2;9616:11;;9650:2;9642:10;;9500:164;9340:331;;;;9264:407;;:::o;12925:139::-;12364:10;12344:17;12393:24;;;:13;:24;;;;;;;;:77;;;;-1:-1:-1;12435:11:0;;-1:-1:-1;;;;;12422:24:0;;;12435:11;;12422:24;;:47;;-1:-1:-1;12463:6:0;;-1:-1:-1;;;;;12450:19:0;;;12463:6;;12450:19;12422:47;12385:92;;;;-1:-1:-1;;;12385:92:0;;;;;;;:::i;:::-;12994:15:::1;::::0;12989:20;12981:34:::1;;;::::0;-1:-1:-1;;;12981:34:0;;12249:2:1;12981:34:0::1;::::0;::::1;12231:21:1::0;12288:1;12268:18;;;12261:29;-1:-1:-1;;;12306:18:1;;;12299:31;12347:18;;12981:34:0::1;12047:324:1::0;12981:34:0::1;-1:-1:-1::0;13044:12:0::1;13026:15;:30:::0;12925:139::o;12635:135::-;12364:10;12344:17;12393:24;;;:13;:24;;;;;;;;:77;;;;-1:-1:-1;12435:11:0;;-1:-1:-1;;;;;12422:24:0;;;12435:11;;12422:24;;:47;;-1:-1:-1;12463:6:0;;-1:-1:-1;;;;;12450:19:0;;;12463:6;;12450:19;12422:47;12385:92;;;;-1:-1:-1;;;12385:92:0;;;;;;;:::i;:::-;-1:-1:-1;12707:11:0::1;:18:::0;;-1:-1:-1;;;;;12707:18:0;;::::1;-1:-1:-1::0;;;;;;12707:18:0;;::::1;::::0;::::1;::::0;;:11:::1;12736:19:::0;;;:13:::1;:19;::::0;;;;:26;;-1:-1:-1;;12736:26:0::1;12707:18:::0;12736:26:::1;::::0;;12635:135::o;19289:577::-;19395:10;19378:14;19424:21;;;:13;:21;;;;;;;;19416:36;;;;-1:-1:-1;;;19416:36:0;;12908:2:1;19416:36:0;;;12890:21:1;12947:1;12927:18;;;12920:29;-1:-1:-1;;;12965:18:1;;;12958:32;13007:18;;19416:36:0;12706:325:1;19416:36:0;19477:10;;19513:14;;19506:21;;19498:36;;;;-1:-1:-1;;;19498:36:0;;13238:2:1;19498:36:0;;;13220:21:1;13277:1;13257:18;;;13250:29;-1:-1:-1;;;13295:18:1;;;13288:32;13337:18;;19498:36:0;13036:325:1;19498:36:0;19545:15;19571:14;19601:9;19596:205;19616:3;19612:1;:7;19596:205;;;19646:7;19654:1;19646:10;;;;;;;;:::i;:::-;;;;;;;19637:19;;19682:6;19671:17;;;;;:::i;:::-;;;19703:37;19717:6;19725:3;19729:1;19725:6;;;;;;;;:::i;:::-;;;;;;;19733;19703:13;:37::i;:::-;19775:3;;19596:205;;;-1:-1:-1;;;;;;19831:17:0;;;;;;:9;:17;;;;;;:27;;19851:7;;19831:27;:::i;:::-;-1:-1:-1;;;;;19811:17:0;;;;;;;:9;:17;;;;;:47;;;;-1:-1:-1;;;;;19289:577:0:o;17606:179::-;12364:10;12344:17;12393:24;;;:13;:24;;;;;;;;:77;;;;-1:-1:-1;12435:11:0;;-1:-1:-1;;;;;12422:24:0;;;12435:11;;12422:24;;:47;;-1:-1:-1;12463:6:0;;-1:-1:-1;;;;;12450:19:0;;;12463:6;;12450:19;12422:47;12385:92;;;;-1:-1:-1;;;12385:92:0;;;;;;;:::i;:::-;17702:6:::1;17689:9;:19;;:43;;;;;17725:7;17712:9;:20;;17689:43;17681:63;;;::::0;-1:-1:-1;;;17681:63:0;;13830:2:1;17681:63:0::1;::::0;::::1;13812:21:1::0;13869:1;13849:18;;;13842:29;-1:-1:-1;;;13887:18:1;;;13880:37;13934:18;;17681:63:0::1;13628:330:1::0;17681:63:0::1;-1:-1:-1::0;17755:10:0::1;:22:::0;17606:179::o;5774:98::-;5824:13;5857:7;5850:14;;;;;:::i;17094:114::-;12364:10;12344:17;12393:24;;;:13;:24;;;;;;;;:77;;;;-1:-1:-1;12435:11:0;;-1:-1:-1;;;;;12422:24:0;;;12435:11;;12422:24;;:47;;-1:-1:-1;12463:6:0;;-1:-1:-1;;;;;12450:19:0;;;12463:6;;12450:19;12422:47;12385:92;;;;-1:-1:-1;;;12385:92:0;;;;;;;:::i;:::-;-1:-1:-1;17169:27:0::1;:31:::0;17094:114::o;13285:122::-;12364:10;12344:17;12393:24;;;:13;:24;;;;;;;;:77;;;;-1:-1:-1;12435:11:0;;-1:-1:-1;;;;;12422:24:0;;;12435:11;;12422:24;;:47;;-1:-1:-1;12463:6:0;;-1:-1:-1;;;;;12450:19:0;;;12463:6;;12450:19;12422:47;12385:92;;;;-1:-1:-1;;;12385:92:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;;13371:19:0;;;::::1;;::::0;;;:13:::1;:19;::::0;;;;:28;;-1:-1:-1;;13371:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;13285:122::o;6314:165::-;6392:4;6409:40;6419:10;6431:9;6442:6;6409:9;:40::i;17793:819::-;17848:25;17875:21;17907:13;17922:18;17942:17;17970:33;18005:34;18050:20;18072:15;18089:20;18141:7;18127:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;18175:9:0;;18127:21;;-1:-1:-1;;18175:9:0;;;;;-1:-1:-1;18203:13:0;;-1:-1:-1;18203:11:0;;-1:-1:-1;18203:13:0:i;:::-;6280:9;:18;;;;6253:7;6280:18;;;;18195:21;;-1:-1:-1;6280:18:0;18240:29;;18195:21;18240:29;:::i;:::-;:94;;;;:::i;:::-;18227:107;;18357:17;12008:7;:14;;11934:96;18357:17;18345:29;;18413:26;;18385:54;;18479:27;;18450:56;;18539:5;-1:-1:-1;;;;;18532:22:0;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18517:39;;;;18593:11;:9;:11::i;:::-;18567:37;;;;;;;;17793:819;;;;;;;;;;:::o;13072:205::-;12364:10;12344:17;12393:24;;;:13;:24;;;;;;;;:77;;;;-1:-1:-1;12435:11:0;;-1:-1:-1;;;;;12422:24:0;;;12435:11;;12422:24;;:47;;-1:-1:-1;12463:6:0;;-1:-1:-1;;;;;12450:19:0;;;12463:6;;12450:19;12422:47;12385:92;;;;-1:-1:-1;;;12385:92:0;;;;;;;:::i;:::-;13178:6:::1;13173:97;13194:4;:11;13190:1;:15;13173:97;;;13252:6;13227:13;:22;13241:4;13246:1;13241:7;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;13227:22:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;13227:22:0;:31;;-1:-1:-1;;13227:31:0::1;::::0;::::1;;::::0;;;::::1;::::0;;13207:3;::::1;::::0;::::1;:::i;:::-;;;;13173:97;;;;12333:164:::0;13072:205;;:::o;9047:209::-;9092:14;9108:13;9123:20;9173:15;:13;:15::i;:::-;9214:34;;-1:-1:-1;;;9214:34:0;;-1:-1:-1;;;;;9238:9:0;2760:32:1;;9214:34:0;;;2742:51:1;9155:33:0;;-1:-1:-1;9155:33:0;;-1:-1:-1;9221:5:0;9214:23;;;;;;2715:18:1;;9214:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9199:49;;9047:209;;;:::o;12505:122::-;12364:10;12344:17;12393:24;;;:13;:24;;;;;;;;:77;;;;-1:-1:-1;12435:11:0;;-1:-1:-1;;;;;12422:24:0;;;12435:11;;12422:24;;:47;;-1:-1:-1;12463:6:0;;-1:-1:-1;;;;;12450:19:0;;;12463:6;;12450:19;12422:47;12385:92;;;;-1:-1:-1;;;12385:92:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;;12591:19:0;;;::::1;;::::0;;;:13:::1;:19;::::0;;;;:28;;-1:-1:-1;;12591:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;12505:122::o;13452:159::-;13528:10;13514:25;;;;:13;:25;;;;;;;;13510:94;;;13572:11;;13556:36;;-1:-1:-1;;;;;13572:11:0;13585:6;13556:15;:36::i;:::-;13452:159;:::o;16312:299::-;16354:15;16371:20;16404:14;16423:15;:13;:15::i;:::-;16403:35;;;16450:12;16463:13;16480:20;:18;:20::i;:::-;16449:51;;-1:-1:-1;16449:51:0;-1:-1:-1;16449:51:0;;16526:10;16530:6;16526:1;:10;:::i;:::-;:18;;;;:::i;:::-;:25;;;;:::i;:::-;16511:40;;16579:9;-1:-1:-1;;;;;16572:29:0;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16562:41;;16392:219;;;16312:299;;:::o;2821:208::-;2610:6;;-1:-1:-1;;;;;2610:6:0;2620:10;2610:20;2602:35;;;;-1:-1:-1;;;2602:35:0;;12578:2:1;2602:35:0;;;12560:21:1;12617:1;12597:18;;;12590:29;-1:-1:-1;;;12635:18:1;;;12628:32;12677:18;;2602:35:0;12376:325:1;2602:35:0;-1:-1:-1;;;;;2910:22:0;::::1;2902:37;;;::::0;-1:-1:-1;;;2902:37:0;;14583:2:1;2902:37:0::1;::::0;::::1;14565:21:1::0;14622:1;14602:18;;;14595:29;-1:-1:-1;;;14640:18:1;;;14633:32;14682:18;;2902:37:0::1;14381:325:1::0;2902:37:0::1;2976:6;::::0;;2955:38:::1;::::0;-1:-1:-1;;;;;2955:38:0;;::::1;::::0;2976:6;::::1;::::0;2955:38:::1;::::0;::::1;3004:6;:17:::0;;-1:-1:-1;;;;;;3004:17:0::1;-1:-1:-1::0;;;;;3004:17:0;;;::::1;::::0;;;::::1;::::0;;2821:208::o;17348:87::-;12364:10;12344:17;12393:24;;;:13;:24;;;;;;;;:77;;;;-1:-1:-1;12435:11:0;;-1:-1:-1;;;;;12422:24:0;;;12435:11;;12422:24;;:47;;-1:-1:-1;12463:6:0;;-1:-1:-1;;;;;12450:19:0;;;12463:6;;12450:19;12422:47;12385:92;;;;-1:-1:-1;;;12385:92:0;;;;;;;:::i;:::-;-1:-1:-1;17411:4:0::1;:16:::0;;-1:-1:-1;;;;;;17411:16:0::1;-1:-1:-1::0;;;;;17411:16:0;;;::::1;::::0;;;::::1;::::0;;17348:87::o;7149:177::-;-1:-1:-1;;;;;7234:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;7286:32;;2356:25:1;;;7286:32:0;;2329:18:1;7286:32:0;;;;;;;;7149:177;;;:::o;13803:238::-;13931:45;;;-1:-1:-1;;;;;14903:32:1;;;13931:45:0;;;14885:51:1;14952:18;;;;14945:34;;;13931:45:0;;;;;;;;;;14858:18:1;;;;13931:45:0;;;;;;;-1:-1:-1;;;;;13931:45:0;-1:-1:-1;;;13931:45:0;;;13920:57;;-1:-1:-1;;;;13920:10:0;;;;:57;;13931:45;13920:57;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13884:93;;;;13992:7;:26;;;;;14017:1;14003:4;:11;:15;13992:26;13988:46;;13873:168;;13803:238;;;:::o;7334:1322::-;-1:-1:-1;;;;;6280:18:0;;7448:15;6280:18;;;:9;:18;;;;;;7500:17;;;;7492:33;;;;-1:-1:-1;;;7492:33:0;;15484:2:1;7492:33:0;;;15466:21:1;15523:1;15503:18;;;15496:29;-1:-1:-1;;;15541:18:1;;;15534:33;15584:18;;7492:33:0;15282:326:1;7492:33:0;-1:-1:-1;;;;;7543:19:0;;;;;;:13;:19;;;;;;;;7542:20;:42;;;;-1:-1:-1;;;;;;7567:17:0;;;;;;:13;:17;;;;;;;;7566:18;7542:42;7538:369;;;7667:9;;7601:21;;;;7667:13;;7679:1;;7667:9;;:13;:::i;:::-;7660:21;;:2;:21;:::i;:::-;7637:44;;7710:12;7700:7;:22;7696:101;;;7759:22;7769:12;7759:7;:22;:::i;:::-;7743:38;;7696:101;7824:13;7815:6;:22;7811:85;;;7867:13;7858:22;;7811:85;7586:321;;7538:369;7928:15;;7923:20;:39;;;;;7953:9;-1:-1:-1;;;;;7947:15:0;:2;-1:-1:-1;;;;;7947:15:0;;7923:39;:62;;;;-1:-1:-1;;;;;;7966:19:0;;;;;;:13;:19;;;;;;;;7923:62;7919:125;;;8020:12;8002:15;:30;7919:125;-1:-1:-1;;;;;8106:19:0;;8056:12;8106:19;;;:13;:19;;;;;;8056:12;;8106:19;;;:40;;-1:-1:-1;;;;;;8129:17:0;;;;;;:13;:17;;;;;;;;8106:40;8102:367;;;-1:-1:-1;;;;;8168:19:0;;;;;;:13;:19;;;;;;;;8167:20;:42;;;;-1:-1:-1;;;;;;8192:17:0;;;;;;:13;:17;;;;;;;;8191:18;8167:42;8163:295;;;8240:9;-1:-1:-1;;;;;8234:15:0;:2;-1:-1:-1;;;;;8234:15:0;;8230:97;;8284:23;8300:6;8284:15;:23::i;:::-;8274:33;;8230:97;8357:15;;8353:1;:19;:55;;;;8395:1;8377:15;;:19;:30;;;;;8400:7;8377:30;8345:64;;;;;;8438:4;8428:14;;8163:295;8481:50;8496:4;8502:2;8506:6;8514:7;8523;8481:14;:50::i;:::-;8542:14;8553:2;8542:10;:14::i;:::-;8573:7;:19;;;;;8585:7;8584:8;8573:19;8569:80;;;8609:28;8626:10;;8609:16;:28::i;11627:213::-;-1:-1:-1;;;;;11764:13:0;;;;;;:9;:13;;;;;;:23;;11780:7;;11764:23;:::i;:::-;-1:-1:-1;;;;;11748:13:0;;;;;;;:9;:13;;;;;;;:39;;;;11803:29;;;;;;;;;;11824:7;2356:25:1;;2344:2;2329:18;;2210:177;14049:204:0;14176:12;;;14119;14176;;;;;;;;;;14119;;;-1:-1:-1;;;;;14153:7:0;;;14169:5;;14153:36;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14118:71;;;;14204:7;:26;;;;-1:-1:-1;;;;;14049:204:0:o;8664:375::-;8728:12;8753:14;8769:13;8784:20;8808:14;:12;:14::i;:::-;8752:70;;;;;;8833:19;8876:1;8867:6;:10;:23;;;;;8889:1;8881:5;:9;8867:23;8863:93;;;8939:5;8921:15;8930:6;8921;:15;:::i;:::-;:23;;;;:::i;:::-;8907:37;;8863:93;9011:20;9020:11;9011:6;:20;:::i;:::-;8995:36;;;;;8664:375;-1:-1:-1;;;;;8664:375:0:o;9994:1161::-;-1:-1:-1;;;;;10189:17:0;;;;;;:9;:17;;;;;;:27;;10209:7;;10189:27;:::i;:::-;-1:-1:-1;;;;;10169:17:0;;;;;;:9;:17;;;;;:47;;;;10257:825;;;;-1:-1:-1;;;;;10289:21:0;;;;;;:13;:21;;;;;;;;10285:786;;-1:-1:-1;;;;;10345:24:0;;;;;;:13;:24;;;;;;;;10341:730;;;10396:20;10443:5;10419:21;3851:3;10419:7;:21;:::i;:::-;:29;;;;:::i;:::-;10396:52;-1:-1:-1;10471:16:0;;10467:589;;10512:25;10525:12;10512:25;;:::i;:::-;;;10560:50;10574:6;10590:4;10597:12;10560:13;:50::i;:::-;10638:7;10637:8;:19;;;;-1:-1:-1;10650:6:0;;-1:-1:-1;;;10650:6:0;;;;10649:7;10637:19;10633:404;;;10685:17;10726:3;10705:18;:12;10720:3;10705:18;:::i;:::-;:24;;;;:::i;:::-;10801:4;10756:24;6280:18;;;:9;:18;;;;;;10685:44;;-1:-1:-1;10838:29:0;;;10834:126;;10912:20;10931:1;10912:16;:20;:::i;:::-;10900:32;;10834:126;10986:27;11003:9;10986:16;:27::i;:::-;10658:379;;10633:404;10371:700;10341:730;11094:53;11108:6;11116:9;11127:19;11137:9;11127:7;:19;:::i;:::-;11094:13;:53::i;12038:262::-;-1:-1:-1;;;;;12099:16:0;;;;;;:11;:16;;;;;;12094:21;;12090:203;;12141:7;:14;12136:19;;:40;;;12173:3;-1:-1:-1;;;;;12159:17:0;:7;12167:1;12159:10;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;12159:10:0;:17;;12136:40;12132:150;;;12216:7;:14;;-1:-1:-1;;;;;12197:16:0;;;;;;:11;:16;;;;;:33;;;12249:17;;;;;;;;;;;;;-1:-1:-1;;;;;;12249:17:0;;;;;;12038:262;:::o;14612:1692::-;14681:4;;-1:-1:-1;;;;;14681:4:0;14670:8;14700:26;;;14696:65;;14743:7;14612:1692;:::o;14696:65::-;14792:9;;-1:-1:-1;;;;;14792:9:0;14771:18;14816:31;;;14812:70;;14864:7;;14612:1692;:::o;14812:70::-;14918:18;;14951:21;:39;-1:-1:-1;14947:78:0;;;15007:7;;;14612:1692;:::o;14947:78::-;15079:12;15057:19;;15039:15;;:37;;;;:::i;:::-;:52;15035:91;;;15108:7;;;14612:1692;:::o;15035:91::-;15136:13;15152:3;-1:-1:-1;;;;;15152:15:0;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15136:33;;15189:8;15184:1;:13;15180:52;;15214:7;;;;14612:1692;:::o;15180:52::-;15244:14;15261:26;15279:8;15261:15;:26;:::i;:::-;15244:43;;15307:6;15302:1;:11;15298:50;;15330:7;;;;;14612:1692;:::o;15298:50::-;15360:15;15390:18;15423:15;15441:9;15423:27;;15463:19;15485:25;:23;:25::i;:::-;15545:27;;15463:47;;-1:-1:-1;15585:669:0;15602:3;15592:7;:13;:38;;;;;15622:8;15609:10;:21;15592:38;15585:669;;;15670:8;15651:15;;:27;15647:87;;15717:1;15699:15;:19;15647:87;15748:19;15770:3;-1:-1:-1;;;;;15770:11:0;;15786:15;;15782:1;:19;;;;:::i;:::-;15770:32;;;;;;;;;;;;;2356:25:1;;2344:2;2329:18;;2210:177;15770:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15857:37;;-1:-1:-1;;;15857:37:0;;-1:-1:-1;;;;;2760:32:1;;;15857:37:0;;;2742:51:1;15748:54:0;;-1:-1:-1;15818:16:0;;;;15857:24;;;;;;2715:18:1;;15857:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15817:77;;;;15925:11;15913:8;:23;;:54;;;;;15954:13;15940:10;:27;;15913:54;15909:183;;;15988:36;16004:11;16017:6;15988:15;:36::i;:::-;-1:-1:-1;;;;;16043:23:0;;;;;;:10;:23;;;;;:33;;16070:6;;16043:23;:33;;16070:6;;16043:33;:::i;:::-;;;;-1:-1:-1;;15909:183:0;16139:9;16129:19;;:7;:19;:::i;:::-;16118:31;;:7;:31;:::i;:::-;16108:41;;16174:9;16198:15;:17;;16164:19;;-1:-1:-1;16198:15:0;:17;;;:::i;:::-;;;;;;16230:12;;;;;:::i;:::-;;;;15632:622;;;15585:669;;;-1:-1:-1;;16284:12:0;16266:15;:30;-1:-1:-1;;;;;;;;;14612:1692:0:o;11163:456::-;3977:6;:13;;-1:-1:-1;;;;3977:13:0;-1:-1:-1;;;3977:13:0;;;11241:55;;11278:7:::1;11241:55;11332:16;::::0;;11346:1:::1;11332:16:::0;;;;;::::1;::::0;;11308:21:::1;::::0;11332:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;11332:16:0::1;11308:40;;11377:4;11359;11364:1;11359:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1::0;;;;;11359:23:0::1;;;-1:-1:-1::0;;;;;11359:23:0::1;;;::::0;::::1;11403:5;11393:4;11398:1;11393:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;11393:15:0;;::::1;:7;::::0;;::::1;::::0;;;;;:15;11419:192:::1;::::0;-1:-1:-1;;;11419:192:0;;:11:::1;:62:::0;;::::1;::::0;::::1;::::0;:192:::1;::::0;11496:11;;11522:1:::1;::::0;11538:4;;11565::::1;::::0;11585:15:::1;::::0;11419:192:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;11230:389;4001:1;-1:-1:-1::0;4013:6:0;:14;;-1:-1:-1;;;;4013:14:0;;;11163:456::o;14:131:1:-;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;150:247;209:6;262:2;250:9;241:7;237:23;233:32;230:52;;;278:1;275;268:12;230:52;317:9;304:23;336:31;361:5;336:31;:::i;:::-;386:5;150:247;-1:-1:-1;;;150:247:1:o;594:250::-;679:1;689:113;703:6;700:1;697:13;689:113;;;779:11;;;773:18;760:11;;;753:39;725:2;718:10;689:113;;;-1:-1:-1;;836:1:1;818:16;;811:27;594:250::o;849:271::-;891:3;929:5;923:12;956:6;951:3;944:19;972:76;1041:6;1034:4;1029:3;1025:14;1018:4;1011:5;1007:16;972:76;:::i;:::-;1102:2;1081:15;-1:-1:-1;;1077:29:1;1068:39;;;;1109:4;1064:50;;849:271;-1:-1:-1;;849:271:1:o;1125:220::-;1274:2;1263:9;1256:21;1237:4;1294:45;1335:2;1324:9;1320:18;1312:6;1294:45;:::i;1350:315::-;1418:6;1426;1479:2;1467:9;1458:7;1454:23;1450:32;1447:52;;;1495:1;1492;1485:12;1447:52;1534:9;1521:23;1553:31;1578:5;1553:31;:::i;:::-;1603:5;1655:2;1640:18;;;;1627:32;;-1:-1:-1;;;1350:315:1:o;2392:180::-;2451:6;2504:2;2492:9;2483:7;2479:23;2475:32;2472:52;;;2520:1;2517;2510:12;2472:52;-1:-1:-1;2543:23:1;;2392:180;-1:-1:-1;2392:180:1:o;2804:456::-;2881:6;2889;2897;2950:2;2938:9;2929:7;2925:23;2921:32;2918:52;;;2966:1;2963;2956:12;2918:52;3005:9;2992:23;3024:31;3049:5;3024:31;:::i;:::-;3074:5;-1:-1:-1;3131:2:1;3116:18;;3103:32;3144:33;3103:32;3144:33;:::i;:::-;2804:456;;3196:7;;-1:-1:-1;;;3250:2:1;3235:18;;;;3222:32;;2804:456::o;4140:127::-;4201:10;4196:3;4192:20;4189:1;4182:31;4232:4;4229:1;4222:15;4256:4;4253:1;4246:15;4272:275;4343:2;4337:9;4408:2;4389:13;;-1:-1:-1;;4385:27:1;4373:40;;4443:18;4428:34;;4464:22;;;4425:62;4422:88;;;4490:18;;:::i;:::-;4526:2;4519:22;4272:275;;-1:-1:-1;4272:275:1:o;4552:183::-;4612:4;4645:18;4637:6;4634:30;4631:56;;;4667:18;;:::i;:::-;-1:-1:-1;4712:1:1;4708:14;4724:4;4704:25;;4552:183::o;4740:737::-;4794:5;4847:3;4840:4;4832:6;4828:17;4824:27;4814:55;;4865:1;4862;4855:12;4814:55;4901:6;4888:20;4927:4;4951:60;4967:43;5007:2;4967:43;:::i;:::-;4951:60;:::i;:::-;5045:15;;;5131:1;5127:10;;;;5115:23;;5111:32;;;5076:12;;;;5155:15;;;5152:35;;;5183:1;5180;5173:12;5152:35;5219:2;5211:6;5207:15;5231:217;5247:6;5242:3;5239:15;5231:217;;;5327:3;5314:17;5344:31;5369:5;5344:31;:::i;:::-;5388:18;;5426:12;;;;5264;;5231:217;;;-1:-1:-1;5466:5:1;4740:737;-1:-1:-1;;;;;;4740:737:1:o;5482:1138::-;5600:6;5608;5661:2;5649:9;5640:7;5636:23;5632:32;5629:52;;;5677:1;5674;5667:12;5629:52;5717:9;5704:23;5746:18;5787:2;5779:6;5776:14;5773:34;;;5803:1;5800;5793:12;5773:34;5826:61;5879:7;5870:6;5859:9;5855:22;5826:61;:::i;:::-;5816:71;;5906:2;5896:12;;5961:2;5950:9;5946:18;5933:32;5990:2;5980:8;5977:16;5974:36;;;6006:1;6003;5996:12;5974:36;6029:24;;;-1:-1:-1;6084:4:1;6076:13;;6072:27;-1:-1:-1;6062:55:1;;6113:1;6110;6103:12;6062:55;6149:2;6136:16;6172:60;6188:43;6228:2;6188:43;:::i;6172:60::-;6266:15;;;6348:1;6344:10;;;;6336:19;;6332:28;;;6297:12;;;;6372:19;;;6369:39;;;6404:1;6401;6394:12;6369:39;6428:11;;;;6448:142;6464:6;6459:3;6456:15;6448:142;;;6530:17;;6518:30;;6481:12;;;;6568;;;;6448:142;;;6609:5;6599:15;;;;;;;5482:1138;;;;;:::o;7070:160::-;7135:20;;7191:13;;7184:21;7174:32;;7164:60;;7220:1;7217;7210:12;7164:60;7070:160;;;:::o;7235:315::-;7300:6;7308;7361:2;7349:9;7340:7;7336:23;7332:32;7329:52;;;7377:1;7374;7367:12;7329:52;7416:9;7403:23;7435:31;7460:5;7435:31;:::i;:::-;7485:5;-1:-1:-1;7509:35:1;7540:2;7525:18;;7509:35;:::i;:::-;7499:45;;7235:315;;;;;:::o;7555:887::-;7919:4;7948:3;7978:2;7967:9;7960:21;7998:45;8039:2;8028:9;8024:18;8016:6;7998:45;:::i;:::-;8074:2;8059:18;;8052:34;;;;-1:-1:-1;;8117:2:1;8102:18;;8095:34;;;;8160:2;8145:18;;8138:34;;;;8203:3;8188:19;;8181:35;;;;8247:3;8232:19;;8225:35;;;;8291:3;8276:19;;8269:35;8335:3;8320:19;;8313:35;8379:3;8364:19;;8357:35;8423:3;8408:19;;;8401:35;7990:53;7555:887;-1:-1:-1;7555:887:1:o;8447:416::-;8537:6;8545;8598:2;8586:9;8577:7;8573:23;8569:32;8566:52;;;8614:1;8611;8604:12;8566:52;8654:9;8641:23;8687:18;8679:6;8676:30;8673:50;;;8719:1;8716;8709:12;8673:50;8742:61;8795:7;8786:6;8775:9;8771:22;8742:61;:::i;:::-;8732:71;;;8822:35;8853:2;8842:9;8838:18;8822:35;:::i;9192:388::-;9260:6;9268;9321:2;9309:9;9300:7;9296:23;9292:32;9289:52;;;9337:1;9334;9327:12;9289:52;9376:9;9363:23;9395:31;9420:5;9395:31;:::i;:::-;9445:5;-1:-1:-1;9502:2:1;9487:18;;9474:32;9515:33;9474:32;9515:33;:::i;:::-;9567:7;9557:17;;;9192:388;;;;;:::o;9585:380::-;9664:1;9660:12;;;;9707;;;9728:61;;9782:4;9774:6;9770:17;9760:27;;9728:61;9835:2;9827:6;9824:14;9804:18;9801:38;9798:161;;9881:10;9876:3;9872:20;9869:1;9862:31;9916:4;9913:1;9906:15;9944:4;9941:1;9934:15;9798:161;;9585:380;;;:::o;9970:184::-;10040:6;10093:2;10081:9;10072:7;10068:23;10064:32;10061:52;;;10109:1;10106;10099:12;10061:52;-1:-1:-1;10132:16:1;;9970:184;-1:-1:-1;9970:184:1:o;10159:245::-;10238:6;10246;10299:2;10287:9;10278:7;10274:23;10270:32;10267:52;;;10315:1;10312;10305:12;10267:52;-1:-1:-1;;10338:16:1;;10394:2;10379:18;;;10373:25;10338:16;;10373:25;;-1:-1:-1;10159:245:1:o;10409:127::-;10470:10;10465:3;10461:20;10458:1;10451:31;10501:4;10498:1;10491:15;10525:4;10522:1;10515:15;10541:168;10614:9;;;10645;;10662:15;;;10656:22;;10642:37;10632:71;;10683:18;;:::i;10714:217::-;10754:1;10780;10770:132;;10824:10;10819:3;10815:20;10812:1;10805:31;10859:4;10856:1;10849:15;10887:4;10884:1;10877:15;10770:132;-1:-1:-1;10916:9:1;;10714:217::o;10936:325::-;11138:2;11120:21;;;11177:1;11157:18;;;11150:29;-1:-1:-1;;;11210:2:1;11195:18;;11188:32;11252:2;11237:18;;10936:325::o;11266:128::-;11333:9;;;11354:11;;;11351:37;;;11368:18;;:::i;11399:188::-;11478:13;;-1:-1:-1;;;;;11520:42:1;;11510:53;;11500:81;;11577:1;11574;11567:12;11592:450;11679:6;11687;11695;11748:2;11736:9;11727:7;11723:23;11719:32;11716:52;;;11764:1;11761;11754:12;11716:52;11787:40;11817:9;11787:40;:::i;:::-;11777:50;;11846:49;11891:2;11880:9;11876:18;11846:49;:::i;:::-;11836:59;;11938:2;11927:9;11923:18;11917:25;11982:10;11975:5;11971:22;11964:5;11961:33;11951:61;;12008:1;12005;11998:12;11951:61;12031:5;12021:15;;;11592:450;;;;;:::o;13366:127::-;13427:10;13422:3;13418:20;13415:1;13408:31;13458:4;13455:1;13448:15;13482:4;13479:1;13472:15;13498:125;13563:9;;;13584:10;;;13581:36;;;13597:18;;:::i;13963:273::-;14031:6;14084:2;14072:9;14063:7;14059:23;14055:32;14052:52;;;14100:1;14097;14090:12;14052:52;14132:9;14126:16;14182:4;14175:5;14171:16;14164:5;14161:27;14151:55;;14202:1;14199;14192:12;14241:135;14280:3;14301:17;;;14298:43;;14321:18;;:::i;:::-;-1:-1:-1;14368:1:1;14357:13;;14241:135::o;14990:287::-;15119:3;15157:6;15151:13;15173:66;15232:6;15227:3;15220:4;15212:6;15208:17;15173:66;:::i;:::-;15255:16;;;;;14990:287;-1:-1:-1;;14990:287:1:o;15613:151::-;15703:4;15696:12;;;15682;;;15678:31;;15721:14;;15718:40;;;15738:18;;:::i;15769:422::-;15858:1;15901:5;15858:1;15915:270;15936:7;15926:8;15923:21;15915:270;;;15995:4;15991:1;15987:6;15983:17;15977:4;15974:27;15971:53;;;16004:18;;:::i;:::-;16054:7;16044:8;16040:22;16037:55;;;16074:16;;;;16037:55;16153:22;;;;16113:15;;;;15915:270;;;15919:3;15769:422;;;;;:::o;16196:806::-;16245:5;16275:8;16265:80;;-1:-1:-1;16316:1:1;16330:5;;16265:80;16364:4;16354:76;;-1:-1:-1;16401:1:1;16415:5;;16354:76;16446:4;16464:1;16459:59;;;;16532:1;16527:130;;;;16439:218;;16459:59;16489:1;16480:10;;16503:5;;;16527:130;16564:3;16554:8;16551:17;16548:43;;;16571:18;;:::i;:::-;-1:-1:-1;;16627:1:1;16613:16;;16642:5;;16439:218;;16741:2;16731:8;16728:16;16722:3;16716:4;16713:13;16709:36;16703:2;16693:8;16690:16;16685:2;16679:4;16676:12;16672:35;16669:77;16666:159;;;-1:-1:-1;16778:19:1;;;16810:5;;16666:159;16857:34;16882:8;16876:4;16857:34;:::i;:::-;16927:6;16923:1;16919:6;16915:19;16906:7;16903:32;16900:58;;;16938:18;;:::i;:::-;16976:20;;16196:806;-1:-1:-1;;;16196:806:1:o;17007:140::-;17065:5;17094:47;17135:4;17125:8;17121:19;17115:4;17094:47;:::i;17152:251::-;17222:6;17275:2;17263:9;17254:7;17250:23;17246:32;17243:52;;;17291:1;17288;17281:12;17243:52;17323:9;17317:16;17342:31;17367:5;17342:31;:::i;17408:980::-;17670:4;17718:3;17707:9;17703:19;17749:6;17738:9;17731:25;17775:2;17813:6;17808:2;17797:9;17793:18;17786:34;17856:3;17851:2;17840:9;17836:18;17829:31;17880:6;17915;17909:13;17946:6;17938;17931:22;17984:3;17973:9;17969:19;17962:26;;18023:2;18015:6;18011:15;17997:29;;18044:1;18054:195;18068:6;18065:1;18062:13;18054:195;;;18133:13;;-1:-1:-1;;;;;18129:39:1;18117:52;;18224:15;;;;18189:12;;;;18165:1;18083:9;18054:195;;;-1:-1:-1;;;;;;;18305:32:1;;;;18300:2;18285:18;;18278:60;-1:-1:-1;;;18369:3:1;18354:19;18347:35;18266:3;17408:980;-1:-1:-1;;;17408:980:1:o

Swarm Source

ipfs://0a5612dee3b3ffbac1ca6e3a143123f75a0ef3ccf54beb977bba5f7a547e659d

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.