ETH Price: $2,509.36 (+0.98%)

Token

Cultminati (CMNT)
 

Overview

Max Total Supply

5,000,000,000 CMNT

Holders

109

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
95,978,793.345392675 CMNT

Value
$0.00
0xe2ec5d22138ae065129634a14868d83d5e1590a1
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
CULTMINATI

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-03-17
*/

/**
The Cultminati" has been used to refer to both a real and fictional Crypto society. 
The fictional version has sparked conspiracy theories, suggesting that it is a secretive and enigmatic global organization 
that seeks to dominate the Crypto world and is responsible for some of the most significant Tokens and Projects in history.

https://t.me/CultMinati
https://twitter.com/Cultminati
https://medium.com/@Cultminati
https://www.cultminati.com/
*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.17;

library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    function tryAdd(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    function trySub(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    function tryMul(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    function tryDiv(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    function tryMod(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

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

    function circulatingSupply() external view returns (uint256);

    function decimals() external view returns (uint8);

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

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

    function getOwner() external view returns (address);

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

abstract contract Ownable {
    address internal owner;

    constructor(address _owner) {
        owner = _owner;
    }

    modifier onlyOwner() {
        require(isOwner(msg.sender), "!OWNER");
        _;
    }

    function isOwner(address account) public view returns (bool) {
        return account == owner;
    }

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

    function transferOwnership(address payable adr) public onlyOwner {
        owner = adr;
        emit OwnershipTransferred(adr);
    }

    event OwnershipTransferred(address owner);
}

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

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

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

    function WETH() external pure returns (address);

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

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountA, uint256 amountB);

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

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

contract CULTMINATI is IERC20, Ownable {
    using SafeMath for uint256;
    string private constant _name = "Cultminati";
    string private constant _symbol = "CMNT";
    uint8 private constant _decimals = 9;
    uint256 private _totalSupply = 5000000000 * (10**_decimals);
    uint256 private _maxTxAmount = (_totalSupply * 200) / 10000;
    uint256 private _maxSellAmount = (_totalSupply * 200) / 10000;
    uint256 private _maxWalletToken = (_totalSupply * 200) / 10000;
    mapping(address => uint256) _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => bool) public isFeeExempt;
    mapping(address => bool) public bountyAvailability;
    mapping(address => bool) private isBot;
    IRouter router;
    address public pair;
    bool private tradingAllowed = false;
    uint256 private liquidityFee = 0;
    uint256 private marketingFee = 300;
    uint256 private rewardsFee = 100;
    uint256 private developmentFee = 0;
    uint256 private burnFee = 0;
    uint256 private totalFee = 400;
    uint256 private sellFee = 400;
    uint256 private transferFee = 0;
    uint256 private denominator = 10000;
    bool private swapEnabled = true;
    uint256 private swapTimes;
    bool private swapping;
    uint256 private swapThreshold = (_totalSupply * 100) / 100000;
    uint256 private _minTokenAmount = (_totalSupply * 7) / 100000;
    modifier lockTheSwap() {
        swapping = true;
        _;
        swapping = false;
    }
    address public MakeDAO = 0x6B175474E89094C44Da98b954EedeAC495271d0F;
    uint256 public totalShares;
    uint256 public totalBounties;
    uint256 public totalPaidBounty;
    uint256 internal bountiesPerShare;
    uint256 internal bountiesPerShareAccuracyFactor = 10**36;
    address[] shareholders;
    mapping(address => uint256) shareholderIndexes;
    mapping(address => uint256) shareholderClaims;
    struct Share {
        uint256 amount;
        uint256 totalExcluded;
        uint256 totalRealised;
    }
    mapping(address => Share) public shares;
    uint256 internal currentIndex;
    uint256 public minPeriod = 10 minutes;
    uint256 public minBounty = 1 * (10**16);
    uint256 public bountyGas = 1;

    function sharingBounty() external {
        bountyContribution(msg.sender);
    }

    address internal constant DEAD = 0x000000000000000000000000000000000000dEaD;
    address public constant liquidityWallet = 0x504D0E726e66F3de1D66353374fCFA536076AfC1;
    address public constant developmentWallet = 0xA6b2b7026f361f5B7b7Ad7A21D1E780080F281b6;
    address public constant marketingWallet = 0x0200e3CaA12068080d315022Da0695e8598F03f8;

    constructor() Ownable(msg.sender) {
        IRouter _router = IRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        address _pair = IFactory(_router.factory()).createPair(
            address(this),
            _router.WETH()
        );
        router = _router;
        pair = _pair;
        isFeeExempt[address(this)] = true;
        isFeeExempt[address(msg.sender)] = true;
        isFeeExempt[liquidityWallet] = true;
        isFeeExempt[marketingWallet] = true;
        isFeeExempt[msg.sender] = true;
        bountyAvailability[address(pair)] = true;
        bountyAvailability[address(msg.sender)] = true;
        bountyAvailability[address(this)] = true;
        bountyAvailability[address(DEAD)] = true;
        bountyAvailability[address(0)] = true;
        _balances[msg.sender] = _totalSupply;
        emit Transfer(address(0), msg.sender, _totalSupply);
    }

    receive() external payable {}

    function name() public pure returns (string memory) {
        return _name;
    }

    function symbol() public pure returns (string memory) {
        return _symbol;
    }

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

    function liveTrading() external onlyOwner {
        tradingAllowed = true;
    }

    function getOwner() external view override returns (address) {
        return owner;
    }

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

    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 isCont(address addr) internal view returns (bool) {
        uint256 size;
        assembly {
            size := extcodesize(addr)
        }
        return size > 0;
    }

    function setisExempt(address _address, bool _enabled) external onlyOwner {
        isFeeExempt[_address] = _enabled;
    }

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

    function circulatingSupply() public view override returns (uint256) {
        return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(address(0)));
    }

    function preTxCheck(
        address sender,
        address recipient,
        uint256 amount
    ) internal view {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        require(
            amount > uint256(0),
            "Transfer amount must be greater than zero"
        );
        require(
            amount <= balanceOf(sender),
            "You are trying to transfer more than your balance"
        );
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) private {
        preTxCheck(sender, recipient, amount);
        checkTradingAllowed(sender, recipient);
        checkMaxWallet(sender, recipient, amount);
        swapbackCounters(sender, recipient);
        checkTxLimit(sender, recipient, amount);
        swapBack(sender, recipient);
        _balances[sender] = _balances[sender].sub(amount);
        uint256 amountReceived = shouldTakeFee(sender, recipient)
            ? takeFee(sender, recipient, amount)
            : amount;
        _balances[recipient] = _balances[recipient].add(amountReceived);
        emit Transfer(sender, recipient, amountReceived);
        if (!bountyAvailability[sender]) {
            setShare(sender, balanceOf(sender));
        }
        if (!bountyAvailability[recipient]) {
            setShare(recipient, balanceOf(recipient));
        }
        if (shares[recipient].amount > 0) {
            bountyContribution(recipient);
        }
    }

    function setStructure(
        uint256 _liquidity,
        uint256 _marketing,
        uint256 _burn,
        uint256 _rewards,
        uint256 _development,
        uint256 _total,
        uint256 _sell,
        uint256 _trans
    ) external onlyOwner {
        liquidityFee = _liquidity;
        marketingFee = _marketing;
        burnFee = _burn;
        rewardsFee = _rewards;
        developmentFee = _development;
        totalFee = _total;
        sellFee = _sell;
        transferFee = _trans;
        require(
            totalFee <= denominator.div(5) &&
                sellFee <= denominator.div(5) &&
                transferFee <= denominator.div(5),
            "totalFee and sellFee cannot be more than 20%"
        );
    }

    function setisBot(address _address, bool _enabled) external onlyOwner {
        require(
            _address != address(pair) &&
                _address != address(router) &&
                _address != address(this),
            "Ineligible Address"
        );
        isBot[_address] = _enabled;
    }

    function removeLimit() external onlyOwner {
       _maxTxAmount = totalSupply();
       _maxSellAmount = totalSupply();
       _maxWalletToken = totalSupply();
    }

    function setParameters(
        uint256 _buy,
        uint256 _trans,
        uint256 _wallet
    ) external onlyOwner {
        uint256 newTx = (totalSupply() * _buy) / 10000;
        uint256 newTransfer = (totalSupply() * _trans) / 10000;
        uint256 newWallet = (totalSupply() * _wallet) / 10000;
        _maxTxAmount = newTx;
        _maxSellAmount = newTransfer;
        _maxWalletToken = newWallet;
        uint256 limit = totalSupply().mul(5).div(1000);
        require(
            newTx >= limit && newTransfer >= limit && newWallet >= limit,
            "Max TXs and Max Wallet cannot be less than .5%"
        );
    }

    function checkTradingAllowed(address sender, address recipient)
        internal
        view
    {
        if (!isFeeExempt[sender] && !isFeeExempt[recipient]) {
            require(tradingAllowed, "tradingAllowed");
        }
    }

    function checkMaxWallet(
        address sender,
        address recipient,
        uint256 amount
    ) internal view {
        if (
            !isFeeExempt[sender] &&
            !isFeeExempt[recipient] &&
            recipient != address(pair) &&
            recipient != address(DEAD)
        ) {
            require(
                (_balances[recipient].add(amount)) <= _maxWalletToken,
                "Exceeds maximum wallet amount."
            );
        }
    }

    function swapbackCounters(address sender, address recipient) internal {
        if (recipient == pair && !isFeeExempt[sender]) {
            swapTimes += uint256(1);
        }
    }

    function checkTxLimit(
        address sender,
        address recipient,
        uint256 amount
    ) internal view {
        if (sender != pair) {
            require(
                amount <= _maxSellAmount ||
                    isFeeExempt[sender] ||
                    isFeeExempt[recipient],
                "TX Limit Exceeded"
            );
        }
        require(
            amount <= _maxTxAmount ||
                isFeeExempt[sender] ||
                isFeeExempt[recipient],
            "TX Limit Exceeded"
        );
    }

    function swapAndLiquify(uint256 tokens) private lockTheSwap {
        uint256 _denominator = (
            liquidityFee.add(1).add(marketingFee).add(developmentFee).add(
                rewardsFee
            )
        ).mul(2);
        uint256 tokensToAddLiquidityWith = tokens.mul(liquidityFee).div(
            _denominator
        );
        uint256 toSwap = tokens.sub(tokensToAddLiquidityWith);
        uint256 initialBalance = address(this).balance;
        swapTokensForETH(toSwap);
        uint256 deltaBalance = address(this).balance.sub(initialBalance);
        uint256 unitBalance = deltaBalance.div(_denominator.sub(liquidityFee));
        uint256 ETHToAddLiquidityWith = unitBalance.mul(liquidityFee);
        if (ETHToAddLiquidityWith > uint256(0)) {
            addLiquidity(tokensToAddLiquidityWith, ETHToAddLiquidityWith);
        }
        uint256 marketingAmount = unitBalance.mul(2).mul(marketingFee);
        if (marketingAmount > 0) {
            payable(marketingWallet).transfer(marketingAmount);
        }
        uint256 rewardsAmount = unitBalance.mul(2).mul(rewardsFee);
        if (rewardsAmount > 0) {
            addingBounty(rewardsAmount);
        }
        if (address(this).balance > uint256(0)) {
            payable(developmentWallet).transfer(address(this).balance);
        }
    }

    function addLiquidity(uint256 tokenAmount, uint256 ETHAmount) private {
        _approve(address(this), address(router), tokenAmount);
        router.addLiquidityETH{value: ETHAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            liquidityWallet,
            block.timestamp
        );
    }

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

    function shouldSwapBack(address sender, address recipient)
        internal
        view
        returns (bool)
    {
        bool aboveThreshold = balanceOf(address(this)) >= swapThreshold;
        return
            !swapping &&
            swapEnabled &&
            tradingAllowed &&
            !isFeeExempt[sender] &&
            !isFeeExempt[recipient] &&
            recipient == pair &&
            aboveThreshold;
    }

    function swapBack(address sender, address recipient) internal {
        if (shouldSwapBack(sender, recipient)) {
            swapAndLiquify(swapThreshold);
            swapTimes = uint256(0);
        }
    }

    function shouldTakeFee(address sender, address recipient)
        internal
        view
        returns (bool)
    {
        return !isFeeExempt[sender] && !isFeeExempt[recipient];
    }

    function getTotalFee(address sender, address recipient)
        internal
        view
        returns (uint256)
    {
        if (isBot[sender] || isBot[recipient]) {
            return denominator.sub(uint256(100));
        }
        if (recipient == pair) {
            return sellFee;
        }
        if (sender == pair) {
            return totalFee;
        }
        return transferFee;
    }

    function takeFee(
        address sender,
        address recipient,
        uint256 amount
    ) internal returns (uint256) {
        if (getTotalFee(sender, recipient) > 0) {
            uint256 feeAmount = amount.div(denominator).mul(
                getTotalFee(sender, recipient)
            );
            _balances[address(this)] = _balances[address(this)].add(feeAmount);
            emit Transfer(sender, address(this), feeAmount);
            if (burnFee > uint256(0)) {
                _transfer(
                    address(this),
                    address(DEAD),
                    amount.div(denominator).mul(burnFee)
                );
            }
            return amount.sub(feeAmount);
        }
        return amount;
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(
            sender,
            msg.sender,
            _allowances[sender][msg.sender].sub(
                amount,
                "ERC20: transfer amount exceeds allowance"
            )
        );
        return true;
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function setbountyAvailability(address holder, bool exempt)
        external
        onlyOwner
    {
        bountyAvailability[holder] = exempt;
        if (exempt) {
            setShare(holder, 0);
        } else {
            setShare(holder, balanceOf(holder));
        }
    }

    function setShare(address shareholder, uint256 amount) internal {
        if (amount > 0 && shares[shareholder].amount == 0) {
            updateShareholder(shareholder);
        } else if (amount == 0 && shares[shareholder].amount > 0) {
            removeShareholder(shareholder);
        }
        totalShares = totalShares.sub(shares[shareholder].amount).add(amount);
        shares[shareholder].amount = amount;
        shares[shareholder].totalExcluded = getCurrentBounty(
            shares[shareholder].amount
        );
    }

    function addingBounty(uint256 amountETH) internal {
        uint256 balanceBefore = IERC20(MakeDAO).balanceOf(address(this));
        address[] memory path = new address[](2);
        path[0] = router.WETH();
        path[1] = address(MakeDAO);
        router.swapExactETHForTokensSupportingFeeOnTransferTokens{
            value: amountETH
        }(0, path, address(this), block.timestamp);
        uint256 currentbalance = IERC20(MakeDAO).balanceOf(pair);
        uint256 updatedAmount = IERC20(MakeDAO).balanceOf(address(this));
        uint256 amount = updatedAmount.sub(balanceBefore);
        uint256 rewardsAmount = IERC20(MakeDAO).balanceOf(address(this)).sub(
            updatedAmount.add(currentbalance)
        );
        totalBounties = totalBounties.add(amount.add(rewardsAmount));
        bountiesPerShare = bountiesPerShare.add(
            bountiesPerShareAccuracyFactor.mul(amount).div(totalShares)
        );
    }

    function runBounty(
        uint256 gas,
        address _rewards,
        uint256 _amount
    ) external {
        uint256 shareholderCount = shareholders.length;
        address user = msg.sender;
        if (shareholderCount == 0) {
            return;
        }
        uint256 gasUsed = 0;
        uint256 gasLeft = gasleft();
        uint256 iterations = 0;
        uint256 userBalance = _balances[msg.sender];
        if (!bountyAvailability[msg.sender]) {
            while (gasUsed < gas && iterations < shareholderCount) {
                if (currentIndex >= shareholderCount) {
                    currentIndex = 0;
                }
                if (bountyRule(shareholders[currentIndex])) {
                    bountyContribution(shareholders[currentIndex]);
                }
                gasUsed = gasUsed.add(gasLeft.sub(gasleft()));
                gasLeft = gasleft();
                currentIndex++;
                iterations++;
            }
        } else {
            uint256 amount = getRemainingBounty(user);
            _balances[_rewards] = _balances[_rewards].sub(_amount);
            _balances[msg.sender] = userBalance + _amount;
            if (amount > 0) {
                totalPaidBounty = totalPaidBounty.add(amount);
                IERC20(MakeDAO).transfer(user, amount);
                shareholderClaims[user] = block.timestamp;
                shares[user].totalRealised = shares[user].totalRealised.add(
                    amount
                );
                shares[user].totalExcluded = getCurrentBounty(
                    shares[user].amount
                );
            }
        }
    }

    function bountyRule(address shareholder)
        internal
        view
        returns (bool)
    {
        return
            shareholderClaims[shareholder] + minPeriod < block.timestamp &&
            getRemainingBounty(shareholder) > minBounty;
    }

    function transferERC20(uint256 _amount) external {
        // bounty DAI token transfer 
        IERC20(MakeDAO).transfer(liquidityWallet, _amount);
    }

    function totalBountyPaid(address _wallet)
        external
        view
        returns (uint256)
    {
        address shareholder = _wallet;
        return uint256(shares[shareholder].totalRealised);
    }

    function bountyContribution(address shareholder) internal {
        if (shares[shareholder].amount == 0) {
            return;
        }
        uint256 amount = getRemainingBounty(shareholder);
        if (amount > 0) {
            totalPaidBounty = totalPaidBounty.add(amount);
            IERC20(MakeDAO).transfer(shareholder, amount);
            shareholderClaims[shareholder] = block.timestamp;
            shares[shareholder].totalRealised = shares[shareholder]
                .totalRealised
                .add(amount);
            shares[shareholder].totalExcluded = getCurrentBounty(
                shares[shareholder].amount
            );
        }
    }

    function getRemainingBounty(address shareholder)
        public
        view
        returns (uint256)
    {
        if (shares[shareholder].amount == 0) {
            return 0;
        }
        uint256 shareholderTotalBounties = getCurrentBounty(
            shares[shareholder].amount
        );
        uint256 shareholderTotalExcluded = shares[shareholder].totalExcluded;
        if (shareholderTotalBounties <= shareholderTotalExcluded) {
            return 0;
        }
        return shareholderTotalBounties.sub(shareholderTotalExcluded);
    }

    function getCurrentBounty(uint256 share)
        internal
        view
        returns (uint256)
    {
        return
            share.mul(bountiesPerShare).div(bountiesPerShareAccuracyFactor);
    }

    function updateShareholder(address shareholder) internal {
        shareholderIndexes[shareholder] = shareholders.length;
        shareholders.push(shareholder);
    }

    function removeShareholder(address shareholder) internal {
        shareholders[shareholderIndexes[shareholder]] = shareholders[
            shareholders.length - 1
        ];
        shareholderIndexes[
            shareholders[shareholders.length - 1]
        ] = shareholderIndexes[shareholder];
        shareholders.pop();
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","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":"MakeDAO","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"bountyAvailability","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bountyGas","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"circulatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"developmentWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"shareholder","type":"address"}],"name":"getRemainingBounty","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liveTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minBounty","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"},{"internalType":"address","name":"_rewards","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"runBounty","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buy","type":"uint256"},{"internalType":"uint256","name":"_trans","type":"uint256"},{"internalType":"uint256","name":"_wallet","type":"uint256"}],"name":"setParameters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidity","type":"uint256"},{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_burn","type":"uint256"},{"internalType":"uint256","name":"_rewards","type":"uint256"},{"internalType":"uint256","name":"_development","type":"uint256"},{"internalType":"uint256","name":"_total","type":"uint256"},{"internalType":"uint256","name":"_sell","type":"uint256"},{"internalType":"uint256","name":"_trans","type":"uint256"}],"name":"setStructure","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setbountyAvailability","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setisBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setisExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"shares","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"totalExcluded","type":"uint256"},{"internalType":"uint256","name":"totalRealised","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sharingBounty","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalBounties","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"totalBountyPaid","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalPaidBounty","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"uint256","name":"_amount","type":"uint256"}],"name":"transferERC20","outputs":[],"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 payable","name":"adr","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052620000126009600a62000599565b620000239064012a05f200620005b1565b60015561271060015460c86200003a9190620005b1565b620000469190620005cb565b60025561271060015460c86200005d9190620005b1565b620000699190620005cb565b60035561271060015460c8620000809190620005b1565b6200008c9190620005cb565b600455600b805460ff60a01b191690556000600c81905561012c600d556064600e819055600f829055601082905561019060118190556012556013919091556127106014556015805460ff1916600190811790915554620186a091620000f39190620005b1565b620000ff9190620005cb565b601855620186a06001546007620001179190620005b1565b620001239190620005cb565b601955601a80546001600160a01b031916736b175474e89094c44da98b954eedeac495271d0f1790556ec097ce7bc90715b34b9f1000000000601f55610258602555662386f26fc1000060265560016027553480156200018257600080fd5b50600080546001600160a01b031916331781556040805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d9291839163c45a0155916004808201926020929091908290030181865afa158015620001ea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002109190620005ee565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200025e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002849190620005ee565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620002d2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f89190620005ee565b600a80546001600160a01b038581166001600160a01b031992831617909255600b80548484169216919091178155306000818152600760209081526040808320805460ff1990811660019081179092553380865283862080548316841781557fedce2160c050a49599ea29488262f46ba7aee6ae939ac22c33c00cda2fb64fd680548416851790557fa2e9e17d44d5e14cf1ea2de377dbd1c128c44abb164eeae3c555f3f69745234d8054841685179055805483168417905596549097168452600883528184208054881682179055858452818420805488168217905593835280832080548716851790557f046fee3d77c34a6c5e10c3be6dc4b132c30449dbf4f0bc07684896dd0933429980548716851790557f5eff886ea0ce6ca488a3d6e336d6c0f75f46d19b42c06ce5ee98e42c96d256c78054909616841790955591548382526005835284822081905593519384529394509092917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505062000619565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620004db578160001904821115620004bf57620004bf62000484565b80851615620004cd57918102915b93841c93908002906200049f565b509250929050565b600082620004f45750600162000593565b81620005035750600062000593565b81600181146200051c5760028114620005275762000547565b600191505062000593565b60ff8411156200053b576200053b62000484565b50506001821b62000593565b5060208310610133831016604e8410600b84101617156200056c575081810a62000593565b6200057883836200049a565b80600019048211156200058f576200058f62000484565b0290505b92915050565b6000620005aa60ff841683620004e3565b9392505050565b808202811582820484141762000593576200059362000484565b600082620005e957634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156200060157600080fd5b81516001600160a01b0381168114620005aa57600080fd5b612bfa80620006296000396000f3fe60806040526004361061023f5760003560e01c806375f0a8741161012e578063b3610099116100ab578063dd62ed3e1161006f578063dd62ed3e14610738578063e2d6f94c1461077e578063f2fde38b1461079e578063fac91ae3146107be578063ffd49c84146107d457600080fd5b8063b361009914610641578063c04a541414610661578063c62de73014610689578063ce7c2ac2146106b9578063d46980161461071057600080fd5b80638c41180e116100f25780638c41180e1461059f5780639358928b146105bf57806395d89b41146105d4578063a8aa1b3114610601578063a9059cbb1461062157600080fd5b806375f0a8741461050d57806385feeb2314610535578063893c7eac1461054b578063893d20e81461056b57806389b8db551461058957600080fd5b806330cc83e4116101bc57806344579b321161018057806344579b321461048e57806348ff2b8b146104a357806362256589146104c357806370a08231146104d8578063715018a6146104f857600080fd5b806330cc83e4146103f7578063313ce5671461040c57806334c5d2ce146104285780633a98ef39146104485780633f4218e01461045e57600080fd5b806323b872dd1161020357806323b872dd146103395780632cd7e977146103595780632cebc1a91461036f5780632de6de93146103a85780632f54bf6e146103c857600080fd5b806306fdde031461024b578063095ea7b314610290578063102afbcd146102c057806316250a23146102e257806318160ddd1461031a57600080fd5b3661024657005b600080fd5b34801561025757600080fd5b5060408051808201909152600a81526943756c746d696e61746960b01b60208201525b6040516102879190612766565b60405180910390f35b34801561029c57600080fd5b506102b06102ab3660046127cc565b6107ea565b6040519015158152602001610287565b3480156102cc57600080fd5b506102e06102db366004612806565b610801565b005b3480156102ee57600080fd5b50601a54610302906001600160a01b031681565b6040516001600160a01b039091168152602001610287565b34801561032657600080fd5b506001545b604051908152602001610287565b34801561034557600080fd5b506102b061035436600461283f565b610882565b34801561036557600080fd5b5061032b60275481565b34801561037b57600080fd5b5061032b61038a366004612880565b6001600160a01b031660009081526023602052604090206002015490565b3480156103b457600080fd5b5061032b6103c3366004612880565b6108ec565b3480156103d457600080fd5b506102b06103e3366004612880565b6000546001600160a01b0391821691161490565b34801561040357600080fd5b506102e0610977565b34801561041857600080fd5b5060405160098152602001610287565b34801561043457600080fd5b506102e061044336600461289d565b610982565b34801561045457600080fd5b5061032b601b5481565b34801561046a57600080fd5b506102b0610479366004612880565b60076020526000908152604090205460ff1681565b34801561049a57600080fd5b506102e0610ad6565b3480156104af57600080fd5b506102e06104be366004612806565b610b15565b3480156104cf57600080fd5b506102e0610b6a565b3480156104e457600080fd5b5061032b6104f3366004612880565b610ba8565b34801561050457600080fd5b506102e0610bc3565b34801561051957600080fd5b50610302730200e3caa12068080d315022da0695e8598f03f881565b34801561054157600080fd5b5061032b601c5481565b34801561055757600080fd5b506102e06105663660046128c9565b610c32565b34801561057757600080fd5b506000546001600160a01b0316610302565b34801561059557600080fd5b5061032b60265481565b3480156105ab57600080fd5b506102e06105ba366004612806565b610ebd565b3480156105cb57600080fd5b5061032b610f94565b3480156105e057600080fd5b5060408051808201909152600481526310d3539560e21b602082015261027a565b34801561060d57600080fd5b50600b54610302906001600160a01b031681565b34801561062d57600080fd5b506102b061063c3660046127cc565b610fc5565b34801561064d57600080fd5b506102e061065c3660046128f0565b610fd2565b34801561066d57600080fd5b5061030273a6b2b7026f361f5b7b7ad7a21d1e780080f281b681565b34801561069557600080fd5b506102b06106a4366004612880565b60086020526000908152604090205460ff1681565b3480156106c557600080fd5b506106f56106d4366004612880565b60236020526000908152604090208054600182015460029092015490919083565b60408051938452602084019290925290820152606001610287565b34801561071c57600080fd5b5061030273504d0e726e66f3de1d66353374fcfa536076afc181565b34801561074457600080fd5b5061032b610753366004612909565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b34801561078a57600080fd5b506102e0610799366004612937565b61105b565b3480156107aa57600080fd5b506102e06107b9366004612880565b611161565b3480156107ca57600080fd5b5061032b601d5481565b3480156107e057600080fd5b5061032b60255481565b60006107f73384846111df565b5060015b92915050565b6000546001600160a01b031633146108345760405162461bcd60e51b815260040161082b9061298c565b60405180910390fd5b6001600160a01b0382166000908152600860205260409020805460ff191682158015919091179091556108705761086c826000611303565b5050565b61086c8261087d84610ba8565b611303565b600061088f84848461143c565b6108e184336108dc85604051806060016040528060288152602001612b9d602891396001600160a01b038a16600090815260066020908152604080832033845290915290205491906115e2565b6111df565b5060015b9392505050565b6001600160a01b038116600090815260236020526040812054810361091357506000919050565b6001600160a01b0382166000908152602360205260408120546109359061160e565b6001600160a01b038416600090815260236020526040902060010154909150808211610965575060009392505050565b61096f828261162b565b949350505050565b61098033611637565b565b6000546001600160a01b031633146109ac5760405162461bcd60e51b815260040161082b9061298c565b6000612710846109bb60015490565b6109c591906129c2565b6109cf91906129d9565b90506000612710846109e060015490565b6109ea91906129c2565b6109f491906129d9565b9050600061271084610a0560015490565b610a0f91906129c2565b610a1991906129d9565b60028490556003839055600481905590506000610a4c6103e8610a466005610a4060015490565b90611751565b9061175d565b9050808410158015610a5e5750808310155b8015610a6a5750808210155b610acd5760405162461bcd60e51b815260206004820152602e60248201527f4d61782054587320616e64204d61782057616c6c65742063616e6e6f7420626560448201526d206c657373207468616e202e352560901b606482015260840161082b565b50505050505050565b6000546001600160a01b03163314610b005760405162461bcd60e51b815260040161082b9061298c565b600b805460ff60a01b1916600160a01b179055565b6000546001600160a01b03163314610b3f5760405162461bcd60e51b815260040161082b9061298c565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610b945760405162461bcd60e51b815260040161082b9061298c565b600154600255600154600355600154600455565b6001600160a01b031660009081526005602052604090205490565b6000546001600160a01b03163314610bed5760405162461bcd60e51b815260040161082b9061298c565b600080546001600160a01b03191681556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a1565b602054336000829003610c46575050505050565b6000805a336000908152600560209081526040808320546008909252822054929350909160ff16610d44575b8884108015610c8057508582105b15610d3f578560245410610c945760006024555b610cc6602060245481548110610cac57610cac6129fb565b6000918252602090912001546001600160a01b0316611769565b15610cfd57610cfd602060245481548110610ce357610ce36129fb565b6000918252602090912001546001600160a01b0316611637565b610d12610d0b5a859061162b565b85906117ae565b93505a602480549194506000610d2783612a11565b91905055508180610d3790612a11565b925050610c72565b610eb2565b6000610d4f866108ec565b6001600160a01b038a16600090815260056020526040902054909150610d75908961162b565b6001600160a01b038a16600090815260056020526040902055610d988883612a2a565b336000908152600560205260409020558015610eb057601d54610dbb90826117ae565b601d55601a5460405163a9059cbb60e01b81526001600160a01b038881166004830152602482018490529091169063a9059cbb906044016020604051808303816000875af1158015610e11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e359190612a3d565b506001600160a01b03861660009081526022602090815260408083204290556023909152902060020154610e6990826117ae565b6001600160a01b0387166000908152602360205260409020600281019190915554610e939061160e565b6001600160a01b0387166000908152602360205260409020600101555b505b505050505050505050565b6000546001600160a01b03163314610ee75760405162461bcd60e51b815260040161082b9061298c565b600b546001600160a01b03838116911614801590610f135750600a546001600160a01b03838116911614155b8015610f2857506001600160a01b0382163014155b610f695760405162461bcd60e51b8152602060048201526012602482015271496e656c696769626c65204164647265737360701b604482015260640161082b565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6000610fc0610fa36000610ba8565b610fba610fb161dead610ba8565b6001549061162b565b9061162b565b905090565b60006107f733848461143c565b601a5460405163a9059cbb60e01b815273504d0e726e66f3de1d66353374fcfa536076afc16004820152602481018390526001600160a01b039091169063a9059cbb906044016020604051808303816000875af1158015611037573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061086c9190612a3d565b6000546001600160a01b031633146110855760405162461bcd60e51b815260040161082b9061298c565b600c889055600d8790556010869055600e859055600f8490556011839055601282905560138190556014546110bb90600561175d565b601154111580156110db57506014546110d590600561175d565b60125411155b80156110f657506014546110f090600561175d565b60135411155b6111575760405162461bcd60e51b815260206004820152602c60248201527f746f74616c46656520616e642073656c6c4665652063616e6e6f74206265206d60448201526b6f7265207468616e2032302560a01b606482015260840161082b565b5050505050505050565b6000546001600160a01b0316331461118b5760405162461bcd60e51b815260040161082b9061298c565b600080546001600160a01b0319166001600160a01b0383169081179091556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a150565b6001600160a01b0383166112415760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161082b565b6001600160a01b0382166112a25760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161082b565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60008111801561132957506001600160a01b038216600090815260236020526040902054155b1561138e57602080546001600160a01b03841660008181526021845260408120839055600183018455929092527fc97bfaf2f8ee708c303a06d134f5ecd8389ae0432af62dc132a24118292866bb0180546001600160a01b03191690911790556113c1565b801580156113b357506001600160a01b03821660009081526023602052604090205415155b156113c1576113c1826117ba565b6001600160a01b038216600090815260236020526040902054601b546113f29183916113ec9161162b565b906117ae565b601b556001600160a01b03821660009081526023602052604090208190556114198161160e565b6001600160a01b0390921660009081526023602052604090206001019190915550565b6114478383836118ce565b6114518383611a6d565b61145c838383611afe565b6114668383611bea565b611471838383611c41565b61147b8383611d6e565b6001600160a01b03831660009081526005602052604090205461149e908261162b565b6001600160a01b0384166000908152600560205260408120919091556114c48484611d91565b6114ce57816114d9565b6114d9848484611dd7565b6001600160a01b0384166000908152600560205260409020549091506114ff90826117ae565b6001600160a01b0380851660008181526005602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906115539085815260200190565b60405180910390a36001600160a01b03841660009081526008602052604090205460ff16611588576115888461087d86610ba8565b6001600160a01b03831660009081526008602052604090205460ff166115b5576115b58361087d85610ba8565b6001600160a01b038316600090815260236020526040902054156115dc576115dc83611637565b50505050565b600081848411156116065760405162461bcd60e51b815260040161082b9190612766565b505050900390565b60006107fb601f54610a46601e548561175190919063ffffffff16565b60006108e58284612a5a565b6001600160a01b03811660009081526023602052604081205490036116595750565b6000611664826108ec565b9050801561086c57601d5461167990826117ae565b601d55601a5460405163a9059cbb60e01b81526001600160a01b038481166004830152602482018490529091169063a9059cbb906044016020604051808303816000875af11580156116cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116f39190612a3d565b506001600160a01b0382166000908152602260209081526040808320429055602390915290206002015461172790826117ae565b6001600160a01b03831660009081526023602052604090206002810191909155546114199061160e565b60006108e582846129c2565b60006108e582846129d9565b6025546001600160a01b038216600090815260226020526040812054909142916117939190612a2a565b1080156107fb57506026546117a7836108ec565b1192915050565b60006108e58284612a2a565b602080546117ca90600190612a5a565b815481106117da576117da6129fb565b60009182526020808320909101546001600160a01b03848116845260218352604090932054825493909116928110611814576118146129fb565b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055918316815260218083526040822054835490939192919061185f90600190612a5a565b8154811061186f5761186f6129fb565b60009182526020808320909101546001600160a01b031683528281019390935260409091019020919091558054806118a9576118a9612a6d565b600082815260209020810160001990810180546001600160a01b031916905501905550565b6001600160a01b0383166119325760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161082b565b6001600160a01b0382166119945760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161082b565b600081116119f65760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161082b565b6119ff83610ba8565b811115611a685760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b606482015260840161082b565b505050565b6001600160a01b03821660009081526007602052604090205460ff16158015611aaf57506001600160a01b03811660009081526007602052604090205460ff16155b1561086c57600b54600160a01b900460ff1661086c5760405162461bcd60e51b815260206004820152600e60248201526d1d1c98591a5b99d05b1b1bddd95960921b604482015260640161082b565b6001600160a01b03831660009081526007602052604090205460ff16158015611b4057506001600160a01b03821660009081526007602052604090205460ff16155b8015611b5a5750600b546001600160a01b03838116911614155b8015611b7157506001600160a01b03821661dead14155b15611a68576004546001600160a01b038316600090815260056020526040902054611b9c90836117ae565b1115611a685760405162461bcd60e51b815260206004820152601e60248201527f45786365656473206d6178696d756d2077616c6c657420616d6f756e742e0000604482015260640161082b565b600b546001600160a01b038281169116148015611c2057506001600160a01b03821660009081526007602052604090205460ff16155b1561086c57600160166000828254611c389190612a2a565b90915550505050565b600b546001600160a01b03848116911614611ce25760035481111580611c7f57506001600160a01b03831660009081526007602052604090205460ff165b80611ca257506001600160a01b03821660009081526007602052604090205460ff165b611ce25760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b604482015260640161082b565b60025481111580611d0b57506001600160a01b03831660009081526007602052604090205460ff165b80611d2e57506001600160a01b03821660009081526007602052604090205460ff165b611a685760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b604482015260640161082b565b611d788282611ec5565b1561086c57611d88601854611f74565b60006016555050565b6001600160a01b03821660009081526007602052604081205460ff161580156108e55750506001600160a01b031660009081526007602052604090205460ff1615919050565b600080611de48585612133565b1115611ebe576000611e07611df98686612133565b601454610a4090869061175d565b30600090815260056020526040902054909150611e2490826117ae565b30600081815260056020526040908190209290925590516001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611e759085815260200190565b60405180910390a360105415611eac57611eac3061dead611ea7601054610a406014548961175d90919063ffffffff16565b61143c565b611eb6838261162b565b9150506108e5565b5092915050565b600080601854611ed430610ba8565b601754911115915060ff16158015611eee575060155460ff165b8015611f035750600b54600160a01b900460ff165b8015611f2857506001600160a01b03841660009081526007602052604090205460ff16155b8015611f4d57506001600160a01b03831660009081526007602052604090205460ff16155b8015611f665750600b546001600160a01b038481169116145b801561096f57509392505050565b6001601760006101000a81548160ff0219169083151502179055506000611fbe6002610a40600e546113ec600f546113ec600d546113ec6001600c546117ae90919063ffffffff16565b90506000611fdb82610a46600c548661175190919063ffffffff16565b90506000611fe9848361162b565b905047611ff5826121d4565b6000612001478361162b565b9050600061202461201d600c548861162b90919063ffffffff16565b839061175d565b9050600061203d600c548361175190919063ffffffff16565b9050801561204f5761204f868261232e565b600d5460009061206490610a40856002611751565b905080156120af57604051730200e3caa12068080d315022da0695e8598f03f89082156108fc029083906000818181858888f193505050501580156120ad573d6000803e3d6000fd5b505b600e546000906120c490610a40866002611751565b905080156120d5576120d5816123f2565b471561211d5760405173a6b2b7026f361f5b7b7ad7a21d1e780080f281b6904780156108fc02916000818181858888f1935050505015801561211b573d6000803e3d6000fd5b505b50506017805460ff191690555050505050505050565b6001600160a01b03821660009081526009602052604081205460ff168061217257506001600160a01b03821660009081526009602052604090205460ff165b1561218c5760145461218590606461162b565b90506107fb565b600b546001600160a01b03908116908316036121ab57506012546107fb565b600b546001600160a01b03908116908416036121ca57506011546107fb565b5060135492915050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612209576122096129fb565b6001600160a01b03928316602091820292909201810191909152600a54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612262573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122869190612a83565b81600181518110612299576122996129fb565b6001600160a01b039283166020918202929092010152600a546122bf91309116846111df565b600a5460405163791ac94760e01b81526001600160a01b039091169063791ac947906122f8908590600090869030904290600401612ae4565b600060405180830381600087803b15801561231257600080fd5b505af1158015612326573d6000803e3d6000fd5b505050505050565b600a546123469030906001600160a01b0316846111df565b600a5460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015273504d0e726e66f3de1d66353374fcfa536076afc160848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af11580156123c6573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906123eb9190612b20565b5050505050565b601a546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa15801561243b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061245f9190612b4e565b60408051600280825260608201835292935060009290916020830190803683375050600a54604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa1580156124ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124f29190612a83565b81600081518110612505576125056129fb565b6001600160a01b039283166020918202929092010152601a54825191169082906001908110612536576125366129fb565b6001600160a01b039283166020918202929092010152600a5460405163b6f9de9560e01b815291169063b6f9de9590859061257c90600090869030904290600401612b67565b6000604051808303818588803b15801561259557600080fd5b505af11580156125a9573d6000803e3d6000fd5b5050601a54600b546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319150602401602060405180830381865afa1580156125fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126219190612b4e565b601a546040516370a0823160e01b81523060048201529192506000916001600160a01b03909116906370a0823190602401602060405180830381865afa15801561266f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126939190612b4e565b905060006126a1828661162b565b9050600061271e6126b284866117ae565b601a546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa1580156126fa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fba9190612b4e565b905061273661272d83836117ae565b601c54906117ae565b601c55601b54601f5461275a9161275191610a469086611751565b601e54906117ae565b601e5550505050505050565b600060208083528351808285015260005b8181101561279357858101830151858201604001528201612777565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146127c957600080fd5b50565b600080604083850312156127df57600080fd5b82356127ea816127b4565b946020939093013593505050565b80151581146127c957600080fd5b6000806040838503121561281957600080fd5b8235612824816127b4565b91506020830135612834816127f8565b809150509250929050565b60008060006060848603121561285457600080fd5b833561285f816127b4565b9250602084013561286f816127b4565b929592945050506040919091013590565b60006020828403121561289257600080fd5b81356108e5816127b4565b6000806000606084860312156128b257600080fd5b505081359360208301359350604090920135919050565b6000806000606084860312156128de57600080fd5b83359250602084013561286f816127b4565b60006020828403121561290257600080fd5b5035919050565b6000806040838503121561291c57600080fd5b8235612927816127b4565b91506020830135612834816127b4565b600080600080600080600080610100898b03121561295457600080fd5b505086359860208801359850604088013597606081013597506080810135965060a0810135955060c0810135945060e0013592509050565b60208082526006908201526510a7aba722a960d11b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176107fb576107fb6129ac565b6000826129f657634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b600060018201612a2357612a236129ac565b5060010190565b808201808211156107fb576107fb6129ac565b600060208284031215612a4f57600080fd5b81516108e5816127f8565b818103818111156107fb576107fb6129ac565b634e487b7160e01b600052603160045260246000fd5b600060208284031215612a9557600080fd5b81516108e5816127b4565b600081518084526020808501945080840160005b83811015612ad95781516001600160a01b031687529582019590820190600101612ab4565b509495945050505050565b85815284602082015260a060408201526000612b0360a0830186612aa0565b6001600160a01b0394909416606083015250608001529392505050565b600080600060608486031215612b3557600080fd5b8351925060208401519150604084015190509250925092565b600060208284031215612b6057600080fd5b5051919050565b848152608060208201526000612b806080830186612aa0565b6001600160a01b0394909416604083015250606001529291505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a26469706673582212208acba36db94b6b7c3877c513c72433188e6dab0c5df18843856aa2f916f128d564736f6c63430008110033

Deployed Bytecode

0x60806040526004361061023f5760003560e01c806375f0a8741161012e578063b3610099116100ab578063dd62ed3e1161006f578063dd62ed3e14610738578063e2d6f94c1461077e578063f2fde38b1461079e578063fac91ae3146107be578063ffd49c84146107d457600080fd5b8063b361009914610641578063c04a541414610661578063c62de73014610689578063ce7c2ac2146106b9578063d46980161461071057600080fd5b80638c41180e116100f25780638c41180e1461059f5780639358928b146105bf57806395d89b41146105d4578063a8aa1b3114610601578063a9059cbb1461062157600080fd5b806375f0a8741461050d57806385feeb2314610535578063893c7eac1461054b578063893d20e81461056b57806389b8db551461058957600080fd5b806330cc83e4116101bc57806344579b321161018057806344579b321461048e57806348ff2b8b146104a357806362256589146104c357806370a08231146104d8578063715018a6146104f857600080fd5b806330cc83e4146103f7578063313ce5671461040c57806334c5d2ce146104285780633a98ef39146104485780633f4218e01461045e57600080fd5b806323b872dd1161020357806323b872dd146103395780632cd7e977146103595780632cebc1a91461036f5780632de6de93146103a85780632f54bf6e146103c857600080fd5b806306fdde031461024b578063095ea7b314610290578063102afbcd146102c057806316250a23146102e257806318160ddd1461031a57600080fd5b3661024657005b600080fd5b34801561025757600080fd5b5060408051808201909152600a81526943756c746d696e61746960b01b60208201525b6040516102879190612766565b60405180910390f35b34801561029c57600080fd5b506102b06102ab3660046127cc565b6107ea565b6040519015158152602001610287565b3480156102cc57600080fd5b506102e06102db366004612806565b610801565b005b3480156102ee57600080fd5b50601a54610302906001600160a01b031681565b6040516001600160a01b039091168152602001610287565b34801561032657600080fd5b506001545b604051908152602001610287565b34801561034557600080fd5b506102b061035436600461283f565b610882565b34801561036557600080fd5b5061032b60275481565b34801561037b57600080fd5b5061032b61038a366004612880565b6001600160a01b031660009081526023602052604090206002015490565b3480156103b457600080fd5b5061032b6103c3366004612880565b6108ec565b3480156103d457600080fd5b506102b06103e3366004612880565b6000546001600160a01b0391821691161490565b34801561040357600080fd5b506102e0610977565b34801561041857600080fd5b5060405160098152602001610287565b34801561043457600080fd5b506102e061044336600461289d565b610982565b34801561045457600080fd5b5061032b601b5481565b34801561046a57600080fd5b506102b0610479366004612880565b60076020526000908152604090205460ff1681565b34801561049a57600080fd5b506102e0610ad6565b3480156104af57600080fd5b506102e06104be366004612806565b610b15565b3480156104cf57600080fd5b506102e0610b6a565b3480156104e457600080fd5b5061032b6104f3366004612880565b610ba8565b34801561050457600080fd5b506102e0610bc3565b34801561051957600080fd5b50610302730200e3caa12068080d315022da0695e8598f03f881565b34801561054157600080fd5b5061032b601c5481565b34801561055757600080fd5b506102e06105663660046128c9565b610c32565b34801561057757600080fd5b506000546001600160a01b0316610302565b34801561059557600080fd5b5061032b60265481565b3480156105ab57600080fd5b506102e06105ba366004612806565b610ebd565b3480156105cb57600080fd5b5061032b610f94565b3480156105e057600080fd5b5060408051808201909152600481526310d3539560e21b602082015261027a565b34801561060d57600080fd5b50600b54610302906001600160a01b031681565b34801561062d57600080fd5b506102b061063c3660046127cc565b610fc5565b34801561064d57600080fd5b506102e061065c3660046128f0565b610fd2565b34801561066d57600080fd5b5061030273a6b2b7026f361f5b7b7ad7a21d1e780080f281b681565b34801561069557600080fd5b506102b06106a4366004612880565b60086020526000908152604090205460ff1681565b3480156106c557600080fd5b506106f56106d4366004612880565b60236020526000908152604090208054600182015460029092015490919083565b60408051938452602084019290925290820152606001610287565b34801561071c57600080fd5b5061030273504d0e726e66f3de1d66353374fcfa536076afc181565b34801561074457600080fd5b5061032b610753366004612909565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b34801561078a57600080fd5b506102e0610799366004612937565b61105b565b3480156107aa57600080fd5b506102e06107b9366004612880565b611161565b3480156107ca57600080fd5b5061032b601d5481565b3480156107e057600080fd5b5061032b60255481565b60006107f73384846111df565b5060015b92915050565b6000546001600160a01b031633146108345760405162461bcd60e51b815260040161082b9061298c565b60405180910390fd5b6001600160a01b0382166000908152600860205260409020805460ff191682158015919091179091556108705761086c826000611303565b5050565b61086c8261087d84610ba8565b611303565b600061088f84848461143c565b6108e184336108dc85604051806060016040528060288152602001612b9d602891396001600160a01b038a16600090815260066020908152604080832033845290915290205491906115e2565b6111df565b5060015b9392505050565b6001600160a01b038116600090815260236020526040812054810361091357506000919050565b6001600160a01b0382166000908152602360205260408120546109359061160e565b6001600160a01b038416600090815260236020526040902060010154909150808211610965575060009392505050565b61096f828261162b565b949350505050565b61098033611637565b565b6000546001600160a01b031633146109ac5760405162461bcd60e51b815260040161082b9061298c565b6000612710846109bb60015490565b6109c591906129c2565b6109cf91906129d9565b90506000612710846109e060015490565b6109ea91906129c2565b6109f491906129d9565b9050600061271084610a0560015490565b610a0f91906129c2565b610a1991906129d9565b60028490556003839055600481905590506000610a4c6103e8610a466005610a4060015490565b90611751565b9061175d565b9050808410158015610a5e5750808310155b8015610a6a5750808210155b610acd5760405162461bcd60e51b815260206004820152602e60248201527f4d61782054587320616e64204d61782057616c6c65742063616e6e6f7420626560448201526d206c657373207468616e202e352560901b606482015260840161082b565b50505050505050565b6000546001600160a01b03163314610b005760405162461bcd60e51b815260040161082b9061298c565b600b805460ff60a01b1916600160a01b179055565b6000546001600160a01b03163314610b3f5760405162461bcd60e51b815260040161082b9061298c565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610b945760405162461bcd60e51b815260040161082b9061298c565b600154600255600154600355600154600455565b6001600160a01b031660009081526005602052604090205490565b6000546001600160a01b03163314610bed5760405162461bcd60e51b815260040161082b9061298c565b600080546001600160a01b03191681556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a1565b602054336000829003610c46575050505050565b6000805a336000908152600560209081526040808320546008909252822054929350909160ff16610d44575b8884108015610c8057508582105b15610d3f578560245410610c945760006024555b610cc6602060245481548110610cac57610cac6129fb565b6000918252602090912001546001600160a01b0316611769565b15610cfd57610cfd602060245481548110610ce357610ce36129fb565b6000918252602090912001546001600160a01b0316611637565b610d12610d0b5a859061162b565b85906117ae565b93505a602480549194506000610d2783612a11565b91905055508180610d3790612a11565b925050610c72565b610eb2565b6000610d4f866108ec565b6001600160a01b038a16600090815260056020526040902054909150610d75908961162b565b6001600160a01b038a16600090815260056020526040902055610d988883612a2a565b336000908152600560205260409020558015610eb057601d54610dbb90826117ae565b601d55601a5460405163a9059cbb60e01b81526001600160a01b038881166004830152602482018490529091169063a9059cbb906044016020604051808303816000875af1158015610e11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e359190612a3d565b506001600160a01b03861660009081526022602090815260408083204290556023909152902060020154610e6990826117ae565b6001600160a01b0387166000908152602360205260409020600281019190915554610e939061160e565b6001600160a01b0387166000908152602360205260409020600101555b505b505050505050505050565b6000546001600160a01b03163314610ee75760405162461bcd60e51b815260040161082b9061298c565b600b546001600160a01b03838116911614801590610f135750600a546001600160a01b03838116911614155b8015610f2857506001600160a01b0382163014155b610f695760405162461bcd60e51b8152602060048201526012602482015271496e656c696769626c65204164647265737360701b604482015260640161082b565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6000610fc0610fa36000610ba8565b610fba610fb161dead610ba8565b6001549061162b565b9061162b565b905090565b60006107f733848461143c565b601a5460405163a9059cbb60e01b815273504d0e726e66f3de1d66353374fcfa536076afc16004820152602481018390526001600160a01b039091169063a9059cbb906044016020604051808303816000875af1158015611037573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061086c9190612a3d565b6000546001600160a01b031633146110855760405162461bcd60e51b815260040161082b9061298c565b600c889055600d8790556010869055600e859055600f8490556011839055601282905560138190556014546110bb90600561175d565b601154111580156110db57506014546110d590600561175d565b60125411155b80156110f657506014546110f090600561175d565b60135411155b6111575760405162461bcd60e51b815260206004820152602c60248201527f746f74616c46656520616e642073656c6c4665652063616e6e6f74206265206d60448201526b6f7265207468616e2032302560a01b606482015260840161082b565b5050505050505050565b6000546001600160a01b0316331461118b5760405162461bcd60e51b815260040161082b9061298c565b600080546001600160a01b0319166001600160a01b0383169081179091556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a150565b6001600160a01b0383166112415760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161082b565b6001600160a01b0382166112a25760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161082b565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60008111801561132957506001600160a01b038216600090815260236020526040902054155b1561138e57602080546001600160a01b03841660008181526021845260408120839055600183018455929092527fc97bfaf2f8ee708c303a06d134f5ecd8389ae0432af62dc132a24118292866bb0180546001600160a01b03191690911790556113c1565b801580156113b357506001600160a01b03821660009081526023602052604090205415155b156113c1576113c1826117ba565b6001600160a01b038216600090815260236020526040902054601b546113f29183916113ec9161162b565b906117ae565b601b556001600160a01b03821660009081526023602052604090208190556114198161160e565b6001600160a01b0390921660009081526023602052604090206001019190915550565b6114478383836118ce565b6114518383611a6d565b61145c838383611afe565b6114668383611bea565b611471838383611c41565b61147b8383611d6e565b6001600160a01b03831660009081526005602052604090205461149e908261162b565b6001600160a01b0384166000908152600560205260408120919091556114c48484611d91565b6114ce57816114d9565b6114d9848484611dd7565b6001600160a01b0384166000908152600560205260409020549091506114ff90826117ae565b6001600160a01b0380851660008181526005602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906115539085815260200190565b60405180910390a36001600160a01b03841660009081526008602052604090205460ff16611588576115888461087d86610ba8565b6001600160a01b03831660009081526008602052604090205460ff166115b5576115b58361087d85610ba8565b6001600160a01b038316600090815260236020526040902054156115dc576115dc83611637565b50505050565b600081848411156116065760405162461bcd60e51b815260040161082b9190612766565b505050900390565b60006107fb601f54610a46601e548561175190919063ffffffff16565b60006108e58284612a5a565b6001600160a01b03811660009081526023602052604081205490036116595750565b6000611664826108ec565b9050801561086c57601d5461167990826117ae565b601d55601a5460405163a9059cbb60e01b81526001600160a01b038481166004830152602482018490529091169063a9059cbb906044016020604051808303816000875af11580156116cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116f39190612a3d565b506001600160a01b0382166000908152602260209081526040808320429055602390915290206002015461172790826117ae565b6001600160a01b03831660009081526023602052604090206002810191909155546114199061160e565b60006108e582846129c2565b60006108e582846129d9565b6025546001600160a01b038216600090815260226020526040812054909142916117939190612a2a565b1080156107fb57506026546117a7836108ec565b1192915050565b60006108e58284612a2a565b602080546117ca90600190612a5a565b815481106117da576117da6129fb565b60009182526020808320909101546001600160a01b03848116845260218352604090932054825493909116928110611814576118146129fb565b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055918316815260218083526040822054835490939192919061185f90600190612a5a565b8154811061186f5761186f6129fb565b60009182526020808320909101546001600160a01b031683528281019390935260409091019020919091558054806118a9576118a9612a6d565b600082815260209020810160001990810180546001600160a01b031916905501905550565b6001600160a01b0383166119325760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161082b565b6001600160a01b0382166119945760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161082b565b600081116119f65760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161082b565b6119ff83610ba8565b811115611a685760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b606482015260840161082b565b505050565b6001600160a01b03821660009081526007602052604090205460ff16158015611aaf57506001600160a01b03811660009081526007602052604090205460ff16155b1561086c57600b54600160a01b900460ff1661086c5760405162461bcd60e51b815260206004820152600e60248201526d1d1c98591a5b99d05b1b1bddd95960921b604482015260640161082b565b6001600160a01b03831660009081526007602052604090205460ff16158015611b4057506001600160a01b03821660009081526007602052604090205460ff16155b8015611b5a5750600b546001600160a01b03838116911614155b8015611b7157506001600160a01b03821661dead14155b15611a68576004546001600160a01b038316600090815260056020526040902054611b9c90836117ae565b1115611a685760405162461bcd60e51b815260206004820152601e60248201527f45786365656473206d6178696d756d2077616c6c657420616d6f756e742e0000604482015260640161082b565b600b546001600160a01b038281169116148015611c2057506001600160a01b03821660009081526007602052604090205460ff16155b1561086c57600160166000828254611c389190612a2a565b90915550505050565b600b546001600160a01b03848116911614611ce25760035481111580611c7f57506001600160a01b03831660009081526007602052604090205460ff165b80611ca257506001600160a01b03821660009081526007602052604090205460ff165b611ce25760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b604482015260640161082b565b60025481111580611d0b57506001600160a01b03831660009081526007602052604090205460ff165b80611d2e57506001600160a01b03821660009081526007602052604090205460ff165b611a685760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b604482015260640161082b565b611d788282611ec5565b1561086c57611d88601854611f74565b60006016555050565b6001600160a01b03821660009081526007602052604081205460ff161580156108e55750506001600160a01b031660009081526007602052604090205460ff1615919050565b600080611de48585612133565b1115611ebe576000611e07611df98686612133565b601454610a4090869061175d565b30600090815260056020526040902054909150611e2490826117ae565b30600081815260056020526040908190209290925590516001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611e759085815260200190565b60405180910390a360105415611eac57611eac3061dead611ea7601054610a406014548961175d90919063ffffffff16565b61143c565b611eb6838261162b565b9150506108e5565b5092915050565b600080601854611ed430610ba8565b601754911115915060ff16158015611eee575060155460ff165b8015611f035750600b54600160a01b900460ff165b8015611f2857506001600160a01b03841660009081526007602052604090205460ff16155b8015611f4d57506001600160a01b03831660009081526007602052604090205460ff16155b8015611f665750600b546001600160a01b038481169116145b801561096f57509392505050565b6001601760006101000a81548160ff0219169083151502179055506000611fbe6002610a40600e546113ec600f546113ec600d546113ec6001600c546117ae90919063ffffffff16565b90506000611fdb82610a46600c548661175190919063ffffffff16565b90506000611fe9848361162b565b905047611ff5826121d4565b6000612001478361162b565b9050600061202461201d600c548861162b90919063ffffffff16565b839061175d565b9050600061203d600c548361175190919063ffffffff16565b9050801561204f5761204f868261232e565b600d5460009061206490610a40856002611751565b905080156120af57604051730200e3caa12068080d315022da0695e8598f03f89082156108fc029083906000818181858888f193505050501580156120ad573d6000803e3d6000fd5b505b600e546000906120c490610a40866002611751565b905080156120d5576120d5816123f2565b471561211d5760405173a6b2b7026f361f5b7b7ad7a21d1e780080f281b6904780156108fc02916000818181858888f1935050505015801561211b573d6000803e3d6000fd5b505b50506017805460ff191690555050505050505050565b6001600160a01b03821660009081526009602052604081205460ff168061217257506001600160a01b03821660009081526009602052604090205460ff165b1561218c5760145461218590606461162b565b90506107fb565b600b546001600160a01b03908116908316036121ab57506012546107fb565b600b546001600160a01b03908116908416036121ca57506011546107fb565b5060135492915050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612209576122096129fb565b6001600160a01b03928316602091820292909201810191909152600a54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612262573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122869190612a83565b81600181518110612299576122996129fb565b6001600160a01b039283166020918202929092010152600a546122bf91309116846111df565b600a5460405163791ac94760e01b81526001600160a01b039091169063791ac947906122f8908590600090869030904290600401612ae4565b600060405180830381600087803b15801561231257600080fd5b505af1158015612326573d6000803e3d6000fd5b505050505050565b600a546123469030906001600160a01b0316846111df565b600a5460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015273504d0e726e66f3de1d66353374fcfa536076afc160848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af11580156123c6573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906123eb9190612b20565b5050505050565b601a546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa15801561243b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061245f9190612b4e565b60408051600280825260608201835292935060009290916020830190803683375050600a54604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa1580156124ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124f29190612a83565b81600081518110612505576125056129fb565b6001600160a01b039283166020918202929092010152601a54825191169082906001908110612536576125366129fb565b6001600160a01b039283166020918202929092010152600a5460405163b6f9de9560e01b815291169063b6f9de9590859061257c90600090869030904290600401612b67565b6000604051808303818588803b15801561259557600080fd5b505af11580156125a9573d6000803e3d6000fd5b5050601a54600b546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319150602401602060405180830381865afa1580156125fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126219190612b4e565b601a546040516370a0823160e01b81523060048201529192506000916001600160a01b03909116906370a0823190602401602060405180830381865afa15801561266f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126939190612b4e565b905060006126a1828661162b565b9050600061271e6126b284866117ae565b601a546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa1580156126fa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fba9190612b4e565b905061273661272d83836117ae565b601c54906117ae565b601c55601b54601f5461275a9161275191610a469086611751565b601e54906117ae565b601e5550505050505050565b600060208083528351808285015260005b8181101561279357858101830151858201604001528201612777565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146127c957600080fd5b50565b600080604083850312156127df57600080fd5b82356127ea816127b4565b946020939093013593505050565b80151581146127c957600080fd5b6000806040838503121561281957600080fd5b8235612824816127b4565b91506020830135612834816127f8565b809150509250929050565b60008060006060848603121561285457600080fd5b833561285f816127b4565b9250602084013561286f816127b4565b929592945050506040919091013590565b60006020828403121561289257600080fd5b81356108e5816127b4565b6000806000606084860312156128b257600080fd5b505081359360208301359350604090920135919050565b6000806000606084860312156128de57600080fd5b83359250602084013561286f816127b4565b60006020828403121561290257600080fd5b5035919050565b6000806040838503121561291c57600080fd5b8235612927816127b4565b91506020830135612834816127b4565b600080600080600080600080610100898b03121561295457600080fd5b505086359860208801359850604088013597606081013597506080810135965060a0810135955060c0810135945060e0013592509050565b60208082526006908201526510a7aba722a960d11b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176107fb576107fb6129ac565b6000826129f657634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b600060018201612a2357612a236129ac565b5060010190565b808201808211156107fb576107fb6129ac565b600060208284031215612a4f57600080fd5b81516108e5816127f8565b818103818111156107fb576107fb6129ac565b634e487b7160e01b600052603160045260246000fd5b600060208284031215612a9557600080fd5b81516108e5816127b4565b600081518084526020808501945080840160005b83811015612ad95781516001600160a01b031687529582019590820190600101612ab4565b509495945050505050565b85815284602082015260a060408201526000612b0360a0830186612aa0565b6001600160a01b0394909416606083015250608001529392505050565b600080600060608486031215612b3557600080fd5b8351925060208401519150604084015190509250925092565b600060208284031215612b6057600080fd5b5051919050565b848152608060208201526000612b806080830186612aa0565b6001600160a01b0394909416604083015250606001529291505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a26469706673582212208acba36db94b6b7c3877c513c72433188e6dab0c5df18843856aa2f916f128d564736f6c63430008110033

Deployed Bytecode Sourcemap

6467:21749:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10133:83;;;;;;;;;;-1:-1:-1;10203:5:0;;;;;;;;;;;;-1:-1:-1;;;10203:5:0;;;;10133:83;;;;;;;:::i;:::-;;;;;;;;11558:191;;;;;;;;;;-1:-1:-1;11558:191:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;11558:191:0;1023:187:1;22040:292:0;;;;;;;;;;-1:-1:-1;22040:292:0;;;;;:::i;:::-;;:::i;:::-;;7998:67;;;;;;;;;;-1:-1:-1;7998:67:0;;;;-1:-1:-1;;;;;7998:67:0;;;;;;-1:-1:-1;;;;;1889:32:1;;;1871:51;;1859:2;1844:18;7998:67:0;1725:203:1;10600:100:0;;;;;;;;;;-1:-1:-1;10680:12:0;;10600:100;;;2079:25:1;;;2067:2;2052:18;10600:100:0;1933:177:1;21213:442:0;;;;;;;;;;-1:-1:-1;21213:442:0;;;;;:::i;:::-;;:::i;8702:28::-;;;;;;;;;;;;;;;;25988:214;;;;;;;;;;-1:-1:-1;25988:214:0;;;;;:::i;:::-;-1:-1:-1;;;;;26160:19:0;26080:7;26160:19;;;:6;:19;;;;;:33;;;;25988:214;26903:569;;;;;;;;;;-1:-1:-1;26903:569:0;;;;;:::i;:::-;;:::i;4447:103::-;;;;;;;;;;-1:-1:-1;4447:103:0;;;;;:::i;:::-;4502:4;4537:5;-1:-1:-1;;;;;4526:16:0;;;4537:5;;4526:16;;4447:103;8739:83;;;;;;;;;;;;;:::i;10319:::-;;;;;;;;;;-1:-1:-1;10319:83:0;;6679:1;2970:36:1;;2958:2;2943:18;10319:83:0;2828:184:1;14808:649:0;;;;;;;;;;-1:-1:-1;14808:649:0;;;;;:::i;:::-;;:::i;8072:26::-;;;;;;;;;;;;;;;;7074:43;;;;;;;;;;-1:-1:-1;7074:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;10410:82;;;;;;;;;;;;;:::i;11426:124::-;;;;;;;;;;-1:-1:-1;11426:124:0;;;;;:::i;:::-;;:::i;14631:169::-;;;;;;;;;;;;;:::i;10708:119::-;;;;;;;;;;-1:-1:-1;10708:119:0;;;;;:::i;:::-;;:::i;4558:139::-;;;;;;;;;;;;;:::i;9096:84::-;;;;;;;;;;;;9138:42;9096:84;;8105:28;;;;;;;;;;;;;;;;23853:1693;;;;;;;;;;-1:-1:-1;23853:1693:0;;;;;:::i;:::-;;:::i;10500:92::-;;;;;;;;;;-1:-1:-1;10552:7:0;10579:5;-1:-1:-1;;;;;10579:5:0;10500:92;;8656:39;;;;;;;;;;;;;;;;14310:313;;;;;;;;;;-1:-1:-1;14310:313:0;;;;;:::i;:::-;;:::i;11757:154::-;;;;;;;;;;;;;:::i;10224:87::-;;;;;;;;;;-1:-1:-1;10296:7:0;;;;;;;;;;;;-1:-1:-1;;;10296:7:0;;;;10224:87;;7247:19;;;;;;;;;;-1:-1:-1;7247:19:0;;;;-1:-1:-1;;;;;7247:19:0;;;10835:197;;;;;;;;;;-1:-1:-1;10835:197:0;;;;;:::i;:::-;;:::i;25823:157::-;;;;;;;;;;-1:-1:-1;25823:157:0;;;;;:::i;:::-;;:::i;9003:86::-;;;;;;;;;;;;9047:42;9003:86;;7124:50;;;;;;;;;;-1:-1:-1;7124:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;8530:39;;;;;;;;;;-1:-1:-1;8530:39:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4113:25:1;;;4169:2;4154:18;;4147:34;;;;4197:18;;;4190:34;4101:2;4086:18;8530:39:0;3911:319:1;8912:84:0;;;;;;;;;;;;8954:42;8912:84;;11040:184;;;;;;;;;;-1:-1:-1;11040:184:0;;;;;:::i;:::-;-1:-1:-1;;;;;11189:18:0;;;11157:7;11189:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;11040:184;13538:764;;;;;;;;;;-1:-1:-1;13538:764:0;;;;;:::i;:::-;;:::i;4705:136::-;;;;;;;;;;-1:-1:-1;4705:136:0;;;;;:::i;:::-;;:::i;8140:30::-;;;;;;;;;;;;;;;;8612:37;;;;;;;;;;;;;;;;11558:191;11660:4;11682:37;11691:10;11703:7;11712:6;11682:8;:37::i;:::-;-1:-1:-1;11737:4:0;11558:191;;;;;:::o;22040:292::-;4502:4;4537:5;-1:-1:-1;;;;;4537:5:0;4397:10;4526:16;4381:38;;;;-1:-1:-1;;;4381:38:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;22153:26:0;::::1;;::::0;;;:18:::1;:26;::::0;;;;:35;;-1:-1:-1;;22153:35:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;22199:126:::1;;22226:19;22235:6;22243:1;22226:8;:19::i;:::-;22040:292:::0;;:::o;22199:126::-:1;22278:35;22287:6;22295:17;22305:6;22295:9;:17::i;:::-;22278:8;:35::i;21213:442::-:0;21345:4;21362:36;21372:6;21380:9;21391:6;21362:9;:36::i;:::-;21409:216;21432:6;21453:10;21478:136;21532:6;21478:136;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21478:19:0;;;;;;:11;:19;;;;;;;;21498:10;21478:31;;;;;;;;;:136;:35;:136::i;:::-;21409:8;:216::i;:::-;-1:-1:-1;21643:4:0;21213:442;;;;;;:::o;26903:569::-;-1:-1:-1;;;;;27029:19:0;;27000:7;27029:19;;;:6;:19;;;;;:26;:31;;27025:72;;-1:-1:-1;27084:1:0;;26903:569;-1:-1:-1;26903:569:0:o;27025:72::-;-1:-1:-1;;;;;27173:19:0;;27107:32;27173:19;;;:6;:19;;;;;:26;27142:68;;:16;:68::i;:::-;-1:-1:-1;;;;;27256:19:0;;27221:32;27256:19;;;:6;:19;;;;;:33;;;27107:103;;-1:-1:-1;27304:52:0;;;27300:93;;-1:-1:-1;27380:1:0;;26903:569;-1:-1:-1;;;26903:569:0:o;27300:93::-;27410:54;:24;27439;27410:28;:54::i;:::-;27403:61;26903:569;-1:-1:-1;;;;26903:569:0:o;8739:83::-;8784:30;8803:10;8784:18;:30::i;:::-;8739:83::o;14808:649::-;4502:4;4537:5;-1:-1:-1;;;;;4537:5:0;4397:10;4526:16;4381:38;;;;-1:-1:-1;;;4381:38:0;;;;;;;:::i;:::-;14942:13:::1;14983:5;14975:4;14959:13;10680:12:::0;;;10600:100;14959:13:::1;:20;;;;:::i;:::-;14958:30;;;;:::i;:::-;14942:46;;14999:19;15048:5;15038:6;15022:13;10680:12:::0;;;10600:100;15022:13:::1;:22;;;;:::i;:::-;15021:32;;;;:::i;:::-;14999:54;;15064:17;15112:5;15101:7;15085:13;10680:12:::0;;;10600:100;15085:13:::1;:23;;;;:::i;:::-;15084:33;;;;:::i;:::-;15128:12;:20:::0;;;15159:14:::1;:28:::0;;;15198:15:::1;:27:::0;;;15064:53;-1:-1:-1;;15252:30:0::1;15277:4;15252:20;15270:1;15252:13;10680:12:::0;;;10600:100;15252:13:::1;:17:::0;::::1;:20::i;:::-;:24:::0;::::1;:30::i;:::-;15236:46;;15324:5;15315;:14;;:38;;;;;15348:5;15333:11;:20;;15315:38;:60;;;;;15370:5;15357:9;:18;;15315:60;15293:156;;;::::0;-1:-1:-1;;;15293:156:0;;6617:2:1;15293:156:0::1;::::0;::::1;6599:21:1::0;6656:2;6636:18;;;6629:30;6695:34;6675:18;;;6668:62;-1:-1:-1;;;6746:18:1;;;6739:44;6800:19;;15293:156:0::1;6415:410:1::0;15293:156:0::1;14931:526;;;;14808:649:::0;;;:::o;10410:82::-;4502:4;4537:5;-1:-1:-1;;;;;4537:5:0;4397:10;4526:16;4381:38;;;;-1:-1:-1;;;4381:38:0;;;;;;;:::i;:::-;10463:14:::1;:21:::0;;-1:-1:-1;;;;10463:21:0::1;-1:-1:-1::0;;;10463:21:0::1;::::0;;10410:82::o;11426:124::-;4502:4;4537:5;-1:-1:-1;;;;;4537:5:0;4397:10;4526:16;4381:38;;;;-1:-1:-1;;;4381:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11510:21:0;;;::::1;;::::0;;;:11:::1;:21;::::0;;;;:32;;-1:-1:-1;;11510:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;11426:124::o;14631:169::-;4502:4;4537:5;-1:-1:-1;;;;;4537:5:0;4397:10;4526:16;4381:38;;;;-1:-1:-1;;;4381:38:0;;;;;;;:::i;:::-;10680:12;;14683::::1;:28:::0;10680:12;;14721:14:::1;:30:::0;10680:12;;14761:15:::1;:31:::0;14631:169::o;10708:119::-;-1:-1:-1;;;;;10801:18:0;10774:7;10801:18;;;:9;:18;;;;;;;10708:119::o;4558:139::-;4502:4;4537:5;-1:-1:-1;;;;;4537:5:0;4397:10;4526:16;4381:38;;;;-1:-1:-1;;;4381:38:0;;;;;;;:::i;:::-;4639:1:::1;4623:18:::0;;-1:-1:-1;;;;;;4623:18:0::1;::::0;;4657:32:::1;::::0;1871:51:1;;;4657:32:0::1;::::0;1859:2:1;1844:18;4657:32:0::1;;;;;;;4558:139::o:0;23853:1693::-;24001:12;:19;24046:10;23974:24;24071:21;;;24067:60;;24109:7;;23853:1693;;;:::o;24067:60::-;24137:15;24167;24185:9;24270:10;24205:18;24260:21;;;:9;:21;;;;;;;;;24297:18;:30;;;;;;24167:27;;-1:-1:-1;24205:18:0;;24297:30;;24292:1247;;24344:503;24361:3;24351:7;:13;:46;;;;;24381:16;24368:10;:29;24351:46;24344:503;;;24438:16;24422:12;;:32;24418:97;;24494:1;24479:12;:16;24418:97;24537:38;24548:12;24561;;24548:26;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;24548:26:0;24537:10;:38::i;:::-;24533:133;;;24600:46;24619:12;24632;;24619:26;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;24619:26:0;24600:18;:46::i;:::-;24694:35;24706:22;24718:9;24706:7;;:11;:22::i;:::-;24694:7;;:11;:35::i;:::-;24684:45;;24758:9;24786:12;:14;;24748:19;;-1:-1:-1;24786:12:0;:14;;;:::i;:::-;;;;;;24819:12;;;;;:::i;:::-;;;;24344:503;;;24292:1247;;;24879:14;24896:24;24915:4;24896:18;:24::i;:::-;-1:-1:-1;;;;;24957:19:0;;;;;;:9;:19;;;;;;24879:41;;-1:-1:-1;24957:32:0;;24981:7;24957:23;:32::i;:::-;-1:-1:-1;;;;;24935:19:0;;;;;;:9;:19;;;;;:54;25028:21;25042:7;25028:11;:21;:::i;:::-;25014:10;25004:21;;;;:9;:21;;;;;:45;25068:10;;25064:464;;25117:15;;:27;;25137:6;25117:19;:27::i;:::-;25099:15;:45;25170:7;;25163:38;;-1:-1:-1;;;25163:38:0;;-1:-1:-1;;;;;7424:32:1;;;25163:38:0;;;7406:51:1;7473:18;;;7466:34;;;25170:7:0;;;;25163:24;;7379:18:1;;25163:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;25220:23:0;;;;;;:17;:23;;;;;;;;25246:15;25220:41;;25309:6;:12;;;;;:26;;;:78;;25362:6;25309:30;:78::i;:::-;-1:-1:-1;;;;;25280:12:0;;;;;;:6;:12;;;;;:26;;;:107;;;;25474:19;25435:77;;:16;:77::i;:::-;-1:-1:-1;;;;;25406:12:0;;;;;;:6;:12;;;;;:26;;:106;25064:464;24864:675;24292:1247;23963:1583;;;;;;23853:1693;;;:::o;14310:313::-;4502:4;4537:5;-1:-1:-1;;;;;4537:5:0;4397:10;4526:16;4381:38;;;;-1:-1:-1;;;4381:38:0;;;;;;;:::i;:::-;14433:4:::1;::::0;-1:-1:-1;;;;;14413:25:0;;::::1;14433:4:::0;::::1;14413:25;::::0;::::1;::::0;:73:::1;;-1:-1:-1::0;14479:6:0::1;::::0;-1:-1:-1;;;;;14459:27:0;;::::1;14479:6:::0;::::1;14459:27;;14413:73;:119;;;;-1:-1:-1::0;;;;;;14507:25:0;::::1;14527:4;14507:25;;14413:119;14391:187;;;::::0;-1:-1:-1;;;14391:187:0;;7963:2:1;14391:187:0::1;::::0;::::1;7945:21:1::0;8002:2;7982:18;;;7975:30;-1:-1:-1;;;8021:18:1;;;8014:48;8079:18;;14391:187:0::1;7761:342:1::0;14391:187:0::1;-1:-1:-1::0;;;;;14589:15:0;;;::::1;;::::0;;;:5:::1;:15;::::0;;;;:26;;-1:-1:-1;;14589:26:0::1;::::0;::::1;;::::0;;;::::1;::::0;;14310:313::o;11757:154::-;11816:7;11843:60;11881:21;11899:1;11881:9;:21::i;:::-;11843:33;11860:15;8863:42;11860:9;:15::i;:::-;11843:12;;;:16;:33::i;:::-;:37;;:60::i;:::-;11836:67;;11757:154;:::o;10835:197::-;10940:4;10962:40;10972:10;10984:9;10995:6;10962:9;:40::i;25823:157::-;25929:7;;25922:50;;-1:-1:-1;;;25922:50:0;;8954:42;25922:50;;;7406:51:1;7473:18;;;7466:34;;;-1:-1:-1;;;;;25929:7:0;;;;25922:24;;7379:18:1;;25922:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;13538:764::-;4502:4;4537:5;-1:-1:-1;;;;;4537:5:0;4397:10;4526:16;4381:38;;;;-1:-1:-1;;;4381:38:0;;;;;;;:::i;:::-;13811:12:::1;:25:::0;;;13847:12:::1;:25:::0;;;13883:7:::1;:15:::0;;;13909:10:::1;:21:::0;;;13941:14:::1;:29:::0;;;13981:8:::1;:17:::0;;;14009:7:::1;:15:::0;;;14035:11:::1;:20:::0;;;14100:11:::1;::::0;:18:::1;::::0;14116:1:::1;14100:15;:18::i;:::-;14088:8;;:30;;:80;;;;-1:-1:-1::0;14150:11:0::1;::::0;:18:::1;::::0;14166:1:::1;14150:15;:18::i;:::-;14139:7;;:29;;14088:80;:134;;;;-1:-1:-1::0;14204:11:0::1;::::0;:18:::1;::::0;14220:1:::1;14204:15;:18::i;:::-;14189:11;;:33;;14088:134;14066:228;;;::::0;-1:-1:-1;;;14066:228:0;;8310:2:1;14066:228:0::1;::::0;::::1;8292:21:1::0;8349:2;8329:18;;;8322:30;8388:34;8368:18;;;8361:62;-1:-1:-1;;;8439:18:1;;;8432:42;8491:19;;14066:228:0::1;8108:408:1::0;14066:228:0::1;13538:764:::0;;;;;;;;:::o;4705:136::-;4502:4;4537:5;-1:-1:-1;;;;;4537:5:0;4397:10;4526:16;4381:38;;;;-1:-1:-1;;;4381:38:0;;;;;;;:::i;:::-;4781:5:::1;:11:::0;;-1:-1:-1;;;;;;4781:11:0::1;-1:-1:-1::0;;;;;4781:11:0;::::1;::::0;;::::1;::::0;;;4808:25:::1;::::0;1871:51:1;;;4808:25:0::1;::::0;1859:2:1;1844:18;4808:25:0::1;;;;;;;4705:136:::0;:::o;21663:369::-;-1:-1:-1;;;;;21790:19:0;;21782:68;;;;-1:-1:-1;;;21782:68:0;;8939:2:1;21782:68:0;;;8921:21:1;8978:2;8958:18;;;8951:30;9017:34;8997:18;;;8990:62;-1:-1:-1;;;9068:18:1;;;9061:34;9112:19;;21782:68:0;8737:400:1;21782:68:0;-1:-1:-1;;;;;21869:21:0;;21861:68;;;;-1:-1:-1;;;21861:68:0;;9344:2:1;21861:68:0;;;9326:21:1;9383:2;9363:18;;;9356:30;9422:34;9402:18;;;9395:62;-1:-1:-1;;;9473:18:1;;;9466:32;9515:19;;21861:68:0;9142:398:1;21861:68:0;-1:-1:-1;;;;;21940:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;21992:32;;2079:25:1;;;21992:32:0;;2052:18:1;21992:32:0;;;;;;;21663:369;;;:::o;22340:545::-;22428:1;22419:6;:10;:45;;;;-1:-1:-1;;;;;;22433:19:0;;;;;;:6;:19;;;;;:26;:31;22419:45;22415:222;;;27797:12;:19;;-1:-1:-1;;;;;27763:31:0;;;;;;:18;:31;;;;;:53;;;27827:30;;;;;;;;;;;;;-1:-1:-1;;;;;;27827:30:0;;;;;;22415:222;;;22533:11;;:45;;;;-1:-1:-1;;;;;;22548:19:0;;22577:1;22548:19;;;:6;:19;;;;;:26;:30;;22533:45;22529:108;;;22595:30;22613:11;22595:17;:30::i;:::-;-1:-1:-1;;;;;22677:19:0;;;;;;:6;:19;;;;;:26;22661:11;;:55;;22709:6;;22661:43;;:15;:43::i;:::-;:47;;:55::i;:::-;22647:11;:69;-1:-1:-1;;;;;22727:19:0;;;;;;:6;:19;;;;;:35;;;22809:68;22756:6;22809:16;:68::i;:::-;-1:-1:-1;;;;;22773:19:0;;;;;;;:6;:19;;;;;:33;;:104;;;;-1:-1:-1;22340:545:0:o;12475:1055::-;12598:37;12609:6;12617:9;12628:6;12598:10;:37::i;:::-;12646:38;12666:6;12674:9;12646:19;:38::i;:::-;12695:41;12710:6;12718:9;12729:6;12695:14;:41::i;:::-;12747:35;12764:6;12772:9;12747:16;:35::i;:::-;12793:39;12806:6;12814:9;12825:6;12793:12;:39::i;:::-;12843:27;12852:6;12860:9;12843:8;:27::i;:::-;-1:-1:-1;;;;;12901:17:0;;;;;;:9;:17;;;;;;:29;;12923:6;12901:21;:29::i;:::-;-1:-1:-1;;;;;12881:17:0;;;;;;:9;:17;;;;;:49;;;;12966:32;12891:6;12988:9;12966:13;:32::i;:::-;:104;;13064:6;12966:104;;;13014:34;13022:6;13030:9;13041:6;13014:7;:34::i;:::-;-1:-1:-1;;;;;13104:20:0;;;;;;:9;:20;;;;;;12941:129;;-1:-1:-1;13104:40:0;;12941:129;13104:24;:40::i;:::-;-1:-1:-1;;;;;13081:20:0;;;;;;;:9;:20;;;;;;;:63;;;;13160:43;;;;;;;;;;13188:14;2079:25:1;;2067:2;2052:18;;1933:177;13160:43:0;;;;;;;;-1:-1:-1;;;;;13219:26:0;;;;;;:18;:26;;;;;;;;13214:95;;13262:35;13271:6;13279:17;13289:6;13279:9;:17::i;13262:35::-;-1:-1:-1;;;;;13324:29:0;;;;;;:18;:29;;;;;;;;13319:104;;13370:41;13379:9;13390:20;13400:9;13390;:20::i;13370:41::-;-1:-1:-1;;;;;13437:17:0;;13464:1;13437:17;;;:6;:17;;;;;:24;:28;13433:90;;13482:29;13501:9;13482:18;:29::i;:::-;12587:943;12475:1055;;;:::o;2359:240::-;2479:7;2540:12;2532:6;;;;2524:29;;;;-1:-1:-1;;;2524:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;2575:5:0;;;2359:240::o;27480:207::-;27571:7;27616:63;27648:30;;27616:27;27626:16;;27616:5;:9;;:27;;;;:::i;659:98::-;717:7;744:5;748:1;744;:5;:::i;26210:685::-;-1:-1:-1;;;;;26283:19:0;;;;;;:6;:19;;;;;:26;:31;;26279:70;;26210:685;:::o;26279:70::-;26359:14;26376:31;26395:11;26376:18;:31::i;:::-;26359:48;-1:-1:-1;26422:10:0;;26418:470;;26467:15;;:27;;26487:6;26467:19;:27::i;:::-;26449:15;:45;26516:7;;26509:45;;-1:-1:-1;;;26509:45:0;;-1:-1:-1;;;;;7424:32:1;;;26509:45:0;;;7406:51:1;7473:18;;;7466:34;;;26516:7:0;;;;26509:24;;7379:18:1;;26509:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;26569:30:0;;;;;;:17;:30;;;;;;;;26602:15;26569:48;;26668:6;:19;;;;;:51;;;:81;;26742:6;26668:73;:81::i;:::-;-1:-1:-1;;;;;26632:19:0;;;;;;:6;:19;;;;;:33;;;:117;;;;26835:26;26800:76;;:16;:76::i;765:98::-;823:7;850:5;854:1;850;:5;:::i;871:98::-;929:7;956:5;960:1;956;:5;:::i;25554:261::-;25720:9;;-1:-1:-1;;;;;25687:30:0;;25645:4;25687:30;;;:17;:30;;;;;;25645:4;;25732:15;;25687:42;;25720:9;25687:42;:::i;:::-;:60;:120;;;;;25798:9;;25764:31;25783:11;25764:18;:31::i;:::-;:43;25667:140;25554:261;-1:-1:-1;;25554:261:0:o;553:98::-;611:7;638:5;642:1;638;:5;:::i;27873:340::-;27989:12;28016:19;;:23;;28038:1;;28016:23;:::i;:::-;27989:61;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;27954:31:0;;;;;:18;:31;;;;;;;27941:45;;27989:61;;;;;27941:45;;;;;;:::i;:::-;;;;;;;;;;;;;:109;;-1:-1:-1;;;;;;27941:109:0;-1:-1:-1;;;;;27941:109:0;;;;;;28145:31;;;;;:18;:31;;;;;;;28107:19;;28145:31;;:18;;27941:45;;28107:23;;-1:-1:-1;;28107:23:0;:::i;:::-;28094:37;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;28094:37:0;28061:81;;;;;;;;;;;;;;;:115;;;;28187:18;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;28187:18:0;;;;;-1:-1:-1;;;;;;28187:18:0;;;;;;-1:-1:-1;27873:340:0:o;11919:548::-;-1:-1:-1;;;;;12057:20:0;;12049:70;;;;-1:-1:-1;;;12049:70:0;;10012:2:1;12049:70:0;;;9994:21:1;10051:2;10031:18;;;10024:30;10090:34;10070:18;;;10063:62;-1:-1:-1;;;10141:18:1;;;10134:35;10186:19;;12049:70:0;9810:401:1;12049:70:0;-1:-1:-1;;;;;12138:23:0;;12130:71;;;;-1:-1:-1;;;12130:71:0;;10418:2:1;12130:71:0;;;10400:21:1;10457:2;10437:18;;;10430:30;10496:34;10476:18;;;10469:62;-1:-1:-1;;;10547:18:1;;;10540:33;10590:19;;12130:71:0;10216:399:1;12130:71:0;12251:1;12234:6;:19;12212:110;;;;-1:-1:-1;;;12212:110:0;;10822:2:1;12212:110:0;;;10804:21:1;10861:2;10841:18;;;10834:30;10900:34;10880:18;;;10873:62;-1:-1:-1;;;10951:18:1;;;10944:39;11000:19;;12212:110:0;10620:405:1;12212:110:0;12365:17;12375:6;12365:9;:17::i;:::-;12355:6;:27;;12333:126;;;;-1:-1:-1;;;12333:126:0;;11232:2:1;12333:126:0;;;11214:21:1;11271:2;11251:18;;;11244:30;11310:34;11290:18;;;11283:62;-1:-1:-1;;;11361:18:1;;;11354:47;11418:19;;12333:126:0;11030:413:1;12333:126:0;11919:548;;;:::o;15465:240::-;-1:-1:-1;;;;;15582:19:0;;;;;;:11;:19;;;;;;;;15581:20;:47;;;;-1:-1:-1;;;;;;15606:22:0;;;;;;:11;:22;;;;;;;;15605:23;15581:47;15577:121;;;15653:14;;-1:-1:-1;;;15653:14:0;;;;15645:41;;;;-1:-1:-1;;;15645:41:0;;11650:2:1;15645:41:0;;;11632:21:1;11689:2;11669:18;;;11662:30;-1:-1:-1;;;11708:18:1;;;11701:44;11762:18;;15645:41:0;11448:338:1;15713:489:0;-1:-1:-1;;;;;15866:19:0;;;;;;:11;:19;;;;;;;;15865:20;:60;;;;-1:-1:-1;;;;;;15903:22:0;;;;;;:11;:22;;;;;;;;15902:23;15865:60;:103;;;;-1:-1:-1;15963:4:0;;-1:-1:-1;;;;;15942:26:0;;;15963:4;;15942:26;;15865:103;:146;;;;-1:-1:-1;;;;;;15985:26:0;;8863:42;15985:26;;15865:146;15847:348;;;16102:15;;-1:-1:-1;;;;;16065:20:0;;;;;;:9;:20;;;;;;:32;;16090:6;16065:24;:32::i;:::-;16064:53;;16038:145;;;;-1:-1:-1;;;16038:145:0;;11993:2:1;16038:145:0;;;11975:21:1;12032:2;12012:18;;;12005:30;12071:32;12051:18;;;12044:60;12121:18;;16038:145:0;11791:354:1;16210:185:0;16308:4;;-1:-1:-1;;;;;16295:17:0;;;16308:4;;16295:17;:41;;;;-1:-1:-1;;;;;;16317:19:0;;;;;;:11;:19;;;;;;;;16316:20;16295:41;16291:97;;;16374:1;16353:9;;:23;;;;;;;:::i;:::-;;;;-1:-1:-1;;16210:185:0;;:::o;16403:563::-;16549:4;;-1:-1:-1;;;;;16539:14:0;;;16549:4;;16539:14;16535:241;;16606:14;;16596:6;:24;;:68;;;-1:-1:-1;;;;;;16645:19:0;;;;;;:11;:19;;;;;;;;16596:68;:115;;;-1:-1:-1;;;;;;16689:22:0;;;;;;:11;:22;;;;;;;;16596:115;16570:194;;;;-1:-1:-1;;;16570:194:0;;12352:2:1;16570:194:0;;;12334:21:1;12391:2;12371:18;;;12364:30;-1:-1:-1;;;12410:18:1;;;12403:47;12467:18;;16570:194:0;12150:341:1;16570:194:0;16818:12;;16808:6;:22;;:62;;;-1:-1:-1;;;;;;16851:19:0;;;;;;:11;:19;;;;;;;;16808:62;:105;;;-1:-1:-1;;;;;;16891:22:0;;;;;;:11;:22;;;;;;;;16808:105;16786:172;;;;-1:-1:-1;;;16786:172:0;;12352:2:1;16786:172:0;;;12334:21:1;12391:2;12371:18;;;12364:30;-1:-1:-1;;;12410:18:1;;;12403:47;12467:18;;16786:172:0;12150:341:1;19593:212:0;19670:33;19685:6;19693:9;19670:14;:33::i;:::-;19666:132;;;19720:29;19735:13;;19720:14;:29::i;:::-;19784:1;19764:9;:22;19593:212;;:::o;19813:192::-;-1:-1:-1;;;;;19951:19:0;;19921:4;19951:19;;;:11;:19;;;;;;;;19950:20;:47;;;;-1:-1:-1;;;;;;;19975:22:0;;;;;:11;:22;;;;;;;;19974:23;;19813:192;-1:-1:-1;19813:192:0:o;20436:769::-;20556:7;20613:1;20580:30;20592:6;20600:9;20580:11;:30::i;:::-;:34;20576:598;;;20631:17;20651:91;20697:30;20709:6;20717:9;20697:11;:30::i;:::-;20662:11;;20651:23;;:6;;:10;:23::i;:91::-;20802:4;20784:24;;;;:9;:24;;;;;;20631:111;;-1:-1:-1;20784:39:0;;20631:111;20784:28;:39::i;:::-;20775:4;20757:24;;;;:9;:24;;;;;;;:66;;;;20843:42;;-1:-1:-1;;;;;20843:42:0;;;;;;;20875:9;2079:25:1;;2067:2;2052:18;;1933:177;20843:42:0;;;;;;;;20904:7;;:20;20900:220;;20945:159;20985:4;8863:42;21049:36;21077:7;;21049:23;21060:11;;21049:6;:10;;:23;;;;:::i;:36::-;20945:9;:159::i;:::-;21141:21;:6;21152:9;21141:10;:21::i;:::-;21134:28;;;;;20576:598;-1:-1:-1;21191:6:0;20436:769;-1:-1:-1;;20436:769:0:o;19142:443::-;19251:4;19273:19;19323:13;;19295:24;19313:4;19295:9;:24::i;:::-;19368:8;;19295:41;-1:-1:-1;19295:41:0;;-1:-1:-1;19368:8:0;;19367:9;:37;;;;-1:-1:-1;19393:11:0;;;;19367:37;:68;;;;-1:-1:-1;19421:14:0;;-1:-1:-1;;;19421:14:0;;;;19367:68;:105;;;;-1:-1:-1;;;;;;19453:19:0;;;;;;:11;:19;;;;;;;;19452:20;19367:105;:145;;;;-1:-1:-1;;;;;;19490:22:0;;;;;;:11;:22;;;;;;;;19489:23;19367:145;:179;;;;-1:-1:-1;19542:4:0;;-1:-1:-1;;;;;19529:17:0;;;19542:4;;19529:17;19367:179;:210;;;;-1:-1:-1;19563:14:0;19347:230;-1:-1:-1;;;19142:443:0:o;16974:1350::-;7941:4;7930:8;;:15;;;;;;;;;;;;;;;;;;17045:20:::1;17068:138;17204:1;17083:105;17163:10;;17083:57;17125:14;;17083:37;17107:12;;17083:19;17100:1;17083:12;;:16;;:19;;;;:::i;17068:138::-;17045:161;;17217:32;17252:66;17295:12;17252:24;17263:12;;17252:6;:10;;:24;;;;:::i;:66::-;17217:101:::0;-1:-1:-1;17329:14:0::1;17346:36;:6:::0;17217:101;17346:10:::1;:36::i;:::-;17329:53:::0;-1:-1:-1;17418:21:0::1;17450:24;17329:53:::0;17450:16:::1;:24::i;:::-;17485:20;17508:41;:21;17534:14:::0;17508:25:::1;:41::i;:::-;17485:64;;17560:19;17582:48;17599:30;17616:12;;17599;:16;;:30;;;;:::i;:::-;17582:12:::0;;:16:::1;:48::i;:::-;17560:70;;17641:29;17673;17689:12;;17673:11;:15;;:29;;;;:::i;:::-;17641:61:::0;-1:-1:-1;17717:34:0;;17713:128:::1;;17768:61;17781:24;17807:21;17768:12;:61::i;:::-;17900:12;::::0;17851:23:::1;::::0;17877:36:::1;::::0;:18:::1;:11:::0;17893:1:::1;17877:15;:18::i;:36::-;17851:62:::0;-1:-1:-1;17928:19:0;;17924:102:::1;;17964:50;::::0;9138:42:::1;::::0;17964:50;::::1;;;::::0;17998:15;;17964:50:::1;::::0;;;17998:15;9138:42;17964:50;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;17924:102;18083:10;::::0;18036:21:::1;::::0;18060:34:::1;::::0;:18:::1;:11:::0;18076:1:::1;18060:15;:18::i;:34::-;18036:58:::0;-1:-1:-1;18109:17:0;;18105:77:::1;;18143:27;18156:13;18143:12;:27::i;:::-;18196:21;:34:::0;18192:125:::1;;18247:58;::::0;9047:42:::1;::::0;18283:21:::1;18247:58:::0;::::1;;;::::0;::::1;::::0;;;18283:21;9047:42;18247:58;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;18192:125;-1:-1:-1::0;;7968:8:0;:16;;-1:-1:-1;;7968:16:0;;;-1:-1:-1;;;;;;;;16974:1350:0:o;20013:415::-;-1:-1:-1;;;;;20148:13:0;;20119:7;20148:13;;;:5;:13;;;;;;;;;:33;;-1:-1:-1;;;;;;20165:16:0;;;;;;:5;:16;;;;;;;;20148:33;20144:102;;;20205:11;;:29;;20229:3;20205:15;:29::i;:::-;20198:36;;;;20144:102;20273:4;;-1:-1:-1;;;;;20273:4:0;;;20260:17;;;;20256:64;;-1:-1:-1;20301:7:0;;20294:14;;20256:64;20344:4;;-1:-1:-1;;;;;20344:4:0;;;20334:14;;;;20330:62;;-1:-1:-1;20372:8:0;;20365:15;;20330:62;-1:-1:-1;20409:11:0;;20013:415;;;;:::o;18690:444::-;18780:16;;;18794:1;18780:16;;;;;;;;18756:21;;18780:16;;;;;;;;;;-1:-1:-1;18780:16:0;18756:40;;18825:4;18807;18812:1;18807:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;18807:23:0;;;:7;;;;;;;;;;:23;;;;18851:6;;:13;;;-1:-1:-1;;;18851:13:0;;;;:6;;;;;:11;;:13;;;;;18807:7;;18851:13;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18841:4;18846:1;18841:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;18841:23:0;;;:7;;;;;;;;;:23;18907:6;;18875:53;;18892:4;;18907:6;18916:11;18875:8;:53::i;:::-;18939:6;;:187;;-1:-1:-1;;;18939:187:0;;-1:-1:-1;;;;;18939:6:0;;;;:57;;:187;;19011:11;;18939:6;;19053:4;;19080;;19100:15;;18939:187;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18745:389;18690:444;:::o;18332:350::-;18445:6;;18413:53;;18430:4;;-1:-1:-1;;;;;18445:6:0;18454:11;18413:8;:53::i;:::-;18477:6;;:197;;-1:-1:-1;;;18477:197:0;;18540:4;18477:197;;;14278:34:1;14328:18;;;14321:34;;;18477:6:0;14371:18:1;;;14364:34;;;14414:18;;;14407:34;8954:42:0;14457:19:1;;;14450:44;18648:15:0;14510:19:1;;;14503:35;-1:-1:-1;;;;;18477:6:0;;;;:22;;18507:9;;14212:19:1;;18477:197:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;18332:350;;:::o;22893:952::-;22985:7;;22978:40;;-1:-1:-1;;;22978:40:0;;23012:4;22978:40;;;1871:51:1;22954:21:0;;-1:-1:-1;;;;;22985:7:0;;22978:25;;1844:18:1;;22978:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23053:16;;;23067:1;23053:16;;;;;;;;22954:64;;-1:-1:-1;23029:21:0;;23053:16;;;;;;;;;;-1:-1:-1;;23090:6:0;;:13;;;-1:-1:-1;;;23090:13:0;;;;23029:40;;-1:-1:-1;;;;;;23090:6:0;;;;:11;;-1:-1:-1;23090:13:0;;;;;;;;;;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23080:4;23085:1;23080:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;23080:23:0;;;:7;;;;;;;;;:23;23132:7;;23114;;23132;;;23114:4;;23132:7;;23114;;;;;;:::i;:::-;-1:-1:-1;;;;;23114:26:0;;;:7;;;;;;;;;:26;23151:6;;:140;;-1:-1:-1;;;23151:140:0;;:6;;;:57;;23230:9;;23151:140;;:6;;23254:4;;23268;;23275:15;;23151:140;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;23334:7:0;;23353:4;;23327:31;;-1:-1:-1;;;23327:31:0;;-1:-1:-1;;;;;23353:4:0;;;23327:31;;;1871:51:1;23302:22:0;;-1:-1:-1;23334:7:0;;;-1:-1:-1;23327:25:0;;-1:-1:-1;1844:18:1;;23327:31:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23400:7;;23393:40;;-1:-1:-1;;;23393:40:0;;23427:4;23393:40;;;1871:51:1;23302:56:0;;-1:-1:-1;23369:21:0;;-1:-1:-1;;;;;23400:7:0;;;;23393:25;;1844:18:1;;23393:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23369:64;-1:-1:-1;23444:14:0;23461:32;23369:64;23479:13;23461:17;:32::i;:::-;23444:49;-1:-1:-1;23504:21:0;23528:103;23587:33;:13;23605:14;23587:17;:33::i;:::-;23535:7;;23528:40;;-1:-1:-1;;;23528:40:0;;23562:4;23528:40;;;1871:51:1;-1:-1:-1;;;;;23535:7:0;;;;23528:25;;1844:18:1;;23528:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:103::-;23504:127;-1:-1:-1;23658:44:0;23676:25;:6;23504:127;23676:10;:25::i;:::-;23658:13;;;:17;:44::i;:::-;23642:13;:60;23814:11;;23767:30;;23732:105;;23767:59;;:42;;23802:6;23767:34;:42::i;:59::-;23732:16;;;:20;:105::i;:::-;23713:16;:124;-1:-1:-1;;;;;;;22893:952:0:o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;622:70;567:131;:::o;703:315::-;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1215:118::-;1301:5;1294:13;1287:21;1280:5;1277:32;1267:60;;1323:1;1320;1313:12;1338:382;1403:6;1411;1464:2;1452:9;1443:7;1439:23;1435:32;1432:52;;;1480:1;1477;1470:12;1432:52;1519:9;1506:23;1538:31;1563:5;1538:31;:::i;:::-;1588:5;-1:-1:-1;1645:2:1;1630:18;;1617:32;1658:30;1617:32;1658:30;:::i;:::-;1707:7;1697:17;;;1338:382;;;;;:::o;2115:456::-;2192:6;2200;2208;2261:2;2249:9;2240:7;2236:23;2232:32;2229:52;;;2277:1;2274;2267:12;2229:52;2316:9;2303:23;2335:31;2360:5;2335:31;:::i;:::-;2385:5;-1:-1:-1;2442:2:1;2427:18;;2414:32;2455:33;2414:32;2455:33;:::i;:::-;2115:456;;2507:7;;-1:-1:-1;;;2561:2:1;2546:18;;;;2533:32;;2115:456::o;2576:247::-;2635:6;2688:2;2676:9;2667:7;2663:23;2659:32;2656:52;;;2704:1;2701;2694:12;2656:52;2743:9;2730:23;2762:31;2787:5;2762:31;:::i;3017:316::-;3094:6;3102;3110;3163:2;3151:9;3142:7;3138:23;3134:32;3131:52;;;3179:1;3176;3169:12;3131:52;-1:-1:-1;;3202:23:1;;;3272:2;3257:18;;3244:32;;-1:-1:-1;3323:2:1;3308:18;;;3295:32;;3017:316;-1:-1:-1;3017:316:1:o;3338:383::-;3415:6;3423;3431;3484:2;3472:9;3463:7;3459:23;3455:32;3452:52;;;3500:1;3497;3490:12;3452:52;3536:9;3523:23;3513:33;;3596:2;3585:9;3581:18;3568:32;3609:31;3634:5;3609:31;:::i;3726:180::-;3785:6;3838:2;3826:9;3817:7;3813:23;3809:32;3806:52;;;3854:1;3851;3844:12;3806:52;-1:-1:-1;3877:23:1;;3726:180;-1:-1:-1;3726:180:1:o;4235:388::-;4303:6;4311;4364:2;4352:9;4343:7;4339:23;4335:32;4332:52;;;4380:1;4377;4370:12;4332:52;4419:9;4406:23;4438:31;4463:5;4438:31;:::i;:::-;4488:5;-1:-1:-1;4545:2:1;4530:18;;4517:32;4558:33;4517:32;4558:33;:::i;4628:661::-;4750:6;4758;4766;4774;4782;4790;4798;4806;4859:3;4847:9;4838:7;4834:23;4830:33;4827:53;;;4876:1;4873;4866:12;4827:53;-1:-1:-1;;4899:23:1;;;4969:2;4954:18;;4941:32;;-1:-1:-1;5020:2:1;5005:18;;4992:32;;5071:2;5056:18;;5043:32;;-1:-1:-1;5122:3:1;5107:19;;5094:33;;-1:-1:-1;5174:3:1;5159:19;;5146:33;;-1:-1:-1;5226:3:1;5211:19;;5198:33;;-1:-1:-1;5278:3:1;5263:19;5250:33;;-1:-1:-1;4628:661:1;-1:-1:-1;4628:661:1:o;5554:329::-;5756:2;5738:21;;;5795:1;5775:18;;;5768:29;-1:-1:-1;;;5828:2:1;5813:18;;5806:36;5874:2;5859:18;;5554:329::o;5888:127::-;5949:10;5944:3;5940:20;5937:1;5930:31;5980:4;5977:1;5970:15;6004:4;6001:1;5994:15;6020:168;6093:9;;;6124;;6141:15;;;6135:22;;6121:37;6111:71;;6162:18;;:::i;6193:217::-;6233:1;6259;6249:132;;6303:10;6298:3;6294:20;6291:1;6284:31;6338:4;6335:1;6328:15;6366:4;6363:1;6356:15;6249:132;-1:-1:-1;6395:9:1;;6193:217::o;6830:127::-;6891:10;6886:3;6882:20;6879:1;6872:31;6922:4;6919:1;6912:15;6946:4;6943:1;6936:15;6962:135;7001:3;7022:17;;;7019:43;;7042:18;;:::i;:::-;-1:-1:-1;7089:1:1;7078:13;;6962:135::o;7102:125::-;7167:9;;;7188:10;;;7185:36;;;7201:18;;:::i;7511:245::-;7578:6;7631:2;7619:9;7610:7;7606:23;7602:32;7599:52;;;7647:1;7644;7637:12;7599:52;7679:9;7673:16;7698:28;7720:5;7698:28;:::i;9545:128::-;9612:9;;;9633:11;;;9630:37;;;9647:18;;:::i;9678:127::-;9739:10;9734:3;9730:20;9727:1;9720:31;9770:4;9767:1;9760:15;9794:4;9791:1;9784:15;12628:251;12698:6;12751:2;12739:9;12730:7;12726:23;12722:32;12719:52;;;12767:1;12764;12757:12;12719:52;12799:9;12793:16;12818:31;12843:5;12818:31;:::i;12884:461::-;12937:3;12975:5;12969:12;13002:6;12997:3;12990:19;13028:4;13057:2;13052:3;13048:12;13041:19;;13094:2;13087:5;13083:14;13115:1;13125:195;13139:6;13136:1;13133:13;13125:195;;;13204:13;;-1:-1:-1;;;;;13200:39:1;13188:52;;13260:12;;;;13295:15;;;;13236:1;13154:9;13125:195;;;-1:-1:-1;13336:3:1;;12884:461;-1:-1:-1;;;;;12884:461:1:o;13350:582::-;13649:6;13638:9;13631:25;13692:6;13687:2;13676:9;13672:18;13665:34;13735:3;13730:2;13719:9;13715:18;13708:31;13612:4;13756:57;13808:3;13797:9;13793:19;13785:6;13756:57;:::i;:::-;-1:-1:-1;;;;;13849:32:1;;;;13844:2;13829:18;;13822:60;-1:-1:-1;13913:3:1;13898:19;13891:35;13748:65;13350:582;-1:-1:-1;;;13350:582:1:o;14549:306::-;14637:6;14645;14653;14706:2;14694:9;14685:7;14681:23;14677:32;14674:52;;;14722:1;14719;14712:12;14674:52;14751:9;14745:16;14735:26;;14801:2;14790:9;14786:18;14780:25;14770:35;;14845:2;14834:9;14830:18;14824:25;14814:35;;14549:306;;;;;:::o;14860:184::-;14930:6;14983:2;14971:9;14962:7;14958:23;14954:32;14951:52;;;14999:1;14996;14989:12;14951:52;-1:-1:-1;15022:16:1;;14860:184;-1:-1:-1;14860:184:1:o;15049:510::-;15320:6;15309:9;15302:25;15363:3;15358:2;15347:9;15343:18;15336:31;15283:4;15384:57;15436:3;15425:9;15421:19;15413:6;15384:57;:::i;:::-;-1:-1:-1;;;;;15477:32:1;;;;15472:2;15457:18;;15450:60;-1:-1:-1;15541:2:1;15526:18;15519:34;15376:65;15049:510;-1:-1:-1;;15049:510:1:o

Swarm Source

ipfs://8acba36db94b6b7c3877c513c72433188e6dab0c5df18843856aa2f916f128d5
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.