ETH Price: $3,420.34 (-2.28%)
Gas: 7 Gwei

Token

Smart Tools (SMART)
 

Overview

Max Total Supply

1,000,000,000 SMART

Holders

71

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.743699474775093163 SMART

Value
$0.00
0xee0c2ac1c74a152d911d320050a3b8b412711283
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:
SmartTools

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-12-16
*/

// SPDX-License-Identifier: MIT

/**
Website:
http://smarttoolserc.com

Telegram Group:
https://t.me/SmartToolsERC

Announcement:
https://t.me/SmartToolsNews

Twitter:
https://twitter.com/SmartToolsERC

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

Reddit:
https://www.reddit.com/user/SmartToolsERC
*/

pragma solidity ^0.8.7;
library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

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

        return c;
    }
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }
}

/**
 * BEP20 standard interface.
 */
interface IBEP20 {
    function totalSupply() external view returns (uint256);
    function decimals() external view returns (uint8);
    function symbol() external view returns (string memory);
    function name() external view returns (string memory);
    function getOwner() external view returns (address);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address _owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

/**
 * Allows for contract ownership for multiple adressess
 */
abstract contract Auth {
    address internal owner;
    mapping (address => bool) internal authorizations;

    constructor(address _owner) {
        owner = _owner;
        authorizations[_owner] = true;
    }

    /**
     * Function modifier to require caller to be contract owner
     */
    modifier onlyOwner() {
        require(isOwner(msg.sender), "!OWNER"); _;
    }

    /**
     * Function modifier to require caller to be authorized
     */
    modifier authorized() {
        require(isAuthorized(msg.sender), "!AUTHORIZED"); _;
    }

    /**
     * Authorize address. Owner only
     */
    function authorize(address account) public onlyOwner {
        authorizations[account] = true;
    }

    /**
     * Remove address authorization. Owner only
     */
    function unauthorize(address account) public onlyOwner {
        authorizations[account] = false;
    }

    /**
     * Check if address is owner
     */
    function isOwner(address account) public view returns (bool) {
        return account == owner;
    }

    /**
     * Return address authorization status
     */
    function isAuthorized(address account) public view returns (bool) {
        return authorizations[account];
    }

    /**
     * Transfer ownership to new address. Caller must be owner. Leaves old owner authorized
     */
    function transferOwnership(address payable account) public onlyOwner {
        owner = account;
        authorizations[account] = true;
        emit OwnershipTransferred(account);
    }

    event OwnershipTransferred(address owner);
}

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

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

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

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

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

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

/* Interface for the DividendDistributor */
interface IDividendDistributor {
    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external;
    function setShare(address shareholder, uint256 amount) external;
    function deposit() external payable;
    function process(uint256 gas) external;
}

/* Our DividendDistributor contract responsible for distributing the earn token */
contract DividendDistributor is IDividendDistributor {
    using SafeMath for uint256;

    address _token;

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

    // EARN 
    IBEP20 USDT = IBEP20(0xdAC17F958D2ee523a2206206994597C13D831ec7); 
    address WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
    IDEXRouter router;

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

    mapping (address => Share) public shares;

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

    uint256 public minPeriod = 30 * 60;
    uint256 public minDistribution = 1 * (10 ** 12);

    uint256 currentIndex;

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

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

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

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

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

        if(amount > 0 && shares[shareholder].amount == 0){
            addShareholder(shareholder);
        }else if(amount == 0 && shares[shareholder].amount > 0){
            removeShareholder(shareholder);
        }

        totalShares = totalShares.sub(shares[shareholder].amount).add(amount);
        shares[shareholder].amount = amount;
        shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
    }

    function deposit() external payable override onlyToken {
        uint256 balanceBefore = USDT.balanceOf(address(this));

        address[] memory path = new address[](2);
        path[0] = WETH;
        path[1] = address(USDT);

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

        uint256 amount = USDT.balanceOf(address(this)).sub(balanceBefore);

        totalDividends = totalDividends.add(amount);
        dividendsPerShare = dividendsPerShare.add(dividendsPerShareAccuracyFactor.mul(amount).div(totalShares));
    }

    function process(uint256 gas) external override 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.add(gasLeft.sub(gasleft()));
            gasLeft = gasleft();
            currentIndex++;
            iterations++;
        }
    }
    
    function shouldDistribute(address shareholder) internal view returns (bool) {
        return shareholderClaims[shareholder] + minPeriod < block.timestamp
                && getUnpaidEarnings(shareholder) > minDistribution;
    }

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

        uint256 amount = getUnpaidEarnings(shareholder);
        if(amount > 0){
            totalDistributed = totalDistributed.add(amount);
            USDT.transfer(shareholder, amount);
            shareholderClaims[shareholder] = block.timestamp;
            shares[shareholder].totalRealised = shares[shareholder].totalRealised.add(amount);
            shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
        }
    }
    
    function claimDividend(address shareholder) external onlyToken{
        distributeDividend(shareholder);
    }

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

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

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

        return shareholderTotalDividends.sub(shareholderTotalExcluded);
    }

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

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

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

/* Token contract */
contract  SmartTools is IBEP20, Auth {
    using SafeMath for uint256;

    // Addresses
    address USDT = 0xdAC17F958D2ee523a2206206994597C13D831ec7; 
    address WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
    address DEAD = 0x000000000000000000000000000000000000dEaD;
    address ZERO = 0x0000000000000000000000000000000000000000;
    address DEV =  0xaF2b9620dAe505cAcCd24506787B2Fc807295031;

    // These are owner by default
    address private  autoLiquidityReceiver;
    address private  marketingFeeReceiver;

    // Name and symbol
    string constant _name = "Smart Tools";
    string constant _symbol = "SMART";
    uint8 constant _decimals = 18;

    // Total supply
    uint256 _totalSupply = 1000000000 * (10 ** _decimals); 

    // Max wallet and TX
    uint256 public   _maxBuyTxAmount = _totalSupply * 100 / 1000; 
    uint256 public _maxSellTxAmount = _totalSupply * 100 / 1000; 
    uint256 public _maxWalletToken = ( _totalSupply * 100 ) / 1000; 

    // Mappings
    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) _allowances;
    mapping (address => bool) private Launching;
    bool private LaunchingEnabled = true;
    mapping (address => bool) isFeeExempt;
    mapping (address => bool) isTxLimitExempt;
    mapping (address => bool) isTimelockExempt;
    mapping (address => bool) isDividendExempt;
    mapping (address => bool) private isBlacklisted;
    
    // Buy Fees
    uint256 public  LiquidityFeeBuy = 1; 
    uint256 public buybackFeeBuy = 1;
    uint256 private reflectionFeeBuy = 0;
    uint256 public marketingFeeBuy = 2;
    uint256 private treasuryFeeBuy = 0;
    uint256 public  totalFeeBuy = 4;

    // Sell fees
    uint256 public LiquidityFeeSell = 1;
    uint256 public buybackFeeSell = 1;
    uint256 private reflectionFeeSell = 0;
    uint256 public marketingFeeSell = 2;
    uint256 private treasuryFeeSell = 0;
    uint256 public  totalFeeSell = 4;

    // Fee variables
    uint256 liquidityFee;
    uint256 buybackFee;
    uint256 reflectionFee;
    uint256 marketingFee;
    uint256 devFee;
    uint256 totalFee;
    uint256 feeDenominator = 100;

    // GREED
    uint256 GREEDTriggeredAt;
    uint256 GREEDDuration = 3600;
    
    // Dead blocks
    uint256 deadBlocks = 3;

    // Sell amount of tokens when a sell takes place
    uint256 private swapThreshold = _totalSupply * 20 / 10000; // 2% of supply

    // Liquidity
    uint256 targetLiquidity = 20;
    uint256 targetLiquidityDenominator = 100;

    // Buyback settings
    uint256 buybackMultiplierNumerator = 200;
    uint256 buybackMultiplierDenominator = 100;
    uint256 buybackMultiplierTriggeredAt;
    uint256 buybackMultiplierLength = 30 minutes;

    bool private autoBuybackEnabled = false;
    bool private autoBuybackMultiplier = false;
    uint256 autoBuybackCap;
    uint256 autoBuybackAccumulator;
    uint256 autoBuybackAmount;
    uint256 autoBuybackBlockPeriod;
    uint256 autoBuybackBlockLast;

    DividendDistributor distributor;
    uint256 distributorGas = 500000;

    // Cooldown & timer functionality
    bool private buyCooldownEnabled = false;
    uint8 private cooldownTimerInterval = 30;
    mapping (address => uint) private cooldownTimer;

    // Other variables
    IDEXRouter public router;
    address public pair;
    uint256 private launchedAt;
    bool private DCGMembers = false;
    bool public tradingOpen = false;
    bool public swapEnabled = true;
    bool inSwap;
    modifier swapping() { inSwap = true; _; inSwap = false; }

    /* Token constructor */
    constructor () Auth(msg.sender) {

        router = IDEXRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        pair = IDEXFactory(router.factory()).createPair(WETH, address(this));
        _allowances[address(this)][address(router)] = type(uint256).max;

        distributor = new DividendDistributor(address(router));
        
        // Should be the owner wallet/token distributor
        address _presaler = msg.sender;
        isFeeExempt[_presaler] = true;
        isTxLimitExempt[_presaler] = true;
        
        // No timelock for these people
        isTimelockExempt[msg.sender] = true;
        isTimelockExempt[DEAD] = true;
        isTimelockExempt[address(this)] = true;
        isTimelockExempt[DEV] = true;
        
        // Exempt from dividend
        isDividendExempt[pair] = true;
        isDividendExempt[address(this)] = true;
        isDividendExempt[DEAD] = true;

        // Set the marketing and liq receiver to the owner as default
        autoLiquidityReceiver = msg.sender;
        marketingFeeReceiver = 0xaF2b9620dAe505cAcCd24506787B2Fc807295031;

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

    receive() external payable { }

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

    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].sub(amount, "Insufficient Allowance");
        }
        return _transferFrom(sender, recipient, amount);
    }

     function launch(bool _DCGMembers) external authorized {
        require(!tradingOpen && _DCGMembers);
        tradingOpen = true;
        LaunchingEnabled = false;
        launchedAt = block.number;
    }
    // settting the max wallet in percentages
    // NOTE: 1% = 100
     function setMaxWalletPercent(uint256 maxWallPercent) external onlyOwner() {
        _maxWalletToken = _totalSupply.mul(maxWallPercent).div(10000);

    }

    // Main transfer function
    function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {
        if(!launched() && recipient == pair){ require(_balances[sender] > 0); launch(); }
        
        if(inSwap){ return _basicTransfer(sender, recipient, amount); }

        // Check if trading is enabled
        if(!authorizations[sender] && !authorizations[recipient] && !Launching[recipient]){
            require(tradingOpen,"Trading not enabled yet");
        }

        // Check if address is blacklisted
        require(!isBlacklisted[recipient] && !isBlacklisted[sender], 'Address is blacklisted');

        // Check if buying or selling
        bool isSell = recipient == pair; 

        // Set buy or sell fees
        setCorrectFees(isSell);

        // Check max wallet
        checkMaxWallet(sender, recipient, amount);
   
        // Buycooldown 
        checkBuyCooldown(sender, recipient);

        // Checks maxTx
        checkTxLimit(sender, amount, recipient, isSell);

        // Check if we are in GREEDTime
        bool GREEDMode = inGREEDTime();

        // Check if we should do the swapback
        if(shouldSwapBack()){ swapBack(); }

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

        uint256 amountReceived = shouldTakeFee(sender) ? takeFee(sender, amount, isSell, GREEDMode) : amount;
        _balances[recipient] = _balances[recipient].add(amountReceived);

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

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

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

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

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

    // Set the correct fees for buying or selling
    function setCorrectFees(bool isSell) internal {
        if(isSell){
            liquidityFee = LiquidityFeeSell;
            buybackFee = buybackFeeSell;
            reflectionFee = reflectionFeeSell;
            marketingFee = marketingFeeSell;
            devFee = treasuryFeeSell;
            totalFee = totalFeeSell;
        } else {
            liquidityFee = LiquidityFeeBuy;
            buybackFee = buybackFeeBuy;
            reflectionFee = reflectionFeeBuy;
            marketingFee = marketingFeeBuy;
            devFee = treasuryFeeBuy;
            totalFee = totalFeeBuy;
        }
    }

    // Check if we are in GREED time
    function inGREEDTime() public view returns (bool){
        if(GREEDTriggeredAt.add(GREEDDuration) > block.timestamp){
            return true;
        } else {
            return false;
        }
    }


    // Check for maxTX
    function checkTxLimit(address sender, uint256 amount, address recipient, bool isSell) internal view {
        if (recipient != owner){
            if(isSell){
                require(amount <= _maxSellTxAmount || isTxLimitExempt[sender] || isTxLimitExempt[recipient], "TX Limit Exceeded");
            } else {
                require(amount <= _maxBuyTxAmount || isTxLimitExempt[sender] || isTxLimitExempt[recipient], "TX Limit Exceeded");
            }
        }
    }

    // Check buy cooldown
    function checkBuyCooldown(address sender, address recipient) internal {
        if (sender == pair &&
            buyCooldownEnabled &&
            !isTimelockExempt[recipient]) {
            require(cooldownTimer[recipient] < block.timestamp,"Please wait between two buys");
            cooldownTimer[recipient] = block.timestamp + cooldownTimerInterval;
        }
    }

    // Check maxWallet
    function checkMaxWallet(address sender, address recipient, uint256 amount) internal view {
        if (!authorizations[sender] && recipient != owner && recipient != address(this)  && recipient != address(DEAD) && recipient != pair && recipient != marketingFeeReceiver && recipient != autoLiquidityReceiver && recipient != DEV){
            uint256 heldTokens = balanceOf(recipient);
            require((heldTokens + amount) <= _maxWalletToken,"Total Holding is currently limited, you can not buy that much.");
        }
    }

    // Check if sender is not feeExempt
    function shouldTakeFee(address sender) internal view returns (bool) {
        return !isFeeExempt[sender];
    }

    // Get total fee's or multiplication of fees
    function getTotalFee(bool selling) public view returns (uint256) {
        if(launchedAt + deadBlocks >= block.number){ return feeDenominator.sub(1); }
        if(selling && buybackMultiplierTriggeredAt.add(buybackMultiplierLength) > block.timestamp){ return getMultipliedFee(); }
        return totalFee;
    }

    // Get a multiplied fee when buybackMultiplier is active
    function getMultipliedFee() public view returns (uint256) {
        uint256 remainingTime = buybackMultiplierTriggeredAt.add(buybackMultiplierLength).sub(block.timestamp);
        uint256 feeIncrease = totalFee.mul(buybackMultiplierNumerator).div(buybackMultiplierDenominator).sub(totalFee);
        return totalFee.add(feeIncrease.mul(remainingTime).div(buybackMultiplierLength));
    }

    // Take the normal total Fee or the GREED Fee
    function takeFee(address sender, uint256 amount, bool isSell, bool GREEDMode) internal returns (uint256) {
        uint256 feeAmount;
        
        // Check if we are GREEDd
        if (GREEDMode){
            if(isSell){
                // We are selling so up the selling tax to 1.5x
                feeAmount = amount.mul(totalFee).mul(3).div(2).div(feeDenominator);
            } else {
                // We are buying so cut our taxes in half
                feeAmount = amount.mul(totalFee).div(2).div(feeDenominator);
            }
        } else {
            feeAmount = amount.mul(totalFee).div(feeDenominator);
        }

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

        return amount.sub(feeAmount);
    }

    // Check if we should sell tokens
    function shouldSwapBack() internal view returns (bool) {
        return msg.sender != pair
        && !inSwap
        && swapEnabled
        && _balances[address(this)] >= swapThreshold;
    }

    // switch Trading
    function tradingStatus(bool _status) public onlyOwner {
        tradingOpen = _status;
        launch();
    }

    // Enable GREED
    function enableGREED(uint256 _seconds) public authorized {
        GREEDTriggeredAt = block.timestamp;
        GREEDDuration = _seconds;
    }

    // Disable the GREED mode
    function disableGREED() external authorized {
        GREEDTriggeredAt = 0;
    }

    // Enable/disable cooldown between trades
    function cooldownEnabled(bool _status, uint8 _interval) public authorized {
        buyCooldownEnabled = _status;
        cooldownTimerInterval = _interval;
    }

    // Blacklist/unblacklist an address
    function Approve(address _address, bool _value) public authorized{
        isBlacklisted[_address] = _value;
    }

    // Main swapback to sell tokens for WBNB
    function swapBack() internal swapping {
        uint256 dynamicLiquidityFee = isOverLiquified(targetLiquidity, targetLiquidityDenominator) ? 0 : liquidityFee;
        uint256 amountToLiquify = swapThreshold.mul(dynamicLiquidityFee).div(totalFee).div(2);
        uint256 amountToSwap = swapThreshold.sub(amountToLiquify);

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

        uint256 balanceBefore = address(this).balance;

        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amountToSwap,
            0,
            path,
            address(this),
            block.timestamp
        );
        uint256 amountBNB = address(this).balance.sub(balanceBefore);
        uint256 totalBNBFee = totalFee.sub(dynamicLiquidityFee.div(2));
        uint256 amountBNBLiquidity = amountBNB.mul(dynamicLiquidityFee).div(totalBNBFee).div(2);
        uint256 amountBNBReflection = amountBNB.mul(reflectionFee).div(totalBNBFee);
        uint256 amountBNBMarketing = amountBNB.mul(marketingFee).div(totalBNBFee);
        uint256 amountBNBDev = amountBNB.mul(devFee).div(totalBNBFee); 


        try distributor.deposit{value: amountBNBReflection}() {} catch {}
        (bool successMarketing, /* bytes memory data */) = payable(marketingFeeReceiver).call{value: amountBNBMarketing, gas: 30000}("");
        (bool successDev, /* bytes memory data */) = payable(DEV).call{value: amountBNBDev, gas: 30000}(""); 
        require(successMarketing, "marketing receiver rejected ETH transfer");
        require(successDev, "dev receiver rejected ETH transfer");

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

    // Check if autoBuyback is enabled
    function shouldAutoBuyback() internal view returns (bool) {
        return msg.sender != pair
            && !inSwap
            && autoBuybackEnabled
            && autoBuybackBlockLast + autoBuybackBlockPeriod <= block.number
            && address(this).balance >= autoBuybackAmount;
    }

    // Trigger a manual buyback
    function triggerManualBuyback(uint256 amount, bool triggerBuybackMultiplier) external authorized {
        uint256 amountWithDecimals = amount * (10 ** 18);
        uint256 amountToBuy = amountWithDecimals.div(100);
        buyTokens(amountToBuy, DEAD);
        if(triggerBuybackMultiplier){
            buybackMultiplierTriggeredAt = block.timestamp;
            emit BuybackMultiplierActive(buybackMultiplierLength);
        }
    }
    
    // Stop the buyback Multiplier
    function clearBuybackMultiplier() external authorized {
        buybackMultiplierTriggeredAt = 0;
    }

    // Trigger an autobuyback
    function triggerAutoBuyback() internal {
        buyTokens(autoBuybackAmount, DEAD);
        if(autoBuybackMultiplier){
            buybackMultiplierTriggeredAt = block.timestamp;
            emit BuybackMultiplierActive(buybackMultiplierLength);
        }
        autoBuybackBlockLast = block.number;
        autoBuybackAccumulator = autoBuybackAccumulator.add(autoBuybackAmount);
        if(autoBuybackAccumulator > autoBuybackCap){ autoBuybackEnabled = false; }
    }

    // Buy amount of tokens with bnb from the contract
    function buyTokens(uint256 amount, address to) internal swapping {
        address[] memory path = new address[](2);
        path[0] = WETH;
        path[1] = address(this);

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

    // Set autobuyback settings
    function setAutoBuybackSettings(bool _enabled, uint256 _cap, uint256 _amount, uint256 _period, bool _autoBuybackMultiplier) external authorized {
        autoBuybackEnabled = _enabled;
        autoBuybackCap = _cap;
        autoBuybackAccumulator = 0;
        autoBuybackAmount = _amount;
        autoBuybackBlockPeriod = _period;
        autoBuybackBlockLast = block.number;
        autoBuybackMultiplier = _autoBuybackMultiplier;
    }

    // Set buybackmultiplier settings
    function setBuybackMultiplierSettings(uint256 numerator, uint256 denominator, uint256 length) external authorized {
        require(numerator / denominator <= 2 && numerator > denominator);
        buybackMultiplierNumerator = numerator;
        buybackMultiplierDenominator = denominator;
        buybackMultiplierLength = length;
    }

    // Check when the token is launched
    function launched() internal view returns (bool) {
        return launchedAt != 0;
    }

    // Set the launchedAt to token launch
    function launch() internal {
        launchedAt = block.number;
        swapEnabled = true;
    }

    // Set max buy TX 
    function setBuyTxLimitInPercent(uint256 maxBuyTxPercent) external authorized {
        _maxBuyTxAmount = _totalSupply.mul(maxBuyTxPercent).div(10000);
    }

    // Set max sell TX 
    function setSellTxLimitInPercent(uint256 maxSellTxPercent) external authorized {
        _maxSellTxAmount = _totalSupply.mul(maxSellTxPercent).div(10000);
    }

    // Exempt from dividend
    function setIsDividendExempt(address holder, bool exempt) external authorized {
        require(holder != address(this) && holder != pair);
        isDividendExempt[holder] = exempt;
        if(exempt){
            distributor.setShare(holder, 0);
        }else{
            distributor.setShare(holder, _balances[holder]);
        }
    }

    // Exempt from fee
    function setIsFeeExempt(address holder, bool exempt) external authorized {
        isFeeExempt[holder] = exempt;
    }

    // Exempt from max TX
    function setIsTxLimitExempt(address holder, bool exempt) external authorized {
        isTxLimitExempt[holder] = exempt;
    }

    // Exempt from buy CD
    function setIsTimelockExempt(address holder, bool exempt) external authorized {
        isTimelockExempt[holder] = exempt;
    }

    // Set our buy fees
    function setBuyFees(uint256 _liquidityFeeBuy, uint256 _buybackFeeBuy, uint256 _reflectionFeeBuy, uint256 _marketingFeeBuy, uint256 _devFeeBuy, uint256 _feeDenominator) external authorized {
        LiquidityFeeBuy = _liquidityFeeBuy;
        buybackFeeBuy = _buybackFeeBuy;
        reflectionFeeBuy = _reflectionFeeBuy;
        marketingFeeBuy = _marketingFeeBuy;
        treasuryFeeBuy = _devFeeBuy;
        totalFeeBuy = _liquidityFeeBuy.add(_buybackFeeBuy).add(_reflectionFeeBuy).add(_marketingFeeBuy).add(_devFeeBuy);
        feeDenominator = _feeDenominator;
    }

    // Set our sell fees
    function setSellFees(uint256 _liquidityFeeSell, uint256 _buybackFeeSell, uint256 _reflectionFeeSell, uint256 _marketingFeeSell, uint256 _devFeeSell, uint256 _feeDenominator) external authorized {
        LiquidityFeeSell = _liquidityFeeSell;
        buybackFeeSell = _buybackFeeSell;
        reflectionFeeSell = _reflectionFeeSell;
        marketingFeeSell = _marketingFeeSell;
        treasuryFeeSell = _devFeeSell;
        totalFeeSell = _liquidityFeeSell.add(_buybackFeeSell).add(_reflectionFeeSell).add(_marketingFeeSell).add(_devFeeSell);
        feeDenominator = _feeDenominator;
    }

    // Set the marketing and liquidity receivers
    function setFeeReceivers(address _autoLiquidityReceiver, address _marketingFeeReceiver) external authorized {
        autoLiquidityReceiver = _autoLiquidityReceiver;
        marketingFeeReceiver = _marketingFeeReceiver;
    }

    // Set swapBack settings
    function setSwapBackSettings(bool _enabled, uint256 _amount) external authorized {
        swapEnabled = _enabled;
        swapThreshold = _totalSupply * _amount / 10000; 
    }

    // Set target liquidity
    function setTargetLiquidity(uint256 _target, uint256 _denominator) external authorized {
        targetLiquidity = _target;
        targetLiquidityDenominator = _denominator;
    }

    // Send BNB to marketingwallet
    function manualSend () external authorized {
        uint256 contractETHBalance = address(this).balance;
        payable(marketingFeeReceiver).transfer(contractETHBalance);
    }
    
    // Set criteria for auto distribution
    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external authorized {
        distributor.setDistributionCriteria(_minPeriod, _minDistribution);
    }
    
    // Let people claim there dividend
    function claimDividend() external {
        distributor.claimDividend(msg.sender);
    }
    
    // Check how much earnings are unpaid
    function getUnpaidEarnings(address shareholder) public view returns (uint256) {
        return distributor.getUnpaidEarnings(shareholder);
    } 

    // Set gas for distributor
    function setDistributorSettings(uint256 gas) external authorized {
        require(gas < 750000);
        distributorGas = gas;
    }
    
    // Get the circulatingSupply
    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(ZERO));
    }

    // Get the liquidity backing
    function getLiquidityBacking(uint256 accuracy) public view returns (uint256) {
        return accuracy.mul(balanceOf(pair).mul(2)).div(getCirculatingSupply());
    }

    // Get if we are over liquified or not
    function isOverLiquified(uint256 target, uint256 accuracy) public view returns (bool) {
        return getLiquidityBacking(accuracy) > target;
    }

    function updateLaunching(address[] calldata _addresses, bool _enabled) external authorized {
        require(LaunchingEnabled, "Launching disabled");
        for (uint256 i = 0; i < _addresses.length; i++) {
            Launching[_addresses[i]] = _enabled;
        }
    }
    event AutoLiquify(uint256 amountBNB, uint256 amountBOG);
    event BuybackMultiplierActive(uint256 duration);
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountBNB","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountBOG","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"duration","type":"uint256"}],"name":"BuybackMultiplierActive","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_value","type":"bool"}],"name":"Approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"LiquidityFeeBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LiquidityFeeSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxBuyTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxSellTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"authorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buybackFeeBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buybackFeeSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimDividend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"clearBuybackMultiplier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"},{"internalType":"uint8","name":"_interval","type":"uint8"}],"name":"cooldownEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"disableGREED","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_seconds","type":"uint256"}],"name":"enableGREED","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":"getMultipliedFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"selling","type":"bool"}],"name":"getTotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"shareholder","type":"address"}],"name":"getUnpaidEarnings","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"inGREEDTime","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isAuthorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_DCGMembers","type":"bool"}],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingFeeBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFeeSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_cap","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_period","type":"uint256"},{"internalType":"bool","name":"_autoBuybackMultiplier","type":"bool"}],"name":"setAutoBuybackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFeeBuy","type":"uint256"},{"internalType":"uint256","name":"_buybackFeeBuy","type":"uint256"},{"internalType":"uint256","name":"_reflectionFeeBuy","type":"uint256"},{"internalType":"uint256","name":"_marketingFeeBuy","type":"uint256"},{"internalType":"uint256","name":"_devFeeBuy","type":"uint256"},{"internalType":"uint256","name":"_feeDenominator","type":"uint256"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxBuyTxPercent","type":"uint256"}],"name":"setBuyTxLimitInPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numerator","type":"uint256"},{"internalType":"uint256","name":"denominator","type":"uint256"},{"internalType":"uint256","name":"length","type":"uint256"}],"name":"setBuybackMultiplierSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minPeriod","type":"uint256"},{"internalType":"uint256","name":"_minDistribution","type":"uint256"}],"name":"setDistributionCriteria","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"setDistributorSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_autoLiquidityReceiver","type":"address"},{"internalType":"address","name":"_marketingFeeReceiver","type":"address"}],"name":"setFeeReceivers","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":"setIsTimelockExempt","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":"uint256","name":"maxWallPercent","type":"uint256"}],"name":"setMaxWalletPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFeeSell","type":"uint256"},{"internalType":"uint256","name":"_buybackFeeSell","type":"uint256"},{"internalType":"uint256","name":"_reflectionFeeSell","type":"uint256"},{"internalType":"uint256","name":"_marketingFeeSell","type":"uint256"},{"internalType":"uint256","name":"_devFeeSell","type":"uint256"},{"internalType":"uint256","name":"_feeDenominator","type":"uint256"}],"name":"setSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxSellTxPercent","type":"uint256"}],"name":"setSellTxLimitInPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_amount","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":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalFeeBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeeSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"tradingStatus","outputs":[],"stateMutability":"nonpayable","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 payable","name":"account","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bool","name":"triggerBuybackMultiplier","type":"bool"}],"name":"triggerManualBuyback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"unauthorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"},{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"updateLaunching","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600280546001600160a01b031990811673dac17f958d2ee523a2206206994597c13d831ec71790915560038054821673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc217905560048054821661dead17905560058054821690556006805490911673af2b9620dae505caccd24506787b2fc8072950311790556200008c6012600a620005f3565b6200009c90633b9aca006200060b565b6009556103e86009546064620000b391906200060b565b620000bf91906200062d565b600a556103e86009546064620000d691906200060b565b620000e291906200062d565b600b556103e86009546064620000f991906200060b565b6200010591906200062d565b600c556001601060006101000a81548160ff02191690831515021790555060016016556001601755600060185560026019556000601a556004601b556001601c556001601d556000601e556002601f55600060205560046021556064602855610e10602a556003602b5561271060095460146200018391906200060b565b6200018f91906200062d565b602c556014602d556064602e81905560c8602f556030556107086032556033805461ffff199081169091556207a120603a55603b8054611e0092169190911790556040805462ffffff191662010000179055348015620001ee57600080fd5b5060008054336001600160a01b031991821681178355825260016020818152604093849020805460ff1916909217909155603d8054737a250d5630b4cf539739df2c5dacb4c659f2488d931683179055825163c45a015560e01b81529251919263c45a015592600480830193928290030181865afa15801562000275573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200029b919062000650565b6003546040516364e329cb60e11b81526001600160a01b03918216600482015230602482015291169063c9c65396906044016020604051808303816000875af1158015620002ed573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000313919062000650565b603e80546001600160a01b0319166001600160a01b03928316179055306000908152600e60209081526040808320603d80548616855292529182902060001990555490519116906200036590620004d0565b6001600160a01b039091168152602001604051809103906000f08015801562000392573d6000803e3d6000fd5b50603980546001600160a01b039283166001600160a01b031991821617909155336000818152601160209081526040808320805460ff199081166001908117909255601284528285208054821683179055601384528285208054821683179055600480548916865283862080548316841790553080875284872080548416851790556006548a1687528487208054841685179055603e548a16875260148652848720805484168517905586528386208054831684179055549097168452818420805490971617909555600780548516841790556008805490941673af2b9620dae505caccd24506787b2fc80729503117909355600954828252600d84528482208190559351938452909283927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3506200067b565b61103b806200397e83390190565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000535578160001904821115620005195762000519620004de565b808516156200052757918102915b93841c9390800290620004f9565b509250929050565b6000826200054e57506001620005ed565b816200055d57506000620005ed565b81600181146200057657600281146200058157620005a1565b6001915050620005ed565b60ff841115620005955762000595620004de565b50506001821b620005ed565b5060208310610133831016604e8410600b8410161715620005c6575081810a620005ed565b620005d28383620004f4565b8060001904821115620005e957620005e9620004de565b0290505b92915050565b60006200060460ff8416836200053d565b9392505050565b6000816000190483118215151615620006285762000628620004de565b500290565b6000826200064b57634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156200066357600080fd5b81516001600160a01b03811681146200060457600080fd5b6132f3806200068b6000396000f3fe6080604052600436106103d25760003560e01c8063769b3fdd116101fd578063d806d12f11610118578063f2fde38b116100ab578063f84ba65d1161007a578063f84ba65d14610b4f578063f887ea4014610b6f578063fb5f27fb14610b8f578063fe9fbb8014610ba5578063ffb54a9914610bc557600080fd5b8063f2fde38b14610ada578063f429389014610afa578063f708a64f14610b0f578063f74c9f4714610b2f57600080fd5b8063e3aa51bc116100e7578063e3aa51bc14610a65578063f0b37c0414610a85578063f0fc6bca14610aa5578063f1f3bca314610aba57600080fd5b8063d806d12f146109ca578063dd62ed3e146109df578063df20fd4914610a25578063df4a76c514610a4557600080fd5b8063a4b45c0011610190578063b6a5d7de1161015f578063b6a5d7de14610954578063ba876bb914610974578063cf4be39414610994578063d51ed1c8146109aa57600080fd5b8063a4b45c00146108df578063a8aa1b31146108ff578063a9059cbb1461091f578063b210b06d1461093f57600080fd5b806382bf293c116101cc57806382bf293c1461083f578063893d20e81461085f57806395d89b41146108915780639d1944f5146108bf57600080fd5b8063769b3fdd146107d357806378109e54146107e95780637affa29b146107ff57806382334b941461081f57600080fd5b80632e4a9bd7116102ed5780634f7b4d4911610280578063658d4b7f1161024f578063658d4b7f1461073d5780636ddd17131461075d57806370a082311461077d57806371916a6b146107b357600080fd5b80634f7b4d49146106d257806350db71fb146106e75780635314841614610707578063571ac8b01461071d57600080fd5b8063313ce567116102bc578063313ce56714610675578063334773271461069157806337bc957e146106a75780634dfc855a146106bd57600080fd5b80632e4a9bd7146105fa5780632f54bf6e146106105780632f5620d11461063f5780632fe76bc21461065f57600080fd5b80631f478f1e1161036557806328fd31981161033457806328fd3198146105855780632b112e49146105a55780632d48e896146105ba5780632d594567146105da57600080fd5b80631f478f1e14610505578063201e7991146105255780632375ce401461054557806323b872dd1461056557600080fd5b80631161ae39116103a15780631161ae391461049a57806313374e7a146104ba57806318160ddd146104d057806318197c85146104e557600080fd5b806306fdde03146103de578063095ea7b3146104245780630d2959801461045457806310075a691461047657600080fd5b366103d957005b600080fd5b3480156103ea57600080fd5b5060408051808201909152600b81526a536d61727420546f6f6c7360a81b60208201525b60405161041b9190612d44565b60405180910390f35b34801561043057600080fd5b5061044461043f366004612dae565b610be4565b604051901515815260200161041b565b34801561046057600080fd5b5061047461046f366004612def565b610c51565b005b34801561048257600080fd5b5061048c60195481565b60405190815260200161041b565b3480156104a657600080fd5b506104446104b5366004612e0a565b610caf565b3480156104c657600080fd5b5061048c601f5481565b3480156104dc57600080fd5b5060095461048c565b3480156104f157600080fd5b50610474610500366004612e2c565b610cc3565b34801561051157600080fd5b50610474610520366004612eb0565b610da6565b34801561053157600080fd5b50610474610540366004612e0a565b610df6565b34801561055157600080fd5b50610474610560366004612ee5565b610e26565b34801561057157600080fd5b50610444610580366004612f11565b610e7b565b34801561059157600080fd5b5061048c6105a0366004612f52565b610f3d565b3480156105b157600080fd5b5061048c610fac565b3480156105c657600080fd5b506104746105d5366004612e0a565b610ffe565b3480156105e657600080fd5b506104746105f5366004612f6f565b61108d565b34801561060657600080fd5b5061048c60175481565b34801561061c57600080fd5b5061044461062b366004612f52565b6000546001600160a01b0391821691161490565b34801561064b57600080fd5b5061047461065a366004612fac565b6110d9565b34801561066b57600080fd5b5061048c601c5481565b34801561068157600080fd5b506040516012815260200161041b565b34801561069d57600080fd5b5061048c600a5481565b3480156106b357600080fd5b5061048c601d5481565b3480156106c957600080fd5b5061044461113f565b3480156106de57600080fd5b5061047461116b565b3480156106f357600080fd5b50610474610702366004612eb0565b611197565b34801561071357600080fd5b5061048c60215481565b34801561072957600080fd5b50610444610738366004612f52565b6111e7565b34801561074957600080fd5b50610474610758366004612eb0565b6111f5565b34801561076957600080fd5b506040546104449062010000900460ff1681565b34801561078957600080fd5b5061048c610798366004612f52565b6001600160a01b03166000908152600d602052604090205490565b3480156107bf57600080fd5b506104746107ce366004612def565b611245565b3480156107df57600080fd5b5061048c60165481565b3480156107f557600080fd5b5061048c600c5481565b34801561080b57600080fd5b5061047461081a366004612ffc565b6112a8565b34801561082b57600080fd5b5061047461083a366004613015565b6112f4565b34801561084b57600080fd5b5061047461085a366004612ffc565b61139c565b34801561086b57600080fd5b506000546001600160a01b03165b6040516001600160a01b03909116815260200161041b565b34801561089d57600080fd5b5060408051808201909152600581526414d350549560da1b602082015261040e565b3480156108cb57600080fd5b506104746108da366004612ffc565b6113e7565b3480156108eb57600080fd5b506104746108fa366004613038565b611420565b34801561090b57600080fd5b50603e54610879906001600160a01b031681565b34801561092b57600080fd5b5061044461093a366004612dae565b611473565b34801561094b57600080fd5b50610474611480565b34801561096057600080fd5b5061047461096f366004612f52565b6114ac565b34801561098057600080fd5b5061047461098f366004613066565b6114fd565b3480156109a057600080fd5b5061048c600b5481565b3480156109b657600080fd5b5061048c6109c5366004612ffc565b611560565b3480156109d657600080fd5b5061048c6115a1565b3480156109eb57600080fd5b5061048c6109fa366004613038565b6001600160a01b039182166000908152600e6020908152604080832093909416825291909152205490565b348015610a3157600080fd5b50610474610a403660046130a9565b611614565b348015610a5157600080fd5b50610474610a60366004612ffc565b611671565b348015610a7157600080fd5b50610474610a80366004612ffc565b6116b7565b348015610a9157600080fd5b50610474610aa0366004612f52565b6116e5565b348015610ab157600080fd5b50610474611730565b348015610ac657600080fd5b5061048c610ad5366004612def565b611789565b348015610ae657600080fd5b50610474610af5366004612f52565b6117e6565b348015610b0657600080fd5b5061047461187c565b348015610b1b57600080fd5b50610474610b2a366004612eb0565b6118df565b348015610b3b57600080fd5b50610474610b4a366004613066565b6119e3565b348015610b5b57600080fd5b50610474610b6a366004612eb0565b611a40565b348015610b7b57600080fd5b50603d54610879906001600160a01b031681565b348015610b9b57600080fd5b5061048c601b5481565b348015610bb157600080fd5b50610444610bc0366004612f52565b611a90565b348015610bd157600080fd5b5060405461044490610100900460ff1681565b336000818152600e602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610c3f9086815260200190565b60405180910390a35060015b92915050565b6000546001600160a01b03163314610c845760405162461bcd60e51b8152600401610c7b906130c5565b60405180910390fd5b6040805443603f5562ffff0019169115156101000262ff000019169190911762010000179055565b50565b600082610cbb83611560565b119392505050565b610ccc33611a90565b610ce85760405162461bcd60e51b8152600401610c7b906130e5565b60105460ff16610d2f5760405162461bcd60e51b815260206004820152601260248201527113185d5b98da1a5b99c8191a5cd8589b195960721b6044820152606401610c7b565b60005b82811015610da05781600f6000868685818110610d5157610d5161310a565b9050602002016020810190610d669190612f52565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580610d9881613136565b915050610d32565b50505050565b610daf33611a90565b610dcb5760405162461bcd60e51b8152600401610c7b906130e5565b6001600160a01b03919091166000908152601560205260409020805460ff1916911515919091179055565b610dff33611a90565b610e1b5760405162461bcd60e51b8152600401610c7b906130e5565b602d91909155602e55565b610e2f33611a90565b610e4b5760405162461bcd60e51b8152600401610c7b906130e5565b6002610e578385613151565b11158015610e6457508183115b610e6d57600080fd5b602f92909255603055603255565b6001600160a01b0383166000908152600e6020908152604080832033845290915281205460001914610f28576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152600e82528381203382529091529190912054610f03918490611aae565b6001600160a01b0385166000908152600e602090815260408083203384529091529020555b610f33848484611ae8565b90505b9392505050565b60395460405163051fa63360e31b81526001600160a01b03838116600483015260009216906328fd319890602401602060405180830381865afa158015610f88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c4b9190613173565b6005546001600160a01b03166000908152600d6020526040812054610ff9906004546001600160a01b03166000908152600d6020526040902054610ff39060095490611fc6565b90611fc6565b905090565b61100733611a90565b6110235760405162461bcd60e51b8152600401610c7b906130e5565b6039546040516316a4744b60e11b815260048101849052602481018390526001600160a01b0390911690632d48e896906044015b600060405180830381600087803b15801561107157600080fd5b505af1158015611085573d6000803e3d6000fd5b505050505050565b61109633611a90565b6110b25760405162461bcd60e51b8152600401610c7b906130e5565b603b805461ffff191692151561ff0019169290921761010060ff9290921691909102179055565b6110e233611a90565b6110fe5760405162461bcd60e51b8152600401610c7b906130e5565b6033805460349590955560006035556036939093556037919091554360385561ffff1990921692151561ff0019169290921761010091151591909102179055565b600042611159602a5460295461200890919063ffffffff16565b11156111655750600190565b50600090565b61117433611a90565b6111905760405162461bcd60e51b8152600401610c7b906130e5565b6000602955565b6111a033611a90565b6111bc5760405162461bcd60e51b8152600401610c7b906130e5565b6001600160a01b03919091166000908152601360205260409020805460ff1916911515919091179055565b6000610c4b82600019610be4565b6111fe33611a90565b61121a5760405162461bcd60e51b8152600401610c7b906130e5565b6001600160a01b03919091166000908152601160205260409020805460ff1916911515919091179055565b61124e33611a90565b61126a5760405162461bcd60e51b8152600401610c7b906130e5565b604054610100900460ff1615801561127f5750805b61128857600080fd5b506040805461ff0019166101001790556010805460ff1916905543603f55565b6112b133611a90565b6112cd5760405162461bcd60e51b8152600401610c7b906130e5565b6112ee6127106112e88360095461206790919063ffffffff16565b906120e6565b600a5550565b6112fd33611a90565b6113195760405162461bcd60e51b8152600401610c7b906130e5565b600061132d83670de0b6b3a764000061318c565b9050600061133c8260646120e6565b6004549091506113569082906001600160a01b0316612128565b8215610da057426031556032546040519081527f39d2389ec5c1fa77b2c0d374bc61b6d7bd97ccba280fcdeb4e9c7644898d7c3a9060200160405180910390a150505050565b6000546001600160a01b031633146113c65760405162461bcd60e51b8152600401610c7b906130c5565b6113e16127106112e88360095461206790919063ffffffff16565b600c5550565b6113f033611a90565b61140c5760405162461bcd60e51b8152600401610c7b906130e5565b620b71b0811061141b57600080fd5b603a55565b61142933611a90565b6114455760405162461bcd60e51b8152600401610c7b906130e5565b600780546001600160a01b039384166001600160a01b03199182161790915560088054929093169116179055565b6000610f36338484611ae8565b61148933611a90565b6114a55760405162461bcd60e51b8152600401610c7b906130e5565b6000603155565b6000546001600160a01b031633146114d65760405162461bcd60e51b8152600401610c7b906130c5565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b61150633611a90565b6115225760405162461bcd60e51b8152600401610c7b906130e5565b601c869055601d859055601e849055601f83905560208290556115538261154d858188818c8c612008565b90612008565b6021556028555050505050565b6000610c4b61156d610fac565b603e546001600160a01b03166000908152600d60205260409020546112e89061159a906002905b90612067565b8590612067565b6000806115bf42610ff360325460315461200890919063ffffffff16565b905060006115e6602754610ff36030546112e8602f5460275461206790919063ffffffff16565b905061160d6116046032546112e8858561206790919063ffffffff16565b60275490612008565b9250505090565b61161d33611a90565b6116395760405162461bcd60e51b8152600401610c7b906130e5565b6040805462ff0000191662010000841515021790556009546127109061166090839061318c565b61166a9190613151565b602c555050565b61167a33611a90565b6116965760405162461bcd60e51b8152600401610c7b906130e5565b6116b16127106112e88360095461206790919063ffffffff16565b600b5550565b6116c033611a90565b6116dc5760405162461bcd60e51b8152600401610c7b906130e5565b42602955602a55565b6000546001600160a01b0316331461170f5760405162461bcd60e51b8152600401610c7b906130c5565b6001600160a01b03166000908152600160205260409020805460ff19169055565b603954604051630afbf02f60e11b81523360048201526001600160a01b03909116906315f7e05e90602401600060405180830381600087803b15801561177557600080fd5b505af1158015610da0573d6000803e3d6000fd5b600043602b54603f5461179c91906131ab565b106117af57602854610c4b906001611fc6565b8180156117d15750426117cf60325460315461200890919063ffffffff16565b115b156117de57610c4b6115a1565b505060275490565b6000546001600160a01b031633146118105760405162461bcd60e51b8152600401610c7b906130c5565b600080546001600160a01b0319166001600160a01b038316908117825580825260016020818152604093849020805460ff191690921790915591519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163910160405180910390a150565b61188533611a90565b6118a15760405162461bcd60e51b8152600401610c7b906130e5565b60085460405147916001600160a01b03169082156108fc029083906000818181858888f193505050501580156118db573d6000803e3d6000fd5b5050565b6118e833611a90565b6119045760405162461bcd60e51b8152600401610c7b906130e5565b6001600160a01b038216301480159061192b5750603e546001600160a01b03838116911614155b61193457600080fd5b6001600160a01b0382166000908152601460205260409020805460ff1916821580159190911790915561199a57603954604051630a5b654b60e11b81526001600160a01b03848116600483015260006024830152909116906314b6ca9690604401611057565b6039546001600160a01b038381166000818152600d602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401611057565b6119ec33611a90565b611a085760405162461bcd60e51b8152600401610c7b906130e5565b6016869055601785905560188490556019839055601a829055611a338261154d858188818c8c612008565b601b556028555050505050565b611a4933611a90565b611a655760405162461bcd60e51b8152600401610c7b906130e5565b6001600160a01b03919091166000908152601260205260409020805460ff1916911515919091179055565b6001600160a01b031660009081526001602052604090205460ff1690565b60008184841115611ad25760405162461bcd60e51b8152600401610c7b9190612d44565b506000611adf84866131c3565b95945050505050565b6000611af5603f54151590565b158015611b0f5750603e546001600160a01b038481169116145b15611b50576001600160a01b0384166000908152600d6020526040902054611b3657600080fd5b611b5043603f556040805462ff0000191662010000179055565b6040546301000000900460ff1615611b7457611b6d848484612238565b9050610f36565b6001600160a01b03841660009081526001602052604090205460ff16158015611bb657506001600160a01b03831660009081526001602052604090205460ff16155b8015611bdb57506001600160a01b0383166000908152600f602052604090205460ff16155b15611c3757604054610100900460ff16611c375760405162461bcd60e51b815260206004820152601760248201527f54726164696e67206e6f7420656e61626c6564207965740000000000000000006044820152606401610c7b565b6001600160a01b03831660009081526015602052604090205460ff16158015611c7957506001600160a01b03841660009081526015602052604090205460ff16155b611cbe5760405162461bcd60e51b81526020600482015260166024820152751059191c995cdcc81a5cc8189b1858dadb1a5cdd195960521b6044820152606401610c7b565b603e546001600160a01b03848116911614611cd88161231e565b611ce3858585612372565b611ced85856124e4565b611cf9858486846125c6565b6000611d0361113f565b9050611d0d6126fe565b15611d1a57611d1a61275a565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0389166000908152600d9091529190912054611d6c918690611aae565b6001600160a01b0387166000908152600d6020908152604080832093909355601190529081205460ff1615611da15784611dad565b611dad87868585612c16565b6001600160a01b0387166000908152600d6020526040902054909150611dd39082612008565b6001600160a01b038088166000908152600d6020908152604080832094909455918a1681526014909152205460ff16611e77576039546001600160a01b038881166000818152600d602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b158015611e6457600080fd5b505af1925050508015611e75575060015b505b6001600160a01b03861660009081526014602052604090205460ff16611f08576039546001600160a01b038781166000818152600d602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b158015611ef557600080fd5b505af1925050508015611f06575060015b505b603954603a546040516001624d3b8760e01b031981526001600160a01b039092169163ffb2c47991611f409160040190815260200190565b600060405180830381600087803b158015611f5a57600080fd5b505af1925050508015611f6b575060015b50856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611fb191815260200190565b60405180910390a35060019695505050505050565b6000610f3683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611aae565b60008061201583856131ab565b905083811015610f365760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610c7b565b60008261207657506000610c4b565b6000612082838561318c565b90508261208f8583613151565b14610f365760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610c7b565b6000610f3683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612d16565b6040805463ff0000001916630100000017815580516002808252606082018352600092602083019080368337505060035482519293506001600160a01b03169183915060009061217a5761217a61310a565b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106121ae576121ae61310a565b6001600160a01b039283166020918202929092010152603d5460405163b6f9de9560e01b815291169063b6f9de959085906121f49060009086908890429060040161321e565b6000604051808303818588803b15801561220d57600080fd5b505af1158015612221573d6000803e3d6000fd5b50506040805463ff00000019169055505050505050565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152600d90915291822054612289918490611aae565b6001600160a01b038086166000908152600d602052604080822093909355908516815220546122b89083612008565b6001600160a01b038085166000818152600d602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061230c9086815260200190565b60405180910390a35060019392505050565b801561234b57601c54602255601d54602355601e54602455601f5460255560205460265560215460275550565b601654602255601754602355601854602455601954602555601a54602655601b5460275550565b6001600160a01b03831660009081526001602052604090205460ff161580156123a957506000546001600160a01b03838116911614155b80156123be57506001600160a01b0382163014155b80156123d857506004546001600160a01b03838116911614155b80156123f25750603e546001600160a01b03838116911614155b801561240c57506008546001600160a01b03838116911614155b801561242657506007546001600160a01b03838116911614155b801561244057506006546001600160a01b03838116911614155b156124df576001600160a01b0382166000908152600d6020526040902054600c5461246b83836131ab565b1115610da05760405162461bcd60e51b815260206004820152603e60248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460448201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e00006064820152608401610c7b565b505050565b603e546001600160a01b0383811691161480156125035750603b5460ff165b801561252857506001600160a01b03811660009081526013602052604090205460ff16155b156118db576001600160a01b0381166000908152603c602052604090205442116125945760405162461bcd60e51b815260206004820152601c60248201527f506c656173652077616974206265747765656e2074776f2062757973000000006044820152606401610c7b565b603b546125a990610100900460ff16426131ab565b6001600160a01b0382166000908152603c60205260409020555050565b6000546001600160a01b03838116911614610da057801561267257600b548311158061260a57506001600160a01b03841660009081526012602052604090205460ff165b8061262d57506001600160a01b03821660009081526012602052604090205460ff165b61266d5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610c7b565b610da0565b600a548311158061269b57506001600160a01b03841660009081526012602052604090205460ff165b806126be57506001600160a01b03821660009081526012602052604090205460ff165b610da05760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610c7b565b603e546000906001600160a01b0316331480159061272657506040546301000000900460ff16155b801561273a575060405462010000900460ff165b8015610ff9575050602c54306000908152600d6020526040902054101590565b6040805463ff00000019166301000000179055602d54602e5460009161277f91610caf565b61278b5760225461278e565b60005b905060006127b260026112e86027546112e886602c5461206790919063ffffffff16565b905060006127cb82602c54611fc690919063ffffffff16565b604080516002808252606082018352929350600092909160208301908036833701905050905030816000815181106128055761280561310a565b6001600160a01b0392831660209182029290920101526003548251911690829060019081106128365761283661310a565b6001600160a01b039283166020918202929092010152603d5460405163791ac94760e01b81524792919091169063791ac94790612880908690600090879030904290600401613253565b600060405180830381600087803b15801561289a57600080fd5b505af11580156128ae573d6000803e3d6000fd5b5050505060006128c78247611fc690919063ffffffff16565b905060006128e26128d98860026120e6565b60275490611fc6565b905060006128f760026112e88481878d612067565b90506000612914836112e86024548761206790919063ffffffff16565b90506000612931846112e86025548861206790919063ffffffff16565b9050600061294e856112e86026548961206790919063ffffffff16565b9050603960009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b1580156129a057600080fd5b505af1935050505080156129b2575060015b506008546040516000916001600160a01b03169061753090859084818181858888f193505050503d8060008114612a05576040519150601f19603f3d011682016040523d82523d6000602084013e612a0a565b606091505b50506006546040519192506000916001600160a01b039091169061753090859084818181858888f193505050503d8060008114612a63576040519150601f19603f3d011682016040523d82523d6000602084013e612a68565b606091505b5050905081612aca5760405162461bcd60e51b815260206004820152602860248201527f6d61726b6574696e672072656365697665722072656a656374656420455448206044820152673a3930b739b332b960c11b6064820152608401610c7b565b80612b225760405162461bcd60e51b815260206004820152602260248201527f6465762072656365697665722072656a656374656420455448207472616e736660448201526132b960f11b6064820152608401610c7b565b8b15612bfa57603d5460075460405163f305d71960e01b8152306004820152602481018f905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990889060c40160606040518083038185885af1158015612b98573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612bbd919061328f565b505060408051888152602081018f90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b50506040805463ff000000191690555050505050505050505050565b6000808215612c71578315612c5157612c4a6028546112e860026112e860036115946027548c61206790919063ffffffff16565b9050612c8f565b612c4a6028546112e860026112e86027548a61206790919063ffffffff16565b612c8c6028546112e86027548861206790919063ffffffff16565b90505b306000908152600d6020526040902054612ca99082612008565b306000818152600d6020526040908190209290925590516001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612cfa9085815260200190565b60405180910390a3612d0c8582611fc6565b9695505050505050565b60008183612d375760405162461bcd60e51b8152600401610c7b9190612d44565b506000611adf8486613151565b600060208083528351808285015260005b81811015612d7157858101830151858201604001528201612d55565b81811115612d83576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610cac57600080fd5b60008060408385031215612dc157600080fd5b8235612dcc81612d99565b946020939093013593505050565b80358015158114612dea57600080fd5b919050565b600060208284031215612e0157600080fd5b610f3682612dda565b60008060408385031215612e1d57600080fd5b50508035926020909101359150565b600080600060408486031215612e4157600080fd5b833567ffffffffffffffff80821115612e5957600080fd5b818601915086601f830112612e6d57600080fd5b813581811115612e7c57600080fd5b8760208260051b8501011115612e9157600080fd5b602092830195509350612ea79186019050612dda565b90509250925092565b60008060408385031215612ec357600080fd5b8235612ece81612d99565b9150612edc60208401612dda565b90509250929050565b600080600060608486031215612efa57600080fd5b505081359360208301359350604090920135919050565b600080600060608486031215612f2657600080fd5b8335612f3181612d99565b92506020840135612f4181612d99565b929592945050506040919091013590565b600060208284031215612f6457600080fd5b8135610f3681612d99565b60008060408385031215612f8257600080fd5b612f8b83612dda565b9150602083013560ff81168114612fa157600080fd5b809150509250929050565b600080600080600060a08688031215612fc457600080fd5b612fcd86612dda565b9450602086013593506040860135925060608601359150612ff060808701612dda565b90509295509295909350565b60006020828403121561300e57600080fd5b5035919050565b6000806040838503121561302857600080fd5b82359150612edc60208401612dda565b6000806040838503121561304b57600080fd5b823561305681612d99565b91506020830135612fa181612d99565b60008060008060008060c0878903121561307f57600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b600080604083850312156130bc57600080fd5b612dcc83612dda565b60208082526006908201526510a7aba722a960d11b604082015260600190565b6020808252600b908201526a085055551213d49256915160aa1b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060001982141561314a5761314a613120565b5060010190565b60008261316e57634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561318557600080fd5b5051919050565b60008160001904831182151516156131a6576131a6613120565b500290565b600082198211156131be576131be613120565b500190565b6000828210156131d5576131d5613120565b500390565b600081518084526020808501945080840160005b838110156132135781516001600160a01b0316875295820195908201906001016131ee565b509495945050505050565b84815260806020820152600061323760808301866131da565b6001600160a01b03949094166040830152506060015292915050565b85815284602082015260a06040820152600061327260a08301866131da565b6001600160a01b0394909416606083015250608001529392505050565b6000806000606084860312156132a457600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220c6c8c532e8ff76afc989b367495d6f6f853e56ac0504b444b809125c8cd92f5f64736f6c634300080a00336080604052600180546001600160a01b031990811673dac17f958d2ee523a2206206994597c13d831ec7179091556002805490911673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc21790556ec097ce7bc90715b34b9f1000000000600c55610708600d5564e8d4a51000600e5534801561007a57600080fd5b5060405161103b38038061103b833981016040819052610099916100f3565b6001600160a01b0381166100c157737a250d5630b4cf539739df2c5dacb4c659f2488d6100c3565b805b600380546001600160a01b03929092166001600160a01b0319928316179055600080549091163317905550610123565b60006020828403121561010557600080fd5b81516001600160a01b038116811461011c57600080fd5b9392505050565b610f09806101326000396000f3fe6080604052600436106100dd5760003560e01c8063997664d71161007f578063e2d2e21911610059578063e2d2e2191461022e578063efca2eed14610244578063ffb2c4791461025a578063ffd49c841461027a57600080fd5b8063997664d7146101b9578063ce7c2ac2146101cf578063d0e30db01461022657600080fd5b806328fd3198116100bb57806328fd31981461014d5780632d48e8961461016d5780633a98ef391461018d5780634fab0ae8146101a357600080fd5b806311ce023d146100e257806314b6ca961461010b57806315f7e05e1461012d575b600080fd5b3480156100ee57600080fd5b506100f8600c5481565b6040519081526020015b60405180910390f35b34801561011757600080fd5b5061012b610126366004610c8c565b610290565b005b34801561013957600080fd5b5061012b610148366004610cb6565b610408565b34801561015957600080fd5b506100f8610168366004610cb6565b61042b565b34801561017957600080fd5b5061012b610188366004610cd1565b6104b4565b34801561019957600080fd5b506100f860085481565b3480156101af57600080fd5b506100f8600e5481565b3480156101c557600080fd5b506100f860095481565b3480156101db57600080fd5b5061020b6101ea366004610cb6565b60076020526000908152604090208054600182015460029092015490919083565b60408051938452602084019290925290820152606001610102565b61012b6104d6565b34801561023a57600080fd5b506100f8600b5481565b34801561025057600080fd5b506100f8600a5481565b34801561026657600080fd5b5061012b610275366004610cf3565b610705565b34801561028657600080fd5b506100f8600d5481565b6000546001600160a01b031633146102a757600080fd5b6001600160a01b038216600090815260076020526040902054156102ce576102ce82610805565b6000811180156102f457506001600160a01b038216600090815260076020526040902054155b1561035a57600480546001600160a01b0384166000818152600560205260408120839055600183018455929092527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180546001600160a01b031916909117905561038d565b8015801561037f57506001600160a01b03821660009081526007602052604090205415155b1561038d5761038d82610921565b6001600160a01b0382166000908152600760205260409020546008546103be9183916103b891610a36565b90610a81565b6008556001600160a01b03821660009081526007602052604090208190556103e581610ae5565b6001600160a01b0390921660009081526007602052604090206001019190915550565b6000546001600160a01b0316331461041f57600080fd5b61042881610805565b50565b6001600160a01b03811660009081526007602052604081205461045057506000919050565b6001600160a01b03821660009081526007602052604081205461047290610ae5565b6001600160a01b0384166000908152600760205260409020600101549091508082116104a2575060009392505050565b6104ac8282610a36565b949350505050565b6000546001600160a01b031633146104cb57600080fd5b600d91909155600e55565b6000546001600160a01b031633146104ed57600080fd5b6001546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610536573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061055a9190610d0c565b6040805160028082526060820183529293506000929091602083019080368337505060025482519293506001600160a01b0316918391506000906105a0576105a0610d25565b6001600160a01b03928316602091820292909201015260018054835192169183919081106105d0576105d0610d25565b6001600160a01b03928316602091820292909201015260035460405163b6f9de9560e01b815291169063b6f9de9590349061061690600090869030904290600401610d3b565b6000604051808303818588803b15801561062f57600080fd5b505af1158015610643573d6000803e3d6000fd5b50506001546040516370a0823160e01b8152306004820152600094506106c393508692506001600160a01b03909116906370a0823190602401602060405180830381865afa158015610699573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106bd9190610d0c565b90610a36565b6009549091506106d39082610a81565b600955600854600c546106fd916106f4916106ee9085610b02565b90610b81565b600b5490610a81565b600b55505050565b6000546001600160a01b0316331461071c57600080fd5b60045480610728575050565b6000805a905060005b848310801561073f57508381105b156107fe5783600f5410610753576000600f555b6107856004600f548154811061076b5761076b610d25565b6000918252602090912001546001600160a01b0316610bc3565b156107bc576107bc6004600f54815481106107a2576107a2610d25565b6000918252602090912001546001600160a01b0316610805565b6107d16107ca5a8490610a36565b8490610a81565b92505a600f805491935060006107e683610dbb565b919050555080806107f690610dbb565b915050610731565b5050505050565b6001600160a01b0381166000908152600760205260409020546108255750565b60006108308261042b565b9050801561091d57600a546108459082610a81565b600a5560015460405163a9059cbb60e01b81526001600160a01b038481166004830152602482018490529091169063a9059cbb906044016020604051808303816000875af115801561089b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108bf9190610dd6565b506001600160a01b038216600090815260066020908152604080832042905560079091529020600201546108f39082610a81565b6001600160a01b03831660009081526007602052604090206002810191909155546103e590610ae5565b5050565b6004805461093190600190610df8565b8154811061094157610941610d25565b60009182526020808320909101546001600160a01b038481168452600590925260409092205460048054929093169291811061097f5761097f610d25565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559183168152600591829052604081205460048054919392916109cb90600190610df8565b815481106109db576109db610d25565b60009182526020808320909101546001600160a01b031683528201929092526040019020556004805480610a1157610a11610e0f565b600082815260209020810160001990810180546001600160a01b031916905501905550565b6000610a7883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610c08565b90505b92915050565b600080610a8e8385610e25565b905083811015610a785760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064015b60405180910390fd5b6000610a7b600c546106ee600b5485610b0290919063ffffffff16565b600082610b1157506000610a7b565b6000610b1d8385610e3d565b905082610b2a8583610e5c565b14610a785760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610adc565b6000610a7883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250610c42565b600d546001600160a01b03821660009081526006602052604081205490914291610bed9190610e25565b108015610a7b5750600e54610c018361042b565b1192915050565b60008184841115610c2c5760405162461bcd60e51b8152600401610adc9190610e7e565b506000610c398486610df8565b95945050505050565b60008183610c635760405162461bcd60e51b8152600401610adc9190610e7e565b506000610c398486610e5c565b80356001600160a01b0381168114610c8757600080fd5b919050565b60008060408385031215610c9f57600080fd5b610ca883610c70565b946020939093013593505050565b600060208284031215610cc857600080fd5b610a7882610c70565b60008060408385031215610ce457600080fd5b50508035926020909101359150565b600060208284031215610d0557600080fd5b5035919050565b600060208284031215610d1e57600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b600060808201868352602060808185015281875180845260a086019150828901935060005b81811015610d855784516001600160a01b031683529383019391830191600101610d60565b50506001600160a01b039690961660408501525050506060015292915050565b634e487b7160e01b600052601160045260246000fd5b6000600019821415610dcf57610dcf610da5565b5060010190565b600060208284031215610de857600080fd5b81518015158114610a7857600080fd5b600082821015610e0a57610e0a610da5565b500390565b634e487b7160e01b600052603160045260246000fd5b60008219821115610e3857610e38610da5565b500190565b6000816000190483118215151615610e5757610e57610da5565b500290565b600082610e7957634e487b7160e01b600052601260045260246000fd5b500490565b600060208083528351808285015260005b81811015610eab57858101830151858201604001528201610e8f565b81811115610ebd576000604083870101525b50601f01601f191692909201604001939250505056fea26469706673582212202cbdd18c511828bb62f4f7a50edd2dc3c61ce59e621d34126c5c013b9511b9f764736f6c634300080a0033

Deployed Bytecode

0x6080604052600436106103d25760003560e01c8063769b3fdd116101fd578063d806d12f11610118578063f2fde38b116100ab578063f84ba65d1161007a578063f84ba65d14610b4f578063f887ea4014610b6f578063fb5f27fb14610b8f578063fe9fbb8014610ba5578063ffb54a9914610bc557600080fd5b8063f2fde38b14610ada578063f429389014610afa578063f708a64f14610b0f578063f74c9f4714610b2f57600080fd5b8063e3aa51bc116100e7578063e3aa51bc14610a65578063f0b37c0414610a85578063f0fc6bca14610aa5578063f1f3bca314610aba57600080fd5b8063d806d12f146109ca578063dd62ed3e146109df578063df20fd4914610a25578063df4a76c514610a4557600080fd5b8063a4b45c0011610190578063b6a5d7de1161015f578063b6a5d7de14610954578063ba876bb914610974578063cf4be39414610994578063d51ed1c8146109aa57600080fd5b8063a4b45c00146108df578063a8aa1b31146108ff578063a9059cbb1461091f578063b210b06d1461093f57600080fd5b806382bf293c116101cc57806382bf293c1461083f578063893d20e81461085f57806395d89b41146108915780639d1944f5146108bf57600080fd5b8063769b3fdd146107d357806378109e54146107e95780637affa29b146107ff57806382334b941461081f57600080fd5b80632e4a9bd7116102ed5780634f7b4d4911610280578063658d4b7f1161024f578063658d4b7f1461073d5780636ddd17131461075d57806370a082311461077d57806371916a6b146107b357600080fd5b80634f7b4d49146106d257806350db71fb146106e75780635314841614610707578063571ac8b01461071d57600080fd5b8063313ce567116102bc578063313ce56714610675578063334773271461069157806337bc957e146106a75780634dfc855a146106bd57600080fd5b80632e4a9bd7146105fa5780632f54bf6e146106105780632f5620d11461063f5780632fe76bc21461065f57600080fd5b80631f478f1e1161036557806328fd31981161033457806328fd3198146105855780632b112e49146105a55780632d48e896146105ba5780632d594567146105da57600080fd5b80631f478f1e14610505578063201e7991146105255780632375ce401461054557806323b872dd1461056557600080fd5b80631161ae39116103a15780631161ae391461049a57806313374e7a146104ba57806318160ddd146104d057806318197c85146104e557600080fd5b806306fdde03146103de578063095ea7b3146104245780630d2959801461045457806310075a691461047657600080fd5b366103d957005b600080fd5b3480156103ea57600080fd5b5060408051808201909152600b81526a536d61727420546f6f6c7360a81b60208201525b60405161041b9190612d44565b60405180910390f35b34801561043057600080fd5b5061044461043f366004612dae565b610be4565b604051901515815260200161041b565b34801561046057600080fd5b5061047461046f366004612def565b610c51565b005b34801561048257600080fd5b5061048c60195481565b60405190815260200161041b565b3480156104a657600080fd5b506104446104b5366004612e0a565b610caf565b3480156104c657600080fd5b5061048c601f5481565b3480156104dc57600080fd5b5060095461048c565b3480156104f157600080fd5b50610474610500366004612e2c565b610cc3565b34801561051157600080fd5b50610474610520366004612eb0565b610da6565b34801561053157600080fd5b50610474610540366004612e0a565b610df6565b34801561055157600080fd5b50610474610560366004612ee5565b610e26565b34801561057157600080fd5b50610444610580366004612f11565b610e7b565b34801561059157600080fd5b5061048c6105a0366004612f52565b610f3d565b3480156105b157600080fd5b5061048c610fac565b3480156105c657600080fd5b506104746105d5366004612e0a565b610ffe565b3480156105e657600080fd5b506104746105f5366004612f6f565b61108d565b34801561060657600080fd5b5061048c60175481565b34801561061c57600080fd5b5061044461062b366004612f52565b6000546001600160a01b0391821691161490565b34801561064b57600080fd5b5061047461065a366004612fac565b6110d9565b34801561066b57600080fd5b5061048c601c5481565b34801561068157600080fd5b506040516012815260200161041b565b34801561069d57600080fd5b5061048c600a5481565b3480156106b357600080fd5b5061048c601d5481565b3480156106c957600080fd5b5061044461113f565b3480156106de57600080fd5b5061047461116b565b3480156106f357600080fd5b50610474610702366004612eb0565b611197565b34801561071357600080fd5b5061048c60215481565b34801561072957600080fd5b50610444610738366004612f52565b6111e7565b34801561074957600080fd5b50610474610758366004612eb0565b6111f5565b34801561076957600080fd5b506040546104449062010000900460ff1681565b34801561078957600080fd5b5061048c610798366004612f52565b6001600160a01b03166000908152600d602052604090205490565b3480156107bf57600080fd5b506104746107ce366004612def565b611245565b3480156107df57600080fd5b5061048c60165481565b3480156107f557600080fd5b5061048c600c5481565b34801561080b57600080fd5b5061047461081a366004612ffc565b6112a8565b34801561082b57600080fd5b5061047461083a366004613015565b6112f4565b34801561084b57600080fd5b5061047461085a366004612ffc565b61139c565b34801561086b57600080fd5b506000546001600160a01b03165b6040516001600160a01b03909116815260200161041b565b34801561089d57600080fd5b5060408051808201909152600581526414d350549560da1b602082015261040e565b3480156108cb57600080fd5b506104746108da366004612ffc565b6113e7565b3480156108eb57600080fd5b506104746108fa366004613038565b611420565b34801561090b57600080fd5b50603e54610879906001600160a01b031681565b34801561092b57600080fd5b5061044461093a366004612dae565b611473565b34801561094b57600080fd5b50610474611480565b34801561096057600080fd5b5061047461096f366004612f52565b6114ac565b34801561098057600080fd5b5061047461098f366004613066565b6114fd565b3480156109a057600080fd5b5061048c600b5481565b3480156109b657600080fd5b5061048c6109c5366004612ffc565b611560565b3480156109d657600080fd5b5061048c6115a1565b3480156109eb57600080fd5b5061048c6109fa366004613038565b6001600160a01b039182166000908152600e6020908152604080832093909416825291909152205490565b348015610a3157600080fd5b50610474610a403660046130a9565b611614565b348015610a5157600080fd5b50610474610a60366004612ffc565b611671565b348015610a7157600080fd5b50610474610a80366004612ffc565b6116b7565b348015610a9157600080fd5b50610474610aa0366004612f52565b6116e5565b348015610ab157600080fd5b50610474611730565b348015610ac657600080fd5b5061048c610ad5366004612def565b611789565b348015610ae657600080fd5b50610474610af5366004612f52565b6117e6565b348015610b0657600080fd5b5061047461187c565b348015610b1b57600080fd5b50610474610b2a366004612eb0565b6118df565b348015610b3b57600080fd5b50610474610b4a366004613066565b6119e3565b348015610b5b57600080fd5b50610474610b6a366004612eb0565b611a40565b348015610b7b57600080fd5b50603d54610879906001600160a01b031681565b348015610b9b57600080fd5b5061048c601b5481565b348015610bb157600080fd5b50610444610bc0366004612f52565b611a90565b348015610bd157600080fd5b5060405461044490610100900460ff1681565b336000818152600e602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610c3f9086815260200190565b60405180910390a35060015b92915050565b6000546001600160a01b03163314610c845760405162461bcd60e51b8152600401610c7b906130c5565b60405180910390fd5b6040805443603f5562ffff0019169115156101000262ff000019169190911762010000179055565b50565b600082610cbb83611560565b119392505050565b610ccc33611a90565b610ce85760405162461bcd60e51b8152600401610c7b906130e5565b60105460ff16610d2f5760405162461bcd60e51b815260206004820152601260248201527113185d5b98da1a5b99c8191a5cd8589b195960721b6044820152606401610c7b565b60005b82811015610da05781600f6000868685818110610d5157610d5161310a565b9050602002016020810190610d669190612f52565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580610d9881613136565b915050610d32565b50505050565b610daf33611a90565b610dcb5760405162461bcd60e51b8152600401610c7b906130e5565b6001600160a01b03919091166000908152601560205260409020805460ff1916911515919091179055565b610dff33611a90565b610e1b5760405162461bcd60e51b8152600401610c7b906130e5565b602d91909155602e55565b610e2f33611a90565b610e4b5760405162461bcd60e51b8152600401610c7b906130e5565b6002610e578385613151565b11158015610e6457508183115b610e6d57600080fd5b602f92909255603055603255565b6001600160a01b0383166000908152600e6020908152604080832033845290915281205460001914610f28576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152600e82528381203382529091529190912054610f03918490611aae565b6001600160a01b0385166000908152600e602090815260408083203384529091529020555b610f33848484611ae8565b90505b9392505050565b60395460405163051fa63360e31b81526001600160a01b03838116600483015260009216906328fd319890602401602060405180830381865afa158015610f88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c4b9190613173565b6005546001600160a01b03166000908152600d6020526040812054610ff9906004546001600160a01b03166000908152600d6020526040902054610ff39060095490611fc6565b90611fc6565b905090565b61100733611a90565b6110235760405162461bcd60e51b8152600401610c7b906130e5565b6039546040516316a4744b60e11b815260048101849052602481018390526001600160a01b0390911690632d48e896906044015b600060405180830381600087803b15801561107157600080fd5b505af1158015611085573d6000803e3d6000fd5b505050505050565b61109633611a90565b6110b25760405162461bcd60e51b8152600401610c7b906130e5565b603b805461ffff191692151561ff0019169290921761010060ff9290921691909102179055565b6110e233611a90565b6110fe5760405162461bcd60e51b8152600401610c7b906130e5565b6033805460349590955560006035556036939093556037919091554360385561ffff1990921692151561ff0019169290921761010091151591909102179055565b600042611159602a5460295461200890919063ffffffff16565b11156111655750600190565b50600090565b61117433611a90565b6111905760405162461bcd60e51b8152600401610c7b906130e5565b6000602955565b6111a033611a90565b6111bc5760405162461bcd60e51b8152600401610c7b906130e5565b6001600160a01b03919091166000908152601360205260409020805460ff1916911515919091179055565b6000610c4b82600019610be4565b6111fe33611a90565b61121a5760405162461bcd60e51b8152600401610c7b906130e5565b6001600160a01b03919091166000908152601160205260409020805460ff1916911515919091179055565b61124e33611a90565b61126a5760405162461bcd60e51b8152600401610c7b906130e5565b604054610100900460ff1615801561127f5750805b61128857600080fd5b506040805461ff0019166101001790556010805460ff1916905543603f55565b6112b133611a90565b6112cd5760405162461bcd60e51b8152600401610c7b906130e5565b6112ee6127106112e88360095461206790919063ffffffff16565b906120e6565b600a5550565b6112fd33611a90565b6113195760405162461bcd60e51b8152600401610c7b906130e5565b600061132d83670de0b6b3a764000061318c565b9050600061133c8260646120e6565b6004549091506113569082906001600160a01b0316612128565b8215610da057426031556032546040519081527f39d2389ec5c1fa77b2c0d374bc61b6d7bd97ccba280fcdeb4e9c7644898d7c3a9060200160405180910390a150505050565b6000546001600160a01b031633146113c65760405162461bcd60e51b8152600401610c7b906130c5565b6113e16127106112e88360095461206790919063ffffffff16565b600c5550565b6113f033611a90565b61140c5760405162461bcd60e51b8152600401610c7b906130e5565b620b71b0811061141b57600080fd5b603a55565b61142933611a90565b6114455760405162461bcd60e51b8152600401610c7b906130e5565b600780546001600160a01b039384166001600160a01b03199182161790915560088054929093169116179055565b6000610f36338484611ae8565b61148933611a90565b6114a55760405162461bcd60e51b8152600401610c7b906130e5565b6000603155565b6000546001600160a01b031633146114d65760405162461bcd60e51b8152600401610c7b906130c5565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b61150633611a90565b6115225760405162461bcd60e51b8152600401610c7b906130e5565b601c869055601d859055601e849055601f83905560208290556115538261154d858188818c8c612008565b90612008565b6021556028555050505050565b6000610c4b61156d610fac565b603e546001600160a01b03166000908152600d60205260409020546112e89061159a906002905b90612067565b8590612067565b6000806115bf42610ff360325460315461200890919063ffffffff16565b905060006115e6602754610ff36030546112e8602f5460275461206790919063ffffffff16565b905061160d6116046032546112e8858561206790919063ffffffff16565b60275490612008565b9250505090565b61161d33611a90565b6116395760405162461bcd60e51b8152600401610c7b906130e5565b6040805462ff0000191662010000841515021790556009546127109061166090839061318c565b61166a9190613151565b602c555050565b61167a33611a90565b6116965760405162461bcd60e51b8152600401610c7b906130e5565b6116b16127106112e88360095461206790919063ffffffff16565b600b5550565b6116c033611a90565b6116dc5760405162461bcd60e51b8152600401610c7b906130e5565b42602955602a55565b6000546001600160a01b0316331461170f5760405162461bcd60e51b8152600401610c7b906130c5565b6001600160a01b03166000908152600160205260409020805460ff19169055565b603954604051630afbf02f60e11b81523360048201526001600160a01b03909116906315f7e05e90602401600060405180830381600087803b15801561177557600080fd5b505af1158015610da0573d6000803e3d6000fd5b600043602b54603f5461179c91906131ab565b106117af57602854610c4b906001611fc6565b8180156117d15750426117cf60325460315461200890919063ffffffff16565b115b156117de57610c4b6115a1565b505060275490565b6000546001600160a01b031633146118105760405162461bcd60e51b8152600401610c7b906130c5565b600080546001600160a01b0319166001600160a01b038316908117825580825260016020818152604093849020805460ff191690921790915591519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163910160405180910390a150565b61188533611a90565b6118a15760405162461bcd60e51b8152600401610c7b906130e5565b60085460405147916001600160a01b03169082156108fc029083906000818181858888f193505050501580156118db573d6000803e3d6000fd5b5050565b6118e833611a90565b6119045760405162461bcd60e51b8152600401610c7b906130e5565b6001600160a01b038216301480159061192b5750603e546001600160a01b03838116911614155b61193457600080fd5b6001600160a01b0382166000908152601460205260409020805460ff1916821580159190911790915561199a57603954604051630a5b654b60e11b81526001600160a01b03848116600483015260006024830152909116906314b6ca9690604401611057565b6039546001600160a01b038381166000818152600d602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401611057565b6119ec33611a90565b611a085760405162461bcd60e51b8152600401610c7b906130e5565b6016869055601785905560188490556019839055601a829055611a338261154d858188818c8c612008565b601b556028555050505050565b611a4933611a90565b611a655760405162461bcd60e51b8152600401610c7b906130e5565b6001600160a01b03919091166000908152601260205260409020805460ff1916911515919091179055565b6001600160a01b031660009081526001602052604090205460ff1690565b60008184841115611ad25760405162461bcd60e51b8152600401610c7b9190612d44565b506000611adf84866131c3565b95945050505050565b6000611af5603f54151590565b158015611b0f5750603e546001600160a01b038481169116145b15611b50576001600160a01b0384166000908152600d6020526040902054611b3657600080fd5b611b5043603f556040805462ff0000191662010000179055565b6040546301000000900460ff1615611b7457611b6d848484612238565b9050610f36565b6001600160a01b03841660009081526001602052604090205460ff16158015611bb657506001600160a01b03831660009081526001602052604090205460ff16155b8015611bdb57506001600160a01b0383166000908152600f602052604090205460ff16155b15611c3757604054610100900460ff16611c375760405162461bcd60e51b815260206004820152601760248201527f54726164696e67206e6f7420656e61626c6564207965740000000000000000006044820152606401610c7b565b6001600160a01b03831660009081526015602052604090205460ff16158015611c7957506001600160a01b03841660009081526015602052604090205460ff16155b611cbe5760405162461bcd60e51b81526020600482015260166024820152751059191c995cdcc81a5cc8189b1858dadb1a5cdd195960521b6044820152606401610c7b565b603e546001600160a01b03848116911614611cd88161231e565b611ce3858585612372565b611ced85856124e4565b611cf9858486846125c6565b6000611d0361113f565b9050611d0d6126fe565b15611d1a57611d1a61275a565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0389166000908152600d9091529190912054611d6c918690611aae565b6001600160a01b0387166000908152600d6020908152604080832093909355601190529081205460ff1615611da15784611dad565b611dad87868585612c16565b6001600160a01b0387166000908152600d6020526040902054909150611dd39082612008565b6001600160a01b038088166000908152600d6020908152604080832094909455918a1681526014909152205460ff16611e77576039546001600160a01b038881166000818152600d602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b158015611e6457600080fd5b505af1925050508015611e75575060015b505b6001600160a01b03861660009081526014602052604090205460ff16611f08576039546001600160a01b038781166000818152600d602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b158015611ef557600080fd5b505af1925050508015611f06575060015b505b603954603a546040516001624d3b8760e01b031981526001600160a01b039092169163ffb2c47991611f409160040190815260200190565b600060405180830381600087803b158015611f5a57600080fd5b505af1925050508015611f6b575060015b50856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611fb191815260200190565b60405180910390a35060019695505050505050565b6000610f3683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611aae565b60008061201583856131ab565b905083811015610f365760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610c7b565b60008261207657506000610c4b565b6000612082838561318c565b90508261208f8583613151565b14610f365760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610c7b565b6000610f3683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612d16565b6040805463ff0000001916630100000017815580516002808252606082018352600092602083019080368337505060035482519293506001600160a01b03169183915060009061217a5761217a61310a565b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106121ae576121ae61310a565b6001600160a01b039283166020918202929092010152603d5460405163b6f9de9560e01b815291169063b6f9de959085906121f49060009086908890429060040161321e565b6000604051808303818588803b15801561220d57600080fd5b505af1158015612221573d6000803e3d6000fd5b50506040805463ff00000019169055505050505050565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152600d90915291822054612289918490611aae565b6001600160a01b038086166000908152600d602052604080822093909355908516815220546122b89083612008565b6001600160a01b038085166000818152600d602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061230c9086815260200190565b60405180910390a35060019392505050565b801561234b57601c54602255601d54602355601e54602455601f5460255560205460265560215460275550565b601654602255601754602355601854602455601954602555601a54602655601b5460275550565b6001600160a01b03831660009081526001602052604090205460ff161580156123a957506000546001600160a01b03838116911614155b80156123be57506001600160a01b0382163014155b80156123d857506004546001600160a01b03838116911614155b80156123f25750603e546001600160a01b03838116911614155b801561240c57506008546001600160a01b03838116911614155b801561242657506007546001600160a01b03838116911614155b801561244057506006546001600160a01b03838116911614155b156124df576001600160a01b0382166000908152600d6020526040902054600c5461246b83836131ab565b1115610da05760405162461bcd60e51b815260206004820152603e60248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460448201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e00006064820152608401610c7b565b505050565b603e546001600160a01b0383811691161480156125035750603b5460ff165b801561252857506001600160a01b03811660009081526013602052604090205460ff16155b156118db576001600160a01b0381166000908152603c602052604090205442116125945760405162461bcd60e51b815260206004820152601c60248201527f506c656173652077616974206265747765656e2074776f2062757973000000006044820152606401610c7b565b603b546125a990610100900460ff16426131ab565b6001600160a01b0382166000908152603c60205260409020555050565b6000546001600160a01b03838116911614610da057801561267257600b548311158061260a57506001600160a01b03841660009081526012602052604090205460ff165b8061262d57506001600160a01b03821660009081526012602052604090205460ff165b61266d5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610c7b565b610da0565b600a548311158061269b57506001600160a01b03841660009081526012602052604090205460ff165b806126be57506001600160a01b03821660009081526012602052604090205460ff165b610da05760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610c7b565b603e546000906001600160a01b0316331480159061272657506040546301000000900460ff16155b801561273a575060405462010000900460ff165b8015610ff9575050602c54306000908152600d6020526040902054101590565b6040805463ff00000019166301000000179055602d54602e5460009161277f91610caf565b61278b5760225461278e565b60005b905060006127b260026112e86027546112e886602c5461206790919063ffffffff16565b905060006127cb82602c54611fc690919063ffffffff16565b604080516002808252606082018352929350600092909160208301908036833701905050905030816000815181106128055761280561310a565b6001600160a01b0392831660209182029290920101526003548251911690829060019081106128365761283661310a565b6001600160a01b039283166020918202929092010152603d5460405163791ac94760e01b81524792919091169063791ac94790612880908690600090879030904290600401613253565b600060405180830381600087803b15801561289a57600080fd5b505af11580156128ae573d6000803e3d6000fd5b5050505060006128c78247611fc690919063ffffffff16565b905060006128e26128d98860026120e6565b60275490611fc6565b905060006128f760026112e88481878d612067565b90506000612914836112e86024548761206790919063ffffffff16565b90506000612931846112e86025548861206790919063ffffffff16565b9050600061294e856112e86026548961206790919063ffffffff16565b9050603960009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b1580156129a057600080fd5b505af1935050505080156129b2575060015b506008546040516000916001600160a01b03169061753090859084818181858888f193505050503d8060008114612a05576040519150601f19603f3d011682016040523d82523d6000602084013e612a0a565b606091505b50506006546040519192506000916001600160a01b039091169061753090859084818181858888f193505050503d8060008114612a63576040519150601f19603f3d011682016040523d82523d6000602084013e612a68565b606091505b5050905081612aca5760405162461bcd60e51b815260206004820152602860248201527f6d61726b6574696e672072656365697665722072656a656374656420455448206044820152673a3930b739b332b960c11b6064820152608401610c7b565b80612b225760405162461bcd60e51b815260206004820152602260248201527f6465762072656365697665722072656a656374656420455448207472616e736660448201526132b960f11b6064820152608401610c7b565b8b15612bfa57603d5460075460405163f305d71960e01b8152306004820152602481018f905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990889060c40160606040518083038185885af1158015612b98573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612bbd919061328f565b505060408051888152602081018f90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b50506040805463ff000000191690555050505050505050505050565b6000808215612c71578315612c5157612c4a6028546112e860026112e860036115946027548c61206790919063ffffffff16565b9050612c8f565b612c4a6028546112e860026112e86027548a61206790919063ffffffff16565b612c8c6028546112e86027548861206790919063ffffffff16565b90505b306000908152600d6020526040902054612ca99082612008565b306000818152600d6020526040908190209290925590516001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612cfa9085815260200190565b60405180910390a3612d0c8582611fc6565b9695505050505050565b60008183612d375760405162461bcd60e51b8152600401610c7b9190612d44565b506000611adf8486613151565b600060208083528351808285015260005b81811015612d7157858101830151858201604001528201612d55565b81811115612d83576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610cac57600080fd5b60008060408385031215612dc157600080fd5b8235612dcc81612d99565b946020939093013593505050565b80358015158114612dea57600080fd5b919050565b600060208284031215612e0157600080fd5b610f3682612dda565b60008060408385031215612e1d57600080fd5b50508035926020909101359150565b600080600060408486031215612e4157600080fd5b833567ffffffffffffffff80821115612e5957600080fd5b818601915086601f830112612e6d57600080fd5b813581811115612e7c57600080fd5b8760208260051b8501011115612e9157600080fd5b602092830195509350612ea79186019050612dda565b90509250925092565b60008060408385031215612ec357600080fd5b8235612ece81612d99565b9150612edc60208401612dda565b90509250929050565b600080600060608486031215612efa57600080fd5b505081359360208301359350604090920135919050565b600080600060608486031215612f2657600080fd5b8335612f3181612d99565b92506020840135612f4181612d99565b929592945050506040919091013590565b600060208284031215612f6457600080fd5b8135610f3681612d99565b60008060408385031215612f8257600080fd5b612f8b83612dda565b9150602083013560ff81168114612fa157600080fd5b809150509250929050565b600080600080600060a08688031215612fc457600080fd5b612fcd86612dda565b9450602086013593506040860135925060608601359150612ff060808701612dda565b90509295509295909350565b60006020828403121561300e57600080fd5b5035919050565b6000806040838503121561302857600080fd5b82359150612edc60208401612dda565b6000806040838503121561304b57600080fd5b823561305681612d99565b91506020830135612fa181612d99565b60008060008060008060c0878903121561307f57600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b600080604083850312156130bc57600080fd5b612dcc83612dda565b60208082526006908201526510a7aba722a960d11b604082015260600190565b6020808252600b908201526a085055551213d49256915160aa1b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060001982141561314a5761314a613120565b5060010190565b60008261316e57634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561318557600080fd5b5051919050565b60008160001904831182151516156131a6576131a6613120565b500290565b600082198211156131be576131be613120565b500190565b6000828210156131d5576131d5613120565b500390565b600081518084526020808501945080840160005b838110156132135781516001600160a01b0316875295820195908201906001016131ee565b509495945050505050565b84815260806020820152600061323760808301866131da565b6001600160a01b03949094166040830152506060015292915050565b85815284602082015260a06040820152600061327260a08301866131da565b6001600160a01b0394909416606083015250608001529392505050565b6000806000606084860312156132a457600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220c6c8c532e8ff76afc989b367495d6f6f853e56ac0504b444b809125c8cd92f5f64736f6c634300080a0033

Deployed Bytecode Sourcemap

12041:25107:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17274:80;;;;;;;;;;-1:-1:-1;17346:5:0;;;;;;;;;;;;-1:-1:-1;;;17346:5:0;;;;17274:80;;;;;;;:::i;:::-;;;;;;;;17696:216;;;;;;;;;;-1:-1:-1;17696:216:0;;;;;:::i;:::-;;:::i;:::-;;;1237:14:1;;1230:22;1212:41;;1200:2;1185:18;17696:216:0;1072:187:1;25971:113:0;;;;;;;;;;-1:-1:-1;25971:113:0;;;;;:::i;:::-;;:::i;:::-;;13665:34;;;;;;;;;;;;;;;;;;;1760:25:1;;;1748:2;1733:18;13665:34:0;1614:177:1;36594:150:0;;;;;;;;;;-1:-1:-1;36594:150:0;;;;;:::i;:::-;;:::i;13931:35::-;;;;;;;;;;;;;;;;17004:88;;;;;;;;;;-1:-1:-1;17077:12:0;;17004:88;;36752:277;;;;;;;;;;-1:-1:-1;36752:277:0;;;;;:::i;:::-;;:::i;26649:116::-;;;;;;;;;;-1:-1:-1;26649:116:0;;;;;:::i;:::-;;:::i;34979:183::-;;;;;;;;;;-1:-1:-1;34979:183:0;;;;;:::i;:::-;;:::i;31314:342::-;;;;;;;;;;-1:-1:-1;31314:342:0;;;;;:::i;:::-;;:::i;18214:368::-;;;;;;;;;;-1:-1:-1;18214:368:0;;;;;:::i;:::-;;:::i;35822:146::-;;;;;;;;;;-1:-1:-1;35822:146:0;;;;;:::i;:::-;;:::i;36191:142::-;;;;;;;;;;;;;:::i;35442:183::-;;;;;;;;;;-1:-1:-1;35442:183:0;;;;;:::i;:::-;;:::i;26435:165::-;;;;;;;;;;-1:-1:-1;26435:165:0;;;;;:::i;:::-;;:::i;13583:32::-;;;;;;;;;;;;;;;;3640:103;;;;;;;;;;-1:-1:-1;3640:103:0;;;;;:::i;:::-;3695:4;3730:5;-1:-1:-1;;;;;3719:16:0;;;3730:5;;3719:16;;3640:103;30822:445;;;;;;;;;;-1:-1:-1;30822:445:0;;;;;:::i;:::-;;:::i;13805:35::-;;;;;;;;;;;;;;;;17098:80;;;;;;;;;;-1:-1:-1;17098:80:0;;12722:2;5040:36:1;;5028:2;5013:18;17098:80:0;4898:184:1;12843:60:0;;;;;;;;;;;;;;;;13847:33;;;;;;;;;;;;;;;;22111:207;;;;;;;;;;;;;:::i;26297:83::-;;;;;;;;;;;;;:::i;33065:130::-;;;;;;;;;;-1:-1:-1;33065:130:0;;;;;:::i;:::-;;:::i;14015:32::-;;;;;;;;;;;;;;;;17920:122;;;;;;;;;;-1:-1:-1;17920:122:0;;;;;:::i;:::-;;:::i;32747:120::-;;;;;;;;;;-1:-1:-1;32747:120:0;;;;;:::i;:::-;;:::i;15581:30::-;;;;;;;;;;-1:-1:-1;15581:30:0;;;;;;;;;;;17444:105;;;;;;;;;;-1:-1:-1;17444:105:0;;;;;:::i;:::-;-1:-1:-1;;;;;17528:18:0;17510:7;17528:18;;;:9;:18;;;;;;;17444:105;18591:209;;;;;;;;;;-1:-1:-1;18591:209:0;;;;;:::i;:::-;;:::i;13540:35::-;;;;;;;;;;;;;;;;12978:62;;;;;;;;;;;;;;;;31978:158;;;;;;;;;;-1:-1:-1;31978:158:0;;;;;:::i;:::-;;:::i;29243:442::-;;;;;;;;;;-1:-1:-1;29243:442:0;;;;;:::i;:::-;;:::i;18877:156::-;;;;;;;;;;-1:-1:-1;18877:156:0;;;;;:::i;:::-;;:::i;17360:78::-;;;;;;;;;;-1:-1:-1;17412:7:0;17430:5;-1:-1:-1;;;;;17430:5:0;17360:78;;;-1:-1:-1;;;;;5689:32:1;;;5671:51;;5659:2;5644:18;17360:78:0;5525:203:1;17184:84:0;;;;;;;;;;-1:-1:-1;17258:7:0;;;;;;;;;;;;-1:-1:-1;;;17258:7:0;;;;17184:84;;36009:136;;;;;;;;;;-1:-1:-1;36009:136:0;;;;;:::i;:::-;;:::i;34496:228::-;;;;;;;;;;-1:-1:-1;34496:228:0;;;;;:::i;:::-;;:::i;15446:19::-;;;;;;;;;;-1:-1:-1;15446:19:0;;;;-1:-1:-1;;;;;15446:19:0;;;18050:156;;;;;;;;;;-1:-1:-1;18050:156:0;;;;;:::i;:::-;;:::i;29733:105::-;;;;;;;;;;;;;:::i;3298:102::-;;;;;;;;;;-1:-1:-1;3298:102:0;;;;;:::i;:::-;;:::i;33839:599::-;;;;;;;;;;-1:-1:-1;33839:599:0;;;;;:::i;:::-;;:::i;12911:59::-;;;;;;;;;;;;;;;;36375:167;;;;;;;;;;-1:-1:-1;36375:167:0;;;;;:::i;:::-;;:::i;24412:391::-;;;;;;;;;;;;;:::i;17555:133::-;;;;;;;;;;-1:-1:-1;17555:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;17657:19:0;;;17639:7;17657:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;17555:133;34762:180;;;;;;;;;;-1:-1:-1;34762:180:0;;;;;:::i;:::-;;:::i;32169:162::-;;;;;;;;;;-1:-1:-1;32169:162:0;;;;;:::i;:::-;;:::i;26113:145::-;;;;;;;;;;-1:-1:-1;26113:145:0;;;;;:::i;:::-;;:::i;3475:105::-;;;;;;;;;;-1:-1:-1;3475:105:0;;;;;:::i;:::-;;:::i;35677:90::-;;;;;;;;;;;;;:::i;24027:315::-;;;;;;;;;;-1:-1:-1;24027:315:0;;;;;:::i;:::-;;:::i;4047:189::-;;;;;;;;;;-1:-1:-1;4047:189:0;;;;;:::i;:::-;;:::i;35206:181::-;;;;;;;;;;;;;:::i;32368:347::-;;;;;;;;;;-1:-1:-1;32368:347:0;;;;;:::i;:::-;;:::i;33228:577::-;;;;;;;;;;-1:-1:-1;33228:577:0;;;;;:::i;:::-;;:::i;32902:128::-;;;;;;;;;;-1:-1:-1;32902:128:0;;;;;:::i;:::-;;:::i;15415:24::-;;;;;;;;;;-1:-1:-1;15415:24:0;;;;-1:-1:-1;;;;;15415:24:0;;;13747:31;;;;;;;;;;;;;;;;3813:115;;;;;;;;;;-1:-1:-1;3813:115:0;;;;;:::i;:::-;;:::i;15543:31::-;;;;;;;;;;-1:-1:-1;15543:31:0;;;;;;;;;;;17696:216;17800:10;17771:4;17788:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;17788:32:0;;;;;;;;;;:41;;;17845:37;17771:4;;17788:32;;17845:37;;;;17823:6;1760:25:1;;1748:2;1733:18;;1614:177;17845:37:0;;;;;;;;-1:-1:-1;17900:4:0;17696:216;;;;;:::o;25971:113::-;3695:4;3730:5;-1:-1:-1;;;;;3730:5:0;3022:10;3719:16;3006:38;;;;-1:-1:-1;;;3006:38:0;;;;;;;:::i;:::-;;;;;;;;;26036:11:::1;:21:::0;;31897:12;31884:10;:25;-1:-1:-1;;31920:18:0;26036:21;::::1;;;;-1:-1:-1::0;;31920:18:0;;;;;;;;;25971:113::o;26068:8::-:1;25971:113:::0;:::o;36594:150::-;36674:4;36730:6;36698:29;36718:8;36698:19;:29::i;:::-;:38;;36594:150;-1:-1:-1;;;36594:150:0:o;36752:277::-;3183:24;3196:10;3183:12;:24::i;:::-;3175:48;;;;-1:-1:-1;;;3175:48:0;;;;;;;:::i;:::-;36862:16:::1;::::0;::::1;;36854:47;;;::::0;-1:-1:-1;;;36854:47:0;;8269:2:1;36854:47:0::1;::::0;::::1;8251:21:1::0;8308:2;8288:18;;;8281:30;-1:-1:-1;;;8327:18:1;;;8320:48;8385:18;;36854:47:0::1;8067:342:1::0;36854:47:0::1;36917:9;36912:110;36932:21:::0;;::::1;36912:110;;;37002:8;36975:9;:24;36985:10;;36996:1;36985:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;36975:24:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;36975:24:0;:35;;-1:-1:-1;;36975:35:0::1;::::0;::::1;;::::0;;;::::1;::::0;;36955:3;::::1;::::0;::::1;:::i;:::-;;;;36912:110;;;;36752:277:::0;;;:::o;26649:116::-;3183:24;3196:10;3183:12;:24::i;:::-;3175:48;;;;-1:-1:-1;;;3175:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26725:23:0;;;::::1;;::::0;;;:13:::1;:23;::::0;;;;:32;;-1:-1:-1;;26725:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26649:116::o;34979:183::-;3183:24;3196:10;3183:12;:24::i;:::-;3175:48;;;;-1:-1:-1;;;3175:48:0;;;;;;;:::i;:::-;35077:15:::1;:25:::0;;;;35113:26:::1;:41:::0;34979:183::o;31314:342::-;3183:24;3196:10;3183:12;:24::i;:::-;3175:48;;;;-1:-1:-1;;;3175:48:0;;;;;;;:::i;:::-;31474:1:::1;31447:23;31459:11:::0;31447:9;:23:::1;:::i;:::-;:28;;:55;;;;;31491:11;31479:9;:23;31447:55;31439:64;;;::::0;::::1;;31514:26;:38:::0;;;;31563:28:::1;:42:::0;31616:23:::1;:32:::0;31314:342::o;18214:368::-;-1:-1:-1;;;;;18334:19:0;;18314:4;18334:19;;;:11;:19;;;;;;;;18354:10;18334:31;;;;;;;;-1:-1:-1;;18334:52:0;18331:186;;18436:69;;;;;;;;;;;-1:-1:-1;;;18436:69:0;;;;;;;;-1:-1:-1;;;;;18436:19:0;;-1:-1:-1;18436:19:0;;;:11;:19;;;;;18456:10;18436:31;;;;;;;;;;:69;;18472:6;;18436:35;:69::i;:::-;-1:-1:-1;;;;;18402:19:0;;;;;;:11;:19;;;;;;;;18422:10;18402:31;;;;;;;:103;18331:186;18534:40;18548:6;18556:9;18567:6;18534:13;:40::i;:::-;18527:47;;18214:368;;;;;;:::o;35822:146::-;35918:11;;:42;;-1:-1:-1;;;35918:42:0;;-1:-1:-1;;;;;5689:32:1;;;35918:42:0;;;5671:51:1;35891:7:0;;35918:11;;:29;;5644:18:1;;35918:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;36191:142::-;36319:4;;-1:-1:-1;;;;;36319:4:0;36244:7;17528:18;;;:9;:18;;;;;;36271:54;;36298:4;;-1:-1:-1;;;;;36298:4:0;17510:7;17528:18;;;:9;:18;;;;;;36271:33;;:12;;;:16;:33::i;:::-;:37;;:54::i;:::-;36264:61;;36191:142;:::o;35442:183::-;3183:24;3196:10;3183:12;:24::i;:::-;3175:48;;;;-1:-1:-1;;;3175:48:0;;;;;;;:::i;:::-;35552:11:::1;::::0;:65:::1;::::0;-1:-1:-1;;;35552:65:0;;::::1;::::0;::::1;9403:25:1::0;;;9444:18;;;9437:34;;;-1:-1:-1;;;;;35552:11:0;;::::1;::::0;:35:::1;::::0;9376:18:1;;35552:65:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;35442:183:::0;;:::o;26435:165::-;3183:24;3196:10;3183:12;:24::i;:::-;3175:48;;;;-1:-1:-1;;;3175:48:0;;;;;;;:::i;:::-;26520:18:::1;:28:::0;;-1:-1:-1;;26559:33:0;26520:28;::::1;;-1:-1:-1::0;;26559:33:0;;;;;26520:28:::1;;26559:33:::0;;;::::1;::::0;;;::::1;;::::0;;26435:165::o;30822:445::-;3183:24;3196:10;3183:12;:24::i;:::-;3175:48;;;;-1:-1:-1;;;3175:48:0;;;;;;;:::i;:::-;30977:18:::1;:29:::0;;31017:14:::1;:21:::0;;;;-1:-1:-1;31049:22:0::1;:26:::0;31086:17:::1;:27:::0;;;;31124:22:::1;:32:::0;;;;31190:12:::1;31167:20;:35:::0;-1:-1:-1;;31213:46:0;;;30977:29;::::1;;-1:-1:-1::0;;31213:46:0;;;;;30977:29:::1;31213:46:::0;::::1;;::::0;;;::::1;;::::0;;30822:445::o;22111:207::-;22155:4;22212:15;22174:35;22195:13;;22174:16;;:20;;:35;;;;:::i;:::-;:53;22171:140;;;-1:-1:-1;22250:4:0;;22111:207::o;22171:140::-;-1:-1:-1;22294:5:0;;22111:207::o;26297:83::-;3183:24;3196:10;3183:12;:24::i;:::-;3175:48;;;;-1:-1:-1;;;3175:48:0;;;;;;;:::i;:::-;26371:1:::1;26352:16;:20:::0;26297:83::o;33065:130::-;3183:24;3196:10;3183:12;:24::i;:::-;3175:48;;;;-1:-1:-1;;;3175:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33154:24:0;;;::::1;;::::0;;;:16:::1;:24;::::0;;;;:33;;-1:-1:-1;;33154:33:0::1;::::0;::::1;;::::0;;;::::1;::::0;;33065:130::o;17920:122::-;17975:4;17999:35;18007:7;-1:-1:-1;;17999:7:0;:35::i;32747:120::-;3183:24;3196:10;3183:12;:24::i;:::-;3175:48;;;;-1:-1:-1;;;3175:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32831:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:28;;-1:-1:-1;;32831:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;32747:120::o;18591:209::-;3183:24;3196:10;3183:12;:24::i;:::-;3175:48;;;;-1:-1:-1;;;3175:48:0;;;;;;;:::i;:::-;18665:11:::1;::::0;::::1;::::0;::::1;;;18664:12;:27:::0;::::1;;;;18680:11;18664:27;18656:36;;;::::0;::::1;;-1:-1:-1::0;18703:11:0::1;:18:::0;;-1:-1:-1;;18703:18:0::1;;;::::0;;18732:16:::1;:24:::0;;-1:-1:-1;;18732:24:0::1;::::0;;18780:12:::1;18767:10;:25:::0;18591:209::o;31978:158::-;3183:24;3196:10;3183:12;:24::i;:::-;3175:48;;;;-1:-1:-1;;;3175:48:0;;;;;;;:::i;:::-;32084:44:::1;32122:5;32084:33;32101:15;32084:12;;:16;;:33;;;;:::i;:::-;:37:::0;::::1;:44::i;:::-;32066:15;:62:::0;-1:-1:-1;31978:158:0:o;29243:442::-;3183:24;3196:10;3183:12;:24::i;:::-;3175:48;;;;-1:-1:-1;;;3175:48:0;;;;;;;:::i;:::-;29351:26:::1;29380:19;:6:::0;29390:8:::1;29380:19;:::i;:::-;29351:48:::0;-1:-1:-1;29410:19:0::1;29432:27;29351:48:::0;29455:3:::1;29432:22;:27::i;:::-;29493:4;::::0;29410:49;;-1:-1:-1;29470:28:0::1;::::0;29410:49;;-1:-1:-1;;;;;29493:4:0::1;29470:9;:28::i;:::-;29512:24;29509:169;;;29583:15;29552:28;:46:::0;29642:23:::1;::::0;29618:48:::1;::::0;1760:25:1;;;29618:48:0::1;::::0;1748:2:1;1733:18;29618:48:0::1;;;;;;;29340:345;;29243:442:::0;;:::o;18877:156::-;3695:4;3730:5;-1:-1:-1;;;;;3730:5:0;3022:10;3719:16;3006:38;;;;-1:-1:-1;;;3006:38:0;;;;;;;:::i;:::-;18980:43:::1;19017:5;18980:32;18997:14;18980:12;;:16;;:32;;;;:::i;:43::-;18962:15;:61:::0;-1:-1:-1;18877:156:0:o;36009:136::-;3183:24;3196:10;3183:12;:24::i;:::-;3175:48;;;;-1:-1:-1;;;3175:48:0;;;;;;;:::i;:::-;36099:6:::1;36093:3;:12;36085:21;;;::::0;::::1;;36117:14;:20:::0;36009:136::o;34496:228::-;3183:24;3196:10;3183:12;:24::i;:::-;3175:48;;;;-1:-1:-1;;;3175:48:0;;;;;;;:::i;:::-;34615:21:::1;:46:::0;;-1:-1:-1;;;;;34615:46:0;;::::1;-1:-1:-1::0;;;;;;34615:46:0;;::::1;;::::0;;;34672:20:::1;:44:::0;;;;;::::1;::::0;::::1;;::::0;;34496:228::o;18050:156::-;18130:4;18154:44;18168:10;18180:9;18191:6;18154:13;:44::i;29733:105::-;3183:24;3196:10;3183:12;:24::i;:::-;3175:48;;;;-1:-1:-1;;;3175:48:0;;;;;;;:::i;:::-;29829:1:::1;29798:28;:32:::0;29733:105::o;3298:102::-;3695:4;3730:5;-1:-1:-1;;;;;3730:5:0;3022:10;3719:16;3006:38;;;;-1:-1:-1;;;3006:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;3362:23:0::1;;::::0;;;3388:4:::1;3362:23;::::0;;;;;;;:30;;-1:-1:-1;;3362:30:0::1;::::0;;::::1;::::0;;3298:102::o;33839:599::-;3183:24;3196:10;3183:12;:24::i;:::-;3175:48;;;;-1:-1:-1;;;3175:48:0;;;;;;;:::i;:::-;34044:16:::1;:36:::0;;;34091:14:::1;:32:::0;;;34134:17:::1;:38:::0;;;34183:16:::1;:36:::0;;;34230:15:::1;:29:::0;;;34285:102:::1;34248:11:::0;34285:85:::1;34202:17:::0;34285:85;34154:18;34285:85;34063:17;34108:15;34285:21:::1;:38::i;:::-;:42:::0;::::1;:62::i;:102::-;34270:12;:117:::0;34398:14:::1;:32:::0;-1:-1:-1;;;;;33839:599:0:o;36375:167::-;36443:7;36470:64;36511:22;:20;:22::i;:::-;36493:4;;-1:-1:-1;;;;;36493:4:0;17510:7;17528:18;;;:9;:18;;;;;;36470:36;;36483:22;;36503:1;;36483:15;:19;;:22::i;:::-;36470:8;;:12;:36::i;24412:391::-;24461:7;24481:21;24505:78;24567:15;24505:57;24538:23;;24505:28;;:32;;:57;;;;:::i;:78::-;24481:102;;24594:19;24616:88;24695:8;;24616:74;24661:28;;24616:40;24629:26;;24616:8;;:12;;:40;;;;:::i;:88::-;24594:110;;24722:73;24735:59;24770:23;;24735:30;24751:13;24735:11;:15;;:30;;;;:::i;:59::-;24722:8;;;:12;:73::i;:::-;24715:80;;;;24412:391;:::o;34762:180::-;3183:24;3196:10;3183:12;:24::i;:::-;3175:48;;;;-1:-1:-1;;;3175:48:0;;;;;;;:::i;:::-;34854:11:::1;:22:::0;;-1:-1:-1;;34854:22:0::1;::::0;;::::1;;;;::::0;;34903:12:::1;::::0;34928:5:::1;::::0;34903:22:::1;::::0;34918:7;;34903:22:::1;:::i;:::-;:30;;;;:::i;:::-;34887:13;:46:::0;-1:-1:-1;;34762:180:0:o;32169:162::-;3183:24;3196:10;3183:12;:24::i;:::-;3175:48;;;;-1:-1:-1;;;3175:48:0;;;;;;;:::i;:::-;32278:45:::1;32317:5;32278:34;32295:16;32278:12;;:16;;:34;;;;:::i;:45::-;32259:16;:64:::0;-1:-1:-1;32169:162:0:o;26113:145::-;3183:24;3196:10;3183:12;:24::i;:::-;3175:48;;;;-1:-1:-1;;;3175:48:0;;;;;;;:::i;:::-;26200:15:::1;26181:16;:34:::0;26226:13:::1;:24:::0;26113:145::o;3475:105::-;3695:4;3730:5;-1:-1:-1;;;;;3730:5:0;3022:10;3719:16;3006:38;;;;-1:-1:-1;;;3006:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;3541:23:0::1;3567:5;3541:23:::0;;;:14:::1;:23;::::0;;;;:31;;-1:-1:-1;;3541:31:0::1;::::0;;3475:105::o;35677:90::-;35722:11;;:37;;-1:-1:-1;;;35722:37:0;;35748:10;35722:37;;;5671:51:1;-1:-1:-1;;;;;35722:11:0;;;;:25;;5644:18:1;;35722:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24027:315;24083:7;24133:12;24119:10;;24106;;:23;;;;:::i;:::-;:39;24103:76;;24155:14;;:21;;24174:1;24155:18;:21::i;24103:76::-;24192:7;:86;;;;;24263:15;24203:57;24236:23;;24203:28;;:32;;:57;;;;:::i;:::-;:75;24192:86;24189:120;;;24288:18;:16;:18::i;24189:120::-;-1:-1:-1;;24326:8:0;;;24027:315::o;4047:189::-;3695:4;3730:5;-1:-1:-1;;;;;3730:5:0;3022:10;3719:16;3006:38;;;;-1:-1:-1;;;3006:38:0;;;;;;;:::i;:::-;4127:5:::1;:15:::0;;-1:-1:-1;;;;;;4127:15:0::1;-1:-1:-1::0;;;;;4127:15:0;::::1;::::0;;::::1;::::0;;4153:23;;;-1:-1:-1;4153:23:0::1;::::0;;;;;;;;:30;;-1:-1:-1;;4153:30:0::1;::::0;;::::1;::::0;;;4199:29;;5671:51:1;;;4199:29:0::1;::::0;5644:18:1;4199:29:0::1;;;;;;;4047:189:::0;:::o;35206:181::-;3183:24;3196:10;3183:12;:24::i;:::-;3175:48;;;;-1:-1:-1;;;3175:48:0;;;;;;;:::i;:::-;35329:20:::1;::::0;35321:58:::1;::::0;35289:21:::1;::::0;-1:-1:-1;;;;;35329:20:0::1;::::0;35321:58;::::1;;;::::0;35289:21;;35260:26:::1;35321:58:::0;35260:26;35321:58;35289:21;35329:20;35321:58;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;35249:138;35206:181::o:0;32368:347::-;3183:24;3196:10;3183:12;:24::i;:::-;3175:48;;;;-1:-1:-1;;;3175:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32465:23:0;::::1;32483:4;32465:23;::::0;::::1;::::0;:41:::1;;-1:-1:-1::0;32502:4:0::1;::::0;-1:-1:-1;;;;;32492:14:0;;::::1;32502:4:::0;::::1;32492:14;;32465:41;32457:50;;;::::0;::::1;;-1:-1:-1::0;;;;;32518:24:0;::::1;;::::0;;;:16:::1;:24;::::0;;;;:33;;-1:-1:-1;;32518:33:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;32562:146:::1;;32587:11;::::0;:31:::1;::::0;-1:-1:-1;;;32587:31:0;;-1:-1:-1;;;;;10204:32:1;;;32587:31:0::1;::::0;::::1;10186:51:1::0;32587:11:0::1;10253:18:1::0;;;10246:34;32587:11:0;;::::1;::::0;:20:::1;::::0;10159:18:1;;32587:31:0::1;10004:282:1::0;32562:146:0::1;32649:11;::::0;-1:-1:-1;;;;;32678:17:0;;::::1;32649:11;32678:17:::0;;;:9:::1;:17;::::0;;;;;;;32649:47;;-1:-1:-1;;;32649:47:0;;::::1;::::0;::::1;10186:51:1::0;;;;10253:18;;;10246:34;32649:11:0;::::1;::::0;:20:::1;::::0;10159:18:1;;32649:47:0::1;10004:282:1::0;33228:577:0;3183:24;3196:10;3183:12;:24::i;:::-;3175:48;;;;-1:-1:-1;;;3175:48:0;;;;;;;:::i;:::-;33427:15:::1;:34:::0;;;33472:13:::1;:30:::0;;;33513:16:::1;:36:::0;;;33560:15:::1;:34:::0;;;33605:14:::1;:27:::0;;;33657:97:::1;33622:10:::0;33657:81:::1;33578:16:::0;33657:81;33532:17;33657:81;33445:16;33488:14;33657:20:::1;:36::i;:97::-;33643:11;:111:::0;33765:14:::1;:32:::0;-1:-1:-1;;;;;33228:577:0:o;32902:128::-;3183:24;3196:10;3183:12;:24::i;:::-;3175:48;;;;-1:-1:-1;;;3175:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32990:23:0;;;::::1;;::::0;;;:15:::1;:23;::::0;;;;:32;;-1:-1:-1;;32990:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;32902:128::o;3813:115::-;-1:-1:-1;;;;;3897:23:0;3873:4;3897:23;;;:14;:23;;;;;;;;;3813:115::o;700:192::-;786:7;822:12;814:6;;;;806:29;;;;-1:-1:-1;;;806:29:0;;;;;;;;:::i;:::-;-1:-1:-1;846:9:0;858:5;862:1;858;:5;:::i;:::-;846:17;700:192;-1:-1:-1;;;;;700:192:0:o;19072:1951::-;19164:4;19185:10;31772;;:15;;;31705:90;19185:10;19184:11;:32;;;;-1:-1:-1;19212:4:0;;-1:-1:-1;;;;;19199:17:0;;;19212:4;;19199:17;19184:32;19181:81;;;-1:-1:-1;;;;;19227:17:0;;19247:1;19227:17;;;:9;:17;;;;;;19219:30;;;;;;19251:8;31897:12;31884:10;:25;31920:11;:18;;-1:-1:-1;;31920:18:0;;;;;31846:100;19251:8;19285:6;;;;;;;19282:63;;;19301:41;19316:6;19324:9;19335:6;19301:14;:41::i;:::-;19294:48;;;;19282:63;-1:-1:-1;;;;;19401:22:0;;;;;;:14;:22;;;;;;;;19400:23;:53;;;;-1:-1:-1;;;;;;19428:25:0;;;;;;:14;:25;;;;;;;;19427:26;19400:53;:78;;;;-1:-1:-1;;;;;;19458:20:0;;;;;;:9;:20;;;;;;;;19457:21;19400:78;19397:155;;;19502:11;;;;;;;19494:46;;;;-1:-1:-1;;;19494:46:0;;10902:2:1;19494:46:0;;;10884:21:1;10941:2;10921:18;;;10914:30;10980:25;10960:18;;;10953:53;11023:18;;19494:46:0;10700:347:1;19494:46:0;-1:-1:-1;;;;;19617:24:0;;;;;;:13;:24;;;;;;;;19616:25;:51;;;;-1:-1:-1;;;;;;19646:21:0;;;;;;:13;:21;;;;;;;;19645:22;19616:51;19608:86;;;;-1:-1:-1;;;19608:86:0;;11254:2:1;19608:86:0;;;11236:21:1;11293:2;11273:18;;;11266:30;-1:-1:-1;;;11312:18:1;;;11305:52;11374:18;;19608:86:0;11052:346:1;19608:86:0;19773:4;;-1:-1:-1;;;;;19760:17:0;;;19773:4;;19760:17;19824:22;19760:17;19824:14;:22::i;:::-;19888:41;19903:6;19911:9;19922:6;19888:14;:41::i;:::-;19970:35;19987:6;19995:9;19970:16;:35::i;:::-;20043:47;20056:6;20064;20072:9;20083:6;20043:12;:47::i;:::-;20144:14;20161:13;:11;:13::i;:::-;20144:30;;20237:16;:14;:16::i;:::-;20234:35;;;20256:10;:8;:10::i;:::-;20328:53;;;;;;;;;;;-1:-1:-1;;;20328:53:0;;;;;;;;-1:-1:-1;;;;;20328:17:0;;-1:-1:-1;20328:17:0;;;:9;:17;;;;;;;;:53;;20350:6;;20328:21;:53::i;:::-;-1:-1:-1;;;;;20308:17:0;;;;;;:9;:17;;;;;;;;:73;;;;23942:11;:19;;;;;;;;23941:20;20419:75;;20488:6;20419:75;;;20443:42;20451:6;20459;20467;20475:9;20443:7;:42::i;:::-;-1:-1:-1;;;;;20528:20:0;;;;;;:9;:20;;;;;;20394:100;;-1:-1:-1;20528:40:0;;20394:100;20528:24;:40::i;:::-;-1:-1:-1;;;;;20505:20:0;;;;;;;:9;:20;;;;;;;;:63;;;;20614:24;;;;;:16;:24;;;;;;;20610:119;;20659:11;;-1:-1:-1;;;;;20688:17:0;;;20659:11;20688:17;;;:9;:17;;;;;;;;20659:47;;-1:-1:-1;;;20659:47:0;;;;;10186:51:1;;;;10253:18;;;10246:34;20659:11:0;;;:20;;10159:18:1;;20659:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20655:63;;-1:-1:-1;;;;;20745:27:0;;;;;;:16;:27;;;;;;;;20741:129;;20793:11;;-1:-1:-1;;;;;20825:20:0;;;20793:11;20825:20;;;:9;:20;;;;;;;;20793:53;;-1:-1:-1;;;20793:53:0;;;;;10186:51:1;;;;10253:18;;;10246:34;20793:11:0;;;:20;;10159:18:1;;20793:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20789:69;;20886:11;;20906:14;;20886:35;;-1:-1:-1;;;;;;20886:35:0;;-1:-1:-1;;;;;20886:11:0;;;;:19;;:35;;;;1760:25:1;;;1748:2;1733:18;;1614:177;20886:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20882:51;20967:9;-1:-1:-1;;;;;20950:43:0;20959:6;-1:-1:-1;;;;;20950:43:0;;20978:14;20950:43;;;;1760:25:1;;1748:2;1733:18;;1614:177;20950:43:0;;;;;;;;-1:-1:-1;21011:4:0;;19072:1951;-1:-1:-1;;;;;;19072:1951:0:o;558:136::-;616:7;643:43;647:1;650;643:43;;;;;;;;;;;;;;;;;:3;:43::i;371:181::-;429:7;;461:5;465:1;461;:5;:::i;:::-;449:17;;490:1;485;:6;;477:46;;;;-1:-1:-1;;;477:46:0;;11605:2:1;477:46:0;;;11587:21:1;11644:2;11624:18;;;11617:30;11683:29;11663:18;;;11656:57;11730:18;;477:46:0;11403:351:1;898:250:0;956:7;980:6;976:47;;-1:-1:-1;1010:1:0;1003:8;;976:47;1035:9;1047:5;1051:1;1047;:5;:::i;:::-;1035:17;-1:-1:-1;1080:1:0;1071:5;1075:1;1035:17;1071:5;:::i;:::-;:10;1063:56;;;;-1:-1:-1;;;1063:56:0;;11961:2:1;1063:56:0;;;11943:21:1;12000:2;11980:18;;;11973:30;12039:34;12019:18;;;12012:62;-1:-1:-1;;;12090:18:1;;;12083:31;12131:19;;1063:56:0;11759:397:1;1154:132:0;1212:7;1239:39;1243:1;1246;1239:39;;;;;;;;;;;;;;;;;:3;:39::i;30420:361::-;15658:6;:13;;-1:-1:-1;;15658:13:0;;;;;30520:16;;30534:1:::1;30520:16:::0;;;;;::::1;::::0;;-1:-1:-1;;30520:16:0::1;::::0;::::1;::::0;15658:6;30520:16:::1;::::0;::::1;-1:-1:-1::0;;30557:4:0::1;::::0;30547:7;;;;-1:-1:-1;;;;;;30557:4:0::1;::::0;30547:7;;-1:-1:-1;30557:4:0::1;::::0;30547:7:::1;;;;:::i;:::-;;;;;;:14;-1:-1:-1::0;;;;;30547:14:0::1;;;-1:-1:-1::0;;;;;30547:14:0::1;;;::::0;::::1;30590:4;30572;30577:1;30572:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;30572:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;30608:6:::1;::::0;:165:::1;::::0;-1:-1:-1;;;30608:165:0;;:6;::::1;::::0;:57:::1;::::0;30673:6;;30608:165:::1;::::0;:6:::1;::::0;30711:4;;30730:2;;30747:15:::1;::::0;30608:165:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;15676:6:0;:14;;-1:-1:-1;;15676:14:0;;;-1:-1:-1;;;;;;30420:361:0:o;21060:330::-;21190:53;;;;;;;;;;;-1:-1:-1;;;21190:53:0;;;;;;;;-1:-1:-1;;;;;21190:17:0;;21153:4;21190:17;;;:9;:17;;;;;;;:53;;21212:6;;21190:21;:53::i;:::-;-1:-1:-1;;;;;21170:17:0;;;;;;;:9;:17;;;;;;:73;;;;21277:20;;;;;;;:32;;21302:6;21277:24;:32::i;:::-;-1:-1:-1;;;;;21254:20:0;;;;;;;:9;:20;;;;;;;:55;;;;21325:35;;;;;;;;;;21353:6;1760:25:1;;1748:2;1733:18;;1614:177;21325:35:0;;;;;;;;-1:-1:-1;21378:4:0;21060:330;;;;;:::o;21449:616::-;21509:6;21506:552;;;21546:16;;21531:12;:31;21590:14;;21577:10;:27;21635:17;;21619:13;:33;21682:16;;21667:12;:31;21722:15;;21713:6;:24;21763:12;;21752:8;:23;25971:113;:::o;21506:552::-;21823:15;;21808:12;:30;21866:13;;21853:10;:26;21910:16;;21894:13;:32;21956:15;;21941:12;:30;21995:14;;21986:6;:23;22035:11;;22024:8;:22;21449:616;:::o;23275:531::-;-1:-1:-1;;;;;23380:22:0;;;;;;:14;:22;;;;;;;;23379:23;:45;;;;-1:-1:-1;23419:5:0;;-1:-1:-1;;;;;23406:18:0;;;23419:5;;23406:18;;23379:45;:75;;;;-1:-1:-1;;;;;;23428:26:0;;23449:4;23428:26;;23379:75;:106;;;;-1:-1:-1;23480:4:0;;-1:-1:-1;;;;;23459:26:0;;;23480:4;;23459:26;;23379:106;:127;;;;-1:-1:-1;23502:4:0;;-1:-1:-1;;;;;23489:17:0;;;23502:4;;23489:17;;23379:127;:164;;;;-1:-1:-1;23523:20:0;;-1:-1:-1;;;;;23510:33:0;;;23523:20;;23510:33;;23379:164;:202;;;;-1:-1:-1;23560:21:0;;-1:-1:-1;;;;;23547:34:0;;;23560:21;;23547:34;;23379:202;:222;;;;-1:-1:-1;23598:3:0;;-1:-1:-1;;;;;23585:16:0;;;23598:3;;23585:16;;23379:222;23375:424;;;-1:-1:-1;;;;;17528:18:0;;23617;17528;;;:9;:18;;;;;;23706:15;;23682:19;23695:6;17528:18;23682:19;:::i;:::-;23681:40;;23673:114;;;;-1:-1:-1;;;23673:114:0;;13476:2:1;23673:114:0;;;13458:21:1;13515:2;13495:18;;;13488:30;13554:34;13534:18;;;13527:62;13625:32;13605:18;;;13598:60;13675:19;;23673:114:0;13274:426:1;23375:424:0;23275:531;;;:::o;22865:378::-;22960:4;;-1:-1:-1;;;;;22950:14:0;;;22960:4;;22950:14;:49;;;;-1:-1:-1;22981:18:0;;;;22950:49;:94;;;;-1:-1:-1;;;;;;23017:27:0;;;;;;:16;:27;;;;;;;;23016:28;22950:94;22946:290;;;-1:-1:-1;;;;;23069:24:0;;;;;;:13;:24;;;;;;23096:15;-1:-1:-1;23061:82:0;;;;-1:-1:-1;;;23061:82:0;;13907:2:1;23061:82:0;;;13889:21:1;13946:2;13926:18;;;13919:30;13985;13965:18;;;13958:58;14033:18;;23061:82:0;13705:352:1;23061:82:0;23203:21;;23185:39;;23203:21;;;;;23185:15;:39;:::i;:::-;-1:-1:-1;;;;;23158:24:0;;;;;;:13;:24;;;;;:66;22865:378;;:::o;22352:478::-;22480:5;;-1:-1:-1;;;;;22467:18:0;;;22480:5;;22467:18;22463:360;;22504:6;22501:311;;;22548:16;;22538:6;:26;;:53;;;-1:-1:-1;;;;;;22568:23:0;;;;;;:15;:23;;;;;;;;22538:53;:83;;;-1:-1:-1;;;;;;22595:26:0;;;;;;:15;:26;;;;;;;;22538:83;22530:113;;;;-1:-1:-1;;;22530:113:0;;14264:2:1;22530:113:0;;;14246:21:1;14303:2;14283:18;;;14276:30;-1:-1:-1;;;14322:18:1;;;14315:47;14379:18;;22530:113:0;14062:341:1;22530:113:0;22501:311;;;22702:15;;22692:6;:25;;:52;;;-1:-1:-1;;;;;;22721:23:0;;;;;;:15;:23;;;;;;;;22692:52;:82;;;-1:-1:-1;;;;;;22748:26:0;;;;;;:15;:26;;;;;;;;22692:82;22684:112;;;;-1:-1:-1;;;22684:112:0;;14264:2:1;22684:112:0;;;14246:21:1;14303:2;14283:18;;;14276:30;-1:-1:-1;;;14322:18:1;;;14315:47;14379:18;;22684:112:0;14062:341:1;25743:197:0;25830:4;;25792;;-1:-1:-1;;;;;25830:4:0;25816:10;:18;;;;:38;;-1:-1:-1;25848:6:0;;;;;;;25847:7;25816:38;:62;;;;-1:-1:-1;25867:11:0;;;;;;;25816:62;:116;;;;-1:-1:-1;;25919:13:0;;25909:4;25891:24;;;;:9;:24;;;;;;:41;;;25743:197::o;26819:2037::-;15658:6;:13;;-1:-1:-1;;15658:13:0;;;;;26914:15:::1;::::0;26931:26:::1;::::0;15658:13;;26898:60:::1;::::0;:15:::1;:60::i;:::-;:79;;26965:12;;26898:79;;;26961:1;26898:79;26868:109;;26988:23;27014:59;27071:1;27014:52;27057:8;;27014:38;27032:19;27014:13;;:17;;:38;;;;:::i;:59::-;26988:85;;27084:20;27107:34;27125:15;27107:13;;:17;;:34;;;;:::i;:::-;27178:16;::::0;;27192:1:::1;27178:16:::0;;;;;::::1;::::0;;27084:57;;-1:-1:-1;27154:21:0::1;::::0;27178:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;27178:16:0::1;27154:40;;27223:4;27205;27210:1;27205:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27205:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;27249:4:::1;::::0;27239:7;;27249:4;::::1;::::0;27239;;27249;;27239:7;::::1;;;;;:::i;:::-;-1:-1:-1::0;;;;;27239:14:0;;::::1;:7;::::0;;::::1;::::0;;;;;:14;27324:6:::1;::::0;:188:::1;::::0;-1:-1:-1;;;27324:188:0;;27290:21:::1;::::0;27324:6;;;::::1;::::0;:57:::1;::::0;:188:::1;::::0;27396:12;;27266:21:::1;::::0;27439:4;;27466::::1;::::0;27486:15:::1;::::0;27324:188:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;27523:17;27543:40;27569:13;27543:21;:25;;:40;;;;:::i;:::-;27523:60:::0;-1:-1:-1;27594:19:0::1;27616:40;27629:26;:19:::0;27653:1:::1;27629:23;:26::i;:::-;27616:8;::::0;;:12:::1;:40::i;:::-;27594:62:::0;-1:-1:-1;27667:26:0::1;27696:58;27752:1;27696:51;27594:62:::0;27696:51;:9;27710:19;27696:13:::1;:34::i;:58::-;27667:87;;27765:27;27795:45;27828:11;27795:28;27809:13;;27795:9;:13;;:28;;;;:::i;:45::-;27765:75;;27851:26;27880:44;27912:11;27880:27;27894:12;;27880:9;:13;;:27;;;;:::i;:44::-;27851:73;;27935:20;27958:38;27984:11;27958:21;27972:6;;27958:9;:13;;:21;;;;:::i;:38::-;27935:61;;28016:11;;;;;;;;;-1:-1:-1::0;;;;;28016:11:0::1;-1:-1:-1::0;;;;;28016:19:0::1;;28043;28016:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;-1:-1:-1::0;28146:20:0::1;::::0;28138:77:::1;::::0;28088:21:::1;::::0;-1:-1:-1;;;;;28146:20:0::1;::::0;28205:5:::1;::::0;28180:18;;28088:21;28138:77;28088:21;28138:77;28180:18;28146:20;28205:5;28138:77:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;28279:3:0::1;::::0;28271:54:::1;::::0;28087:128;;-1:-1:-1;28227:15:0::1;::::0;-1:-1:-1;;;;;28279:3:0;;::::1;::::0;28315:5:::1;::::0;28296:12;;28227:15;28271:54;28227:15;28271:54;28296:12;28279:3;28315:5;28271:54:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28226:99;;;28345:16;28337:69;;;::::0;-1:-1:-1;;;28337:69:0;;15407:2:1;28337:69:0::1;::::0;::::1;15389:21:1::0;15446:2;15426:18;;;15419:30;15485:34;15465:18;;;15458:62;-1:-1:-1;;;15536:18:1;;;15529:38;15584:19;;28337:69:0::1;15205:404:1::0;28337:69:0::1;28425:10;28417:57;;;::::0;-1:-1:-1;;;28417:57:0;;15816:2:1;28417:57:0::1;::::0;::::1;15798:21:1::0;15855:2;15835:18;;;15828:30;15894:34;15874:18;;;15867:62;-1:-1:-1;;;15945:18:1;;;15938:32;15987:19;;28417:57:0::1;15614:398:1::0;28417:57:0::1;28490:19:::0;;28487:362:::1;;28525:6;::::0;28699:21:::1;::::0;28525:244:::1;::::0;-1:-1:-1;;;28525:244:0;;28601:4:::1;28525:244;::::0;::::1;16358:34:1::0;16408:18;;;16401:34;;;28525:6:0::1;16451:18:1::0;;;16444:34;;;16494:18;;;16487:34;-1:-1:-1;;;;;28699:21:0;;::::1;16537:19:1::0;;;16530:44;28739:15:0::1;16590:19:1::0;;;16583:35;28525:6:0;::::1;::::0;:22:::1;::::0;28555:18;;16292:19:1;;28525:244:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;28789:48:0::1;::::0;;9403:25:1;;;9459:2;9444:18;;9437:34;;;28789:48:0::1;::::0;-1:-1:-1;9376:18:1;28789:48:0::1;;;;;;;28487:362;-1:-1:-1::0;;15676:6:0;:14;;-1:-1:-1;;15676:14:0;;;-1:-1:-1;;;;;;;;;;;26819:2037:0:o;24862:834::-;24958:7;24978:17;25055:9;25051:460;;;25083:6;25080:335;;;25186:54;25225:14;;25186:34;25218:1;25186:27;25211:1;25186:20;25197:8;;25186:6;:10;;:20;;;;:::i;:54::-;25174:66;;25051:460;;25080:335;25352:47;25384:14;;25352:27;25377:1;25352:20;25363:8;;25352:6;:10;;:20;;;;:::i;25051:460::-;25459:40;25484:14;;25459:20;25470:8;;25459:6;:10;;:20;;;;:::i;:40::-;25447:52;;25051:460;25568:4;25550:24;;;;:9;:24;;;;;;:39;;25579:9;25550:28;:39::i;:::-;25541:4;25523:24;;;;:9;:24;;;;;;;:66;;;;25605:42;;-1:-1:-1;;;;;25605:42:0;;;;;;;25637:9;1760:25:1;;1748:2;1733:18;;1614:177;25605:42:0;;;;;;;;25667:21;:6;25678:9;25667:10;:21::i;:::-;25660:28;24862:834;-1:-1:-1;;;;;;24862:834:0:o;1292:345::-;1378:7;1480:12;1473:5;1465:28;;;;-1:-1:-1;;;1465:28:0;;;;;;;;:::i;:::-;-1:-1:-1;1504:9:0;1516:5;1520:1;1516;:5;:::i;14:597:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:1;574:15;-1:-1:-1;;570:29:1;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:1:o;616:131::-;-1:-1:-1;;;;;691:31:1;;681:42;;671:70;;737:1;734;727:12;752:315;820:6;828;881:2;869:9;860:7;856:23;852:32;849:52;;;897:1;894;887:12;849:52;936:9;923:23;955:31;980:5;955:31;:::i;:::-;1005:5;1057:2;1042:18;;;;1029:32;;-1:-1:-1;;;752:315:1:o;1264:160::-;1329:20;;1385:13;;1378:21;1368:32;;1358:60;;1414:1;1411;1404:12;1358:60;1264:160;;;:::o;1429:180::-;1485:6;1538:2;1526:9;1517:7;1513:23;1509:32;1506:52;;;1554:1;1551;1544:12;1506:52;1577:26;1593:9;1577:26;:::i;1796:248::-;1864:6;1872;1925:2;1913:9;1904:7;1900:23;1896:32;1893:52;;;1941:1;1938;1931:12;1893:52;-1:-1:-1;;1964:23:1;;;2034:2;2019:18;;;2006:32;;-1:-1:-1;1796:248:1:o;2049:689::-;2141:6;2149;2157;2210:2;2198:9;2189:7;2185:23;2181:32;2178:52;;;2226:1;2223;2216:12;2178:52;2266:9;2253:23;2295:18;2336:2;2328:6;2325:14;2322:34;;;2352:1;2349;2342:12;2322:34;2390:6;2379:9;2375:22;2365:32;;2435:7;2428:4;2424:2;2420:13;2416:27;2406:55;;2457:1;2454;2447:12;2406:55;2497:2;2484:16;2523:2;2515:6;2512:14;2509:34;;;2539:1;2536;2529:12;2509:34;2594:7;2587:4;2577:6;2574:1;2570:14;2566:2;2562:23;2558:34;2555:47;2552:67;;;2615:1;2612;2605:12;2552:67;2646:4;2638:13;;;;-1:-1:-1;2670:6:1;-1:-1:-1;2695:37:1;;2711:20;;;-1:-1:-1;2695:37:1;:::i;:::-;2685:47;;2049:689;;;;;:::o;2743:315::-;2808:6;2816;2869:2;2857:9;2848:7;2844:23;2840:32;2837:52;;;2885:1;2882;2875:12;2837:52;2924:9;2911:23;2943:31;2968:5;2943:31;:::i;:::-;2993:5;-1:-1:-1;3017:35:1;3048:2;3033:18;;3017:35;:::i;:::-;3007:45;;2743:315;;;;;:::o;3063:316::-;3140:6;3148;3156;3209:2;3197:9;3188:7;3184:23;3180:32;3177:52;;;3225:1;3222;3215:12;3177:52;-1:-1:-1;;3248:23:1;;;3318:2;3303:18;;3290:32;;-1:-1:-1;3369:2:1;3354:18;;;3341:32;;3063:316;-1:-1:-1;3063:316:1:o;3384:456::-;3461:6;3469;3477;3530:2;3518:9;3509:7;3505:23;3501:32;3498:52;;;3546:1;3543;3536:12;3498:52;3585:9;3572:23;3604:31;3629:5;3604:31;:::i;:::-;3654:5;-1:-1:-1;3711:2:1;3696:18;;3683:32;3724:33;3683:32;3724:33;:::i;:::-;3384:456;;3776:7;;-1:-1:-1;;;3830:2:1;3815:18;;;;3802:32;;3384:456::o;3845:247::-;3904:6;3957:2;3945:9;3936:7;3932:23;3928:32;3925:52;;;3973:1;3970;3963:12;3925:52;4012:9;3999:23;4031:31;4056:5;4031:31;:::i;4097:337::-;4160:6;4168;4221:2;4209:9;4200:7;4196:23;4192:32;4189:52;;;4237:1;4234;4227:12;4189:52;4260:26;4276:9;4260:26;:::i;:::-;4250:36;;4336:2;4325:9;4321:18;4308:32;4380:4;4373:5;4369:16;4362:5;4359:27;4349:55;;4400:1;4397;4390:12;4349:55;4423:5;4413:15;;;4097:337;;;;;:::o;4439:454::-;4528:6;4536;4544;4552;4560;4613:3;4601:9;4592:7;4588:23;4584:33;4581:53;;;4630:1;4627;4620:12;4581:53;4653:26;4669:9;4653:26;:::i;:::-;4643:36;;4726:2;4715:9;4711:18;4698:32;4688:42;;4777:2;4766:9;4762:18;4749:32;4739:42;;4828:2;4817:9;4813:18;4800:32;4790:42;;4851:36;4882:3;4871:9;4867:19;4851:36;:::i;:::-;4841:46;;4439:454;;;;;;;;:::o;5087:180::-;5146:6;5199:2;5187:9;5178:7;5174:23;5170:32;5167:52;;;5215:1;5212;5205:12;5167:52;-1:-1:-1;5238:23:1;;5087:180;-1:-1:-1;5087:180:1:o;5272:248::-;5337:6;5345;5398:2;5386:9;5377:7;5373:23;5369:32;5366:52;;;5414:1;5411;5404:12;5366:52;5450:9;5437:23;5427:33;;5479:35;5510:2;5499:9;5495:18;5479:35;:::i;5733:388::-;5801:6;5809;5862:2;5850:9;5841:7;5837:23;5833:32;5830:52;;;5878:1;5875;5868:12;5830:52;5917:9;5904:23;5936:31;5961:5;5936:31;:::i;:::-;5986:5;-1:-1:-1;6043:2:1;6028:18;;6015:32;6056:33;6015:32;6056:33;:::i;6126:523::-;6230:6;6238;6246;6254;6262;6270;6323:3;6311:9;6302:7;6298:23;6294:33;6291:53;;;6340:1;6337;6330:12;6291:53;-1:-1:-1;;6363:23:1;;;6433:2;6418:18;;6405:32;;-1:-1:-1;6484:2:1;6469:18;;6456:32;;6535:2;6520:18;;6507:32;;-1:-1:-1;6586:3:1;6571:19;;6558:33;;-1:-1:-1;6638:3:1;6623:19;6610:33;;-1:-1:-1;6126:523:1;-1:-1:-1;6126:523:1:o;6654:248::-;6719:6;6727;6780:2;6768:9;6759:7;6755:23;6751:32;6748:52;;;6796:1;6793;6786:12;6748:52;6819:26;6835:9;6819:26;:::i;7393:329::-;7595:2;7577:21;;;7634:1;7614:18;;;7607:29;-1:-1:-1;;;7667:2:1;7652:18;;7645:36;7713:2;7698:18;;7393:329::o;7727:335::-;7929:2;7911:21;;;7968:2;7948:18;;;7941:30;-1:-1:-1;;;8002:2:1;7987:18;;7980:41;8053:2;8038:18;;7727:335::o;8414:127::-;8475:10;8470:3;8466:20;8463:1;8456:31;8506:4;8503:1;8496:15;8530:4;8527:1;8520:15;8546:127;8607:10;8602:3;8598:20;8595:1;8588:31;8638:4;8635:1;8628:15;8662:4;8659:1;8652:15;8678:135;8717:3;-1:-1:-1;;8738:17:1;;8735:43;;;8758:18;;:::i;:::-;-1:-1:-1;8805:1:1;8794:13;;8678:135::o;8818:217::-;8858:1;8884;8874:132;;8928:10;8923:3;8919:20;8916:1;8909:31;8963:4;8960:1;8953:15;8991:4;8988:1;8981:15;8874:132;-1:-1:-1;9020:9:1;;8818:217::o;9040:184::-;9110:6;9163:2;9151:9;9142:7;9138:23;9134:32;9131:52;;;9179:1;9176;9169:12;9131:52;-1:-1:-1;9202:16:1;;9040:184;-1:-1:-1;9040:184:1:o;9482:168::-;9522:7;9588:1;9584;9580:6;9576:14;9573:1;9570:21;9565:1;9558:9;9551:17;9547:45;9544:71;;;9595:18;;:::i;:::-;-1:-1:-1;9635:9:1;;9482:168::o;9655:128::-;9695:3;9726:1;9722:6;9719:1;9716:13;9713:39;;;9732:18;;:::i;:::-;-1:-1:-1;9768:9:1;;9655:128::o;10570:125::-;10610:4;10638:1;10635;10632:8;10629:34;;;10643:18;;:::i;:::-;-1:-1:-1;10680:9:1;;10570:125::o;12293:461::-;12346:3;12384:5;12378:12;12411:6;12406:3;12399:19;12437:4;12466:2;12461:3;12457:12;12450:19;;12503:2;12496:5;12492:14;12524:1;12534:195;12548:6;12545:1;12542:13;12534:195;;;12613:13;;-1:-1:-1;;;;;12609:39:1;12597:52;;12669:12;;;;12704:15;;;;12645:1;12563:9;12534:195;;;-1:-1:-1;12745:3:1;;12293:461;-1:-1:-1;;;;;12293:461:1:o;12759:510::-;13030:6;13019:9;13012:25;13073:3;13068:2;13057:9;13053:18;13046:31;12993:4;13094:57;13146:3;13135:9;13131:19;13123:6;13094:57;:::i;:::-;-1:-1:-1;;;;;13187:32:1;;;;13182:2;13167:18;;13160:60;-1:-1:-1;13251:2:1;13236:18;13229:34;13086:65;12759:510;-1:-1:-1;;12759:510:1:o;14408:582::-;14707:6;14696:9;14689:25;14750:6;14745:2;14734:9;14730:18;14723:34;14793:3;14788:2;14777:9;14773:18;14766:31;14670:4;14814:57;14866:3;14855:9;14851:19;14843:6;14814:57;:::i;:::-;-1:-1:-1;;;;;14907:32:1;;;;14902:2;14887:18;;14880:60;-1:-1:-1;14971:3:1;14956:19;14949:35;14806:65;14408:582;-1:-1:-1;;;14408:582:1:o;16629:306::-;16717:6;16725;16733;16786:2;16774:9;16765:7;16761:23;16757:32;16754:52;;;16802:1;16799;16792:12;16754:52;16831:9;16825:16;16815:26;;16881:2;16870:9;16866:18;16860:25;16850:35;;16925:2;16914:9;16910:18;16904:25;16894:35;;16629:306;;;;;:::o

Swarm Source

ipfs://2cbdd18c511828bb62f4f7a50edd2dc3c61ce59e621d34126c5c013b9511b9f7
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.