ETH Price: $3,895.11 (-0.48%)

Token

ERC-20: ChadCoin (CHAD)
 

Overview

Max Total Supply

1,000,000,000 CHAD

Holders

282

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
0.000000001 CHAD

Value
$0.00
0x2AA8a19A3F37cb7878d8A8f46B6654339bB4d590
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:
ChadCoin

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 2022-10-19
*/

/*
$CHAD is here to give back power to the people.
A movement of enthusiast who share the same values and follow the same dreams.

Important links 

Website: https://www.chadcoin.xyz

Telegram: https://t.me/chadcoinportal

Medium: https://medium.com/@Chadcoin

Twitter: twitter.com/chadcoinxyz

*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.17;

library Address {
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, "Address: low-level call failed");
    }

    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        if (success) {
            if (returndata.length == 0) {
                // only check isContract if the call was successful and the return data is empty
                // otherwise we already know that it was a contract
                require(isContract(target), "Address: call to non-contract");
            }
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    function _revert(bytes memory returndata, string memory errorMessage) private pure {
        // Look for revert reason and bubble it up if present
        if (returndata.length > 0) {
            // The easiest way to bubble the revert reason is using memory via assembly
            /// @solidity memory-safe-assembly
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert(errorMessage);
        }
    }
}

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

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

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

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

    function totalSupply() external view returns (uint256);

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

    function transfer(address to, 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 from,
        address to,
        uint256 amount
    ) external returns (bool);
}

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

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

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

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

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

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

abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        _transferOwnership(_msgSender());
    }

    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

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

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

contract DividendDistributor {

    address _mainToken;

    struct Share {
        uint256 amount;
        uint256 totalExcluded;
        uint256 totalRealised;
    }
    IERC20 TOKEN;
    address ETH;
    IDEXRouter router;

    address[] public shareholders;
    mapping (address => uint256) public shareholderIndexes;
    mapping (address => uint256) public 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 = 1 hours;
    uint256 public minDistribution = 1000000 * (10 ** 9);
    uint256 public gas = 500000;
    
    uint256 currentIndex;

    bool initialized;
    modifier initialization() {
        require(!initialized);
        _;
        initialized = true;
    }

    modifier onlyToken() {
        require(msg.sender == _mainToken || _mainToken == address(0)); _;
    }

    constructor (address routerAddress, address _reflectionToken) {
        router = IDEXRouter(routerAddress);
        TOKEN = IERC20(_reflectionToken);
        ETH = router.WETH();
        _mainToken = msg.sender;
    }

    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution, uint256 _gas) external onlyToken {
        minPeriod = _minPeriod;
        minDistribution = _minDistribution;
        gas = _gas;
    }

    function setShare(address shareholder, uint256 amount) external onlyToken {
        if(amount > 0 && shares[shareholder].amount == 0){
            addShareholder(shareholder);
        }else if(amount == 0 && shares[shareholder].amount > 0){
            removeShareholder(shareholder);
        }
        
        if(shares[shareholder].amount > 0){
            distributeDividend(shareholder);
        }
        
        totalShares = (totalShares - shares[shareholder].amount) + amount;
        shares[shareholder].amount = amount;
        
        shares[shareholder].totalExcluded = getCumulativeDividends(amount);
    }

    function deposit() external payable {
        bool native = address(TOKEN) == address(0);
        uint256 balanceBefore = native ? address(this).balance : TOKEN.balanceOf(address(this));

        if (!native) {
            address[] memory path = new address[](2);
            path[0] = ETH;
            path[1] = address(TOKEN);

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

        uint256 amount = native ? msg.value : TOKEN.balanceOf(address(this)) - balanceBefore;

        totalDividends = totalDividends + amount;
        dividendsPerShare = dividendsPerShare + (dividendsPerShareAccuracyFactor * amount) / totalShares;
    }

    function process() public onlyToken {
        uint256 shareholderCount = shareholders.length;

        if(shareholderCount == 0) { return; }

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

        uint256 iterations = 0;

        while(gasUsed < gas && iterations < shareholderCount) {
            if(currentIndex >= shareholderCount){
                currentIndex = 0;
            }
            
            if(shouldDistribute(shareholders[currentIndex])){
                distributeDividend(shareholders[currentIndex]);
            }

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

    function shouldDistribute(address shareholder) internal view returns (bool) {
        return shareholderClaims[shareholder] + minPeriod < block.timestamp
                && getUnpaidEarnings(shareholder) > minDistribution;
    }
    
    function getClaimTime(address shareholder) external view returns (uint256) {
        if (shareholderClaims[shareholder] + minPeriod <= block.timestamp)
            return 0;
        else
            return (shareholderClaims[shareholder] + minPeriod) - block.timestamp;
    }

    function distributeDividend(address shareholder) internal {
        if(shares[shareholder].amount == 0){ return; }
        
        uint256 unpaidEarnings = getUnpaidEarnings(shareholder);
        if(unpaidEarnings > 0){
            uint256 previousExcluded = shares[shareholder].totalExcluded;

            totalDistributed += unpaidEarnings;
            shareholderClaims[shareholder] = block.timestamp;
            shares[shareholder].totalRealised += unpaidEarnings;
            shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);

            if(address(TOKEN) == address(0)) {
                (bool sent, ) = shareholder.call{value: unpaidEarnings}("");
                if (!sent) {
                    totalDistributed -= unpaidEarnings;
                    shares[shareholder].totalRealised -= unpaidEarnings;
                    shares[shareholder].totalExcluded = previousExcluded;
                }
            } else {
                TOKEN.transfer(shareholder, unpaidEarnings);
            }
        }
    }

    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 - shareholderTotalExcluded;
    }
    
    function getPaidDividends(address shareholder) external view returns (uint256) {
        return shares[shareholder].totalRealised;
    }

    function getCumulativeDividends(uint256 share) internal view returns (uint256) {
        if(share == 0){ return 0; }
        return (share * dividendsPerShare) / dividendsPerShareAccuracyFactor;
    }

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

    function countShareholders() external view returns (uint256) {
        return shareholders.length;
    }
    
    function getTotalRewarded() external view returns (uint256) {
        return totalDistributed;
    }

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

interface IAntiSnipe {
  function setTokenOwner(address owner, address pair) external;

  function onPreTransferCheck(
    address sender,
    address from,
    address to,
    uint256 amount
  ) external returns (bool checked);
}

contract ChadCoin is IERC20, Ownable {
    using Address for address;
    
    address constant DEAD = 0x000000000000000000000000000000000000dEaD;

    string constant _name = "ChadCoin";
    string constant _symbol = "CHAD";
    uint8 constant _decimals = 9;

    uint256 _totalSupply = 1_000_000_000 * (10 ** _decimals);

    uint256 _maxTxAmount = 10; //1%
    uint256 _maxWalletSize = 20; //2%

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

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

    uint256 marketingFee = 20;
    uint256 marketingSellFee = 30;
    uint256 communityAwardFee = 0;
    uint256 communityAwardSellFee = 10;
    uint256 USDCRewardFee = 20;
    uint256 USDCRewardSellFee = 20;
    uint256 liquidityFee = 10;
    uint256 liquiditySellFee = 10;
    uint256 totalBuyFee = marketingFee + USDCRewardFee + liquidityFee + communityAwardFee;
    uint256 totalSellFee = marketingSellFee + USDCRewardSellFee + liquiditySellFee + communityAwardSellFee;
    uint256 feeDenominator = 1000;

    uint256 antiDumpTax = 200;
    uint256 antiDumpPeriod = 30 minutes;
    uint256 antiDumpThreshold = 21;
    bool antiDumpReserve0 = true;

    address public constant liquidityReceiver = DEAD;
    address payable public immutable marketingReceiver;
    address payable public immutable communityReceiver;

    uint256 targetLiquidity = 10;
    uint256 targetLiquidityDenominator = 100;

    DividendDistributor public rewards;
    bool public autoProcess = false;

    IDEXRouter public immutable router;
    
    address constant routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;

    mapping (address => bool) liquidityPools;
    mapping (address => bool) liquidityProviders;

    address public pair;

    uint256 public launchedAt;
    uint256 public launchedTime;
    uint256 public deadBlocks;
    bool startBullRun = false;
 
    IAntiSnipe public antisnipe;
    bool public protectionEnabled = true;
    bool public protectionDisabled = false;

    bool public swapEnabled = true;
    uint256 public swapThreshold = _totalSupply / 400; //0.25%
    uint256 public swapMinimum = _totalSupply / 10000; //0.01%
    uint256 public maxSwapPercent = 75;

    uint256 public unlocksAt;
    address public locker;

    bool inSwap;
    modifier swapping() { inSwap = true; _; inSwap = false; }

    constructor (address _liquidityProvider, address _marketingWallet, address _communityWallet) {
        marketingReceiver = payable(_marketingWallet);
        communityReceiver = payable(_communityWallet);

        router = IDEXRouter(routerAddress);
        _allowances[_liquidityProvider][routerAddress] = type(uint256).max;
        _allowances[address(this)][routerAddress] = type(uint256).max;
        
        isFeeExempt[_liquidityProvider] = true;
        liquidityProviders[_liquidityProvider] = true;

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

        isTxLimitExempt[address(this)] = true;
        isTxLimitExempt[_liquidityProvider] = true;
        isTxLimitExempt[routerAddress] = true;

        rewards = new DividendDistributor(routerAddress, 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48);
        isDividendExempt[address(rewards)] = true;

        _balances[_liquidityProvider] = _totalSupply;
        emit Transfer(address(0), _liquidityProvider, _totalSupply);
    }

    receive() external payable { }

    function totalSupply() external view override returns (uint256) { return _totalSupply; }
    function decimals() external pure returns (uint8) { return _decimals; }
    function symbol() external pure returns (string memory) { return _symbol; }
    function name() external pure returns (string memory) { return _name; }
    function getOwner() external view returns (address) { return owner(); }
    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) {
        _approve(msg.sender, spender, amount);
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool) {
        _approve(msg.sender, spender, _allowances[msg.sender][spender] + addedValue);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) external virtual returns (bool) {
        uint256 currentAllowance = _allowances[msg.sender][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below address(0)");
        unchecked {
            _approve(msg.sender, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    function _approve(address owner, address spender, uint256 amount) internal virtual {
        require(owner != address(0), "ERC20: approve from the address(0) address");
        require(spender != address(0), "ERC20: approve to the address(0) address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function approveMax(address spender) external returns (bool) {
        return approve(spender, type(uint256).max);
    }

    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] != type(uint256).max){
            _allowances[sender][msg.sender] = _allowances[sender][msg.sender] - amount;
        }

        return _transferFrom(sender, recipient, amount);
    }

    function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {
        require(_balances[sender] >= amount, "ERC20: transfer amount exceeds balance");
        require(amount > 0, "No tokens transferred");
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        if(inSwap){ return _basicTransfer(sender, recipient, amount); }

        checkTxLimit(sender, amount);
        
        if (!liquidityPools[recipient] && recipient != DEAD) {
            if (!isTxLimitExempt[recipient]) checkWalletLimit(recipient, amount);
        }

        if(!launched()){ require(liquidityProviders[sender] || liquidityProviders[recipient], "Contract not launched yet."); }

        if(!liquidityPools[sender] && shouldTakeFee(sender) && _balances[sender] - amount == 0) {
            amount -= 1;
        }

        _balances[sender] -= amount;

        uint256 amountReceived = shouldTakeFee(sender) && shouldTakeFee(recipient) ? takeFee(sender, recipient, amount) : amount;
        
        if(shouldSwapBack(sender, recipient)){ if (amount > 0) swapBack(amount); }
        
        if(recipient != DEAD)
            _balances[recipient] += amountReceived;
        else
            _totalSupply -= amountReceived;
            
        if (launched() && protectionEnabled && shouldTakeFee(sender))
            antisnipe.onPreTransferCheck(msg.sender, sender, recipient, amount);

        if(!isDividendExempt[sender]){ try rewards.setShare(sender, _balances[sender]) {} catch {} }
        if(!isDividendExempt[recipient]){ try rewards.setShare(recipient, _balances[recipient]) {} catch {} }
        if(autoProcess) { try rewards.process() {} catch {} }

        emit Transfer(sender, (recipient != DEAD ? recipient : address(0)), amountReceived);
        return true;
    }

    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        _balances[sender] -= amount;
        _balances[recipient] += amount;
        emit Transfer(sender, recipient, amount);
        return true;
    }
    
    function checkWalletLimit(address recipient, uint256 amount) internal view {
        uint256 walletLimit = getMaximumWallet();
        require(_balances[recipient] + amount <= walletLimit, "Transfer amount exceeds the bag size.");
    }

    function checkTxLimit(address sender, uint256 amount) internal view {
        require(amount <= getTransactionLimit() || isTxLimitExempt[sender], "TX Limit Exceeded");
    }

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

    function getTotalFee(bool selling) public view returns (uint256) {
        if(launchedAt + deadBlocks > block.number){ return feeDenominator - 1; }
        return (selling ? totalSellFee : totalBuyFee);
    }

    function checkImpactEstimate(uint256 amount) public view returns (uint256) {
        (uint112 reserve0, uint112 reserve1,) = IDEXPair(pair).getReserves();
        return amount * 1000 / ((antiDumpReserve0 ? reserve0 : reserve1) + amount);
    }

    function takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) {
        uint256 feeAmount = 0;
        if(liquidityPools[recipient] && antiDumpTax > 0) {
            uint256 impactEstimate = checkImpactEstimate(amount);
            
            if (block.timestamp > lastSell[sender] + antiDumpPeriod) {
                lastSell[sender] = block.timestamp;
                lastSellAmount[sender] = 0;
            }
            
            lastSellAmount[sender] += impactEstimate;
            
            if (lastSellAmount[sender] >= antiDumpThreshold) {
                feeAmount = ((amount * totalSellFee * antiDumpTax) / 100) / feeDenominator;
            }
        }

        if (feeAmount == 0)
            feeAmount = (amount * getTotalFee(liquidityPools[recipient])) / feeDenominator;

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

        return amount - feeAmount;
    }

    function shouldSwapBack(address sender, address recipient) internal view returns (bool) {
        return !liquidityPools[sender]
        && !isFeeExempt[sender]
        && !inSwap
        && swapEnabled
        && liquidityPools[recipient]
        && _balances[address(this)] >= swapMinimum &&
        totalBuyFee + totalSellFee > 0;
    }

    function swapBack(uint256 amount) internal swapping {
        uint256 totalFee = totalBuyFee + totalSellFee;
        uint256 amountToSwap = amount - (amount * maxSwapPercent / 100) < swapThreshold ? amount * maxSwapPercent / 100 : swapThreshold;
        if (_balances[address(this)] < amountToSwap) amountToSwap = _balances[address(this)];
        
        uint256 dynamicLiquidityFee = isOverLiquified(targetLiquidity, targetLiquidityDenominator) ? 0 : liquidityFee + liquiditySellFee;
        uint256 amountToLiquify = ((amountToSwap * dynamicLiquidityFee) / totalFee) / 2;
        amountToSwap -= amountToLiquify;

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();
        
        //Guaranteed swap desired to prevent trade blockages
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amountToSwap,
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 contractBalance = address(this).balance;
        uint256 totalETHFee = totalFee - dynamicLiquidityFee / 2;

        uint256 amountLiquidity = (contractBalance * dynamicLiquidityFee) / totalETHFee / 2;
        uint256 amountRewards = (contractBalance * (USDCRewardFee + USDCRewardSellFee)) / totalETHFee;
        uint256 amountCommunity = (contractBalance * (communityAwardFee + communityAwardSellFee)) / totalETHFee;
        uint256 amountMarketing = contractBalance - (amountLiquidity + amountRewards + amountCommunity);

        if(amountToLiquify > 0) {
            //Guaranteed swap desired to prevent trade blockages, return values ignored
            router.addLiquidityETH{value: amountLiquidity}(
                address(this),
                amountToLiquify,
                0,
                0,
                liquidityReceiver,
                block.timestamp
            );
            emit AutoLiquify(amountLiquidity, amountToLiquify);
        }
        
        if (amountMarketing > 0) {
            (bool sentMarketing, ) = marketingReceiver.call{value: amountMarketing}("");
            if(!sentMarketing) {
                //Failed to transfer to marketing wallet
            }
        }

        if (amountRewards > 0)
            try rewards.deposit{value: amountRewards}() {} catch {}
            
        if (amountCommunity > 0) {
            (bool sentCommunity, ) = communityReceiver.call{value: amountCommunity}("");
            if(!sentCommunity) {
                //Failed to transfer to community wallet
            }
        }

    }

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

    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply - (balanceOf(DEAD) + balanceOf(address(0)));
    }

    function getLiquidityBacking(uint256 accuracy) public view returns (uint256) {
        return (accuracy * balanceOf(pair)) / getCirculatingSupply();
    }

    function isOverLiquified(uint256 target, uint256 accuracy) public view returns (bool) {
        return getLiquidityBacking(accuracy) > target;
    }

    function transferOwnership(address newOwner) public virtual override onlyOwner {
        require(owner() == _msgSender(), "Caller is not authorized");
        isFeeExempt[owner()] = false;
        isTxLimitExempt[owner()] = false;
        liquidityProviders[owner()] = false;
        _allowances[owner()][routerAddress] = 0;
        super.transferOwnership(newOwner);
    }

    function lockContract() external onlyOwner {
        require(locker == address(0), "Contract already locked");
        unlocksAt = block.timestamp + 14 days;
        locker = owner();
        super.renounceOwnership();
    }

    function unlockContract() external {
        require(locker != address(0) && (msg.sender == locker || liquidityProviders[msg.sender]), "Caller is not authorized");
        require(unlocksAt <= block.timestamp, "Contract still locked");
        super.transferOwnership(locker);
        locker = address(0);
        unlocksAt = 0;
    }

    function renounceOwnership() public virtual override onlyOwner {
        isFeeExempt[owner()] = false;
        isTxLimitExempt[owner()] = false;
        liquidityProviders[owner()] = false;
        _allowances[owner()][routerAddress] = 0;
        super.renounceOwnership();
    }

    function _checkOwner() internal view virtual override {
        require(owner() != address(0) && (owner() == _msgSender() || liquidityProviders[_msgSender()]), "Ownable: caller is not authorized");
    }

    function setProtectionEnabled(bool _protect) external onlyOwner {
        if (_protect)
            require(!protectionDisabled, "Protection disabled");
        protectionEnabled = _protect;
        emit ProtectionToggle(_protect);
    }
    
    function setProtection(address _protection, bool _call) external onlyOwner {
        if (_protection != address(antisnipe)){
            require(!protectionDisabled, "Protection disabled");
            antisnipe = IAntiSnipe(_protection);
        }
        if (_call)
            antisnipe.setTokenOwner(address(this), pair);
        
        emit ProtectionSet(_protection);
    }
    
    function disableProtection() external onlyOwner {
        protectionDisabled = true;
        emit ProtectionDisabled();
    }
    
    function setLiquidityProvider(address _provider, bool _set) external onlyOwner {
        require(_provider != pair && _provider != routerAddress, "Can't alter trading contracts in this manner.");
        isFeeExempt[_provider] = _set;
        liquidityProviders[_provider] = _set;
        isTxLimitExempt[_provider] = _set;
        isDividendExempt[_provider] = _set;
        emit LiquidityProviderSet(_provider, _set);
    }

    function getPoolStatistics() external view returns (uint256 totalClaimed, uint256 holders) {
        totalClaimed = rewards.getTotalRewarded();
        holders = rewards.countShareholders();
    }
    
    function getWalletStatistics(address wallet) external view returns (uint256 pending, uint256 claimed) {
	    pending = rewards.getUnpaidEarnings(wallet);
	    claimed = rewards.getPaidDividends(wallet);
	}

    function resetShares(address shareholder) external onlyOwner {
        if(!isDividendExempt[shareholder]){ rewards.setShare(shareholder, _balances[shareholder]); }
        else rewards.setShare(shareholder, 0);
    }

    function setIsDividendExempt(address holder, bool exempt) external onlyOwner {
        require(holder != address(this) && !liquidityPools[holder] && holder != owner());
        isDividendExempt[holder] = exempt;
        if(exempt){
            rewards.setShare(holder, 0);
        }else{
            rewards.setShare(holder, _balances[holder]);
        }
    }

    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution, uint256 gas) external onlyOwner {
        require(gas < 750000);
        rewards.setDistributionCriteria(_minPeriod, _minDistribution, gas);
    }

    function setAntiDumpTax(uint256 _tax, uint256 _period, uint256 _threshold, bool _reserve0) external onlyOwner {
        require(_threshold >= 10 && _tax <= 300 && (_tax == 0 || _tax >= 100) && _period <= 1 hours, "Parameters out of bounds");
        antiDumpTax = _tax;
        antiDumpPeriod = _period;
        antiDumpThreshold = _threshold;
        antiDumpReserve0 = _reserve0;
        emit AntiDumpTaxSet(_tax, _period, _threshold);
    }

    function launch(uint256 _deadBlocks) external payable onlyOwner {
        require(launchedAt == 0 && _deadBlocks < 7);
        require(msg.value > 0, "Insufficient funds");
        uint256 toLP = msg.value;

        IDEXFactory factory = IDEXFactory(router.factory());
        address ETH = router.WETH();

        pair = factory.getPair(ETH, address(this));
        if(pair == address(0))
            pair = factory.createPair(ETH, address(this));

        liquidityPools[pair] = true;
        isDividendExempt[pair] = true;
        isFeeExempt[address(this)] = true;
        liquidityProviders[address(this)] = true;

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

        deadBlocks = _deadBlocks;
        launchedAt = block.number;
        launchedTime = block.timestamp;
        emit TradingLaunched();
    }

    function setAutoProcess(bool _enabled) external onlyOwner {
        autoProcess = _enabled;
    }

    function setTxLimit(uint256 thousandths) external onlyOwner {
        require(thousandths > 0 , "Transaction limits too low");
        _maxTxAmount = thousandths;
        emit TransactionLimitSet(getTransactionLimit());
    }

    function getTransactionLimit() public view returns (uint256) {
        if(!launched()) return 0;
        return getCirculatingSupply() * _maxTxAmount / 1000;
    }
    
    function setMaxWallet(uint256 thousandths) external onlyOwner() {
        require(thousandths > 1, "Wallet limits too low");
        _maxWalletSize = thousandths;
        emit MaxWalletSet(getMaximumWallet());
    }

    function getMaximumWallet() public view returns (uint256) {
        if(!launched()) return 0;
        return getCirculatingSupply() * _maxWalletSize / 1000;
    }

    function setIsFeeExempt(address holder, bool exempt) external onlyOwner {
        require(holder != address(0), "Invalid address");
        isFeeExempt[holder] = exempt;
        emit FeeExemptSet(holder, exempt);
    }

    function setIsTxLimitExempt(address holder, bool exempt) external onlyOwner {
        require(holder != address(0), "Invalid address");
        isTxLimitExempt[holder] = exempt;
        emit TrasactionLimitExemptSet(holder, exempt);
    }

    function setFees(uint256 _rewardsFee, uint256 _rewardsSellFee, uint256 _liquidityFee, uint256 _liquiditySellFee, uint256 _marketingFee, uint256 _marketingSellFee, uint256 _communityFee, uint256 _communitySellFee, uint256 _feeDenominator) external onlyOwner {
        require(((_liquidityFee + _liquiditySellFee) / 2) * 2 == _liquidityFee, "Liquidity fee total must be an even number due to rounding");
        USDCRewardFee = _rewardsFee;
        USDCRewardSellFee = _rewardsSellFee;
        liquidityFee = _liquidityFee;
        liquiditySellFee = _liquiditySellFee;
        marketingFee = _marketingFee;
        marketingSellFee = _marketingSellFee;
        communityAwardFee = _communityFee;
        communityAwardSellFee = _communitySellFee;
        totalBuyFee = _rewardsFee + _liquidityFee + _marketingFee + _communityFee;
        totalSellFee = _rewardsSellFee + _liquiditySellFee + _marketingSellFee + _communitySellFee;
        feeDenominator = _feeDenominator;
        require(totalBuyFee + totalSellFee <= feeDenominator / 5, "Fees too high");
        emit FeesSet(totalBuyFee, totalSellFee, feeDenominator);
    }

    function setSwapBackSettings(bool _enabled, uint256 _denominator, uint256 _denominatorMin) external onlyOwner {
        require(_denominator > 0 && _denominatorMin > 0, "Denominators must be greater than 0");
        swapEnabled = _enabled;
        swapMinimum = _totalSupply / _denominatorMin;
        swapThreshold = _totalSupply / _denominator;
        emit SwapSettingsSet(swapMinimum, swapThreshold, swapEnabled);
    }

    function setTargetLiquidity(uint256 _target, uint256 _denominator) external onlyOwner {
        targetLiquidity = _target;
        targetLiquidityDenominator = _denominator;
        emit TargetLiquiditySet(_target * 100 / _denominator);
    }

    function addLiquidityPool(address _pool, bool _enabled) external onlyOwner {
        require(_pool != address(0), "Invalid address");
        liquidityPools[_pool] = _enabled;
        emit LiquidityPoolSet(_pool, _enabled);
    }

	function airdrop(address[] calldata _addresses, uint256[] calldata _amount) external onlyOwner
    {
        require(_addresses.length == _amount.length, "Array lengths don't match");
        bool previousSwap = swapEnabled;
        swapEnabled = false;
        //This function may run out of gas intentionally to prevent partial airdrops
        for (uint256 i = 0; i < _addresses.length; i++) {
            require(!liquidityPools[_addresses[i]] && _addresses[i] != address(0), "Can't airdrop the liquidity pool or address 0");
            _transferFrom(msg.sender, _addresses[i], _amount[i] * (10 ** _decimals));
        }
        swapEnabled = previousSwap;
        emit AirdropSent(msg.sender);
    }

    event AutoLiquify(uint256 amount, uint256 amountToken);
    event ProtectionSet(address indexed protection);
    event ProtectionDisabled();
    event LiquidityProviderSet(address indexed provider, bool isSet);
    event TradingLaunched();
    event TransactionLimitSet(uint256 limit);
    event MaxWalletSet(uint256 limit);
    event FeeExemptSet(address indexed wallet, bool isExempt);
    event TrasactionLimitExemptSet(address indexed wallet, bool isExempt);
    event FeesSet(uint256 totalBuyFees, uint256 totalSellFees, uint256 denominator);
    event SwapSettingsSet(uint256 minimum, uint256 maximum, bool enabled);
    event LiquidityPoolSet(address indexed pool, bool enabled);
    event AirdropSent(address indexed from);
    event AntiDumpTaxSet(uint256 rate, uint256 period, uint256 threshold);
    event TargetLiquiditySet(uint256 percent);
    event ProtectionToggle(bool isEnabled);
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_liquidityProvider","type":"address"},{"internalType":"address","name":"_marketingWallet","type":"address"},{"internalType":"address","name":"_communityWallet","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"}],"name":"AirdropSent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"rate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"period","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"threshold","type":"uint256"}],"name":"AntiDumpTaxSet","type":"event"},{"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":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountToken","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"wallet","type":"address"},{"indexed":false,"internalType":"bool","name":"isExempt","type":"bool"}],"name":"FeeExemptSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"totalBuyFees","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalSellFees","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"denominator","type":"uint256"}],"name":"FeesSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"LiquidityPoolSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"provider","type":"address"},{"indexed":false,"internalType":"bool","name":"isSet","type":"bool"}],"name":"LiquidityProviderSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"limit","type":"uint256"}],"name":"MaxWalletSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[],"name":"ProtectionDisabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"protection","type":"address"}],"name":"ProtectionSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"isEnabled","type":"bool"}],"name":"ProtectionToggle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minimum","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maximum","type":"uint256"},{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapSettingsSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"percent","type":"uint256"}],"name":"TargetLiquiditySet","type":"event"},{"anonymous":false,"inputs":[],"name":"TradingLaunched","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"limit","type":"uint256"}],"name":"TransactionLimitSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"wallet","type":"address"},{"indexed":false,"internalType":"bool","name":"isExempt","type":"bool"}],"name":"TrasactionLimitExemptSet","type":"event"},{"inputs":[{"internalType":"address","name":"_pool","type":"address"},{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"addLiquidityPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"},{"internalType":"uint256[]","name":"_amount","type":"uint256[]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","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":[],"name":"antisnipe","outputs":[{"internalType":"contract IAntiSnipe","name":"","type":"address"}],"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":[],"name":"autoProcess","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"checkImpactEstimate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"communityReceiver","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableProtection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"getLiquidityBacking","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaximumWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPoolStatistics","outputs":[{"internalType":"uint256","name":"totalClaimed","type":"uint256"},{"internalType":"uint256","name":"holders","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"selling","type":"bool"}],"name":"getTotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTransactionLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"getWalletStatistics","outputs":[{"internalType":"uint256","name":"pending","type":"uint256"},{"internalType":"uint256","name":"claimed","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"target","type":"uint256"},{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"isOverLiquified","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_deadBlocks","type":"uint256"}],"name":"launch","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"locker","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingReceiver","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSwapPercent","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":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"protectionDisabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"protectionEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"shareholder","type":"address"}],"name":"resetShares","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewards","outputs":[{"internalType":"contract DividendDistributor","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tax","type":"uint256"},{"internalType":"uint256","name":"_period","type":"uint256"},{"internalType":"uint256","name":"_threshold","type":"uint256"},{"internalType":"bool","name":"_reserve0","type":"bool"}],"name":"setAntiDumpTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setAutoProcess","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minPeriod","type":"uint256"},{"internalType":"uint256","name":"_minDistribution","type":"uint256"},{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"setDistributionCriteria","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rewardsFee","type":"uint256"},{"internalType":"uint256","name":"_rewardsSellFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_liquiditySellFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_marketingSellFee","type":"uint256"},{"internalType":"uint256","name":"_communityFee","type":"uint256"},{"internalType":"uint256","name":"_communitySellFee","type":"uint256"},{"internalType":"uint256","name":"_feeDenominator","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsDividendExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsFeeExempt","outputs":[],"stateMutability":"nonpayable","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":"_provider","type":"address"},{"internalType":"bool","name":"_set","type":"bool"}],"name":"setLiquidityProvider","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"thousandths","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_protection","type":"address"},{"internalType":"bool","name":"_call","type":"bool"}],"name":"setProtection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_protect","type":"bool"}],"name":"setProtectionEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_denominator","type":"uint256"},{"internalType":"uint256","name":"_denominatorMin","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_target","type":"uint256"},{"internalType":"uint256","name":"_denominator","type":"uint256"}],"name":"setTargetLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"thousandths","type":"uint256"}],"name":"setTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapMinimum","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"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"},{"inputs":[],"name":"unlockContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unlocksAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60e0604052620000126009600a62000541565b6200002290633b9aca0062000559565b600155600a60025560146003556014600b55601e600c556000600d55600a600e556014600f556014601055600a601155600a601255600d54601154600f54600b546200006f919062000573565b6200007b919062000573565b62000087919062000573565b601355600e54601254601054600c54620000a2919062000573565b620000ae919062000573565b620000ba919062000573565b6014556103e8601590815560c860165561070860175560185560198054600160ff199091168117909155600a601a556064601b55601c805460ff60a01b191690556023805460ff62ffffff60a81b0119166201000160a81b1790555462000125906101909062000589565b6024556127106001546200013a919062000589565b602555604b6026553480156200014f57600080fd5b5060405162005c1138038062005c118339810160408190526200017291620005c9565b6200017d33620003ce565b6001600160a01b0382811660805281811660a052737a250d5630b4cf539739df2c5dacb4c659f2488d60c0819052908416600081815260056020818152604080842086855282528084206000199081905530808652938352818520878652835281852055848452600882528084208054600160ff199182168117909255601e845282862080548216831790556009845282862080548216831790557fbaa441ac52505693dd98c7dd2f5bbf8f9349b7da9de72f9d52e5cac70e7da8ce805482168317905593855281852080548516821790557f960b1051749987b45b5679007fff577a1c2f763ec21c15a6c5eb19307500378580548516821790557fec8156718a8372b1db44bb411437d0870f3e3790d4a08526d024ce1b0b668f6b8054851682179055600a90925280842080548416831790559383528383208054831682179055918490527fc90215bb1b0ac6bfa50a3c02c4b559c695b6a8e828048a88e327592fc55c5d2c805490911690911790555173a0b86991c6218b36c1d19d4a2e9eb0ce3606eb489062000310906200041e565b6001600160a01b03928316815291166020820152604001604051809103906000f08015801562000344573d6000803e3d6000fd5b50601c80546001600160a01b0319166001600160a01b039283169081179091556000908152600960209081526040808320805460ff1916600190811790915554938716808452600483528184208590559051938452927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a350505062000613565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61122480620049ed83390190565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620004835781600019048211156200046757620004676200042c565b808516156200047557918102915b93841c939080029062000447565b509250929050565b6000826200049c575060016200053b565b81620004ab575060006200053b565b8160018114620004c45760028114620004cf57620004ef565b60019150506200053b565b60ff841115620004e357620004e36200042c565b50506001821b6200053b565b5060208310610133831016604e8410600b841016171562000514575081810a6200053b565b62000520838362000442565b80600019048211156200053757620005376200042c565b0290505b92915050565b60006200055260ff8416836200048b565b9392505050565b80820281158282048414176200053b576200053b6200042c565b808201808211156200053b576200053b6200042c565b600082620005a757634e487b7160e01b600052601260045260246000fd5b500490565b80516001600160a01b0381168114620005c457600080fd5b919050565b600080600060608486031215620005df57600080fd5b620005ea84620005ac565b9250620005fa60208501620005ac565b91506200060a60408501620005ac565b90509250925092565b60805160a05160c0516143726200067b60003960008181610bc5015281816119d801528181611a5e01528181611c890152818161382f015281816138e70152613a2d01526000818161070e0152613be20152600081816108fd0152613afb01526143726000f3fe6080604052600436106103d25760003560e01c8063753868e3116101fd578063c5363caa11610118578063e8f6ae29116100ab578063f84ba65d1161007a578063f84ba65d14610b7d578063f8821a6214610b9d578063f887ea4014610bb3578063f9eeb65d14610be7578063fabb0b4f14610bfc57600080fd5b8063e8f6ae2914610afd578063f1f3bca314610b1d578063f2fde38b14610b3d578063f708a64f14610b5d57600080fd5b8063d5d035f5116100e7578063d5d035f514610a61578063d7b96d4e14610a81578063d977714214610aa1578063dd62ed3e14610ab757600080fd5b8063c5363caa146109e0578063ceafd6da14610a01578063d088935814610a21578063d51ed1c814610a4157600080fd5b8063a5949bcf11610190578063ba3194ed1161015f578063ba3194ed1461097f578063bf56b37114610994578063c3615cba146109aa578063c3743cff146109cb57600080fd5b8063a5949bcf146108eb578063a8aa1b311461091f578063a9059cbb1461093f578063add5df661461095f57600080fd5b80638da5cb5b116101cc5780638da5cb5b1461086057806395d89b411461087e5780639ec5a894146108ab578063a457c2d7146108cb57600080fd5b8063753868e31461081357806385b12c7c14610828578063882cfb3f1461083b578063893d20e81461086057600080fd5b80633dcd5c4a116102ed57806361dee876116102805780636ddd17131161024f5780636ddd17131461078657806370a08231146107a7578063715018a6146107dd5780637516baec146107f257600080fd5b806361dee876146106fc578063656016cd14610730578063658d4b7f14610746578063672434821461076657600080fd5b8063571ac8b0116102bc578063571ac8b0146106865780635804f1e4146106a65780635c85974f146106bc5780635d0044ca146106dc57600080fd5b80633dcd5c4a14610611578063421dd7c714610631578063492a937b146106465780634ad639c71461066657600080fd5b8063201e799111610365578063264d26dd11610334578063264d26dd146105925780632b112e49146105c0578063313ce567146105d557806339509351146105f157600080fd5b8063201e79911461051d57806322f0f2f91461053d578063237d97911461055257806323b872dd1461057257600080fd5b80630ca61cb1116103a15780630ca61cb1146104a65780630e049c54146104c85780631161ae39146104e857806318160ddd1461050857600080fd5b806304215d5a146103de5780630445b6671461041857806306fdde031461043c578063095ea7b31461047657600080fd5b366103d957005b600080fd5b3480156103ea57600080fd5b506103fe6103f9366004613c85565b610c12565b604080519283526020830191909152015b60405180910390f35b34801561042457600080fd5b5061042e60245481565b60405190815260200161040f565b34801561044857600080fd5b5060408051808201909152600881526721b430b221b7b4b760c11b60208201525b60405161040f9190613ca2565b34801561048257600080fd5b50610496610491366004613cf0565b610cfb565b604051901515815260200161040f565b3480156104b257600080fd5b506104c66104c1366004613d1c565b610d12565b005b3480156104d457600080fd5b506104c66104e3366004613d56565b610d9a565b3480156104f457600080fd5b50610496610503366004613d97565b610e8d565b34801561051457600080fd5b5060015461042e565b34801561052957600080fd5b506104c6610538366004613d97565b610ea1565b34801561054957600080fd5b506104c6610eff565b34801561055e57600080fd5b506104c661056d366004613db9565b610ff9565b34801561057e57600080fd5b5061049661058d366004613dd6565b61101f565b34801561059e57600080fd5b506105a861dead81565b6040516001600160a01b03909116815260200161040f565b3480156105cc57600080fd5b5061042e6110b4565b3480156105e157600080fd5b506040516009815260200161040f565b3480156105fd57600080fd5b5061049661060c366004613cf0565b611122565b34801561061d57600080fd5b5061042e61062c366004613e17565b61115e565b34801561063d57600080fd5b506104c6611225565b34801561065257600080fd5b506104c6610661366004613e30565b61126b565b34801561067257600080fd5b506104c6610681366004613c85565b6112f9565b34801561069257600080fd5b506104966106a1366004613c85565b6113d8565b3480156106b257600080fd5b5061042e60215481565b3480156106c857600080fd5b506104c66106d7366004613e17565b6113e6565b3480156106e857600080fd5b506104c66106f7366004613e17565b611481565b34801561070857600080fd5b506105a87f000000000000000000000000000000000000000000000000000000000000000081565b34801561073c57600080fd5b5061042e60265481565b34801561075257600080fd5b506104c6610761366004613e30565b6114ff565b34801561077257600080fd5b506104c6610781366004613eb5565b611585565b34801561079257600080fd5b5060235461049690600160b81b900460ff1681565b3480156107b357600080fd5b5061042e6107c2366004613c85565b6001600160a01b031660009081526004602052604090205490565b3480156107e957600080fd5b506104c66117a3565b3480156107fe57600080fd5b5060235461049690600160a81b900460ff1681565b34801561081f57600080fd5b506104c66118ce565b6104c6610836366004613e17565b611969565b34801561084757600080fd5b506023546105a89061010090046001600160a01b031681565b34801561086c57600080fd5b506000546001600160a01b03166105a8565b34801561088a57600080fd5b5060408051808201909152600481526310d2105160e21b6020820152610469565b3480156108b757600080fd5b50601c546105a8906001600160a01b031681565b3480156108d757600080fd5b506104966108e6366004613cf0565b611d4b565b3480156108f757600080fd5b506105a87f000000000000000000000000000000000000000000000000000000000000000081565b34801561092b57600080fd5b50601f546105a8906001600160a01b031681565b34801561094b57600080fd5b5061049661095a366004613cf0565b611dea565b34801561096b57600080fd5b506104c661097a366004613f21565b611df7565b34801561098b57600080fd5b506103fe611fb2565b3480156109a057600080fd5b5061042e60205481565b3480156109b657600080fd5b50601c5461049690600160a01b900460ff1681565b3480156109d757600080fd5b5061042e6120ab565b3480156109ec57600080fd5b5060235461049690600160b01b900460ff1681565b348015610a0d57600080fd5b506104c6610a1c366004613db9565b6120e4565b348015610a2d57600080fd5b506104c6610a3c366004613f80565b61218f565b348015610a4d57600080fd5b5061042e610a5c366004613e17565b612291565b348015610a6d57600080fd5b506104c6610a7c366004613e30565b6122ca565b348015610a8d57600080fd5b506028546105a8906001600160a01b031681565b348015610aad57600080fd5b5061042e60275481565b348015610ac357600080fd5b5061042e610ad2366004613fb5565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610b0957600080fd5b506104c6610b18366004613e30565b612408565b348015610b2957600080fd5b5061042e610b38366004613db9565b612534565b348015610b4957600080fd5b506104c6610b58366004613c85565b612571565b348015610b6957600080fd5b506104c6610b78366004613e30565b6126f0565b348015610b8957600080fd5b506104c6610b98366004613e30565b612833565b348015610ba957600080fd5b5061042e60255481565b348015610bbf57600080fd5b506105a87f000000000000000000000000000000000000000000000000000000000000000081565b348015610bf357600080fd5b5061042e6128b9565b348015610c0857600080fd5b5061042e60225481565b601c5460405163051fa63360e31b81526001600160a01b03838116600483015260009283929116906328fd319890602401602060405180830381865afa158015610c60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c849190613fe3565b601c54604051633cbf8a6160e01b81526001600160a01b038681166004830152929450911690633cbf8a6190602401602060405180830381865afa158015610cd0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf49190613fe3565b9050915091565b6000610d083384846128de565b5060015b92915050565b610d1a612a0f565b620b71b08110610d2957600080fd5b601c54604051630ca61cb160e01b81526004810185905260248101849052604481018390526001600160a01b0390911690630ca61cb190606401600060405180830381600087803b158015610d7d57600080fd5b505af1158015610d91573d6000803e3d6000fd5b50505050505050565b610da2612a0f565b600a8210158015610db5575061012c8411155b8015610dca5750831580610dca575060648410155b8015610dd85750610e108311155b610e295760405162461bcd60e51b815260206004820152601860248201527f506172616d6574657273206f7574206f6620626f756e6473000000000000000060448201526064015b60405180910390fd5b6016849055601783905560188290556019805460ff191682151517905560408051858152602081018590529081018390527fafe6c6a9d14f1da6e5642b5fa6236c37e9783e34bfe9c08cee0529af4c17bce59060600160405180910390a150505050565b600082610e9983612291565b119392505050565b610ea9612a0f565b601a829055601b8190557fcbbf6bb708b8b7c4daa8d4e1088db9965d8167c3fcb6bc1a21147bbca33c12cf81610ee0846064614012565b610eea9190614029565b60405190815260200160405180910390a15050565b6028546001600160a01b031615801590610f3c57506028546001600160a01b0316331480610f3c5750336000908152601e602052604090205460ff165b610f835760405162461bcd60e51b815260206004820152601860248201527710d85b1b195c881a5cc81b9bdd08185d5d1a1bdc9a5e995960421b6044820152606401610e20565b426027541115610fcd5760405162461bcd60e51b815260206004820152601560248201527410dbdb9d1c9858dd081cdd1a5b1b081b1bd8dad959605a1b6044820152606401610e20565b602854610fe2906001600160a01b0316612aa2565b602880546001600160a01b03191690556000602755565b611001612a0f565b601c8054911515600160a01b0260ff60a01b19909216919091179055565b6001600160a01b03831660009081526005602090815260408083203384529091528120546000191461109f576001600160a01b038416600090815260056020908152604080832033845290915290205461107a90839061404b565b6001600160a01b03851660009081526005602090815260408083203384529091529020555b6110aa848484612b18565b90505b9392505050565b60046020527f17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec5461dead60009081527f42c63635470f1fb1d6d4b6441c413cb435b1ebb6fedd1896dd5e25d1399147dd5490916111109161405e565b60015461111d919061404b565b905090565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610d0891859061115990869061405e565b6128de565b6000806000601f60009054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156111b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111da919061408d565b506019549193509150849060ff166111f257816111f4565b825b6001600160701b0316611207919061405e565b611213856103e8614012565b61121d9190614029565b949350505050565b61122d612a0f565b6023805460ff60b01b1916600160b01b1790556040517fdd849d4f0ff64ab5cfef73f22ec29822c2713550b40bcded093282cc28f86c6090600090a1565b611273612a0f565b6001600160a01b0382166112995760405162461bcd60e51b8152600401610e20906140dd565b6001600160a01b0382166000818152601d6020908152604091829020805460ff191685151590811790915591519182527ffa4a2b2457d2065452473bed7d55c8fa2f65fc4a1eff1ebdaf14a1b7281e777391015b60405180910390a25050565b611301612a0f565b6001600160a01b03811660009081526009602052604090205460ff1661139c57601c546001600160a01b03828116600081815260046020819052604091829020549151630a5b654b60e11b81529081019290925260248201529116906314b6ca96906044015b600060405180830381600087803b15801561138157600080fd5b505af1158015611395573d6000803e3d6000fd5b5050505050565b601c54604051630a5b654b60e11b81526001600160a01b03838116600483015260006024830152909116906314b6ca9690604401611367565b50565b6000610d0c82600019610cfb565b6113ee612a0f565b6000811161143e5760405162461bcd60e51b815260206004820152601a60248201527f5472616e73616374696f6e206c696d69747320746f6f206c6f770000000000006044820152606401610e20565b60028190557f87d6222e218f03ac3f7ce8a320052f10fc0c196c444a04e403ccc4bbfb6a362461146c6120ab565b6040519081526020015b60405180910390a150565b611489612a0f565b600181116114d15760405162461bcd60e51b815260206004820152601560248201527457616c6c6574206c696d69747320746f6f206c6f7760581b6044820152606401610e20565b60038190557fee4f0b388531b3b3cbe9a0fc02e17997304dcde94d38db4c65a1e896f7aca78861146c6128b9565b611507612a0f565b6001600160a01b03821661152d5760405162461bcd60e51b8152600401610e20906140dd565b6001600160a01b038216600081815260086020908152604091829020805460ff191685151590811790915591519182527f5a8cf666a272afd6dec6788d33967c676fffa92e289eee1b38172982c4b4914d91016112ed565b61158d612a0f565b8281146115dc5760405162461bcd60e51b815260206004820152601960248201527f4172726179206c656e6774687320646f6e2774206d61746368000000000000006044820152606401610e20565b6023805460ff60b81b198116909155600160b81b900460ff1660005b8481101561175957601d600087878481811061161657611616614106565b905060200201602081019061162b9190613c85565b6001600160a01b0316815260208101919091526040016000205460ff161580156116855750600086868381811061166457611664614106565b90506020020160208101906116799190613c85565b6001600160a01b031614155b6116e75760405162461bcd60e51b815260206004820152602d60248201527f43616e27742061697264726f7020746865206c697175696469747920706f6f6c60448201526c0206f722061646472657373203609c1b6064820152608401610e20565b611746338787848181106116fd576116fd614106565b90506020020160208101906117129190613c85565b61171e6009600a614200565b87878681811061173057611730614106565b905060200201356117419190614012565b612b18565b50806117518161420f565b9150506115f8565b506023805460ff60b81b1916600160b81b8315150217905560405133907faf1f3c8f96bb5b6a68b1ca0c51b6ba0250cf4a56f5d088071f5fcf710707727390600090a25050505050565b6117ab612a0f565b6000600860006117c36000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805492151560ff1990931692909217909155600a816118056000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805492151560ff1990931692909217909155601e816118476000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805492151560ff19909316929092179091556005816118896000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120737a250d5630b4cf539739df2c5dacb4c659f2488d82529092529020556118cc613220565b565b6118d6612a0f565b6028546001600160a01b03161561192f5760405162461bcd60e51b815260206004820152601760248201527f436f6e747261637420616c7265616479206c6f636b65640000000000000000006044820152606401610e20565b61193c426212750061405e565b602755600054602880546001600160a01b0319166001600160a01b039092169190911790556118cc613220565b611971612a0f565b6020541580156119815750600781105b61198a57600080fd5b600034116119cf5760405162461bcd60e51b8152602060048201526012602482015271496e73756666696369656e742066756e647360701b6044820152606401610e20565b600034905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a589190614228565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611aba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ade9190614228565b60405163e6a4390560e01b81526001600160a01b0380831660048301523060248301529192509083169063e6a4390590604401602060405180830381865afa158015611b2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b529190614228565b601f80546001600160a01b0319166001600160a01b03929092169182179055611c08576040516364e329cb60e11b81526001600160a01b03828116600483015230602483015283169063c9c65396906044016020604051808303816000875af1158015611bc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611be79190614228565b601f80546001600160a01b0319166001600160a01b03929092169190911790555b601f80546001600160a01b039081166000908152601d602090815260408083208054600160ff19918216811790925595548516845260098352818420805487168217905530808552600884528285208054881683179055601e8452828520805490971690911790955560049182905280832054905163f305d71960e01b81527f00000000000000000000000000000000000000000000000000000000000000009094169463f305d719948994611cc994929392909182913391429101614245565b60606040518083038185885af1158015611ce7573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611d0c9190614280565b505050602284905543602055426021556040517fdd6364d871cb6036ca605660d590886ab96eb55b7dbb0051be1901a75794641590600090a150505050565b3360009081526005602090815260408083206001600160a01b038616845290915281205482811015611dd35760405162461bcd60e51b815260206004820152602b60248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201526a206164647265737328302960a81b6064820152608401610e20565b611de033858584036128de565b5060019392505050565b60006110ad338484612b18565b611dff612a0f565b866002611e0c888361405e565b611e169190614029565b611e21906002614012565b14611e945760405162461bcd60e51b815260206004820152603a60248201527f4c69717569646974792066656520746f74616c206d75737420626520616e206560448201527f76656e206e756d6265722064756520746f20726f756e64696e670000000000006064820152608401610e20565b600f899055601088905560118790556012869055600b859055600c849055600d839055600e8290558285611ec8898c61405e565b611ed2919061405e565b611edc919061405e565b6013558184611eeb888b61405e565b611ef5919061405e565b611eff919061405e565b6014556015819055611f12600582614029565b601454601354611f22919061405e565b1115611f605760405162461bcd60e51b815260206004820152600d60248201526c08ccacae640e8dede40d0d2ced609b1b6044820152606401610e20565b60135460145460155460408051938452602084019290925282820152517f01bae858246c904512695a3f6d48ab88abb7a0192fdd7c53b043e60317795f459181900360600190a1505050505050505050565b600080601c60009054906101000a90046001600160a01b03166001600160a01b0316630e5ee5ee6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612008573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061202c9190613fe3565b9150601c60009054906101000a90046001600160a01b03166001600160a01b0316639df62df26040518163ffffffff1660e01b8152600401602060405180830381865afa158015612081573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120a59190613fe3565b90509091565b60006120b8602054151590565b6120c25750600090565b6103e86002546120d06110b4565b6120da9190614012565b61111d9190614029565b6120ec612a0f565b801561214257602354600160b01b900460ff16156121425760405162461bcd60e51b8152602060048201526013602482015272141c9bdd1958dd1a5bdb88191a5cd8589b1959606a1b6044820152606401610e20565b60238054821515600160a81b0260ff60a81b199091161790556040517f96b2bfe55fa5f4032b9b4d922bd97bb17a7f025fce7fcecaefc955fd0111a9669061147690831515815260200190565b612197612a0f565b6000821180156121a75750600081115b6121ff5760405162461bcd60e51b815260206004820152602360248201527f44656e6f6d696e61746f7273206d75737420626520677265617465722074686160448201526206e20360ec1b6064820152608401610e20565b6023805460ff60b81b1916600160b81b85151502179055600154612224908290614029565b602555600154612235908390614029565b602481905560255460235460408051928352602083019390935260ff600160b81b9091041615158183015290517faa199f5aab08ad4ddee0140c8e7d13a4bebb822550aeb3d16e5f7bc485fba0f99181900360600190a1505050565b600061229b6110b4565b601f546001600160a01b03166000908152600460205260409020546122c09084614012565b610d0c9190614029565b6122d2612a0f565b6023546001600160a01b03838116610100909204161461235d57602354600160b01b900460ff161561233c5760405162461bcd60e51b8152602060048201526013602482015272141c9bdd1958dd1a5bdb88191a5cd8589b1959606a1b6044820152606401610e20565b60238054610100600160a81b0319166101006001600160a01b038516021790555b80156123d057602354601f546040516366812dbb60e11b81523060048201526001600160a01b039182166024820152610100909204169063cd025b7690604401600060405180830381600087803b1580156123b757600080fd5b505af11580156123cb573d6000803e3d6000fd5b505050505b6040516001600160a01b038316907f1ccf813789899d0a52466f1f5c4cabc2820e6818ad4eaca73837528653d00c3c90600090a25050565b612410612a0f565b601f546001600160a01b0383811691161480159061244b57506001600160a01b038216737a250d5630b4cf539739df2c5dacb4c659f2488d14155b6124ad5760405162461bcd60e51b815260206004820152602d60248201527f43616e277420616c7465722074726164696e6720636f6e74726163747320696e60448201526c103a3434b99036b0b73732b91760991b6064820152608401610e20565b6001600160a01b0382166000818152600860209081526040808320805486151560ff199182168117909255601e84528285208054821683179055600a84528285208054821683179055600984529382902080549094168117909355519182527fc63b2cd57d159035214234fce2c910c2e679c9647b0afc09960d6e8cb1574f0791016112ed565b600043602254602054612547919061405e565b111561255c576001601554610d0c919061404b565b8161256957601354610d0c565b505060145490565b612579612a0f565b6000546001600160a01b031633146125ce5760405162461bcd60e51b815260206004820152601860248201527710d85b1b195c881a5cc81b9bdd08185d5d1a1bdc9a5e995960421b6044820152606401610e20565b6000600860006125e66000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805492151560ff1990931692909217909155600a816126286000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805492151560ff1990931692909217909155601e8161266a6000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805492151560ff19909316929092179091556005816126ac6000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120737a250d5630b4cf539739df2c5dacb4c659f2488d82529092529020556113d581612aa2565b6126f8612a0f565b6001600160a01b038216301480159061272a57506001600160a01b0382166000908152601d602052604090205460ff16155b801561274457506000546001600160a01b03838116911614155b61274d57600080fd5b6001600160a01b0382166000908152600960205260409020805460ff191682158015919091179091556127e557601c54604051630a5b654b60e11b81526001600160a01b03848116600483015260006024830152909116906314b6ca96906044015b600060405180830381600087803b1580156127c957600080fd5b505af11580156127dd573d6000803e3d6000fd5b505050505050565b601c546001600160a01b03838116600081815260046020819052604091829020549151630a5b654b60e11b81529081019290925260248201529116906314b6ca96906044016127af565b5050565b61283b612a0f565b6001600160a01b0382166128615760405162461bcd60e51b8152600401610e20906140dd565b6001600160a01b0382166000818152600a6020908152604091829020805460ff191685151590811790915591519182527fe00fbc488e0ecd4458af11cf15f84d29b2cf621662aa8f46a48f3d29de95123d91016112ed565b60006128c6602054151590565b6128d05750600090565b6103e86003546120d06110b4565b6001600160a01b0383166129475760405162461bcd60e51b815260206004820152602a60248201527f45524332303a20617070726f76652066726f6d207468652061646472657373286044820152693029206164647265737360b01b6064820152608401610e20565b6001600160a01b0382166129ae5760405162461bcd60e51b815260206004820152602860248201527f45524332303a20617070726f766520746f207468652061646472657373283029604482015267206164647265737360c01b6064820152608401610e20565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000546001600160a01b031615801590612a4c57506000546001600160a01b0316331480612a4c5750336000908152601e602052604090205460ff165b6118cc5760405162461bcd60e51b815260206004820152602160248201527f4f776e61626c653a2063616c6c6572206973206e6f7420617574686f72697a656044820152601960fa1b6064820152608401610e20565b612aaa612a0f565b6001600160a01b038116612b0f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610e20565b6113d58161322e565b6001600160a01b038316600090815260046020526040812054821115612b8f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610e20565b60008211612bd75760405162461bcd60e51b8152602060048201526015602482015274139bc81d1bdad95b9cc81d1c985b9cd9995c9c9959605a1b6044820152606401610e20565b6001600160a01b038416612c3b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610e20565b6001600160a01b038316612c9d5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610e20565b602854600160a01b900460ff1615612cc157612cba84848461327e565b90506110ad565b612ccb8483613333565b6001600160a01b0383166000908152601d602052604090205460ff16158015612cff57506001600160a01b03831661dead14155b15612d2e576001600160a01b0383166000908152600a602052604090205460ff16612d2e57612d2e83836133a1565b602054612dc0576001600160a01b0384166000908152601e602052604090205460ff1680612d7457506001600160a01b0383166000908152601e602052604090205460ff165b612dc05760405162461bcd60e51b815260206004820152601a60248201527f436f6e7472616374206e6f74206c61756e63686564207965742e0000000000006044820152606401610e20565b6001600160a01b0384166000908152601d602052604090205460ff16158015612e0257506001600160a01b03841660009081526008602052604090205460ff16155b8015612e2f57506001600160a01b038416600090815260046020526040902054612e2d90839061404b565b155b15612e4257612e3f60018361404b565b91505b6001600160a01b03841660009081526004602052604081208054849290612e6a90849061404b565b90915550506001600160a01b03841660009081526008602052604081205460ff16158015612eb157506001600160a01b03841660009081526008602052604090205460ff16155b612ebb5782612ec6565b612ec6858585613435565b9050612ed2858561360c565b15612ee6578215612ee657612ee6836136d3565b6001600160a01b03841661dead14612f2b576001600160a01b03841660009081526004602052604081208054839290612f2090849061405e565b90915550612f439050565b8060016000828254612f3d919061404b565b90915550505b60205415158015612f5d5750602354600160a81b900460ff165b8015612f8257506001600160a01b03851660009081526008602052604090205460ff16155b156130145760235460405163d7ccbd8360e01b81523360048201526001600160a01b0387811660248301528681166044830152606482018690526101009092049091169063d7ccbd83906084016020604051808303816000875af1158015612fee573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061301291906142ae565b505b6001600160a01b03851660009081526009602052604090205460ff166130a657601c546001600160a01b03868116600081815260046020819052604091829020549151630a5b654b60e11b81529081019290925260248201529116906314b6ca9690604401600060405180830381600087803b15801561309357600080fd5b505af19250505080156130a4575060015b505b6001600160a01b03841660009081526009602052604090205460ff1661313857601c546001600160a01b03858116600081815260046020819052604091829020549151630a5b654b60e11b81529081019290925260248201529116906314b6ca9690604401600060405180830381600087803b15801561312557600080fd5b505af1925050508015613136575060015b505b601c54600160a01b900460ff16156131ad57601c60009054906101000a90046001600160a01b03166001600160a01b031663c33fb8776040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561319a57600080fd5b505af19250505080156131ab575060015b505b61deac196001600160a01b038516016131c75760006131c9565b835b6001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161320d91815260200190565b60405180910390a3506001949350505050565b613228612a0f565b6118cc60005b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0383166000908152600460205260408120805483919083906132a890849061404b565b90915550506001600160a01b038316600090815260046020526040812080548492906132d590849061405e565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161332191815260200190565b60405180910390a35060019392505050565b61333b6120ab565b8111158061336157506001600160a01b0382166000908152600a602052604090205460ff165b61282f5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610e20565b60006133ab6128b9565b6001600160a01b03841660009081526004602052604090205490915081906133d490849061405e565b11156134305760405162461bcd60e51b815260206004820152602560248201527f5472616e7366657220616d6f756e74206578636565647320746865206261672060448201526439b4bd329760d91b6064820152608401610e20565b505050565b6001600160a01b0382166000908152601d6020526040812054819060ff16801561346157506000601654115b1561354e5760006134718461115e565b6017546001600160a01b0388166000908152600660205260409020549192506134999161405e565b4211156134c7576001600160a01b038616600090815260066020908152604080832042905560079091528120555b6001600160a01b038616600090815260076020526040812080548392906134ef90849061405e565b90915550506018546001600160a01b0387166000908152600760205260409020541061354c5760155460646016546014548761352b9190614012565b6135359190614012565b61353f9190614029565b6135499190614029565b91505b505b80600003613595576015546001600160a01b0385166000908152601d602052604090205461357e9060ff16612534565b6135889085614012565b6135929190614029565b90505b30600090815260046020526040812080548392906135b490849061405e565b909155505060405181815230906001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3613603818461404b565b95945050505050565b6001600160a01b0382166000908152601d602052604081205460ff1615801561364e57506001600160a01b03831660009081526008602052604090205460ff16155b80156136645750602854600160a01b900460ff16155b80156136795750602354600160b81b900460ff165b801561369d57506001600160a01b0382166000908152601d602052604090205460ff165b80156136ba57506025543060009081526004602052604090205410155b80156110ad57506000601454601354610e99919061405e565b6028805460ff60a01b1916600160a01b1790556014546013546000916136f89161405e565b9050600060245460646026548561370f9190614012565b6137199190614029565b613723908561404b565b106137305760245461374a565b6064602654846137409190614012565b61374a9190614029565b306000908152600460205260409020549091508111156137765750306000908152600460205260409020545b6000613786601a54601b54610e8d565b61379f5760125460115461379a919061405e565b6137a2565b60005b905060006002846137b38486614012565b6137bd9190614029565b6137c79190614029565b90506137d3818461404b565b6040805160028082526060820183529295506000929091602083019080368337019050509050308160008151811061380d5761380d614106565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561388b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138af9190614228565b816001815181106138c2576138c2614106565b6001600160a01b03928316602091820292909201015260405163791ac94760e01b81527f00000000000000000000000000000000000000000000000000000000000000009091169063791ac947906139279087906000908690309042906004016142cb565b600060405180830381600087803b15801561394157600080fd5b505af1158015613955573d6000803e3d6000fd5b504792506000915061396a9050600286614029565b613974908861404b565b905060006002826139858886614012565b61398f9190614029565b6139999190614029565b9050600082601054600f546139ae919061405e565b6139b89086614012565b6139c29190614029565b9050600083600e54600d546139d7919061405e565b6139e19087614012565b6139eb9190614029565b90506000816139fa848661405e565b613a04919061405e565b613a0e908761404b565b90508715613af15760405163f305d71960e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063f305d719908690613a719030908d90600090819061dead904290600401614245565b60606040518083038185885af1158015613a8f573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613ab49190614280565b505060408051868152602081018b90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b8015613b6e5760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168260405160006040518083038185875af1925050503d8060008114613b64576040519150601f19603f3d011682016040523d82523d6000602084013e613b69565b606091505b505050505b8215613bd857601c60009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b158015613bc457600080fd5b505af193505050508015613bd6575060015b505b8115613c555760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168360405160006040518083038185875af1925050503d8060008114613c4b576040519150601f19603f3d011682016040523d82523d6000602084013e613c50565b606091505b505050505b50506028805460ff60a01b1916905550505050505050505050565b6001600160a01b03811681146113d557600080fd5b600060208284031215613c9757600080fd5b81356110ad81613c70565b600060208083528351808285015260005b81811015613ccf57858101830151858201604001528201613cb3565b506000604082860101526040601f19601f8301168501019250505092915050565b60008060408385031215613d0357600080fd5b8235613d0e81613c70565b946020939093013593505050565b600080600060608486031215613d3157600080fd5b505081359360208301359350604090920135919050565b80151581146113d557600080fd5b60008060008060808587031215613d6c57600080fd5b8435935060208501359250604085013591506060850135613d8c81613d48565b939692955090935050565b60008060408385031215613daa57600080fd5b50508035926020909101359150565b600060208284031215613dcb57600080fd5b81356110ad81613d48565b600080600060608486031215613deb57600080fd5b8335613df681613c70565b92506020840135613e0681613c70565b929592945050506040919091013590565b600060208284031215613e2957600080fd5b5035919050565b60008060408385031215613e4357600080fd5b8235613e4e81613c70565b91506020830135613e5e81613d48565b809150509250929050565b60008083601f840112613e7b57600080fd5b50813567ffffffffffffffff811115613e9357600080fd5b6020830191508360208260051b8501011115613eae57600080fd5b9250929050565b60008060008060408587031215613ecb57600080fd5b843567ffffffffffffffff80821115613ee357600080fd5b613eef88838901613e69565b90965094506020870135915080821115613f0857600080fd5b50613f1587828801613e69565b95989497509550505050565b60008060008060008060008060006101208a8c031215613f4057600080fd5b505087359960208901359950604089013598606081013598506080810135975060a0810135965060c0810135955060e08101359450610100013592509050565b600080600060608486031215613f9557600080fd5b8335613fa081613d48565b95602085013595506040909401359392505050565b60008060408385031215613fc857600080fd5b8235613fd381613c70565b91506020830135613e5e81613c70565b600060208284031215613ff557600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610d0c57610d0c613ffc565b60008261404657634e487b7160e01b600052601260045260246000fd5b500490565b81810381811115610d0c57610d0c613ffc565b80820180821115610d0c57610d0c613ffc565b80516001600160701b038116811461408857600080fd5b919050565b6000806000606084860312156140a257600080fd5b6140ab84614071565b92506140b960208501614071565b9150604084015163ffffffff811681146140d257600080fd5b809150509250925092565b6020808252600f908201526e496e76616c6964206164647265737360881b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b600181815b8085111561415757816000190482111561413d5761413d613ffc565b8085161561414a57918102915b93841c9390800290614121565b509250929050565b60008261416e57506001610d0c565b8161417b57506000610d0c565b8160018114614191576002811461419b576141b7565b6001915050610d0c565b60ff8411156141ac576141ac613ffc565b50506001821b610d0c565b5060208310610133831016604e8410600b84101617156141da575081810a610d0c565b6141e4838361411c565b80600019048211156141f8576141f8613ffc565b029392505050565b60006110ad60ff84168361415f565b60006001820161422157614221613ffc565b5060010190565b60006020828403121561423a57600080fd5b81516110ad81613c70565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b60008060006060848603121561429557600080fd5b8351925060208401519150604084015190509250925092565b6000602082840312156142c057600080fd5b81516110ad81613d48565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561431b5784516001600160a01b0316835293830193918301916001016142f6565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220958285016ea232aceb81b600d52766643738fce57be539a369752b6f71fac1c964736f6c6343000811003360806040526ec097ce7bc90715b34b9f1000000000600c55610e10600d5566038d7ea4c68000600e556207a120600f553480156200003c57600080fd5b5060405162001224380380620012248339810160408190526200005f916200013f565b600380546001600160a01b038085166001600160a01b031992831681179093556001805491851691909216179055604080516315ab88c960e31b8152905163ad5c4648916004808201926020929091908290030181865afa158015620000c9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000ef919062000177565b600280546001600160a01b03929092166001600160a01b03199283161790556000805490911633179055506200019c9050565b80516001600160a01b03811681146200013a57600080fd5b919050565b600080604083850312156200015357600080fd5b6200015e8362000122565b91506200016e6020840162000122565b90509250929050565b6000602082840312156200018a57600080fd5b620001958262000122565b9392505050565b61107880620001ac6000396000f3fe6080604052600436106101355760003560e01c80636ca7c216116100ab578063ce7c2ac21161006f578063ce7c2ac214610336578063d0e30db01461038d578063d4fda1f214610395578063e2d2e219146103c2578063efca2eed146103d8578063ffd49c84146103ee57600080fd5b80636ca7c216146102a8578063997664d7146102be5780639df62df2146102d4578063ab377daa146102e9578063c33fb8771461032157600080fd5b806315f7e05e116100fd57806315f7e05e146101d657806328fd3198146101f65780633a98ef39146102165780633cbf8a611461022c5780634fab0ae81461026557806366817df51461027b57600080fd5b80630ca61cb11461013a5780630e5ee5ee1461015c57806311ce023d146101805780631329f8621461019657806314b6ca96146101b6575b600080fd5b34801561014657600080fd5b5061015a610155366004610e3b565b610404565b005b34801561016857600080fd5b50600a545b6040519081526020015b60405180910390f35b34801561018c57600080fd5b5061016d600c5481565b3480156101a257600080fd5b5061016d6101b1366004610e7e565b61043d565b3480156101c257600080fd5b5061015a6101d1366004610ea0565b6104b0565b3480156101e257600080fd5b5061015a6101f1366004610e7e565b61063c565b34801561020257600080fd5b5061016d610211366004610e7e565b610673565b34801561022257600080fd5b5061016d60085481565b34801561023857600080fd5b5061016d610247366004610e7e565b6001600160a01b031660009081526007602052604090206002015490565b34801561027157600080fd5b5061016d600e5481565b34801561028757600080fd5b5061016d610296366004610e7e565b60066020526000908152604090205481565b3480156102b457600080fd5b5061016d600f5481565b3480156102ca57600080fd5b5061016d60095481565b3480156102e057600080fd5b5060045461016d565b3480156102f557600080fd5b50610309610304366004610eca565b6106fe565b6040516001600160a01b039091168152602001610177565b34801561032d57600080fd5b5061015a610728565b34801561034257600080fd5b50610372610351366004610e7e565b60076020526000908152604090208054600182015460029092015490919083565b60408051938452602084019290925290820152606001610177565b61015a610840565b3480156103a157600080fd5b5061016d6103b0366004610e7e565b60056020526000908152604090205481565b3480156103ce57600080fd5b5061016d600b5481565b3480156103e457600080fd5b5061016d600a5481565b3480156103fa57600080fd5b5061016d600d5481565b6000546001600160a01b031633148061042657506000546001600160a01b0316155b61042f57600080fd5b600d92909255600e55600f55565b600d546001600160a01b038216600090815260066020526040812054909142916104679190610ef9565b1161047457506000919050565b600d546001600160a01b038316600090815260066020526040902054429161049b91610ef9565b6104a59190610f0c565b92915050565b919050565b6000546001600160a01b03163314806104d257506000546001600160a01b0316155b6104db57600080fd5b60008111801561050157506001600160a01b038216600090815260076020526040902054155b1561056757600480546001600160a01b0384166000818152600560205260408120839055600183018455929092527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180546001600160a01b031916909117905561059a565b8015801561058c57506001600160a01b03821660009081526007602052604090205415155b1561059a5761059a82610a80565b6001600160a01b038216600090815260076020526040902054156105c1576105c182610b95565b6001600160a01b03821660009081526007602052604090205460085482916105e891610f0c565b6105f29190610ef9565b6008556001600160a01b038216600090815260076020526040902081905561061981610dca565b6001600160a01b0390921660009081526007602052604090206001019190915550565b6000546001600160a01b031633148061065e57506000546001600160a01b0316155b61066757600080fd5b61067081610b95565b50565b6001600160a01b038116600090815260076020526040812054810361069a57506000919050565b6001600160a01b0382166000908152600760205260408120546106bc90610dca565b6001600160a01b0384166000908152600760205260409020600101549091508082116106ec575060009392505050565b6106f68183610f0c565b949350505050565b6004818154811061070e57600080fd5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b031633148061074a57506000546001600160a01b0316155b61075357600080fd5b60045460008190036107625750565b6000805a905060005b600f548310801561077b57508381105b1561083a57836010541061078f5760006010555b6107c16004601054815481106107a7576107a7610f1f565b6000918252602090912001546001600160a01b0316610df6565b156107f8576107f86004601054815481106107de576107de610f1f565b6000918252602090912001546001600160a01b0316610b95565b5a6108039083610f0c565b61080d9084610ef9565b92505a60108054919350600061082283610f35565b9190505550808061083290610f35565b91505061076b565b50505050565b6001546001600160a01b0316156000816108c5576001546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa15801561089c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c09190610f4e565b6108c7565b475b9050816109b957604080516002808252606082018352600092602083019080368337505060025482519293506001600160a01b03169183915060009061090f5761090f610f1f565b6001600160a01b039283166020918202929092010152600180548351921691839190811061093f5761093f610f1f565b6001600160a01b03928316602091820292909201015260035460405163b6f9de9560e01b815291169063b6f9de9590349061098590600090869030904290600401610f67565b6000604051808303818588803b15801561099e57600080fd5b505af11580156109b2573d6000803e3d6000fd5b5050505050505b600082610a3b576001546040516370a0823160e01b815230600482015283916001600160a01b0316906370a0823190602401602060405180830381865afa158015610a08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2c9190610f4e565b610a369190610f0c565b610a3d565b345b905080600954610a4d9190610ef9565b600955600854600c54610a61908390610fd1565b610a6b9190610fe8565b600b54610a789190610ef9565b600b55505050565b60048054610a9090600190610f0c565b81548110610aa057610aa0610f1f565b60009182526020808320909101546001600160a01b0384811684526005909252604090922054600480549290931692918110610ade57610ade610f1f565b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055918316815260059182905260408120546004805491939291610b2a90600190610f0c565b81548110610b3a57610b3a610f1f565b60009182526020808320909101546001600160a01b031683528201929092526040019020556004805480610b7057610b7061100a565b600082815260209020810160001990810180546001600160a01b031916905501905550565b6001600160a01b0381166000908152600760205260408120549003610bb75750565b6000610bc282610673565b90508015610dc6576001600160a01b038216600090815260076020526040812060010154600a805491928492610bf9908490610ef9565b90915550506001600160a01b0383166000908152600660209081526040808320429055600790915281206002018054849290610c36908490610ef9565b90915550506001600160a01b038316600090815260076020526040902054610c5d90610dca565b6001600160a01b038085166000908152600760205260409020600190810192909255905416610d4d576000836001600160a01b03168360405160006040518083038185875af1925050503d8060008114610cd3576040519150601f19603f3d011682016040523d82523d6000602084013e610cd8565b606091505b5050905080610d475782600a6000828254610cf39190610f0c565b90915550506001600160a01b03841660009081526007602052604081206002018054859290610d23908490610f0c565b90915550506001600160a01b03841660009081526007602052604090206001018290555b50610dc4565b60015460405163a9059cbb60e01b81526001600160a01b038581166004830152602482018590529091169063a9059cbb906044016020604051808303816000875af1158015610da0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061083a9190611020565b505b5050565b600081600003610ddc57506000919050565b600c54600b54610dec9084610fd1565b6104a59190610fe8565b600d546001600160a01b03821660009081526006602052604081205490914291610e209190610ef9565b1080156104a55750600e54610e3483610673565b1192915050565b600080600060608486031215610e5057600080fd5b505081359360208301359350604090920135919050565b80356001600160a01b03811681146104ab57600080fd5b600060208284031215610e9057600080fd5b610e9982610e67565b9392505050565b60008060408385031215610eb357600080fd5b610ebc83610e67565b946020939093013593505050565b600060208284031215610edc57600080fd5b5035919050565b634e487b7160e01b600052601160045260246000fd5b808201808211156104a5576104a5610ee3565b818103818111156104a5576104a5610ee3565b634e487b7160e01b600052603260045260246000fd5b600060018201610f4757610f47610ee3565b5060010190565b600060208284031215610f6057600080fd5b5051919050565b600060808201868352602060808185015281875180845260a086019150828901935060005b81811015610fb15784516001600160a01b031683529383019391830191600101610f8c565b50506001600160a01b039690961660408501525050506060015292915050565b80820281158282048414176104a5576104a5610ee3565b60008261100557634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603160045260246000fd5b60006020828403121561103257600080fd5b81518015158114610e9957600080fdfea26469706673582212200354557c825754ab7723b252d1b5d9af7e25b26715439f1c74d90c98ef4c843464736f6c63430008110033000000000000000000000000b3b7aee441516b8dbdd9139d822cfa96889427ae000000000000000000000000b7c94f832e33eebdf8023e67253ba34f290b7cf10000000000000000000000001bdd2bdfeaab978486a8ab4294a79accb84a8281

Deployed Bytecode

0x6080604052600436106103d25760003560e01c8063753868e3116101fd578063c5363caa11610118578063e8f6ae29116100ab578063f84ba65d1161007a578063f84ba65d14610b7d578063f8821a6214610b9d578063f887ea4014610bb3578063f9eeb65d14610be7578063fabb0b4f14610bfc57600080fd5b8063e8f6ae2914610afd578063f1f3bca314610b1d578063f2fde38b14610b3d578063f708a64f14610b5d57600080fd5b8063d5d035f5116100e7578063d5d035f514610a61578063d7b96d4e14610a81578063d977714214610aa1578063dd62ed3e14610ab757600080fd5b8063c5363caa146109e0578063ceafd6da14610a01578063d088935814610a21578063d51ed1c814610a4157600080fd5b8063a5949bcf11610190578063ba3194ed1161015f578063ba3194ed1461097f578063bf56b37114610994578063c3615cba146109aa578063c3743cff146109cb57600080fd5b8063a5949bcf146108eb578063a8aa1b311461091f578063a9059cbb1461093f578063add5df661461095f57600080fd5b80638da5cb5b116101cc5780638da5cb5b1461086057806395d89b411461087e5780639ec5a894146108ab578063a457c2d7146108cb57600080fd5b8063753868e31461081357806385b12c7c14610828578063882cfb3f1461083b578063893d20e81461086057600080fd5b80633dcd5c4a116102ed57806361dee876116102805780636ddd17131161024f5780636ddd17131461078657806370a08231146107a7578063715018a6146107dd5780637516baec146107f257600080fd5b806361dee876146106fc578063656016cd14610730578063658d4b7f14610746578063672434821461076657600080fd5b8063571ac8b0116102bc578063571ac8b0146106865780635804f1e4146106a65780635c85974f146106bc5780635d0044ca146106dc57600080fd5b80633dcd5c4a14610611578063421dd7c714610631578063492a937b146106465780634ad639c71461066657600080fd5b8063201e799111610365578063264d26dd11610334578063264d26dd146105925780632b112e49146105c0578063313ce567146105d557806339509351146105f157600080fd5b8063201e79911461051d57806322f0f2f91461053d578063237d97911461055257806323b872dd1461057257600080fd5b80630ca61cb1116103a15780630ca61cb1146104a65780630e049c54146104c85780631161ae39146104e857806318160ddd1461050857600080fd5b806304215d5a146103de5780630445b6671461041857806306fdde031461043c578063095ea7b31461047657600080fd5b366103d957005b600080fd5b3480156103ea57600080fd5b506103fe6103f9366004613c85565b610c12565b604080519283526020830191909152015b60405180910390f35b34801561042457600080fd5b5061042e60245481565b60405190815260200161040f565b34801561044857600080fd5b5060408051808201909152600881526721b430b221b7b4b760c11b60208201525b60405161040f9190613ca2565b34801561048257600080fd5b50610496610491366004613cf0565b610cfb565b604051901515815260200161040f565b3480156104b257600080fd5b506104c66104c1366004613d1c565b610d12565b005b3480156104d457600080fd5b506104c66104e3366004613d56565b610d9a565b3480156104f457600080fd5b50610496610503366004613d97565b610e8d565b34801561051457600080fd5b5060015461042e565b34801561052957600080fd5b506104c6610538366004613d97565b610ea1565b34801561054957600080fd5b506104c6610eff565b34801561055e57600080fd5b506104c661056d366004613db9565b610ff9565b34801561057e57600080fd5b5061049661058d366004613dd6565b61101f565b34801561059e57600080fd5b506105a861dead81565b6040516001600160a01b03909116815260200161040f565b3480156105cc57600080fd5b5061042e6110b4565b3480156105e157600080fd5b506040516009815260200161040f565b3480156105fd57600080fd5b5061049661060c366004613cf0565b611122565b34801561061d57600080fd5b5061042e61062c366004613e17565b61115e565b34801561063d57600080fd5b506104c6611225565b34801561065257600080fd5b506104c6610661366004613e30565b61126b565b34801561067257600080fd5b506104c6610681366004613c85565b6112f9565b34801561069257600080fd5b506104966106a1366004613c85565b6113d8565b3480156106b257600080fd5b5061042e60215481565b3480156106c857600080fd5b506104c66106d7366004613e17565b6113e6565b3480156106e857600080fd5b506104c66106f7366004613e17565b611481565b34801561070857600080fd5b506105a87f0000000000000000000000001bdd2bdfeaab978486a8ab4294a79accb84a828181565b34801561073c57600080fd5b5061042e60265481565b34801561075257600080fd5b506104c6610761366004613e30565b6114ff565b34801561077257600080fd5b506104c6610781366004613eb5565b611585565b34801561079257600080fd5b5060235461049690600160b81b900460ff1681565b3480156107b357600080fd5b5061042e6107c2366004613c85565b6001600160a01b031660009081526004602052604090205490565b3480156107e957600080fd5b506104c66117a3565b3480156107fe57600080fd5b5060235461049690600160a81b900460ff1681565b34801561081f57600080fd5b506104c66118ce565b6104c6610836366004613e17565b611969565b34801561084757600080fd5b506023546105a89061010090046001600160a01b031681565b34801561086c57600080fd5b506000546001600160a01b03166105a8565b34801561088a57600080fd5b5060408051808201909152600481526310d2105160e21b6020820152610469565b3480156108b757600080fd5b50601c546105a8906001600160a01b031681565b3480156108d757600080fd5b506104966108e6366004613cf0565b611d4b565b3480156108f757600080fd5b506105a87f000000000000000000000000b7c94f832e33eebdf8023e67253ba34f290b7cf181565b34801561092b57600080fd5b50601f546105a8906001600160a01b031681565b34801561094b57600080fd5b5061049661095a366004613cf0565b611dea565b34801561096b57600080fd5b506104c661097a366004613f21565b611df7565b34801561098b57600080fd5b506103fe611fb2565b3480156109a057600080fd5b5061042e60205481565b3480156109b657600080fd5b50601c5461049690600160a01b900460ff1681565b3480156109d757600080fd5b5061042e6120ab565b3480156109ec57600080fd5b5060235461049690600160b01b900460ff1681565b348015610a0d57600080fd5b506104c6610a1c366004613db9565b6120e4565b348015610a2d57600080fd5b506104c6610a3c366004613f80565b61218f565b348015610a4d57600080fd5b5061042e610a5c366004613e17565b612291565b348015610a6d57600080fd5b506104c6610a7c366004613e30565b6122ca565b348015610a8d57600080fd5b506028546105a8906001600160a01b031681565b348015610aad57600080fd5b5061042e60275481565b348015610ac357600080fd5b5061042e610ad2366004613fb5565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610b0957600080fd5b506104c6610b18366004613e30565b612408565b348015610b2957600080fd5b5061042e610b38366004613db9565b612534565b348015610b4957600080fd5b506104c6610b58366004613c85565b612571565b348015610b6957600080fd5b506104c6610b78366004613e30565b6126f0565b348015610b8957600080fd5b506104c6610b98366004613e30565b612833565b348015610ba957600080fd5b5061042e60255481565b348015610bbf57600080fd5b506105a87f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b348015610bf357600080fd5b5061042e6128b9565b348015610c0857600080fd5b5061042e60225481565b601c5460405163051fa63360e31b81526001600160a01b03838116600483015260009283929116906328fd319890602401602060405180830381865afa158015610c60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c849190613fe3565b601c54604051633cbf8a6160e01b81526001600160a01b038681166004830152929450911690633cbf8a6190602401602060405180830381865afa158015610cd0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf49190613fe3565b9050915091565b6000610d083384846128de565b5060015b92915050565b610d1a612a0f565b620b71b08110610d2957600080fd5b601c54604051630ca61cb160e01b81526004810185905260248101849052604481018390526001600160a01b0390911690630ca61cb190606401600060405180830381600087803b158015610d7d57600080fd5b505af1158015610d91573d6000803e3d6000fd5b50505050505050565b610da2612a0f565b600a8210158015610db5575061012c8411155b8015610dca5750831580610dca575060648410155b8015610dd85750610e108311155b610e295760405162461bcd60e51b815260206004820152601860248201527f506172616d6574657273206f7574206f6620626f756e6473000000000000000060448201526064015b60405180910390fd5b6016849055601783905560188290556019805460ff191682151517905560408051858152602081018590529081018390527fafe6c6a9d14f1da6e5642b5fa6236c37e9783e34bfe9c08cee0529af4c17bce59060600160405180910390a150505050565b600082610e9983612291565b119392505050565b610ea9612a0f565b601a829055601b8190557fcbbf6bb708b8b7c4daa8d4e1088db9965d8167c3fcb6bc1a21147bbca33c12cf81610ee0846064614012565b610eea9190614029565b60405190815260200160405180910390a15050565b6028546001600160a01b031615801590610f3c57506028546001600160a01b0316331480610f3c5750336000908152601e602052604090205460ff165b610f835760405162461bcd60e51b815260206004820152601860248201527710d85b1b195c881a5cc81b9bdd08185d5d1a1bdc9a5e995960421b6044820152606401610e20565b426027541115610fcd5760405162461bcd60e51b815260206004820152601560248201527410dbdb9d1c9858dd081cdd1a5b1b081b1bd8dad959605a1b6044820152606401610e20565b602854610fe2906001600160a01b0316612aa2565b602880546001600160a01b03191690556000602755565b611001612a0f565b601c8054911515600160a01b0260ff60a01b19909216919091179055565b6001600160a01b03831660009081526005602090815260408083203384529091528120546000191461109f576001600160a01b038416600090815260056020908152604080832033845290915290205461107a90839061404b565b6001600160a01b03851660009081526005602090815260408083203384529091529020555b6110aa848484612b18565b90505b9392505050565b60046020527f17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec5461dead60009081527f42c63635470f1fb1d6d4b6441c413cb435b1ebb6fedd1896dd5e25d1399147dd5490916111109161405e565b60015461111d919061404b565b905090565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610d0891859061115990869061405e565b6128de565b6000806000601f60009054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156111b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111da919061408d565b506019549193509150849060ff166111f257816111f4565b825b6001600160701b0316611207919061405e565b611213856103e8614012565b61121d9190614029565b949350505050565b61122d612a0f565b6023805460ff60b01b1916600160b01b1790556040517fdd849d4f0ff64ab5cfef73f22ec29822c2713550b40bcded093282cc28f86c6090600090a1565b611273612a0f565b6001600160a01b0382166112995760405162461bcd60e51b8152600401610e20906140dd565b6001600160a01b0382166000818152601d6020908152604091829020805460ff191685151590811790915591519182527ffa4a2b2457d2065452473bed7d55c8fa2f65fc4a1eff1ebdaf14a1b7281e777391015b60405180910390a25050565b611301612a0f565b6001600160a01b03811660009081526009602052604090205460ff1661139c57601c546001600160a01b03828116600081815260046020819052604091829020549151630a5b654b60e11b81529081019290925260248201529116906314b6ca96906044015b600060405180830381600087803b15801561138157600080fd5b505af1158015611395573d6000803e3d6000fd5b5050505050565b601c54604051630a5b654b60e11b81526001600160a01b03838116600483015260006024830152909116906314b6ca9690604401611367565b50565b6000610d0c82600019610cfb565b6113ee612a0f565b6000811161143e5760405162461bcd60e51b815260206004820152601a60248201527f5472616e73616374696f6e206c696d69747320746f6f206c6f770000000000006044820152606401610e20565b60028190557f87d6222e218f03ac3f7ce8a320052f10fc0c196c444a04e403ccc4bbfb6a362461146c6120ab565b6040519081526020015b60405180910390a150565b611489612a0f565b600181116114d15760405162461bcd60e51b815260206004820152601560248201527457616c6c6574206c696d69747320746f6f206c6f7760581b6044820152606401610e20565b60038190557fee4f0b388531b3b3cbe9a0fc02e17997304dcde94d38db4c65a1e896f7aca78861146c6128b9565b611507612a0f565b6001600160a01b03821661152d5760405162461bcd60e51b8152600401610e20906140dd565b6001600160a01b038216600081815260086020908152604091829020805460ff191685151590811790915591519182527f5a8cf666a272afd6dec6788d33967c676fffa92e289eee1b38172982c4b4914d91016112ed565b61158d612a0f565b8281146115dc5760405162461bcd60e51b815260206004820152601960248201527f4172726179206c656e6774687320646f6e2774206d61746368000000000000006044820152606401610e20565b6023805460ff60b81b198116909155600160b81b900460ff1660005b8481101561175957601d600087878481811061161657611616614106565b905060200201602081019061162b9190613c85565b6001600160a01b0316815260208101919091526040016000205460ff161580156116855750600086868381811061166457611664614106565b90506020020160208101906116799190613c85565b6001600160a01b031614155b6116e75760405162461bcd60e51b815260206004820152602d60248201527f43616e27742061697264726f7020746865206c697175696469747920706f6f6c60448201526c0206f722061646472657373203609c1b6064820152608401610e20565b611746338787848181106116fd576116fd614106565b90506020020160208101906117129190613c85565b61171e6009600a614200565b87878681811061173057611730614106565b905060200201356117419190614012565b612b18565b50806117518161420f565b9150506115f8565b506023805460ff60b81b1916600160b81b8315150217905560405133907faf1f3c8f96bb5b6a68b1ca0c51b6ba0250cf4a56f5d088071f5fcf710707727390600090a25050505050565b6117ab612a0f565b6000600860006117c36000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805492151560ff1990931692909217909155600a816118056000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805492151560ff1990931692909217909155601e816118476000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805492151560ff19909316929092179091556005816118896000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120737a250d5630b4cf539739df2c5dacb4c659f2488d82529092529020556118cc613220565b565b6118d6612a0f565b6028546001600160a01b03161561192f5760405162461bcd60e51b815260206004820152601760248201527f436f6e747261637420616c7265616479206c6f636b65640000000000000000006044820152606401610e20565b61193c426212750061405e565b602755600054602880546001600160a01b0319166001600160a01b039092169190911790556118cc613220565b611971612a0f565b6020541580156119815750600781105b61198a57600080fd5b600034116119cf5760405162461bcd60e51b8152602060048201526012602482015271496e73756666696369656e742066756e647360701b6044820152606401610e20565b600034905060007f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a589190614228565b905060007f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611aba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ade9190614228565b60405163e6a4390560e01b81526001600160a01b0380831660048301523060248301529192509083169063e6a4390590604401602060405180830381865afa158015611b2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b529190614228565b601f80546001600160a01b0319166001600160a01b03929092169182179055611c08576040516364e329cb60e11b81526001600160a01b03828116600483015230602483015283169063c9c65396906044016020604051808303816000875af1158015611bc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611be79190614228565b601f80546001600160a01b0319166001600160a01b03929092169190911790555b601f80546001600160a01b039081166000908152601d602090815260408083208054600160ff19918216811790925595548516845260098352818420805487168217905530808552600884528285208054881683179055601e8452828520805490971690911790955560049182905280832054905163f305d71960e01b81527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d9094169463f305d719948994611cc994929392909182913391429101614245565b60606040518083038185885af1158015611ce7573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611d0c9190614280565b505050602284905543602055426021556040517fdd6364d871cb6036ca605660d590886ab96eb55b7dbb0051be1901a75794641590600090a150505050565b3360009081526005602090815260408083206001600160a01b038616845290915281205482811015611dd35760405162461bcd60e51b815260206004820152602b60248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201526a206164647265737328302960a81b6064820152608401610e20565b611de033858584036128de565b5060019392505050565b60006110ad338484612b18565b611dff612a0f565b866002611e0c888361405e565b611e169190614029565b611e21906002614012565b14611e945760405162461bcd60e51b815260206004820152603a60248201527f4c69717569646974792066656520746f74616c206d75737420626520616e206560448201527f76656e206e756d6265722064756520746f20726f756e64696e670000000000006064820152608401610e20565b600f899055601088905560118790556012869055600b859055600c849055600d839055600e8290558285611ec8898c61405e565b611ed2919061405e565b611edc919061405e565b6013558184611eeb888b61405e565b611ef5919061405e565b611eff919061405e565b6014556015819055611f12600582614029565b601454601354611f22919061405e565b1115611f605760405162461bcd60e51b815260206004820152600d60248201526c08ccacae640e8dede40d0d2ced609b1b6044820152606401610e20565b60135460145460155460408051938452602084019290925282820152517f01bae858246c904512695a3f6d48ab88abb7a0192fdd7c53b043e60317795f459181900360600190a1505050505050505050565b600080601c60009054906101000a90046001600160a01b03166001600160a01b0316630e5ee5ee6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612008573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061202c9190613fe3565b9150601c60009054906101000a90046001600160a01b03166001600160a01b0316639df62df26040518163ffffffff1660e01b8152600401602060405180830381865afa158015612081573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120a59190613fe3565b90509091565b60006120b8602054151590565b6120c25750600090565b6103e86002546120d06110b4565b6120da9190614012565b61111d9190614029565b6120ec612a0f565b801561214257602354600160b01b900460ff16156121425760405162461bcd60e51b8152602060048201526013602482015272141c9bdd1958dd1a5bdb88191a5cd8589b1959606a1b6044820152606401610e20565b60238054821515600160a81b0260ff60a81b199091161790556040517f96b2bfe55fa5f4032b9b4d922bd97bb17a7f025fce7fcecaefc955fd0111a9669061147690831515815260200190565b612197612a0f565b6000821180156121a75750600081115b6121ff5760405162461bcd60e51b815260206004820152602360248201527f44656e6f6d696e61746f7273206d75737420626520677265617465722074686160448201526206e20360ec1b6064820152608401610e20565b6023805460ff60b81b1916600160b81b85151502179055600154612224908290614029565b602555600154612235908390614029565b602481905560255460235460408051928352602083019390935260ff600160b81b9091041615158183015290517faa199f5aab08ad4ddee0140c8e7d13a4bebb822550aeb3d16e5f7bc485fba0f99181900360600190a1505050565b600061229b6110b4565b601f546001600160a01b03166000908152600460205260409020546122c09084614012565b610d0c9190614029565b6122d2612a0f565b6023546001600160a01b03838116610100909204161461235d57602354600160b01b900460ff161561233c5760405162461bcd60e51b8152602060048201526013602482015272141c9bdd1958dd1a5bdb88191a5cd8589b1959606a1b6044820152606401610e20565b60238054610100600160a81b0319166101006001600160a01b038516021790555b80156123d057602354601f546040516366812dbb60e11b81523060048201526001600160a01b039182166024820152610100909204169063cd025b7690604401600060405180830381600087803b1580156123b757600080fd5b505af11580156123cb573d6000803e3d6000fd5b505050505b6040516001600160a01b038316907f1ccf813789899d0a52466f1f5c4cabc2820e6818ad4eaca73837528653d00c3c90600090a25050565b612410612a0f565b601f546001600160a01b0383811691161480159061244b57506001600160a01b038216737a250d5630b4cf539739df2c5dacb4c659f2488d14155b6124ad5760405162461bcd60e51b815260206004820152602d60248201527f43616e277420616c7465722074726164696e6720636f6e74726163747320696e60448201526c103a3434b99036b0b73732b91760991b6064820152608401610e20565b6001600160a01b0382166000818152600860209081526040808320805486151560ff199182168117909255601e84528285208054821683179055600a84528285208054821683179055600984529382902080549094168117909355519182527fc63b2cd57d159035214234fce2c910c2e679c9647b0afc09960d6e8cb1574f0791016112ed565b600043602254602054612547919061405e565b111561255c576001601554610d0c919061404b565b8161256957601354610d0c565b505060145490565b612579612a0f565b6000546001600160a01b031633146125ce5760405162461bcd60e51b815260206004820152601860248201527710d85b1b195c881a5cc81b9bdd08185d5d1a1bdc9a5e995960421b6044820152606401610e20565b6000600860006125e66000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805492151560ff1990931692909217909155600a816126286000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805492151560ff1990931692909217909155601e8161266a6000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805492151560ff19909316929092179091556005816126ac6000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120737a250d5630b4cf539739df2c5dacb4c659f2488d82529092529020556113d581612aa2565b6126f8612a0f565b6001600160a01b038216301480159061272a57506001600160a01b0382166000908152601d602052604090205460ff16155b801561274457506000546001600160a01b03838116911614155b61274d57600080fd5b6001600160a01b0382166000908152600960205260409020805460ff191682158015919091179091556127e557601c54604051630a5b654b60e11b81526001600160a01b03848116600483015260006024830152909116906314b6ca96906044015b600060405180830381600087803b1580156127c957600080fd5b505af11580156127dd573d6000803e3d6000fd5b505050505050565b601c546001600160a01b03838116600081815260046020819052604091829020549151630a5b654b60e11b81529081019290925260248201529116906314b6ca96906044016127af565b5050565b61283b612a0f565b6001600160a01b0382166128615760405162461bcd60e51b8152600401610e20906140dd565b6001600160a01b0382166000818152600a6020908152604091829020805460ff191685151590811790915591519182527fe00fbc488e0ecd4458af11cf15f84d29b2cf621662aa8f46a48f3d29de95123d91016112ed565b60006128c6602054151590565b6128d05750600090565b6103e86003546120d06110b4565b6001600160a01b0383166129475760405162461bcd60e51b815260206004820152602a60248201527f45524332303a20617070726f76652066726f6d207468652061646472657373286044820152693029206164647265737360b01b6064820152608401610e20565b6001600160a01b0382166129ae5760405162461bcd60e51b815260206004820152602860248201527f45524332303a20617070726f766520746f207468652061646472657373283029604482015267206164647265737360c01b6064820152608401610e20565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000546001600160a01b031615801590612a4c57506000546001600160a01b0316331480612a4c5750336000908152601e602052604090205460ff165b6118cc5760405162461bcd60e51b815260206004820152602160248201527f4f776e61626c653a2063616c6c6572206973206e6f7420617574686f72697a656044820152601960fa1b6064820152608401610e20565b612aaa612a0f565b6001600160a01b038116612b0f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610e20565b6113d58161322e565b6001600160a01b038316600090815260046020526040812054821115612b8f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610e20565b60008211612bd75760405162461bcd60e51b8152602060048201526015602482015274139bc81d1bdad95b9cc81d1c985b9cd9995c9c9959605a1b6044820152606401610e20565b6001600160a01b038416612c3b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610e20565b6001600160a01b038316612c9d5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610e20565b602854600160a01b900460ff1615612cc157612cba84848461327e565b90506110ad565b612ccb8483613333565b6001600160a01b0383166000908152601d602052604090205460ff16158015612cff57506001600160a01b03831661dead14155b15612d2e576001600160a01b0383166000908152600a602052604090205460ff16612d2e57612d2e83836133a1565b602054612dc0576001600160a01b0384166000908152601e602052604090205460ff1680612d7457506001600160a01b0383166000908152601e602052604090205460ff165b612dc05760405162461bcd60e51b815260206004820152601a60248201527f436f6e7472616374206e6f74206c61756e63686564207965742e0000000000006044820152606401610e20565b6001600160a01b0384166000908152601d602052604090205460ff16158015612e0257506001600160a01b03841660009081526008602052604090205460ff16155b8015612e2f57506001600160a01b038416600090815260046020526040902054612e2d90839061404b565b155b15612e4257612e3f60018361404b565b91505b6001600160a01b03841660009081526004602052604081208054849290612e6a90849061404b565b90915550506001600160a01b03841660009081526008602052604081205460ff16158015612eb157506001600160a01b03841660009081526008602052604090205460ff16155b612ebb5782612ec6565b612ec6858585613435565b9050612ed2858561360c565b15612ee6578215612ee657612ee6836136d3565b6001600160a01b03841661dead14612f2b576001600160a01b03841660009081526004602052604081208054839290612f2090849061405e565b90915550612f439050565b8060016000828254612f3d919061404b565b90915550505b60205415158015612f5d5750602354600160a81b900460ff165b8015612f8257506001600160a01b03851660009081526008602052604090205460ff16155b156130145760235460405163d7ccbd8360e01b81523360048201526001600160a01b0387811660248301528681166044830152606482018690526101009092049091169063d7ccbd83906084016020604051808303816000875af1158015612fee573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061301291906142ae565b505b6001600160a01b03851660009081526009602052604090205460ff166130a657601c546001600160a01b03868116600081815260046020819052604091829020549151630a5b654b60e11b81529081019290925260248201529116906314b6ca9690604401600060405180830381600087803b15801561309357600080fd5b505af19250505080156130a4575060015b505b6001600160a01b03841660009081526009602052604090205460ff1661313857601c546001600160a01b03858116600081815260046020819052604091829020549151630a5b654b60e11b81529081019290925260248201529116906314b6ca9690604401600060405180830381600087803b15801561312557600080fd5b505af1925050508015613136575060015b505b601c54600160a01b900460ff16156131ad57601c60009054906101000a90046001600160a01b03166001600160a01b031663c33fb8776040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561319a57600080fd5b505af19250505080156131ab575060015b505b61deac196001600160a01b038516016131c75760006131c9565b835b6001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161320d91815260200190565b60405180910390a3506001949350505050565b613228612a0f565b6118cc60005b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0383166000908152600460205260408120805483919083906132a890849061404b565b90915550506001600160a01b038316600090815260046020526040812080548492906132d590849061405e565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161332191815260200190565b60405180910390a35060019392505050565b61333b6120ab565b8111158061336157506001600160a01b0382166000908152600a602052604090205460ff165b61282f5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610e20565b60006133ab6128b9565b6001600160a01b03841660009081526004602052604090205490915081906133d490849061405e565b11156134305760405162461bcd60e51b815260206004820152602560248201527f5472616e7366657220616d6f756e74206578636565647320746865206261672060448201526439b4bd329760d91b6064820152608401610e20565b505050565b6001600160a01b0382166000908152601d6020526040812054819060ff16801561346157506000601654115b1561354e5760006134718461115e565b6017546001600160a01b0388166000908152600660205260409020549192506134999161405e565b4211156134c7576001600160a01b038616600090815260066020908152604080832042905560079091528120555b6001600160a01b038616600090815260076020526040812080548392906134ef90849061405e565b90915550506018546001600160a01b0387166000908152600760205260409020541061354c5760155460646016546014548761352b9190614012565b6135359190614012565b61353f9190614029565b6135499190614029565b91505b505b80600003613595576015546001600160a01b0385166000908152601d602052604090205461357e9060ff16612534565b6135889085614012565b6135929190614029565b90505b30600090815260046020526040812080548392906135b490849061405e565b909155505060405181815230906001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3613603818461404b565b95945050505050565b6001600160a01b0382166000908152601d602052604081205460ff1615801561364e57506001600160a01b03831660009081526008602052604090205460ff16155b80156136645750602854600160a01b900460ff16155b80156136795750602354600160b81b900460ff165b801561369d57506001600160a01b0382166000908152601d602052604090205460ff165b80156136ba57506025543060009081526004602052604090205410155b80156110ad57506000601454601354610e99919061405e565b6028805460ff60a01b1916600160a01b1790556014546013546000916136f89161405e565b9050600060245460646026548561370f9190614012565b6137199190614029565b613723908561404b565b106137305760245461374a565b6064602654846137409190614012565b61374a9190614029565b306000908152600460205260409020549091508111156137765750306000908152600460205260409020545b6000613786601a54601b54610e8d565b61379f5760125460115461379a919061405e565b6137a2565b60005b905060006002846137b38486614012565b6137bd9190614029565b6137c79190614029565b90506137d3818461404b565b6040805160028082526060820183529295506000929091602083019080368337019050509050308160008151811061380d5761380d614106565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561388b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138af9190614228565b816001815181106138c2576138c2614106565b6001600160a01b03928316602091820292909201015260405163791ac94760e01b81527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d9091169063791ac947906139279087906000908690309042906004016142cb565b600060405180830381600087803b15801561394157600080fd5b505af1158015613955573d6000803e3d6000fd5b504792506000915061396a9050600286614029565b613974908861404b565b905060006002826139858886614012565b61398f9190614029565b6139999190614029565b9050600082601054600f546139ae919061405e565b6139b89086614012565b6139c29190614029565b9050600083600e54600d546139d7919061405e565b6139e19087614012565b6139eb9190614029565b90506000816139fa848661405e565b613a04919061405e565b613a0e908761404b565b90508715613af15760405163f305d71960e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063f305d719908690613a719030908d90600090819061dead904290600401614245565b60606040518083038185885af1158015613a8f573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613ab49190614280565b505060408051868152602081018b90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b8015613b6e5760007f000000000000000000000000b7c94f832e33eebdf8023e67253ba34f290b7cf16001600160a01b03168260405160006040518083038185875af1925050503d8060008114613b64576040519150601f19603f3d011682016040523d82523d6000602084013e613b69565b606091505b505050505b8215613bd857601c60009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b158015613bc457600080fd5b505af193505050508015613bd6575060015b505b8115613c555760007f0000000000000000000000001bdd2bdfeaab978486a8ab4294a79accb84a82816001600160a01b03168360405160006040518083038185875af1925050503d8060008114613c4b576040519150601f19603f3d011682016040523d82523d6000602084013e613c50565b606091505b505050505b50506028805460ff60a01b1916905550505050505050505050565b6001600160a01b03811681146113d557600080fd5b600060208284031215613c9757600080fd5b81356110ad81613c70565b600060208083528351808285015260005b81811015613ccf57858101830151858201604001528201613cb3565b506000604082860101526040601f19601f8301168501019250505092915050565b60008060408385031215613d0357600080fd5b8235613d0e81613c70565b946020939093013593505050565b600080600060608486031215613d3157600080fd5b505081359360208301359350604090920135919050565b80151581146113d557600080fd5b60008060008060808587031215613d6c57600080fd5b8435935060208501359250604085013591506060850135613d8c81613d48565b939692955090935050565b60008060408385031215613daa57600080fd5b50508035926020909101359150565b600060208284031215613dcb57600080fd5b81356110ad81613d48565b600080600060608486031215613deb57600080fd5b8335613df681613c70565b92506020840135613e0681613c70565b929592945050506040919091013590565b600060208284031215613e2957600080fd5b5035919050565b60008060408385031215613e4357600080fd5b8235613e4e81613c70565b91506020830135613e5e81613d48565b809150509250929050565b60008083601f840112613e7b57600080fd5b50813567ffffffffffffffff811115613e9357600080fd5b6020830191508360208260051b8501011115613eae57600080fd5b9250929050565b60008060008060408587031215613ecb57600080fd5b843567ffffffffffffffff80821115613ee357600080fd5b613eef88838901613e69565b90965094506020870135915080821115613f0857600080fd5b50613f1587828801613e69565b95989497509550505050565b60008060008060008060008060006101208a8c031215613f4057600080fd5b505087359960208901359950604089013598606081013598506080810135975060a0810135965060c0810135955060e08101359450610100013592509050565b600080600060608486031215613f9557600080fd5b8335613fa081613d48565b95602085013595506040909401359392505050565b60008060408385031215613fc857600080fd5b8235613fd381613c70565b91506020830135613e5e81613c70565b600060208284031215613ff557600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610d0c57610d0c613ffc565b60008261404657634e487b7160e01b600052601260045260246000fd5b500490565b81810381811115610d0c57610d0c613ffc565b80820180821115610d0c57610d0c613ffc565b80516001600160701b038116811461408857600080fd5b919050565b6000806000606084860312156140a257600080fd5b6140ab84614071565b92506140b960208501614071565b9150604084015163ffffffff811681146140d257600080fd5b809150509250925092565b6020808252600f908201526e496e76616c6964206164647265737360881b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b600181815b8085111561415757816000190482111561413d5761413d613ffc565b8085161561414a57918102915b93841c9390800290614121565b509250929050565b60008261416e57506001610d0c565b8161417b57506000610d0c565b8160018114614191576002811461419b576141b7565b6001915050610d0c565b60ff8411156141ac576141ac613ffc565b50506001821b610d0c565b5060208310610133831016604e8410600b84101617156141da575081810a610d0c565b6141e4838361411c565b80600019048211156141f8576141f8613ffc565b029392505050565b60006110ad60ff84168361415f565b60006001820161422157614221613ffc565b5060010190565b60006020828403121561423a57600080fd5b81516110ad81613c70565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b60008060006060848603121561429557600080fd5b8351925060208401519150604084015190509250925092565b6000602082840312156142c057600080fd5b81516110ad81613d48565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561431b5784516001600160a01b0316835293830193918301916001016142f6565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220958285016ea232aceb81b600d52766643738fce57be539a369752b6f71fac1c964736f6c63430008110033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000b3b7aee441516b8dbdd9139d822cfa96889427ae000000000000000000000000b7c94f832e33eebdf8023e67253ba34f290b7cf10000000000000000000000001bdd2bdfeaab978486a8ab4294a79accb84a8281

-----Decoded View---------------
Arg [0] : _liquidityProvider (address): 0xB3b7AeE441516b8DBdD9139d822CfA96889427AE
Arg [1] : _marketingWallet (address): 0xB7C94F832E33EeBDF8023e67253Ba34F290b7CF1
Arg [2] : _communityWallet (address): 0x1bDd2bdFeAAB978486A8AB4294a79aCcb84A8281

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000b3b7aee441516b8dbdd9139d822cfa96889427ae
Arg [1] : 000000000000000000000000b7c94f832e33eebdf8023e67253ba34f290b7cf1
Arg [2] : 0000000000000000000000001bdd2bdfeaab978486a8ab4294a79accb84a8281


Deployed Bytecode Sourcemap

15342:24674:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32469:208;;;;;;;;;;-1:-1:-1;32469:208:0;;;;;:::i;:::-;;:::i;:::-;;;;576:25:1;;;632:2;617:18;;610:34;;;;549:18;32469:208:0;;;;;;;;17670:49;;;;;;;;;;;;;;;;;;;801:25:1;;;789:2;774:18;17670:49:0;655:177:1;19482:71:0;;;;;;;;;;-1:-1:-1;19545:5:0;;;;;;;;;;;;-1:-1:-1;;;19545:5:0;;;;19482:71;;;;;;;:::i;19888:159::-;;;;;;;;;;-1:-1:-1;19888:159:0;;;;;:::i;:::-;;:::i;:::-;;;1875:14:1;;1868:22;1850:41;;1838:2;1823:18;19888:159:0;1710:187:1;33288:228:0;;;;;;;;;;-1:-1:-1;33288:228:0;;;;;:::i;:::-;;:::i;:::-;;33524:450;;;;;;;;;;-1:-1:-1;33524:450:0;;;;;:::i;:::-;;:::i;29385:150::-;;;;;;;;;;-1:-1:-1;29385:150:0;;;;;:::i;:::-;;:::i;19230:88::-;;;;;;;;;;-1:-1:-1;19303:12:0;;19230:88;;37884:246;;;;;;;;;;-1:-1:-1;37884:246:0;;;;;:::i;:::-;;:::i;30168:340::-;;;;;;;;;;;;;:::i;34896:99::-;;;;;;;;;;-1:-1:-1;34896:99:0;;;;;:::i;:::-;;:::i;21361:341::-;;;;;;;;;;-1:-1:-1;21361:341:0;;;;;:::i;:::-;;:::i;16781:48::-;;;;;;;;;;;;15448:42;16781:48;;;;;-1:-1:-1;;;;;3921:32:1;;;3903:51;;3891:2;3876:18;16781:48:0;3757:203:1;29069:144:0;;;;;;;;;;;;;:::i;19324:71::-;;;;;;;;;;-1:-1:-1;19324:71:0;;15606:1;4107:36:1;;4095:2;4080:18;19324:71:0;3965:184:1;20055:213:0;;;;;;;;;;-1:-1:-1;20055:213:0;;;;;:::i;:::-;;:::i;24708:247::-;;;;;;;;;;-1:-1:-1;24708:247:0;;;;;:::i;:::-;;:::i;31678:128::-;;;;;;;;;;;;;:::i;38138:233::-;;;;;;;;;;-1:-1:-1;38138:233:0;;;;;:::i;:::-;;:::i;32685:219::-;;;;;;;;;;-1:-1:-1;32685:219:0;;;;;:::i;:::-;;:::i;21067:122::-;;;;;;;;;;-1:-1:-1;21067:122:0;;;;;:::i;:::-;;:::i;17408:27::-;;;;;;;;;;;;;;;;35003:229;;;;;;;;;;-1:-1:-1;35003:229:0;;;;;:::i;:::-;;:::i;35418:219::-;;;;;;;;;;-1:-1:-1;35418:219:0;;;;;:::i;:::-;;:::i;16893:50::-;;;;;;;;;;;;;;;17798:34;;;;;;;;;;;;;;;;35818:222;;;;;;;;;;-1:-1:-1;35818:222:0;;;;;:::i;:::-;;:::i;38376:717::-;;;;;;;;;;-1:-1:-1;38376:717:0;;;;;:::i;:::-;;:::i;17633:30::-;;;;;;;;;;-1:-1:-1;17633:30:0;;;;-1:-1:-1;;;17633:30:0;;;;;;19636:105;;;;;;;;;;-1:-1:-1;19636:105:0;;;;;:::i;:::-;-1:-1:-1;;;;;19720:18:0;19702:7;19720:18;;;:9;:18;;;;;;;19636:105;30516:285;;;;;;;;;;;;;:::i;17543:36::-;;;;;;;;;;-1:-1:-1;17543:36:0;;;;-1:-1:-1;;;17543:36:0;;;;;;29931:229;;;;;;;;;;;;;:::i;33982:906::-;;;;;;:::i;:::-;;:::i;17509:27::-;;;;;;;;;;-1:-1:-1;17509:27:0;;;;;;;-1:-1:-1;;;;;17509:27:0;;;19559:71;;;;;;;;;;-1:-1:-1;19602:7:0;7369:6;-1:-1:-1;;;;;7369:6:0;19559:71;29069:144;19401:75;;;;;;;;;;-1:-1:-1;19466:7:0;;;;;;;;;;;;-1:-1:-1;;;19466:7:0;;;;19401:75;;17036:34;;;;;;;;;;-1:-1:-1;17036:34:0;;;;-1:-1:-1;;;;;17036:34:0;;;20276:417;;;;;;;;;;-1:-1:-1;20276:417:0;;;;;:::i;:::-;;:::i;16836:50::-;;;;;;;;;;;;;;;17348:19;;;;;;;;;;-1:-1:-1;17348:19:0;;;;-1:-1:-1;;;;;17348:19:0;;;21197:156;;;;;;;;;;-1:-1:-1;21197:156:0;;;;;:::i;:::-;;:::i;36298:1140::-;;;;;;;;;;-1:-1:-1;36298:1140:0;;;;;:::i;:::-;;:::i;32258:199::-;;;;;;;;;;;;;:::i;17376:25::-;;;;;;;;;;;;;;;;17077:31;;;;;;;;;;-1:-1:-1;17077:31:0;;;;-1:-1:-1;;;17077:31:0;;;;;;35240:166;;;;;;;;;;;;;:::i;17586:38::-;;;;;;;;;;-1:-1:-1;17586:38:0;;;;-1:-1:-1;;;17586:38:0;;;;;;31022:242;;;;;;;;;;-1:-1:-1;31022:242:0;;;;;:::i;:::-;;:::i;37446:430::-;;;;;;;;;;-1:-1:-1;37446:430:0;;;;;:::i;:::-;;:::i;29221:156::-;;;;;;;;;;-1:-1:-1;29221:156:0;;;;;:::i;:::-;;:::i;31276:390::-;;;;;;;;;;-1:-1:-1;31276:390:0;;;;;:::i;:::-;;:::i;17872:21::-;;;;;;;;;;-1:-1:-1;17872:21:0;;;;-1:-1:-1;;;;;17872:21:0;;;17841:24;;;;;;;;;;;;;;;;19747:133;;;;;;;;;;-1:-1:-1;19747:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;19849:19:0;;;19831:7;19849:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;19747:133;31818:432;;;;;;;;;;-1:-1:-1;31818:432:0;;;;;:::i;:::-;;:::i;24489:211::-;;;;;;;;;;-1:-1:-1;24489:211:0;;;;;:::i;:::-;;:::i;29543:380::-;;;;;;;;;;-1:-1:-1;29543:380:0;;;;;:::i;:::-;;:::i;32912:368::-;;;;;;;;;;-1:-1:-1;32912:368:0;;;;;:::i;:::-;;:::i;36048:242::-;;;;;;;;;;-1:-1:-1;36048:242:0;;;;;:::i;:::-;;:::i;17734:49::-;;;;;;;;;;;;;;;;17117:34;;;;;;;;;;;;;;;35645:165;;;;;;;;;;;;;:::i;17442:25::-;;;;;;;;;;;;;;;;32469:208;32589:7;;:33;;-1:-1:-1;;;32589:33:0;;-1:-1:-1;;;;;3921:32:1;;;32589:33:0;;;3903:51:1;32537:15:0;;;;32589:7;;;:25;;3876:18:1;;32589:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32640:7;;:32;;-1:-1:-1;;;32640:32:0;;-1:-1:-1;;;;;3921:32:1;;;32640::0;;;3903:51:1;32579:43:0;;-1:-1:-1;32640:7:0;;;:24;;3876:18:1;;32640:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32630:42;;32469:208;;;:::o;19888:159::-;19963:4;19980:37;19989:10;20001:7;20010:6;19980:8;:37::i;:::-;-1:-1:-1;20035:4:0;19888:159;;;;;:::o;33288:228::-;7255:13;:11;:13::i;:::-;33424:6:::1;33418:3;:12;33410:21;;;::::0;::::1;;33442:7;::::0;:66:::1;::::0;-1:-1:-1;;;33442:66:0;;::::1;::::0;::::1;8690:25:1::0;;;8731:18;;;8724:34;;;8774:18;;;8767:34;;;-1:-1:-1;;;;;33442:7:0;;::::1;::::0;:31:::1;::::0;8663:18:1;;33442:66:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;33288:228:::0;;;:::o;33524:450::-;7255:13;:11;:13::i;:::-;33667:2:::1;33653:10;:16;;:31;;;;;33681:3;33673:4;:11;;33653:31;:61;;;;-1:-1:-1::0;33689:9:0;;;:24:::1;;;33710:3;33702:4;:11;;33689:24;33653:83;;;;;33729:7;33718;:18;;33653:83;33645:120;;;::::0;-1:-1:-1;;;33645:120:0;;9014:2:1;33645:120:0::1;::::0;::::1;8996:21:1::0;9053:2;9033:18;;;9026:30;9092:26;9072:18;;;9065:54;9136:18;;33645:120:0::1;;;;;;;;;33776:11;:18:::0;;;33805:14:::1;:24:::0;;;33840:17:::1;:30:::0;;;33881:16:::1;:28:::0;;-1:-1:-1;;33881:28:0::1;::::0;::::1;;;::::0;;33925:41:::1;::::0;;8690:25:1;;;8746:2;8731:18;;8724:34;;;8774:18;;;8767:34;;;33925:41:0::1;::::0;8678:2:1;8663:18;33925:41:0::1;;;;;;;33524:450:::0;;;;:::o;29385:150::-;29465:4;29521:6;29489:29;29509:8;29489:19;:29::i;:::-;:38;;29385:150;-1:-1:-1;;;29385:150:0:o;37884:246::-;7255:13;:11;:13::i;:::-;37981:15:::1;:25:::0;;;38017:26:::1;:41:::0;;;38074:48:::1;38046:12:::0;38093:13:::1;37999:7:::0;38103:3:::1;38093:13;:::i;:::-;:28;;;;:::i;:::-;38074:48;::::0;801:25:1;;;789:2;774:18;38074:48:0::1;;;;;;;37884:246:::0;;:::o;30168:340::-;30222:6;;-1:-1:-1;;;;;30222:6:0;:20;;;;:80;;-1:-1:-1;30261:6:0;;-1:-1:-1;;;;;30261:6:0;30247:10;:20;;:54;;-1:-1:-1;30290:10:0;30271:30;;;;:18;:30;;;;;;;;30247:54;30214:117;;;;-1:-1:-1;;;30214:117:0;;9894:2:1;30214:117:0;;;9876:21:1;9933:2;9913:18;;;9906:30;-1:-1:-1;;;9952:18:1;;;9945:54;10016:18;;30214:117:0;9692:348:1;30214:117:0;30363:15;30350:9;;:28;;30342:62;;;;-1:-1:-1;;;30342:62:0;;10247:2:1;30342:62:0;;;10229:21:1;10286:2;10266:18;;;10259:30;-1:-1:-1;;;10305:18:1;;;10298:51;10366:18;;30342:62:0;10045:345:1;30342:62:0;30439:6;;30415:31;;-1:-1:-1;;;;;30439:6:0;30415:23;:31::i;:::-;30457:6;:19;;-1:-1:-1;;;;;;30457:19:0;;;30474:1;30487:9;:13;30168:340::o;34896:99::-;7255:13;:11;:13::i;:::-;34965:11:::1;:22:::0;;;::::1;;-1:-1:-1::0;;;34965:22:0::1;-1:-1:-1::0;;;;34965:22:0;;::::1;::::0;;;::::1;::::0;;34896:99::o;21361:341::-;-1:-1:-1;;;;;21481:19:0;;21461:4;21481:19;;;:11;:19;;;;;;;;21501:10;21481:31;;;;;;;;-1:-1:-1;;21481:52:0;21478:157;;-1:-1:-1;;;;;21583:19:0;;;;;;:11;:19;;;;;;;;21603:10;21583:31;;;;;;;;:40;;21617:6;;21583:40;:::i;:::-;-1:-1:-1;;;;;21549:19:0;;;;;;:11;:19;;;;;;;;21569:10;21549:31;;;;;;;:74;21478:157;21654:40;21668:6;21676:9;21687:6;21654:13;:40::i;:::-;21647:47;;21361:341;;;;;;:::o;29069:144::-;19720:9;:18;;;;15448:42;29122:7;19720:18;;;;;29122:7;;29165:39;;;:::i;:::-;29149:12;;:56;;;;:::i;:::-;29142:63;;29069:144;:::o;20055:213::-;20171:10;20145:4;20192:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;20192:32:0;;;;;;;;;;20145:4;;20162:76;;20183:7;;20192:45;;20227:10;;20192:45;:::i;:::-;20162:8;:76::i;24708:247::-;24774:7;24795:16;24813;24843:4;;;;;;;;;-1:-1:-1;;;;;24843:4:0;-1:-1:-1;;;;;24834:26:0;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;24898:16:0;;24794:68;;-1:-1:-1;24794:68:0;-1:-1:-1;24940:6:0;;24898:16;;:38;;24928:8;24898:38;;;24917:8;24898:38;-1:-1:-1;;;;;24897:49:0;;;;;:::i;:::-;24880:13;:6;24889:4;24880:13;:::i;:::-;:67;;;;:::i;:::-;24873:74;24708:247;-1:-1:-1;;;;24708:247:0:o;31678:128::-;7255:13;:11;:13::i;:::-;31737:18:::1;:25:::0;;-1:-1:-1;;;;31737:25:0::1;-1:-1:-1::0;;;31737:25:0::1;::::0;;31778:20:::1;::::0;::::1;::::0;31737:25;;31778:20:::1;31678:128::o:0;38138:233::-;7255:13;:11;:13::i;:::-;-1:-1:-1;;;;;38232:19:0;::::1;38224:47;;;;-1:-1:-1::0;;;38224:47:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;38282:21:0;::::1;;::::0;;;:14:::1;:21;::::0;;;;;;;;:32;;-1:-1:-1;;38282:32:0::1;::::0;::::1;;::::0;;::::1;::::0;;;38330:33;;1850:41:1;;;38330:33:0::1;::::0;1823:18:1;38330:33:0::1;;;;;;;;38138:233:::0;;:::o;32685:219::-;7255:13;:11;:13::i;:::-;-1:-1:-1;;;;;32761:29:0;::::1;;::::0;;;:16:::1;:29;::::0;;;;;::::1;;32757:139;;32793:7;::::0;-1:-1:-1;;;;;32823:22:0;;::::1;32793:7;32823:22:::0;;;:9:::1;:22;::::0;;;;;;;;;32793:53;;-1:-1:-1;;;32793:53:0;;;;::::1;11824:51:1::0;;;;11891:18;;;11884:34;32793:7:0;::::1;::::0;:16:::1;::::0;11797:18:1;;32793:53:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;32685:219:::0;:::o;32757:139::-:1;32864:7;::::0;:32:::1;::::0;-1:-1:-1;;;32864:32:0;;-1:-1:-1;;;;;11842:32:1;;;32864::0::1;::::0;::::1;11824:51:1::0;32864:7:0::1;11891:18:1::0;;;11884:34;32864:7:0;;::::1;::::0;:16:::1;::::0;11797:18:1;;32864:32:0::1;11650:274:1::0;32757:139:0::1;32685:219:::0;:::o;21067:122::-;21122:4;21146:35;21154:7;-1:-1:-1;;21146:7:0;:35::i;35003:229::-;7255:13;:11;:13::i;:::-;35096:1:::1;35082:11;:15;35074:55;;;::::0;-1:-1:-1;;;35074:55:0;;12418:2:1;35074:55:0::1;::::0;::::1;12400:21:1::0;12457:2;12437:18;;;12430:30;12496:28;12476:18;;;12469:56;12542:18;;35074:55:0::1;12216:350:1::0;35074:55:0::1;35140:12;:26:::0;;;35182:42:::1;35202:21;:19;:21::i;:::-;35182:42;::::0;801:25:1;;;789:2;774:18;35182:42:0::1;;;;;;;;35003:229:::0;:::o;35418:219::-;7255:13;:11;:13::i;:::-;35515:1:::1;35501:11;:15;35493:49;;;::::0;-1:-1:-1;;;35493:49:0;;12773:2:1;35493:49:0::1;::::0;::::1;12755:21:1::0;12812:2;12792:18;;;12785:30;-1:-1:-1;;;12831:18:1;;;12824:51;12892:18;;35493:49:0::1;12571:345:1::0;35493:49:0::1;35553:14;:28:::0;;;35597:32:::1;35610:18;:16;:18::i;35818:222::-:0;7255:13;:11;:13::i;:::-;-1:-1:-1;;;;;35909:20:0;::::1;35901:48;;;;-1:-1:-1::0;;;35901:48:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;35960:19:0;::::1;;::::0;;;:11:::1;:19;::::0;;;;;;;;:28;;-1:-1:-1;;35960:28:0::1;::::0;::::1;;::::0;;::::1;::::0;;;36004;;1850:41:1;;;36004:28:0::1;::::0;1823:18:1;36004:28:0::1;1710:187:1::0;38376:717:0;7255:13;:11;:13::i;:::-;38495:35;;::::1;38487:73;;;::::0;-1:-1:-1;;;38487:73:0;;13123:2:1;38487:73:0::1;::::0;::::1;13105:21:1::0;13162:2;13142:18;;;13135:30;13201:27;13181:18;;;13174:55;13246:18;;38487:73:0::1;12921:349:1::0;38487:73:0::1;38591:11;::::0;;-1:-1:-1;;;;38613:19:0;::::1;::::0;;;-1:-1:-1;;;38591:11:0;::::1;;;-1:-1:-1::0;38729:281:0::1;38749:21:::0;;::::1;38729:281;;;38801:14;:29;38816:10;;38827:1;38816:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;38801:29:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;38801:29:0;;::::1;;38800:30;:61:::0;::::1;;;-1:-1:-1::0;38859:1:0::1;38834:10:::0;;38845:1;38834:13;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;38834:27:0::1;;;38800:61;38792:119;;;::::0;-1:-1:-1;;;38792:119:0;;13609:2:1;38792:119:0::1;::::0;::::1;13591:21:1::0;13648:2;13628:18;;;13621:30;13687:34;13667:18;;;13660:62;-1:-1:-1;;;13738:18:1;;;13731:43;13791:19;;38792:119:0::1;13407:409:1::0;38792:119:0::1;38926:72;38940:10;38952;;38963:1;38952:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;38981:15;15606:1;38981:2;:15;:::i;:::-;38967:7;;38975:1;38967:10;;;;;;;:::i;:::-;;;;;;;:30;;;;:::i;:::-;38926:13;:72::i;:::-;-1:-1:-1::0;38772:3:0;::::1;::::0;::::1;:::i;:::-;;;;38729:281;;;-1:-1:-1::0;39020:11:0::1;:26:::0;;-1:-1:-1;;;;39020:26:0::1;-1:-1:-1::0;;;39020:26:0;::::1;;;;::::0;;39062:23:::1;::::0;39074:10:::1;::::0;39062:23:::1;::::0;-1:-1:-1;;39062:23:0::1;38476:617;38376:717:::0;;;;:::o;30516:285::-;7255:13;:11;:13::i;:::-;30613:5:::1;30590:11;:20;30602:7;7342::::0;7369:6;-1:-1:-1;;;;;7369:6:0;;7296:87;30602:7:::1;-1:-1:-1::0;;;;;30590:20:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;30590:20:0;;;:28;;;::::1;;-1:-1:-1::0;;30590:28:0;;::::1;::::0;;;::::1;::::0;;;30629:15:::1;-1:-1:-1::0;30645:7:0::1;7342::::0;7369:6;-1:-1:-1;;;;;7369:6:0;;7296:87;30645:7:::1;-1:-1:-1::0;;;;;30629:24:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;30629:24:0;;;:32;;;::::1;;-1:-1:-1::0;;30629:32:0;;::::1;::::0;;;::::1;::::0;;;30672:18:::1;-1:-1:-1::0;30691:7:0::1;7342::::0;7369:6;-1:-1:-1;;;;;7369:6:0;;7296:87;30691:7:::1;-1:-1:-1::0;;;;;30672:27:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;30672:27:0;;;:35;;;::::1;;-1:-1:-1::0;;30672:35:0;;::::1;::::0;;;::::1;::::0;;;30718:11:::1;-1:-1:-1::0;30730:7:0::1;7342::::0;7369:6;-1:-1:-1;;;;;7369:6:0;;7296:87;30730:7:::1;-1:-1:-1::0;;;;;30718:20:0::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;-1:-1:-1;30718:20:0;;;17197:42:::1;30718:35:::0;;;;;;;:39;30768:25:::1;:23;:25::i;:::-;30516:285::o:0;29931:229::-;7255:13;:11;:13::i;:::-;29993:6:::1;::::0;-1:-1:-1;;;;;29993:6:0::1;:20:::0;29985:56:::1;;;::::0;-1:-1:-1;;;29985:56:0;;15546:2:1;29985:56:0::1;::::0;::::1;15528:21:1::0;15585:2;15565:18;;;15558:30;15624:25;15604:18;;;15597:53;15667:18;;29985:56:0::1;15344:347:1::0;29985:56:0::1;30064:25;:15;30082:7;30064:25;:::i;:::-;30052:9;:37:::0;7342:7;7369:6;30100::::1;:16:::0;;-1:-1:-1;;;;;;30100:16:0::1;-1:-1:-1::0;;;;;7369:6:0;;;30100:16;;;::::1;::::0;;30127:25:::1;:23;:25::i;33982:906::-:0;7255:13;:11;:13::i;:::-;34065:10:::1;::::0;:15;:34;::::1;;;;34098:1;34084:11;:15;34065:34;34057:43;;;::::0;::::1;;34131:1;34119:9;:13;34111:44;;;::::0;-1:-1:-1;;;34111:44:0;;15898:2:1;34111:44:0::1;::::0;::::1;15880:21:1::0;15937:2;15917:18;;;15910:30;-1:-1:-1;;;15956:18:1;;;15949:48;16014:18;;34111:44:0::1;15696:342:1::0;34111:44:0::1;34166:12;34181:9;34166:24;;34203:19;34237:6;-1:-1:-1::0;;;;;34237:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34203:51;;34265:11;34279:6;-1:-1:-1::0;;;;;34279:11:0::1;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34312:35;::::0;-1:-1:-1;;;34312:35:0;;-1:-1:-1;;;;;16529:15:1;;;34312:35:0::1;::::0;::::1;16511:34:1::0;34341:4:0::1;16561:18:1::0;;;16554:43;34265:27:0;;-1:-1:-1;34312:15:0;;::::1;::::0;::::1;::::0;16446:18:1;;34312:35:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34305:4;:42:::0;;-1:-1:-1;;;;;;34305:42:0::1;-1:-1:-1::0;;;;;34305:42:0;;;::::1;::::0;;::::1;::::0;;34358:81:::1;;34401:38;::::0;-1:-1:-1;;;34401:38:0;;-1:-1:-1;;;;;16529:15:1;;;34401:38:0::1;::::0;::::1;16511:34:1::0;34433:4:0::1;16561:18:1::0;;;16554:43;34401:18:0;::::1;::::0;::::1;::::0;16446::1;;34401:38:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34394:4;:45:::0;;-1:-1:-1;;;;;;34394:45:0::1;-1:-1:-1::0;;;;;34394:45:0;;;::::1;::::0;;;::::1;::::0;;34358:81:::1;34467:4;::::0;;-1:-1:-1;;;;;34467:4:0;;::::1;34452:20;::::0;;;:14:::1;:20;::::0;;;;;;;:27;;34475:4:::1;-1:-1:-1::0;;34452:27:0;;::::1;::::0;::::1;::::0;;;34507:4;;;::::1;34490:22:::0;;:16:::1;:22:::0;;;;;:29;;;::::1;::::0;::::1;::::0;;34550:4:::1;34530:26:::0;;;:11:::1;:26:::0;;;;;:33;;;::::1;::::0;::::1;::::0;;34574:18:::1;:33:::0;;;;;:40;;;;::::1;::::0;;::::1;::::0;;;19720:9;:18;;;;;;;;34627:106;;-1:-1:-1;;;34627:106:0;;:6:::1;:22:::0;;::::1;::::0;::::1;::::0;34657:4;;34627:106:::1;::::0;34550:4;;19720:18;34452:20;;;;34706:10:::1;::::0;34717:15:::1;::::0;34627:106:::1;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;34746:10:0::1;:24:::0;;;34794:12:::1;34781:10;:25:::0;34832:15:::1;34817:12;:30:::0;34863:17:::1;::::0;::::1;::::0;-1:-1:-1;;34863:17:0::1;34046:842;;;33982:906:::0;:::o;20276:417::-;20427:10;20371:4;20415:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;20415:32:0;;;;;;;;;;20466:35;;;;20458:91;;;;-1:-1:-1;;;20458:91:0;;17733:2:1;20458:91:0;;;17715:21:1;17772:2;17752:18;;;17745:30;17811:34;17791:18;;;17784:62;-1:-1:-1;;;17862:18:1;;;17855:41;17913:19;;20458:91:0;17531:407:1;20458:91:0;20585:65;20594:10;20606:7;20634:15;20615:16;:34;20585:8;:65::i;:::-;-1:-1:-1;20681:4:0;;20276:417;-1:-1:-1;;;20276:417:0:o;21197:156::-;21277:4;21301:44;21315:10;21327:9;21338:6;21301:13;:44::i;36298:1140::-;7255:13;:11;:13::i;:::-;36623;36613:1:::1;36576:33;36592:17:::0;36623:13;36576:33:::1;:::i;:::-;36575:39;;;;:::i;:::-;36574:45;::::0;36618:1:::1;36574:45;:::i;:::-;:62;36566:133;;;::::0;-1:-1:-1;;;36566:133:0;;18145:2:1;36566:133:0::1;::::0;::::1;18127:21:1::0;18184:2;18164:18;;;18157:30;18223:34;18203:18;;;18196:62;18294:28;18274:18;;;18267:56;18340:19;;36566:133:0::1;17943:422:1::0;36566:133:0::1;36710:13;:27:::0;;;36748:17:::1;:35:::0;;;36794:12:::1;:28:::0;;;36833:16:::1;:36:::0;;;36880:12:::1;:28:::0;;;36919:16:::1;:36:::0;;;36966:17:::1;:33:::0;;;37010:21:::1;:41:::0;;;36986:13;36895;37076:27:::1;36809:13:::0;36726:11;37076:27:::1;:::i;:::-;:43;;;;:::i;:::-;:59;;;;:::i;:::-;37062:11;:73:::0;37219:17;37199;37161:35:::1;37179:17:::0;37161:15;:35:::1;:::i;:::-;:55;;;;:::i;:::-;:75;;;;:::i;:::-;37146:12;:90:::0;37247:14:::1;:32:::0;;;37328:18:::1;37345:1;37264:15:::0;37328:18:::1;:::i;:::-;37312:12;;37298:11;;:26;;;;:::i;:::-;:48;;37290:74;;;::::0;-1:-1:-1;;;37290:74:0;;18572:2:1;37290:74:0::1;::::0;::::1;18554:21:1::0;18611:2;18591:18;;;18584:30;-1:-1:-1;;;18630:18:1;;;18623:43;18683:18;;37290:74:0::1;18370:337:1::0;37290:74:0::1;37388:11;::::0;37401:12:::1;::::0;37415:14:::1;::::0;37380:50:::1;::::0;;8690:25:1;;;8746:2;8731:18;;8724:34;;;;8774:18;;;8767:34;37380:50:0;::::1;::::0;;;;8678:2:1;37380:50:0;;::::1;36298:1140:::0;;;;;;;;;:::o;32258:199::-;32310:20;32332:15;32375:7;;;;;;;;;-1:-1:-1;;;;;32375:7:0;-1:-1:-1;;;;;32375:24:0;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32360:41;;32422:7;;;;;;;;;-1:-1:-1;;;;;32422:7:0;-1:-1:-1;;;;;32422:25:0;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32412:37;;32258:199;;:::o;35240:166::-;35292:7;35316:10;29038;;:15;;;28971:90;35316:10;35312:24;;-1:-1:-1;35335:1:0;;35240:166::o;35312:24::-;35394:4;35379:12;;35354:22;:20;:22::i;:::-;:37;;;;:::i;:::-;:44;;;;:::i;31022:242::-;7255:13;:11;:13::i;:::-;31101:8:::1;31097:78;;;31133:18;::::0;-1:-1:-1;;;31133:18:0;::::1;;;31132:19;31124:51;;;::::0;-1:-1:-1;;;31124:51:0;;18914:2:1;31124:51:0::1;::::0;::::1;18896:21:1::0;18953:2;18933:18;;;18926:30;-1:-1:-1;;;18972:18:1;;;18965:49;19031:18;;31124:51:0::1;18712:343:1::0;31124:51:0::1;31186:17;:28:::0;;;::::1;;-1:-1:-1::0;;;31186:28:0::1;-1:-1:-1::0;;;;31186:28:0;;::::1;;::::0;;31230:26:::1;::::0;::::1;::::0;::::1;::::0;31206:8;1875:14:1;1868:22;1850:41;;1838:2;1823:18;;1710:187;37446:430:0;7255:13;:11;:13::i;:::-;37590:1:::1;37575:12;:16;:39;;;;;37613:1;37595:15;:19;37575:39;37567:87;;;::::0;-1:-1:-1;;;37567:87:0;;19262:2:1;37567:87:0::1;::::0;::::1;19244:21:1::0;19301:2;19281:18;;;19274:30;19340:34;19320:18;;;19313:62;-1:-1:-1;;;19391:18:1;;;19384:33;19434:19;;37567:87:0::1;19060:399:1::0;37567:87:0::1;37665:11;:22:::0;;-1:-1:-1;;;;37665:22:0::1;-1:-1:-1::0;;;37665:22:0;::::1;;;;::::0;;-1:-1:-1;37712:12:0;:30:::1;::::0;37727:15;;37712:30:::1;:::i;:::-;37698:11;:44:::0;37769:12:::1;::::0;:27:::1;::::0;37784:12;;37769:27:::1;:::i;:::-;37753:13;:43:::0;;;37828:11:::1;::::0;37856::::1;::::0;37812:56:::1;::::0;;19660:25:1;;;19716:2;19701:18;;19694:34;;;;37856:11:0::1;-1:-1:-1::0;;;37856:11:0;;::::1;;19771:14:1::0;19764:22;19744:18;;;19737:50;37812:56:0;;::::1;::::0;;;;19648:2:1;37812:56:0;;::::1;37446:430:::0;;;:::o;29221:156::-;29289:7;29347:22;:20;:22::i;:::-;29338:4;;-1:-1:-1;;;;;29338:4:0;19702:7;19720:18;;;:9;:18;;;;;;29317:26;;:8;:26;:::i;:::-;29316:53;;;;:::i;31276:390::-;7255:13;:11;:13::i;:::-;31389:9:::1;::::0;-1:-1:-1;;;;;31366:33:0;;::::1;31389:9;::::0;;::::1;;31366:33;31362:166;;31424:18;::::0;-1:-1:-1;;;31424:18:0;::::1;;;31423:19;31415:51;;;::::0;-1:-1:-1;;;31415:51:0;;18914:2:1;31415:51:0::1;::::0;::::1;18896:21:1::0;18953:2;18933:18;;;18926:30;-1:-1:-1;;;18972:18:1;;;18965:49;19031:18;;31415:51:0::1;18712:343:1::0;31415:51:0::1;31481:9;:35:::0;;-1:-1:-1;;;;;;31481:35:0::1;;-1:-1:-1::0;;;;;31481:35:0;::::1;;;::::0;;31362:166:::1;31542:5;31538:68;;;31562:9;::::0;31601:4:::1;::::0;31562:44:::1;::::0;-1:-1:-1;;;31562:44:0;;31594:4:::1;31562:44;::::0;::::1;16511:34:1::0;-1:-1:-1;;;;;31601:4:0;;::::1;16561:18:1::0;;;16554:43;31562:9:0::1;::::0;;::::1;;::::0;:23:::1;::::0;16446:18:1;;31562:44:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;31538:68;31632:26;::::0;-1:-1:-1;;;;;31632:26:0;::::1;::::0;::::1;::::0;;;::::1;31276:390:::0;;:::o;31818:432::-;7255:13;:11;:13::i;:::-;31929:4:::1;::::0;-1:-1:-1;;;;;31916:17:0;;::::1;31929:4:::0;::::1;31916:17;::::0;::::1;::::0;:47:::1;;-1:-1:-1::0;;;;;;31937:26:0;::::1;17197:42;31937:26;;31916:47;31908:105;;;::::0;-1:-1:-1;;;31908:105:0;;20000:2:1;31908:105:0::1;::::0;::::1;19982:21:1::0;20039:2;20019:18;;;20012:30;20078:34;20058:18;;;20051:62;-1:-1:-1;;;20129:18:1;;;20122:43;20182:19;;31908:105:0::1;19798:409:1::0;31908:105:0::1;-1:-1:-1::0;;;;;32024:22:0;::::1;;::::0;;;:11:::1;:22;::::0;;;;;;;:29;;;::::1;;-1:-1:-1::0;;32024:29:0;;::::1;::::0;::::1;::::0;;;32064:18:::1;:29:::0;;;;;:36;;;::::1;::::0;::::1;::::0;;32111:15:::1;:26:::0;;;;;:33;;;::::1;::::0;::::1;::::0;;32155:16:::1;:27:::0;;;;;;:34;;;;::::1;::::0;::::1;::::0;;;32205:37;1850:41:1;;;32205:37:0::1;::::0;1823:18:1;32205:37:0::1;1710:187:1::0;24489:211:0;24545:7;24594:12;24581:10;;24568;;:23;;;;:::i;:::-;:38;24565:72;;;24633:1;24616:14;;:18;;;;:::i;24565:72::-;24655:7;:36;;24680:11;;24655:36;;;-1:-1:-1;;24665:12:0;;;24489:211::o;29543:380::-;7255:13;:11;:13::i;:::-;7342:7;7369:6;-1:-1:-1;;;;;7369:6:0;4955:10;29641:23:::1;29633:60;;;::::0;-1:-1:-1;;;29633:60:0;;9894:2:1;29633:60:0::1;::::0;::::1;9876:21:1::0;9933:2;9913:18;;;9906:30;-1:-1:-1;;;9952:18:1;;;9945:54;10016:18;;29633:60:0::1;9692:348:1::0;29633:60:0::1;29727:5;29704:11;:20;29716:7;7342::::0;7369:6;-1:-1:-1;;;;;7369:6:0;;7296:87;29716:7:::1;-1:-1:-1::0;;;;;29704:20:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;29704:20:0;;;:28;;;::::1;;-1:-1:-1::0;;29704:28:0;;::::1;::::0;;;::::1;::::0;;;29743:15:::1;-1:-1:-1::0;29759:7:0::1;7342::::0;7369:6;-1:-1:-1;;;;;7369:6:0;;7296:87;29759:7:::1;-1:-1:-1::0;;;;;29743:24:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;29743:24:0;;;:32;;;::::1;;-1:-1:-1::0;;29743:32:0;;::::1;::::0;;;::::1;::::0;;;29786:18:::1;-1:-1:-1::0;29805:7:0::1;7342::::0;7369:6;-1:-1:-1;;;;;7369:6:0;;7296:87;29805:7:::1;-1:-1:-1::0;;;;;29786:27:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;29786:27:0;;;:35;;;::::1;;-1:-1:-1::0;;29786:35:0;;::::1;::::0;;;::::1;::::0;;;29832:11:::1;-1:-1:-1::0;29844:7:0::1;7342::::0;7369:6;-1:-1:-1;;;;;7369:6:0;;7296:87;29844:7:::1;-1:-1:-1::0;;;;;29832:20:0::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;-1:-1:-1;29832:20:0;;;17197:42:::1;29832:35:::0;;;;;;;:39;29882:33:::1;29906:8:::0;29882:23:::1;:33::i;32912:368::-:0;7255:13;:11;:13::i;:::-;-1:-1:-1;;;;;33008:23:0;::::1;33026:4;33008:23;::::0;::::1;::::0;:50:::1;;-1:-1:-1::0;;;;;;33036:22:0;::::1;;::::0;;;:14:::1;:22;::::0;;;;;::::1;;33035:23;33008:50;:71;;;;-1:-1:-1::0;7342:7:0;7369:6;-1:-1:-1;;;;;33062:17:0;;::::1;7369:6:::0;;33062:17:::1;;33008:71;33000:80;;;::::0;::::1;;-1:-1:-1::0;;;;;33091:24:0;::::1;;::::0;;;:16:::1;:24;::::0;;;;:33;;-1:-1:-1;;33091:33:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;33135:138:::1;;33160:7;::::0;:27:::1;::::0;-1:-1:-1;;;33160:27:0;;-1:-1:-1;;;;;11842:32:1;;;33160:27:0::1;::::0;::::1;11824:51:1::0;33160:7:0::1;11891:18:1::0;;;11884:34;33160:7:0;;::::1;::::0;:16:::1;::::0;11797:18:1;;33160:27:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;32912:368:::0;;:::o;33135:138::-:1;33218:7;::::0;-1:-1:-1;;;;;33243:17:0;;::::1;33218:7;33243:17:::0;;;:9:::1;:17;::::0;;;;;;;;;33218:43;;-1:-1:-1;;;33218:43:0;;;;::::1;11824:51:1::0;;;;11891:18;;;11884:34;33218:7:0;::::1;::::0;:16:::1;::::0;11797:18:1;;33218:43:0::1;11650:274:1::0;33135:138:0::1;32912:368:::0;;:::o;36048:242::-;7255:13;:11;:13::i;:::-;-1:-1:-1;;;;;36143:20:0;::::1;36135:48;;;;-1:-1:-1::0;;;36135:48:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;36194:23:0;::::1;;::::0;;;:15:::1;:23;::::0;;;;;;;;:32;;-1:-1:-1;;36194:32:0::1;::::0;::::1;;::::0;;::::1;::::0;;;36242:40;;1850:41:1;;;36242:40:0::1;::::0;1823:18:1;36242:40:0::1;1710:187:1::0;35645:165:0;35694:7;35718:10;29038;;:15;;;28971:90;35718:10;35714:24;;-1:-1:-1;35737:1:0;;35645:165::o;35714:24::-;35798:4;35781:14;;35756:22;:20;:22::i;20701:358::-;-1:-1:-1;;;;;20803:19:0;;20795:74;;;;-1:-1:-1;;;20795:74:0;;20414:2:1;20795:74:0;;;20396:21:1;20453:2;20433:18;;;20426:30;20492:34;20472:18;;;20465:62;-1:-1:-1;;;20543:18:1;;;20536:40;20593:19;;20795:74:0;20212:406:1;20795:74:0;-1:-1:-1;;;;;20888:21:0;;20880:74;;;;-1:-1:-1;;;20880:74:0;;20825:2:1;20880:74:0;;;20807:21:1;20864:2;20844:18;;;20837:30;20903:34;20883:18;;;20876:62;-1:-1:-1;;;20954:18:1;;;20947:38;21002:19;;20880:74:0;20623:404:1;20880:74:0;-1:-1:-1;;;;;20967:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;21019:32;;801:25:1;;;21019:32:0;;774:18:1;21019:32:0;;;;;;;20701:358;;;:::o;30809:205::-;30901:1;7369:6;-1:-1:-1;;;;;7369:6:0;30882:21;;;;:86;;-1:-1:-1;7342:7:0;7369:6;-1:-1:-1;;;;;7369:6:0;4955:10;30908:23;;:59;;-1:-1:-1;4955:10:0;30935:32;;;;:18;:32;;;;;;;;30908:59;30874:132;;;;-1:-1:-1;;;30874:132:0;;21234:2:1;30874:132:0;;;21216:21:1;21273:2;21253:18;;;21246:30;21312:34;21292:18;;;21285:62;-1:-1:-1;;;21363:18:1;;;21356:31;21404:19;;30874:132:0;21032:397:1;7642:201:0;7255:13;:11;:13::i;:::-;-1:-1:-1;;;;;7731:22:0;::::1;7723:73;;;::::0;-1:-1:-1;;;7723:73:0;;21636:2:1;7723:73:0::1;::::0;::::1;21618:21:1::0;21675:2;21655:18;;;21648:30;21714:34;21694:18;;;21687:62;-1:-1:-1;;;21765:18:1;;;21758:36;21811:19;;7723:73:0::1;21434:402:1::0;7723:73:0::1;7807:28;7826:8;7807:18;:28::i;21710:1948::-:0;-1:-1:-1;;;;;21827:17:0;;21802:4;21827:17;;;:9;:17;;;;;;:27;-1:-1:-1;21827:27:0;21819:78;;;;-1:-1:-1;;;21819:78:0;;22043:2:1;21819:78:0;;;22025:21:1;22082:2;22062:18;;;22055:30;22121:34;22101:18;;;22094:62;-1:-1:-1;;;22172:18:1;;;22165:36;22218:19;;21819:78:0;21841:402:1;21819:78:0;21925:1;21916:6;:10;21908:44;;;;-1:-1:-1;;;21908:44:0;;22450:2:1;21908:44:0;;;22432:21:1;22489:2;22469:18;;;22462:30;-1:-1:-1;;;22508:18:1;;;22501:51;22569:18;;21908:44:0;22248:345:1;21908:44:0;-1:-1:-1;;;;;21971:20:0;;21963:70;;;;-1:-1:-1;;;21963:70:0;;22800:2:1;21963:70:0;;;22782:21:1;22839:2;22819:18;;;22812:30;22878:34;22858:18;;;22851:62;-1:-1:-1;;;22929:18:1;;;22922:35;22974:19;;21963:70:0;22598:401:1;21963:70:0;-1:-1:-1;;;;;22052:23:0;;22044:71;;;;-1:-1:-1;;;22044:71:0;;23206:2:1;22044:71:0;;;23188:21:1;23245:2;23225:18;;;23218:30;23284:34;23264:18;;;23257:62;-1:-1:-1;;;23335:18:1;;;23328:33;23378:19;;22044:71:0;23004:399:1;22044:71:0;22131:6;;-1:-1:-1;;;22131:6:0;;;;22128:63;;;22147:41;22162:6;22170:9;22181:6;22147:14;:41::i;:::-;22140:48;;;;22128:63;22203:28;22216:6;22224;22203:12;:28::i;:::-;-1:-1:-1;;;;;22257:25:0;;;;;;:14;:25;;;;;;;;22256:26;:47;;;;-1:-1:-1;;;;;;22286:17:0;;15448:42;22286:17;;22256:47;22252:148;;;-1:-1:-1;;;;;22325:26:0;;;;;;:15;:26;;;;;;;;22320:68;;22353:35;22370:9;22381:6;22353:16;:35::i;:::-;29038:10;;22412:118;;-1:-1:-1;;;;;22437:26:0;;;;;;:18;:26;;;;;;;;;:59;;-1:-1:-1;;;;;;22467:29:0;;;;;;:18;:29;;;;;;;;22437:59;22429:98;;;;-1:-1:-1;;;22429:98:0;;23610:2:1;22429:98:0;;;23592:21:1;23649:2;23629:18;;;23622:30;23688:28;23668:18;;;23661:56;23734:18;;22429:98:0;23408:350:1;22429:98:0;-1:-1:-1;;;;;22546:22:0;;;;;;:14;:22;;;;;;;;22545:23;:48;;;;-1:-1:-1;;;;;;24454:19:0;;24429:4;24454:19;;;:11;:19;;;;;;;;24453:20;22572:21;22545:83;;;;-1:-1:-1;;;;;;22597:17:0;;;;;;:9;:17;;;;;;:26;;22617:6;;22597:26;:::i;:::-;:31;22545:83;22542:126;;;22645:11;22655:1;22645:11;;:::i;:::-;;;22542:126;-1:-1:-1;;;;;22680:17:0;;;;;;:9;:17;;;;;:27;;22701:6;;22680:17;:27;;22701:6;;22680:27;:::i;:::-;;;;-1:-1:-1;;;;;;;24454:19:0;;22720:22;24454:19;;;:11;:19;;;;;;;;24453:20;22745:49;;;;-1:-1:-1;;;;;;24454:19:0;;24429:4;24454:19;;;:11;:19;;;;;;;;24453:20;22770:24;22745:95;;22834:6;22745:95;;;22797:34;22805:6;22813:9;22824:6;22797:7;:34::i;:::-;22720:120;;22864:33;22879:6;22887:9;22864:14;:33::i;:::-;22861:74;;;22904:10;;22900:32;;22916:16;22925:6;22916:8;:16::i;:::-;-1:-1:-1;;;;;22958:17:0;;15448:42;22958:17;22955:132;;-1:-1:-1;;;;;22990:20:0;;;;;;:9;:20;;;;;:38;;23014:14;;22990:20;:38;;23014:14;;22990:38;:::i;:::-;;;;-1:-1:-1;22955:132:0;;-1:-1:-1;22955:132:0;;23073:14;23057:12;;:30;;;;;;;:::i;:::-;;;;-1:-1:-1;;22955:132:0;29038:10;;:15;;23116:31;;;;-1:-1:-1;23130:17:0;;-1:-1:-1;;;23130:17:0;;;;23116:31;:56;;;;-1:-1:-1;;;;;;24454:19:0;;24429:4;24454:19;;;:11;:19;;;;;;;;24453:20;23151:21;23112:142;;;23187:9;;:67;;-1:-1:-1;;;23187:67:0;;23216:10;23187:67;;;24032:34:1;-1:-1:-1;;;;;24102:15:1;;;24082:18;;;24075:43;24154:15;;;24134:18;;;24127:43;24186:18;;;24179:34;;;23187:9:0;;;;;;;;:28;;23966:19:1;;23187:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23112:142;-1:-1:-1;;;;;23271:24:0;;;;;;:16;:24;;;;;;;;23267:92;;23302:7;;-1:-1:-1;;;;;23327:17:0;;;23302:7;23327:17;;;:9;:17;;;;;;;;;;23302:43;;-1:-1:-1;;;23302:43:0;;;;;11824:51:1;;;;11891:18;;;11884:34;23302:7:0;;;:16;;11797:18:1;;23302:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23298:59;;-1:-1:-1;;;;;23373:27:0;;;;;;:16;:27;;;;;;;;23369:101;;23407:7;;-1:-1:-1;;;;;23435:20:0;;;23407:7;23435:20;;;:9;:20;;;;;;;;;;23407:49;;-1:-1:-1;;;23407:49:0;;;;;11824:51:1;;;;11891:18;;;11884:34;23407:7:0;;;:16;;11797:18:1;;23407:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23403:65;;23483:11;;-1:-1:-1;;;23483:11:0;;;;23480:53;;;23502:7;;;;;;;;;-1:-1:-1;;;;;23502:7:0;-1:-1:-1;;;;;23502:15:0;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23498:33;;-1:-1:-1;;;;;;;23568:17:0;;;:42;;23608:1;23568:42;;;23588:9;23568:42;-1:-1:-1;;;;;23550:78:0;23559:6;-1:-1:-1;;;;;23550:78:0;;23613:14;23550:78;;;;801:25:1;;789:2;774:18;;655:177;23550:78:0;;;;;;;;-1:-1:-1;23646:4:0;;21710:1948;-1:-1:-1;;;;21710:1948:0:o;7531:103::-;7255:13;:11;:13::i;:::-;7596:30:::1;7623:1;7851:191:::0;7925:16;7944:6;;-1:-1:-1;;;;;7961:17:0;;;-1:-1:-1;;;;;;7961:17:0;;;;;;7994:40;;7944:6;;;;;;;7994:40;;7925:16;7994:40;7914:128;7851:191;:::o;23666:259::-;-1:-1:-1;;;;;23776:17:0;;23759:4;23776:17;;;:9;:17;;;;;:27;;23797:6;;23776:17;23759:4;;23776:27;;23797:6;;23776:27;:::i;:::-;;;;-1:-1:-1;;;;;;;23814:20:0;;;;;;:9;:20;;;;;:30;;23838:6;;23814:20;:30;;23838:6;;23814:30;:::i;:::-;;;;;;;;23877:9;-1:-1:-1;;;;;23860:35:0;23869:6;-1:-1:-1;;;;;23860:35:0;;23888:6;23860:35;;;;801:25:1;;789:2;774:18;;655:177;23860:35:0;;;;;;;;-1:-1:-1;23913:4:0;23666:259;;;;;:::o;24184:175::-;24281:21;:19;:21::i;:::-;24271:6;:31;;:58;;;-1:-1:-1;;;;;;24306:23:0;;;;;;:15;:23;;;;;;;;24271:58;24263:88;;;;-1:-1:-1;;;24263:88:0;;24676:2:1;24263:88:0;;;24658:21:1;24715:2;24695:18;;;24688:30;-1:-1:-1;;;24734:18:1;;;24727:47;24791:18;;24263:88:0;24474:341:1;23937:239:0;24023:19;24045:18;:16;:18::i;:::-;-1:-1:-1;;;;;24082:20:0;;;;;;:9;:20;;;;;;24023:40;;-1:-1:-1;24023:40:0;;24082:29;;24105:6;;24082:29;:::i;:::-;:44;;24074:94;;;;-1:-1:-1;;;24074:94:0;;25022:2:1;24074:94:0;;;25004:21:1;25061:2;25041:18;;;25034:30;25100:34;25080:18;;;25073:62;-1:-1:-1;;;25151:18:1;;;25144:35;25196:19;;24074:94:0;24820:401:1;24074:94:0;24012:164;23937:239;;:::o;24963:997::-;-1:-1:-1;;;;;25104:25:0;;25049:7;25104:25;;;:14;:25;;;;;;25049:7;;25104:25;;:44;;;;;25147:1;25133:11;;:15;25104:44;25101:582;;;25165:22;25190:27;25210:6;25190:19;:27::i;:::-;25287:14;;-1:-1:-1;;;;;25268:16:0;;;;;;:8;:16;;;;;;25165:52;;-1:-1:-1;25268:33:0;;;:::i;:::-;25250:15;:51;25246:171;;;-1:-1:-1;;;;;25322:16:0;;;;;;:8;:16;;;;;;;;25341:15;25322:34;;25375:14;:22;;;;;:26;25246:171;-1:-1:-1;;;;;25445:22:0;;;;;;:14;:22;;;;;:40;;25471:14;;25445:22;:40;;25471:14;;25445:40;:::i;:::-;;;;-1:-1:-1;;25544:17:0;;-1:-1:-1;;;;;25518:22:0;;;;;;:14;:22;;;;;;:43;25514:158;;25642:14;;25635:3;25620:11;;25605:12;;25596:6;:21;;;;:::i;:::-;:35;;;;:::i;:::-;25595:43;;;;:::i;:::-;25594:62;;;;:::i;:::-;25582:74;;25514:158;25150:533;25101:582;25699:9;25712:1;25699:14;25695:111;;25792:14;;-1:-1:-1;;;;;25762:25:0;;;;;;:14;:25;;;;;;25750:38;;25762:25;;25750:11;:38::i;:::-;25741:47;;:6;:47;:::i;:::-;25740:66;;;;:::i;:::-;25728:78;;25695:111;25837:4;25819:24;;;;:9;:24;;;;;:37;;25847:9;;25819:24;:37;;25847:9;;25819:37;:::i;:::-;;;;-1:-1:-1;;25872:42:0;;801:25:1;;;25897:4:0;;-1:-1:-1;;;;;25872:42:0;;;;;789:2:1;774:18;25872:42:0;;;;;;;25934:18;25943:9;25934:6;:18;:::i;:::-;25927:25;24963:997;-1:-1:-1;;;;;24963:997:0:o;25968:347::-;-1:-1:-1;;;;;26075:22:0;;26050:4;26075:22;;;:14;:22;;;;;;;;26074:23;:56;;;;-1:-1:-1;;;;;;26111:19:0;;;;;;:11;:19;;;;;;;;26110:20;26074:56;:76;;;;-1:-1:-1;26144:6:0;;-1:-1:-1;;;26144:6:0;;;;26143:7;26074:76;:100;;;;-1:-1:-1;26163:11:0;;-1:-1:-1;;;26163:11:0;;;;26074:100;:138;;;;-1:-1:-1;;;;;;26187:25:0;;;;;;:14;:25;;;;;;;;26074:138;:190;;;;-1:-1:-1;26253:11:0;;26243:4;26225:24;;;;:9;:24;;;;;;:39;;26074:190;:233;;;;;26306:1;26291:12;;26277:11;;:26;;;;:::i;26323:2640::-;17942:6;:13;;-1:-1:-1;;;;17942:13:0;-1:-1:-1;;;17942:13:0;;;:6;26419:12;26405:11:::1;::::0;17942:13;;26405:26:::1;::::0;::::1;:::i;:::-;26386:45;;26442:20;26508:13;;26501:3;26484:14;;26475:6;:23;;;;:::i;:::-;:29;;;;:::i;:::-;26465:40;::::0;:6;:40:::1;:::i;:::-;:56;:104;;26556:13;;26465:104;;;26550:3;26533:14;;26524:6;:23;;;;:::i;:::-;:29;;;;:::i;:::-;26602:4;26584:24;::::0;;;:9:::1;:24;::::0;;;;;26442:127;;-1:-1:-1;26584:39:0;-1:-1:-1;26580:84:0::1;;;-1:-1:-1::0;26658:4:0::1;26640:24;::::0;;;:9:::1;:24;::::0;;;;;26580:84:::1;26685:27;26715:60;26731:15;;26748:26;;26715:15;:60::i;:::-;:98;;26797:16;;26782:12;;:31;;;;:::i;:::-;26715:98;;;26778:1;26715:98;26685:128:::0;-1:-1:-1;26824:23:0::1;26902:1;26890:8:::0;26852:34:::1;26685:128:::0;26852:12;:34:::1;:::i;:::-;26851:47;;;;:::i;:::-;26850:53;;;;:::i;:::-;26824:79:::0;-1:-1:-1;26914:31:0::1;26824:79:::0;26914:31;::::1;:::i;:::-;26982:16;::::0;;26996:1:::1;26982:16:::0;;;;;::::1;::::0;;26914:31;;-1:-1:-1;26958:21:0::1;::::0;26982:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;26982:16:0::1;26958:40;;27027:4;27009;27014:1;27009:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1::0;;;;;27009:23:0::1;;;-1:-1:-1::0;;;;;27009:23:0::1;;;::::0;::::1;27053:6;-1:-1:-1::0;;;;;27053:11:0::1;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27043:4;27048:1;27043:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27043:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;27149:188:::1;::::0;-1:-1:-1;;;27149:188:0;;:6:::1;:57:::0;;::::1;::::0;::::1;::::0;:188:::1;::::0;27221:12;;27248:1:::1;::::0;27264:4;;27291::::1;::::0;27311:15:::1;::::0;27149:188:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;27376:21:0::1;::::0;-1:-1:-1;27350:23:0::1;::::0;-1:-1:-1;27441:23:0::1;::::0;-1:-1:-1;27463:1:0::1;27441:19:::0;:23:::1;:::i;:::-;27430:34;::::0;:8;:34:::1;:::i;:::-;27408:56:::0;-1:-1:-1;27477:23:0::1;27559:1;27408:56:::0;27504:37:::1;27522:19:::0;27504:15;:37:::1;:::i;:::-;27503:53;;;;:::i;:::-;:57;;;;:::i;:::-;27477:83;;27571:21;27653:11;27631:17;;27615:13;;:33;;;;:::i;:::-;27596:53;::::0;:15;:53:::1;:::i;:::-;27595:69;;;;:::i;:::-;27571:93;;27675:23;27767:11;27741:21;;27721:17;;:41;;;;:::i;:::-;27702:61;::::0;:15;:61:::1;:::i;:::-;27701:77;;;;:::i;:::-;27675:103:::0;-1:-1:-1;27789:23:0::1;27675:103:::0;27834:31:::1;27852:13:::0;27834:15;:31:::1;:::i;:::-;:49;;;;:::i;:::-;27815:69;::::0;:15;:69:::1;:::i;:::-;27789:95:::0;-1:-1:-1;27900:19:0;;27897:442:::1;;28025:237;::::0;-1:-1:-1;;;28025:237:0;;-1:-1:-1;;;;;28025:6:0::1;:22;::::0;::::1;::::0;28055:15;;28025:237:::1;::::0;28098:4:::1;::::0;28122:15;;28156:1:::1;::::0;;;15448:42:::1;::::0;28232:15:::1;::::0;28025:237:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;28282:45:0::1;::::0;;576:25:1;;;632:2;617:18;;610:34;;;28282:45:0::1;::::0;-1:-1:-1;549:18:1;28282:45:0::1;;;;;;;27897:442;28363:19:::0;;28359:234:::1;;28400:18;28424:17;-1:-1:-1::0;;;;;28424:22:0::1;28454:15;28424:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;28359:234:0::1;28609:17:::0;;28605:91:::1;;28645:7;;;;;;;;;-1:-1:-1::0;;;;;28645:7:0::1;-1:-1:-1::0;;;;;28645:15:0::1;;28668:13;28645:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;28641:55:::0;::::1;28724:19:::0;;28720:234:::1;;28761:18;28785:17;-1:-1:-1::0;;;;;28785:22:0::1;28815:15;28785:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;28720:234:0::1;-1:-1:-1::0;;17960:6:0;:14;;-1:-1:-1;;;;17960:14:0;;;-1:-1:-1;;;;;;;;;;26323:2640:0:o;14:131:1:-;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;150:247;209:6;262:2;250:9;241:7;237:23;233:32;230:52;;;278:1;275;268:12;230:52;317:9;304:23;336:31;361:5;336:31;:::i;837:548::-;949:4;978:2;1007;996:9;989:21;1039:6;1033:13;1082:6;1077:2;1066:9;1062:18;1055:34;1107:1;1117:140;1131:6;1128:1;1125:13;1117:140;;;1226:14;;;1222:23;;1216:30;1192:17;;;1211:2;1188:26;1181:66;1146:10;;1117:140;;;1121:3;1306:1;1301:2;1292:6;1281:9;1277:22;1273:31;1266:42;1376:2;1369;1365:7;1360:2;1352:6;1348:15;1344:29;1333:9;1329:45;1325:54;1317:62;;;;837:548;;;;:::o;1390:315::-;1458:6;1466;1519:2;1507:9;1498:7;1494:23;1490:32;1487:52;;;1535:1;1532;1525:12;1487:52;1574:9;1561:23;1593:31;1618:5;1593:31;:::i;:::-;1643:5;1695:2;1680:18;;;;1667:32;;-1:-1:-1;;;1390:315:1:o;1902:316::-;1979:6;1987;1995;2048:2;2036:9;2027:7;2023:23;2019:32;2016:52;;;2064:1;2061;2054:12;2016:52;-1:-1:-1;;2087:23:1;;;2157:2;2142:18;;2129:32;;-1:-1:-1;2208:2:1;2193:18;;;2180:32;;1902:316;-1:-1:-1;1902:316:1:o;2223:118::-;2309:5;2302:13;2295:21;2288:5;2285:32;2275:60;;2331:1;2328;2321:12;2346:446;2429:6;2437;2445;2453;2506:3;2494:9;2485:7;2481:23;2477:33;2474:53;;;2523:1;2520;2513:12;2474:53;2559:9;2546:23;2536:33;;2616:2;2605:9;2601:18;2588:32;2578:42;;2667:2;2656:9;2652:18;2639:32;2629:42;;2721:2;2710:9;2706:18;2693:32;2734:28;2756:5;2734:28;:::i;:::-;2346:446;;;;-1:-1:-1;2346:446:1;;-1:-1:-1;;2346:446:1:o;2797:248::-;2865:6;2873;2926:2;2914:9;2905:7;2901:23;2897:32;2894:52;;;2942:1;2939;2932:12;2894:52;-1:-1:-1;;2965:23:1;;;3035:2;3020:18;;;3007:32;;-1:-1:-1;2797:248:1:o;3050:241::-;3106:6;3159:2;3147:9;3138:7;3134:23;3130:32;3127:52;;;3175:1;3172;3165:12;3127:52;3214:9;3201:23;3233:28;3255:5;3233:28;:::i;3296:456::-;3373:6;3381;3389;3442:2;3430:9;3421:7;3417:23;3413:32;3410:52;;;3458:1;3455;3448:12;3410:52;3497:9;3484:23;3516:31;3541:5;3516:31;:::i;:::-;3566:5;-1:-1:-1;3623:2:1;3608:18;;3595:32;3636:33;3595:32;3636:33;:::i;:::-;3296:456;;3688:7;;-1:-1:-1;;;3742:2:1;3727:18;;;;3714:32;;3296:456::o;4154:180::-;4213:6;4266:2;4254:9;4245:7;4241:23;4237:32;4234:52;;;4282:1;4279;4272:12;4234:52;-1:-1:-1;4305:23:1;;4154:180;-1:-1:-1;4154:180:1:o;4339:382::-;4404:6;4412;4465:2;4453:9;4444:7;4440:23;4436:32;4433:52;;;4481:1;4478;4471:12;4433:52;4520:9;4507:23;4539:31;4564:5;4539:31;:::i;:::-;4589:5;-1:-1:-1;4646:2:1;4631:18;;4618:32;4659:30;4618:32;4659:30;:::i;:::-;4708:7;4698:17;;;4339:382;;;;;:::o;4950:367::-;5013:8;5023:6;5077:3;5070:4;5062:6;5058:17;5054:27;5044:55;;5095:1;5092;5085:12;5044:55;-1:-1:-1;5118:20:1;;5161:18;5150:30;;5147:50;;;5193:1;5190;5183:12;5147:50;5230:4;5222:6;5218:17;5206:29;;5290:3;5283:4;5273:6;5270:1;5266:14;5258:6;5254:27;5250:38;5247:47;5244:67;;;5307:1;5304;5297:12;5244:67;4950:367;;;;;:::o;5322:773::-;5444:6;5452;5460;5468;5521:2;5509:9;5500:7;5496:23;5492:32;5489:52;;;5537:1;5534;5527:12;5489:52;5577:9;5564:23;5606:18;5647:2;5639:6;5636:14;5633:34;;;5663:1;5660;5653:12;5633:34;5702:70;5764:7;5755:6;5744:9;5740:22;5702:70;:::i;:::-;5791:8;;-1:-1:-1;5676:96:1;-1:-1:-1;5879:2:1;5864:18;;5851:32;;-1:-1:-1;5895:16:1;;;5892:36;;;5924:1;5921;5914:12;5892:36;;5963:72;6027:7;6016:8;6005:9;6001:24;5963:72;:::i;:::-;5322:773;;;;-1:-1:-1;6054:8:1;-1:-1:-1;;;;5322:773:1:o;6563:730::-;6694:6;6702;6710;6718;6726;6734;6742;6750;6758;6811:3;6799:9;6790:7;6786:23;6782:33;6779:53;;;6828:1;6825;6818:12;6779:53;-1:-1:-1;;6851:23:1;;;6921:2;6906:18;;6893:32;;-1:-1:-1;6972:2:1;6957:18;;6944:32;;7023:2;7008:18;;6995:32;;-1:-1:-1;7074:3:1;7059:19;;7046:33;;-1:-1:-1;7126:3:1;7111:19;;7098:33;;-1:-1:-1;7178:3:1;7163:19;;7150:33;;-1:-1:-1;7230:3:1;7215:19;;7202:33;;-1:-1:-1;7282:3:1;7267:19;7254:33;;-1:-1:-1;6563:730:1;-1:-1:-1;6563:730:1:o;7298:377::-;7372:6;7380;7388;7441:2;7429:9;7420:7;7416:23;7412:32;7409:52;;;7457:1;7454;7447:12;7409:52;7496:9;7483:23;7515:28;7537:5;7515:28;:::i;:::-;7562:5;7614:2;7599:18;;7586:32;;-1:-1:-1;7665:2:1;7650:18;;;7637:32;;7298:377;-1:-1:-1;;;7298:377:1:o;7680:388::-;7748:6;7756;7809:2;7797:9;7788:7;7784:23;7780:32;7777:52;;;7825:1;7822;7815:12;7777:52;7864:9;7851:23;7883:31;7908:5;7883:31;:::i;:::-;7933:5;-1:-1:-1;7990:2:1;7975:18;;7962:32;8003:33;7962:32;8003:33;:::i;8299:184::-;8369:6;8422:2;8410:9;8401:7;8397:23;8393:32;8390:52;;;8438:1;8435;8428:12;8390:52;-1:-1:-1;8461:16:1;;8299:184;-1:-1:-1;8299:184:1:o;9165:127::-;9226:10;9221:3;9217:20;9214:1;9207:31;9257:4;9254:1;9247:15;9281:4;9278:1;9271:15;9297:168;9370:9;;;9401;;9418:15;;;9412:22;;9398:37;9388:71;;9439:18;;:::i;9470:217::-;9510:1;9536;9526:132;;9580:10;9575:3;9571:20;9568:1;9561:31;9615:4;9612:1;9605:15;9643:4;9640:1;9633:15;9526:132;-1:-1:-1;9672:9:1;;9470:217::o;10395:128::-;10462:9;;;10483:11;;;10480:37;;;10497:18;;:::i;10528:125::-;10593:9;;;10614:10;;;10611:36;;;10627:18;;:::i;10658:188::-;10737:13;;-1:-1:-1;;;;;10779:42:1;;10769:53;;10759:81;;10836:1;10833;10826:12;10759:81;10658:188;;;:::o;10851:450::-;10938:6;10946;10954;11007:2;10995:9;10986:7;10982:23;10978:32;10975:52;;;11023:1;11020;11013:12;10975:52;11046:40;11076:9;11046:40;:::i;:::-;11036:50;;11105:49;11150:2;11139:9;11135:18;11105:49;:::i;:::-;11095:59;;11197:2;11186:9;11182:18;11176:25;11241:10;11234:5;11230:22;11223:5;11220:33;11210:61;;11267:1;11264;11257:12;11210:61;11290:5;11280:15;;;10851:450;;;;;:::o;11306:339::-;11508:2;11490:21;;;11547:2;11527:18;;;11520:30;-1:-1:-1;;;11581:2:1;11566:18;;11559:45;11636:2;11621:18;;11306:339::o;13275:127::-;13336:10;13331:3;13327:20;13324:1;13317:31;13367:4;13364:1;13357:15;13391:4;13388:1;13381:15;13821:422;13910:1;13953:5;13910:1;13967:270;13988:7;13978:8;13975:21;13967:270;;;14047:4;14043:1;14039:6;14035:17;14029:4;14026:27;14023:53;;;14056:18;;:::i;:::-;14106:7;14096:8;14092:22;14089:55;;;14126:16;;;;14089:55;14205:22;;;;14165:15;;;;13967:270;;;13971:3;13821:422;;;;;:::o;14248:806::-;14297:5;14327:8;14317:80;;-1:-1:-1;14368:1:1;14382:5;;14317:80;14416:4;14406:76;;-1:-1:-1;14453:1:1;14467:5;;14406:76;14498:4;14516:1;14511:59;;;;14584:1;14579:130;;;;14491:218;;14511:59;14541:1;14532:10;;14555:5;;;14579:130;14616:3;14606:8;14603:17;14600:43;;;14623:18;;:::i;:::-;-1:-1:-1;;14679:1:1;14665:16;;14694:5;;14491:218;;14793:2;14783:8;14780:16;14774:3;14768:4;14765:13;14761:36;14755:2;14745:8;14742:16;14737:2;14731:4;14728:12;14724:35;14721:77;14718:159;;;-1:-1:-1;14830:19:1;;;14862:5;;14718:159;14909:34;14934:8;14928:4;14909:34;:::i;:::-;14979:6;14975:1;14971:6;14967:19;14958:7;14955:32;14952:58;;;14990:18;;:::i;:::-;15028:20;;14248:806;-1:-1:-1;;;14248:806:1:o;15059:140::-;15117:5;15146:47;15187:4;15177:8;15173:19;15167:4;15146:47;:::i;15204:135::-;15243:3;15264:17;;;15261:43;;15284:18;;:::i;:::-;-1:-1:-1;15331:1:1;15320:13;;15204:135::o;16043:251::-;16113:6;16166:2;16154:9;16145:7;16141:23;16137:32;16134:52;;;16182:1;16179;16172:12;16134:52;16214:9;16208:16;16233:31;16258:5;16233:31;:::i;16608:607::-;-1:-1:-1;;;;;16967:15:1;;;16949:34;;17014:2;16999:18;;16992:34;;;;17057:2;17042:18;;17035:34;;;;17100:2;17085:18;;17078:34;;;;17149:15;;;17143:3;17128:19;;17121:44;16929:3;17181:19;;17174:35;;;;16898:3;16883:19;;16608:607::o;17220:306::-;17308:6;17316;17324;17377:2;17365:9;17356:7;17352:23;17348:32;17345:52;;;17393:1;17390;17383:12;17345:52;17422:9;17416:16;17406:26;;17472:2;17461:9;17457:18;17451:25;17441:35;;17516:2;17505:9;17501:18;17495:25;17485:35;;17220:306;;;;;:::o;24224:245::-;24291:6;24344:2;24332:9;24323:7;24319:23;24315:32;24312:52;;;24360:1;24357;24350:12;24312:52;24392:9;24386:16;24411:28;24433:5;24411:28;:::i;25358:980::-;25620:4;25668:3;25657:9;25653:19;25699:6;25688:9;25681:25;25725:2;25763:6;25758:2;25747:9;25743:18;25736:34;25806:3;25801:2;25790:9;25786:18;25779:31;25830:6;25865;25859:13;25896:6;25888;25881:22;25934:3;25923:9;25919:19;25912:26;;25973:2;25965:6;25961:15;25947:29;;25994:1;26004:195;26018:6;26015:1;26012:13;26004:195;;;26083:13;;-1:-1:-1;;;;;26079:39:1;26067:52;;26174:15;;;;26139:12;;;;26115:1;26033:9;26004:195;;;-1:-1:-1;;;;;;;26255:32:1;;;;26250:2;26235:18;;26228:60;-1:-1:-1;;;26319:3:1;26304:19;26297:35;26216:3;25358:980;-1:-1:-1;;;25358:980:1:o

Swarm Source

ipfs://0354557c825754ab7723b252d1b5d9af7e25b26715439f1c74d90c98ef4c8434
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.