ETH Price: $2,516.05 (+0.35%)

Token

DREAM (DREAM)
 

Overview

Max Total Supply

100,000,000 DREAM

Holders

1,236 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
53,735.196137959 DREAM

Value
$0.00
0x8A5651f02b6821BF4D9aa3E61E377330AAe01265
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:
DREAM

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-01-11
*/

// SPDX-License-Identifier: Unlicensed

pragma solidity ^0.8.4;

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

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

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

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

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

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

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

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

}

contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

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

}  

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

interface IUniswapV2Router02 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
}

contract DREAM is Context, IERC20, Ownable {
    using SafeMath for uint256;
    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private bots;
    mapping (address => uint) private cooldown;
    uint256 private constant _tTotal = 1e8 * 10**9;
    
    uint256 private _marketingFee = 3;
    uint256 private _previousMarketingFee = _marketingFee;
    uint256 private _developmentFee = 2;
    uint256 private _previousDevelopmentFee = _developmentFee;
    uint256 private _liquidityFee = 1;
    uint256 private _previousLiquidityFee = _liquidityFee;
    uint256 private _foundationFee = 1;
    uint256 private _previousFoundationFee = _foundationFee;
    uint256 private _rewardFee = 1;
    uint256 private _previousRewardFee = _rewardFee;

    uint256 private tokensForProject;
    uint256 private tokensForDev;
    uint256 private tokensForLiquidity;

    address payable private _projectWallet;
    address payable private _developmentWallet;
    address payable private _liquidityWallet;
    
    string private constant _name = "DREAM";
    string private constant _symbol = "DREAM";
    uint8 private constant _decimals = 9;
    
    IUniswapV2Router02 private uniswapV2Router;
    address private uniswapV2Pair;
    bool private tradingOpen;
    bool private swapping;
    bool private inSwap = false;
    bool private swapEnabled = false;
    bool private cooldownEnabled = false;
    bool private marketHoursEnabled = false;
    bool private checkHolidays = false;
    bool private isSpecialEvent = false;
    uint256 private tradingActiveBlock = 0; // 0 means trading is not active
    uint256 private blocksToBlacklist = 1;
    uint256 private _maxBuyAmount = _tTotal;
    uint256 private _maxSellAmount = _tTotal;
    uint256 private _maxWalletAmount = _tTotal;
    uint256 private swapTokensAtAmount = 0;
    uint8 private _sunday = 0;
    uint8 private _saturday = 6;
    uint8 private _openingTimeHr = 14;
    uint8 private _closingTimeHr = 20;
    uint8 private _openingTimeMin = 30;

    struct _DateTime {
                uint16 year;
                uint8 month;
                uint8 day;
                uint8 hour;
                uint8 minute;
                uint8 second;
                uint8 weekday;
            }

    uint constant DAY_IN_SECONDS = 86400;
    uint constant YEAR_IN_SECONDS = 31536000;
    uint constant LEAP_YEAR_IN_SECONDS = 31622400;
    uint constant HOUR_IN_SECONDS = 3600;
    uint constant MINUTE_IN_SECONDS = 60;
    uint16 constant ORIGIN_YEAR = 1970;
    
    event MaxBuyAmountUpdated(uint _maxBuyAmount);
    event MaxSellAmountUpdated(uint _maxSellAmount);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );
    modifier lockTheSwap {
        inSwap = true;
        _;
        inSwap = false;
    }
    constructor () {
        _projectWallet = payable(0x814f28C01cB2E281A5d9C7bEC1b988406EeED6e8);
        _developmentWallet = payable(0xcD11d4f84E6dD5CF256e595557Ebd482399087ec);
        _liquidityWallet = payable(address(0xdead));
        _rOwned[_msgSender()] = _tTotal;
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[_projectWallet] = true;
        _isExcludedFromFee[_developmentWallet] = true;
        _isExcludedFromFee[_liquidityWallet] = true;
        emit Transfer(address(0x81252E081f4335e3B766AD5C6C4038076A444994), _msgSender(), _tTotal);
    }

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

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

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

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

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

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

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

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

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

    function setCooldownEnabled(bool onoff) external onlyOwner() {
        cooldownEnabled = onoff;
    }

    function setMarketHoursEnabled(bool onoff) external onlyOwner() {
        marketHoursEnabled = onoff;
    }

    function setCheckHolidaysEnabled(bool onoff) external onlyOwner() {
        checkHolidays = onoff;
    }

    function setSpecialEvent(bool onoff) external onlyOwner() {
        isSpecialEvent = onoff;
    }

    function setSwapEnabled(bool onoff) external onlyOwner(){
        swapEnabled = onoff;
    }

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

    function _transfer(address from, address to, uint256 amount) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        bool takeFee = false;
        bool shouldSwap = false;
        if (from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !swapping) {
            require(!bots[from] && !bots[to]);

            if (marketHoursEnabled && !_isExcludedFromFee[from] && !_isExcludedFromFee[to]) {
                require(marketOpened(block.timestamp), "Market is closed.");
            }

            takeFee = true;
            if (from == uniswapV2Pair && to != address(uniswapV2Router) && !_isExcludedFromFee[to] && cooldownEnabled) {
                require(amount <= _maxBuyAmount, "Transfer amount exceeds the maxBuyAmount.");
                require(balanceOf(to) + amount <= _maxWalletAmount, "Exceeds maximum wallet token amount.");
                require(cooldown[to] < block.timestamp);
                cooldown[to] = block.timestamp + (30 seconds);
            }
            
            if (to == uniswapV2Pair && from != address(uniswapV2Router) && !_isExcludedFromFee[from] && cooldownEnabled) {
                require(amount <= _maxSellAmount, "Transfer amount exceeds the maxSellAmount.");
                shouldSwap = true;
            }
        }

        if(_isExcludedFromFee[from] || _isExcludedFromFee[to]) {
            takeFee = false;
        }

        uint256 contractTokenBalance = balanceOf(address(this));
        bool canSwap = (contractTokenBalance > swapTokensAtAmount) && shouldSwap;

        if (canSwap && swapEnabled && !swapping && !_isExcludedFromFee[from] && !_isExcludedFromFee[to]) {
            swapping = true;
            swapBack();
            swapping = false;
        }

        _tokenTransfer(from,to,amount,takeFee);
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForProject + tokensForDev;
        bool success;
        
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}

        if(contractBalance > swapTokensAtAmount * 10) {
            contractBalance = swapTokensAtAmount * 10;
        }
        
        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);
        
        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH); 
        
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        
        uint256 ethForMarketing = ethBalance.mul(tokensForProject).div(totalTokensToSwap);
        uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);
        
        
        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev;
        
        
        tokensForLiquidity = 0;
        tokensForProject = 0;
        tokensForDev = 0;
        
        (success,) = address(_developmentWallet).call{value: ethForDev}("");
        
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }
        
        
        (success,) = address(_projectWallet).call{value: address(this).balance}("");
    }

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

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            _liquidityWallet,
            block.timestamp
        );
    }
        
    function sendETHToFee(uint256 amount) private {
        _projectWallet.transfer(amount.div(2));
        _developmentWallet.transfer(amount.div(2));
    }
    
    function openTrading() external onlyOwner() {
        require(!tradingOpen,"trading is already open");
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Router = _uniswapV2Router;
        _approve(address(this), address(uniswapV2Router), _tTotal);
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        uniswapV2Router.addLiquidityETH{value: address(this).balance}(address(this),balanceOf(address(this)),0,0,owner(),block.timestamp);
        swapEnabled = true;
        cooldownEnabled = true;
        marketHoursEnabled = true;
        checkHolidays = true;
        _maxBuyAmount = 1e5 * 10**9;
        _maxSellAmount = 1e5 * 10**9;
        _maxWalletAmount = 3e5 * 10**9;
        swapTokensAtAmount = 5e4 * 10**9;
        tradingOpen = true;
        tradingActiveBlock = block.number;
        IERC20(uniswapV2Pair).approve(address(uniswapV2Router), type(uint).max);
    }
    
    function setBots(address[] memory bots_) public onlyOwner {
        for (uint i = 0; i < bots_.length; i++) {
            bots[bots_[i]] = true;
        }
    }

    function setMaxBuyAmount(uint256 maxBuy) public onlyOwner {
        _maxBuyAmount = maxBuy;
    }

    function setMaxSellAmount(uint256 maxSell) public onlyOwner {
        _maxSellAmount = maxSell;
    }
    
    function setMaxWalletAmount(uint256 maxToken) public onlyOwner {
        _maxWalletAmount = maxToken;
    }
    
    function setSwapTokensAtAmount(uint256 newAmount) public onlyOwner {
  	    require(newAmount >= 1e3 * 10**9, "Swap amount cannot be lower than 0.001% total supply.");
  	    require(newAmount <= 5e6 * 10**9, "Swap amount cannot be higher than 0.5% total supply.");
  	    swapTokensAtAmount = newAmount;
  	}

    function setProjectWallet(address projectWallet) public onlyOwner() {
        require(projectWallet != address(0), "projectWallet address cannot be 0");
        _isExcludedFromFee[_projectWallet] = false;
        _projectWallet = payable(projectWallet);
        _isExcludedFromFee[_projectWallet] = true;
    }

    function setDevelopmentWallet(address developmentWallet) public onlyOwner() {
        require(developmentWallet != address(0), "developmentWallet address cannot be 0");
        _isExcludedFromFee[_developmentWallet] = false;
        _developmentWallet = payable(developmentWallet);
        _isExcludedFromFee[_developmentWallet] = true;
    }

    function setLiquidityWallet(address liquidityWallet) public onlyOwner() {
        require(liquidityWallet != address(0), "liquidityWallet address cannot be 0");
        _isExcludedFromFee[_liquidityWallet] = false;
        _liquidityWallet = payable(liquidityWallet);
        _isExcludedFromFee[_liquidityWallet] = true;
    }

    function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }
    
    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }
    
    function setMarketingFee(uint256 marketingFee) external onlyOwner() {
        require(marketingFee <= 10, "Marketing Fee must be less than 10%");
        _marketingFee = marketingFee;
    }
    
    function setDevelopmentFee(uint256 developmentFee) external onlyOwner() {
        require(developmentFee <= 10, "Development Fee must be less than 10%");
        _developmentFee = developmentFee;
    }
    
    function setLiquidityFee(uint256 liquidityFee) external onlyOwner() {
        require(liquidityFee <= 10, "Liquidity Fee must be less than 10%");
        _liquidityFee = liquidityFee;
    }
    
    function setFoundationFee(uint256 foundationFee) external onlyOwner() {
        require(foundationFee <= 10, "Foundation Fee must be less than 10%");
        _foundationFee = foundationFee;
    }
    
    function setRewardFee(uint256 rewardFee) external onlyOwner() {
        require(rewardFee <= 10, "Reward Fee must be less than 10%");
        _rewardFee = rewardFee;
    }

    function setBlocksToBlacklist(uint256 blocks) public onlyOwner {
        blocksToBlacklist = blocks;
    }

    function removeAllFee() private {
        if(_marketingFee == 0 && _developmentFee == 0 && _liquidityFee == 0 && _foundationFee == 0 && _rewardFee == 0) return;
        
        _previousMarketingFee = _marketingFee;
        _previousDevelopmentFee = _developmentFee;
        _previousLiquidityFee = _liquidityFee;
        _previousFoundationFee = _foundationFee;
        _previousRewardFee = _rewardFee;
        
        _marketingFee = 0;
        _developmentFee = 0;
        _liquidityFee = 0;
        _foundationFee = 0;
        _rewardFee = 0;
    }
    
    function restoreAllFee() private {
        _marketingFee = _previousMarketingFee;
        _developmentFee = _previousDevelopmentFee;
        _liquidityFee = _previousLiquidityFee;
        _foundationFee = _previousFoundationFee;
        _rewardFee = _previousRewardFee;
    }
    
    function delBot(address notbot) public onlyOwner {
        bots[notbot] = false;
    }
        
    function _tokenTransfer(address sender, address recipient, uint256 amount, bool takeFee) private {
        if(!takeFee) {
            removeAllFee();
        } else {
            amount = _takeFees(sender, amount);
        }

        _transferStandard(sender, recipient, amount);
        
        if(!takeFee) {
            restoreAllFee();
        }
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        _rOwned[sender] = _rOwned[sender].sub(tAmount);
        _rOwned[recipient] = _rOwned[recipient].add(tAmount);
        emit Transfer(sender, recipient, tAmount);
    }

    function _takeFees(address sender, uint256 amount) private returns (uint256) {
        uint256 _totalFees;
        uint256 liqFee;
        if(tradingActiveBlock + blocksToBlacklist >= block.number){
            _totalFees = 99;
            liqFee = 92;
        } else {
            _totalFees = _getTotalFees();
            liqFee = _liquidityFee;
        }

        uint256 fees = amount.mul(_totalFees).div(100);
        tokensForProject += fees * (_marketingFee + _rewardFee + _foundationFee) / _totalFees;
        tokensForDev += fees * _developmentFee / _totalFees;
        tokensForLiquidity += fees * liqFee / _totalFees;
            
        if(fees > 0) {
            _transferStandard(sender, address(this), fees);
        }
        	
        return amount -= fees;
    }

    receive() external payable {}
    
    function manualswap() external {
        require(_msgSender() == _projectWallet);
        uint256 contractBalance = balanceOf(address(this));
        swapTokensForEth(contractBalance);
    }
    
    function manualsend() external {
        require(_msgSender() == _projectWallet);
        uint256 contractETHBalance = address(this).balance;
        sendETHToFee(contractETHBalance);
    }

    function withdrawStuckETH() external onlyOwner {
        require(!tradingOpen, "Can only withdraw if trading hasn't started");
        bool success;
        (success,) = address(msg.sender).call{value: address(this).balance}("");
    }

    function _getTotalFees() private view returns(uint256) {
        return _marketingFee + _developmentFee + _liquidityFee + _foundationFee + _rewardFee;
    }

    function marketOpened(uint timestamp) public view returns (bool) {
        _DateTime memory dt = parseTimestamp(timestamp);
        if (dt.weekday == _sunday || dt.weekday == _saturday) {
            return false;
        }
        if (dt.hour < _openingTimeHr || dt.hour > _closingTimeHr) {
            return false;
        }
        if (dt.hour == _openingTimeHr && dt.minute < _openingTimeMin) {
            return false;
        }
        if (checkHolidays) {
            if (dt.month == 1 && (dt.day == 1 || dt.day == 18)) {
                return false;
            }
            if (dt.month == 2 && dt.day == 15) {
                return false;
            }
            if (dt.month == 4 && dt.day == 2) {
                return false;
            }
            if (dt.month == 5 && dt.day == 31) {
                return false;
            }
            if (dt.month == 7 && dt.day == 5) {
                return false;
            }
            if (dt.month == 9 && dt.day == 6) {
                return false;
            }
            if (dt.month == 11 && dt.day == 25) {
                return false;
            }
            if (dt.month == 12 && dt.day == 24) {
                return false;
            }
        }
        if (isSpecialEvent) {
            return false;
        }
        
        return true;
    }

        function isLeapYear(uint16 year) public pure returns (bool) {
                if (year % 4 != 0) {
                        return false;
                }
                if (year % 100 != 0) {
                        return true;
                }
                if (year % 400 != 0) {
                        return false;
                }
                return true;
        }

        function leapYearsBefore(uint year) public pure returns (uint) {
                year -= 1;
                return year / 4 - year / 100 + year / 400;
        }

        function getDaysInMonth(uint8 month, uint16 year) public pure returns (uint8) {
                if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) {
                        return 31;
                }
                else if (month == 4 || month == 6 || month == 9 || month == 11) {
                        return 30;
                }
                else if (isLeapYear(year)) {
                        return 29;
                }
                else {
                        return 28;
                }
        }

        function parseTimestamp(uint timestamp) internal pure returns (_DateTime memory dt) {
                uint secondsAccountedFor = 0;
                uint buf;
                uint8 i;

                // Year
                dt.year = getYear(timestamp);
                buf = leapYearsBefore(dt.year) - leapYearsBefore(ORIGIN_YEAR);

                secondsAccountedFor += LEAP_YEAR_IN_SECONDS * buf;
                secondsAccountedFor += YEAR_IN_SECONDS * (dt.year - ORIGIN_YEAR - buf);

                // Month
                uint secondsInMonth;
                for (i = 1; i <= 12; i++) {
                        secondsInMonth = DAY_IN_SECONDS * getDaysInMonth(i, dt.year);
                        if (secondsInMonth + secondsAccountedFor > timestamp) {
                                dt.month = i;
                                break;
                        }
                        secondsAccountedFor += secondsInMonth;
                }

                // Day
                for (i = 1; i <= getDaysInMonth(dt.month, dt.year); i++) {
                        if (DAY_IN_SECONDS + secondsAccountedFor > timestamp) {
                                dt.day = i;
                                break;
                        }
                        secondsAccountedFor += DAY_IN_SECONDS;
                }

                // Hour
                dt.hour = getHour(timestamp);

                // Minute
                dt.minute = getMinute(timestamp);

                // Second
                dt.second = getSecond(timestamp);

                // Day of week.
                dt.weekday = getWeekday(timestamp);
        }

        function getYear(uint timestamp) public pure returns (uint16) {
                uint secondsAccountedFor = 0;
                uint16 year;
                uint numLeapYears;

                // Year
                year = uint16(ORIGIN_YEAR + timestamp / YEAR_IN_SECONDS);
                numLeapYears = leapYearsBefore(year) - leapYearsBefore(ORIGIN_YEAR);

                secondsAccountedFor += LEAP_YEAR_IN_SECONDS * numLeapYears;
                secondsAccountedFor += YEAR_IN_SECONDS * (year - ORIGIN_YEAR - numLeapYears);

                while (secondsAccountedFor > timestamp) {
                        if (isLeapYear(uint16(year - 1))) {
                                secondsAccountedFor -= LEAP_YEAR_IN_SECONDS;
                        }
                        else {
                                secondsAccountedFor -= YEAR_IN_SECONDS;
                        }
                        year -= 1;
                }
                return year;
        }

        function getHour(uint timestamp) public pure returns (uint8) {
                return uint8((timestamp / 60 / 60) % 24);
        }

        function getMinute(uint timestamp) public pure returns (uint8) {
                return uint8((timestamp / 60) % 60);
        }

        function getSecond(uint timestamp) public pure returns (uint8) {
                return uint8(timestamp % 60);
        }

        function getWeekday(uint timestamp) public pure returns (uint8) {
                return uint8((timestamp / DAY_IN_SECONDS + 4) % 7);
        }

    function setSunday(uint8 sunday) external onlyOwner() {
        _sunday = sunday;
    }

    function setSaturday(uint8 saturday) external onlyOwner() {
        _saturday = saturday;
    }

    function setMarketOpeningTimeHr(uint8 openingTimeHr) external onlyOwner() {
        _openingTimeHr = openingTimeHr;
    }

    function setMarketClosingTimeHr(uint8 closingTimeHr) external onlyOwner() {
        _closingTimeHr = closingTimeHr;
    }

    function setMarketOpeningTimeMin(uint8 openingTimeMin) external onlyOwner() {
        _openingTimeMin = openingTimeMin;
    }
}

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":"_maxBuyAmount","type":"uint256"}],"name":"MaxBuyAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_maxSellAmount","type":"uint256"}],"name":"MaxSellAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","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":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"notbot","type":"address"}],"name":"delBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"month","type":"uint8"},{"internalType":"uint16","name":"year","type":"uint16"}],"name":"getDaysInMonth","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"getHour","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"getMinute","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"getSecond","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"getWeekday","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"getYear","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"year","type":"uint16"}],"name":"isLeapYear","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"year","type":"uint256"}],"name":"leapYearsBefore","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"manualsend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualswap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"marketOpened","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocks","type":"uint256"}],"name":"setBlocksToBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"bots_","type":"address[]"}],"name":"setBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"setCheckHolidaysEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"setCooldownEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"developmentFee","type":"uint256"}],"name":"setDevelopmentFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"developmentWallet","type":"address"}],"name":"setDevelopmentWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"foundationFee","type":"uint256"}],"name":"setFoundationFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setLiquidityFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"liquidityWallet","type":"address"}],"name":"setLiquidityWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"closingTimeHr","type":"uint8"}],"name":"setMarketClosingTimeHr","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"setMarketHoursEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"openingTimeHr","type":"uint8"}],"name":"setMarketOpeningTimeHr","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"openingTimeMin","type":"uint8"}],"name":"setMarketOpeningTimeMin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingFee","type":"uint256"}],"name":"setMarketingFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxBuy","type":"uint256"}],"name":"setMaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxSell","type":"uint256"}],"name":"setMaxSellAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxToken","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"projectWallet","type":"address"}],"name":"setProjectWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"rewardFee","type":"uint256"}],"name":"setRewardFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"saturday","type":"uint8"}],"name":"setSaturday","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"setSpecialEvent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"sunday","type":"uint8"}],"name":"setSunday","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"setSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","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":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600360088190556009556002600a819055600b556001600c819055600d819055600e819055600f819055601081905560118190556019805465ffffffffffff60b01b191690556000601a819055601b9190915567016345785d8a0000601c819055601d819055601e55601f556020805464ffffffffff1916641e140e06001790553480156200009257600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350601580546001600160a01b031990811673814f28c01cb2e281a5d9c7bec1b988406eeed6e81790915560168054821673cd11d4f84e6dd5cf256e595557ebd482399087ec1790556017805490911661dead17905567016345785d8a0000600260006200013d3390565b6001600160a01b03166001600160a01b0316815260200190815260200160002081905550600160056000620001776200026960201b60201c565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790553081526005909352818320805485166001908117909155601554821684528284208054861682179055601654821684528284208054861682179055601754909116835291208054909216179055620001fa3390565b6001600160a01b03167381252e081f4335e3b766ad5c6c4038076a4449946001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef67016345785d8a00006040516200025b91815260200190565b60405180910390a362000278565b6000546001600160a01b031690565b6138d480620002886000396000f3fe6080604052600436106102e85760003560e01c80638a78044711610190578063b515566a116100dc578063e6f7ef4d11610095578063f34eb0b81161006f578063f34eb0b814610915578063f5648a4f14610935578063f817eef51461094a578063fa93f8831461096a57600080fd5b8063e6f7ef4d146108b5578063e99c9d09146108d5578063ea2f0b37146108f557600080fd5b8063b515566a146107e5578063bce4da7414610805578063c3c8cd8014610825578063c9567bf91461083a578063dd62ed3e1461084f578063e01af92c1461089557600080fd5b8063a53a513211610149578063afa4f3b211610123578063afa4f3b214610765578063b199993714610785578063b229b024146107a5578063b238ad0e146107c557600080fd5b8063a53a513214610705578063a6f0e57714610725578063a9059cbb1461074557600080fd5b80638a7804471461064a5780638aa001fc1461066a5780638da5cb5b1461068a5780639061d34c146106b257806392d66313146106d257806395d89b41146102f457600080fd5b80633e239e1a1161024f5780635d69d06c116102085780636fc3eaec116101e25780636fc3eaec146105ca57806370a08231146105df578063715018a61461061557806372ac24861461062a57600080fd5b80635d69d06c1461056a578063625e764c1461058a5780636f972cd2146105aa57600080fd5b80633e239e1a146104aa57806341a2ac70146104ca578063437823ec146104ea5780634614a4301461050a5780634ac1ad781461052a5780635932ead11461054a57600080fd5b806327a14fc2116102a157806327a14fc2146103e8578063296f0a0c146104085780632cb15c71146104285780633116e58314610448578063313ce56714610468578063357bf15c1461048a57600080fd5b806306fdde03146102f4578063095ea7b31461033157806318160ddd1461036157806323b872dd1461038657806324ddcd24146103a6578063273123b7146103c657600080fd5b366102ef57005b600080fd5b34801561030057600080fd5b506040805180820182526005815264445245414d60d81b602082015290516103289190613624565b60405180910390f35b34801561033d57600080fd5b5061035161034c366004613414565b61098a565b6040519015158152602001610328565b34801561036d57600080fd5b5067016345785d8a00005b604051908152602001610328565b34801561039257600080fd5b506103516103a13660046133d4565b6109a1565b3480156103b257600080fd5b506103516103c1366004613558565b610a0a565b3480156103d257600080fd5b506103e66103e1366004613364565b610c77565b005b3480156103f457600080fd5b506103e6610403366004613558565b610ccb565b34801561041457600080fd5b506103e6610423366004613364565b610cfa565b34801561043457600080fd5b506103e661044336600461359d565b610dd6565b34801561045457600080fd5b506103e6610463366004613506565b610e20565b34801561047457600080fd5b5060095b60405160ff9091168152602001610328565b34801561049657600080fd5b506103e66104a5366004613558565b610e68565b3480156104b657600080fd5b506104786104c5366004613558565b610ef4565b3480156104d657600080fd5b506103e66104e5366004613558565b610f18565b3480156104f657600080fd5b506103e6610505366004613364565b610f98565b34801561051657600080fd5b506103e6610525366004613506565b610fe6565b34801561053657600080fd5b50610478610545366004613558565b61102e565b34801561055657600080fd5b506103e6610565366004613506565b61104a565b34801561057657600080fd5b506103e6610585366004613506565b611092565b34801561059657600080fd5b506103e66105a5366004613558565b6110da565b3480156105b657600080fd5b506103e66105c5366004613558565b611166565b3480156105d657600080fd5b506103e66111f4565b3480156105eb57600080fd5b506103786105fa366004613364565b6001600160a01b031660009081526002602052604090205490565b34801561062157600080fd5b506103e6611221565b34801561063657600080fd5b506103e6610645366004613364565b611295565b34801561065657600080fd5b506103e6610665366004613364565b611373565b34801561067657600080fd5b50610478610685366004613558565b61144d565b34801561069657600080fd5b506000546040516001600160a01b039091168152602001610328565b3480156106be57600080fd5b506103e66106cd36600461359d565b61145a565b3480156106de57600080fd5b506106f26106ed366004613558565b61149a565b60405161ffff9091168152602001610328565b34801561071157600080fd5b506103e661072036600461359d565b61158a565b34801561073157600080fd5b5061035161074036600461353e565b6115d0565b34801561075157600080fd5b50610351610760366004613414565b61162f565b34801561077157600080fd5b506103e6610780366004613558565b61163c565b34801561079157600080fd5b506103786107a0366004613558565b611752565b3480156107b157600080fd5b506103e66107c036600461359d565b611797565b3480156107d157600080fd5b506104786107e03660046135b7565b6117e3565b3480156107f157600080fd5b506103e661080036600461343f565b6118a9565b34801561081157600080fd5b506103e6610820366004613558565b61194d565b34801561083157600080fd5b506103e66119d9565b34801561084657600080fd5b506103e6611a12565b34801561085b57600080fd5b5061037861086a36600461339c565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b3480156108a157600080fd5b506103e66108b0366004613506565b611de6565b3480156108c157600080fd5b506103e66108d0366004613558565b611e2e565b3480156108e157600080fd5b506103e66108f0366004613558565b611e5d565b34801561090157600080fd5b506103e6610910366004613364565b611e8c565b34801561092157600080fd5b506103e6610930366004613558565b611ed7565b34801561094157600080fd5b506103e6611f06565b34801561095657600080fd5b506103e661096536600461359d565b611feb565b34801561097657600080fd5b50610478610985366004613558565b612033565b6000610997338484612041565b5060015b92915050565b60006109ae848484612166565b610a0084336109fb85604051806060016040528060288152602001613877602891396001600160a01b038a16600090815260046020908152604080832033845290915290205491906127a3565b612041565b5060019392505050565b600080610a16836127dd565b60205460c082015191925060ff91821691161480610a45575060205460c082015160ff90811661010090920416145b15610a535750600092915050565b602054606082015160ff62010000909204821691161080610a875750602054606082015160ff630100000090920482169116115b15610a955750600092915050565b602054606082015160ff9081166201000090920416148015610acb5750602054608082015160ff64010000000090920482169116105b15610ad95750600092915050565b601954600160d01b900460ff1615610c5c57806020015160ff166001148015610b1a5750806040015160ff1660011480610b1a5750806040015160ff166012145b15610b285750600092915050565b806020015160ff166002148015610b465750806040015160ff16600f145b15610b545750600092915050565b806020015160ff166004148015610b725750806040015160ff166002145b15610b805750600092915050565b806020015160ff166005148015610b9e5750806040015160ff16601f145b15610bac5750600092915050565b806020015160ff166007148015610bca5750806040015160ff166005145b15610bd85750600092915050565b806020015160ff166009148015610bf65750806040015160ff166006145b15610c045750600092915050565b806020015160ff16600b148015610c225750806040015160ff166019145b15610c305750600092915050565b806020015160ff16600c148015610c4e5750806040015160ff166018145b15610c5c5750600092915050565b601954600160d81b900460ff16156109975750600092915050565b6000546001600160a01b03163314610caa5760405162461bcd60e51b8152600401610ca190613677565b60405180910390fd5b6001600160a01b03166000908152600660205260409020805460ff19169055565b6000546001600160a01b03163314610cf55760405162461bcd60e51b8152600401610ca190613677565b601e55565b6000546001600160a01b03163314610d245760405162461bcd60e51b8152600401610ca190613677565b6001600160a01b038116610d865760405162461bcd60e51b815260206004820152602360248201527f6c697175696469747957616c6c657420616464726573732063616e6e6f74206260448201526206520360ec1b6064820152608401610ca1565b601780546001600160a01b03908116600090815260056020526040808220805460ff1990811690915584546001600160a01b03191695909316948517909355928352912080549091166001179055565b6000546001600160a01b03163314610e005760405162461bcd60e51b8152600401610ca190613677565b6020805460ff90921663010000000263ff00000019909216919091179055565b6000546001600160a01b03163314610e4a5760405162461bcd60e51b8152600401610ca190613677565b60198054911515600160c81b0260ff60c81b19909216919091179055565b6000546001600160a01b03163314610e925760405162461bcd60e51b8152600401610ca190613677565b600a811115610eef5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920466565206d757374206265206c657373207468616e2060448201526231302560e81b6064820152608401610ca1565b600c55565b60006018603c610f048185613734565b610f0e9190613734565b61099b91906137fd565b6000546001600160a01b03163314610f425760405162461bcd60e51b8152600401610ca190613677565b600a811115610f935760405162461bcd60e51b815260206004820181905260248201527f52657761726420466565206d757374206265206c657373207468616e203130256044820152606401610ca1565b601055565b6000546001600160a01b03163314610fc25760405162461bcd60e51b8152600401610ca190613677565b6001600160a01b03166000908152600560205260409020805460ff19166001179055565b6000546001600160a01b031633146110105760405162461bcd60e51b8152600401610ca190613677565b60198054911515600160d81b0260ff60d81b19909216919091179055565b6000600761103f6201518084613734565b610f0e90600461371c565b6000546001600160a01b031633146110745760405162461bcd60e51b8152600401610ca190613677565b60198054911515600160c01b0260ff60c01b19909216919091179055565b6000546001600160a01b031633146110bc5760405162461bcd60e51b8152600401610ca190613677565b60198054911515600160d01b0260ff60d01b19909216919091179055565b6000546001600160a01b031633146111045760405162461bcd60e51b8152600401610ca190613677565b600a8111156111615760405162461bcd60e51b815260206004820152602360248201527f4d61726b6574696e6720466565206d757374206265206c657373207468616e2060448201526231302560e81b6064820152608401610ca1565b600855565b6000546001600160a01b031633146111905760405162461bcd60e51b8152600401610ca190613677565b600a8111156111ef5760405162461bcd60e51b815260206004820152602560248201527f446576656c6f706d656e7420466565206d757374206265206c657373207468616044820152646e2031302560d81b6064820152608401610ca1565b600a55565b6015546001600160a01b0316336001600160a01b03161461121457600080fd5b4761121e816129c5565b50565b6000546001600160a01b0316331461124b5760405162461bcd60e51b8152600401610ca190613677565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146112bf5760405162461bcd60e51b8152600401610ca190613677565b6001600160a01b0381166113235760405162461bcd60e51b815260206004820152602560248201527f646576656c6f706d656e7457616c6c657420616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610ca1565b601680546001600160a01b03908116600090815260056020526040808220805460ff1990811690915584546001600160a01b03191695909316948517909355928352912080549091166001179055565b6000546001600160a01b0316331461139d5760405162461bcd60e51b8152600401610ca190613677565b6001600160a01b0381166113fd5760405162461bcd60e51b815260206004820152602160248201527f70726f6a65637457616c6c657420616464726573732063616e6e6f74206265206044820152600360fc1b6064820152608401610ca1565b601580546001600160a01b03908116600090815260056020526040808220805460ff1990811690915584546001600160a01b03191695909316948517909355928352912080549091166001179055565b600061099b603c836137fd565b6000546001600160a01b031633146114845760405162461bcd60e51b8152600401610ca190613677565b6020805460ff191660ff92909216919091179055565b60008080806114ad6301e1338086613734565b6114b9906107b261371c565b91506114c66107b2611752565b6114d38361ffff16611752565b6114dd919061378a565b90506114ed816301e28500613748565b6114f7908461371c565b9250806115066107b284613767565b61ffff16611514919061378a565b611522906301e13380613748565b61152c908461371c565b92505b8483111561158257611545610740600184613767565b1561155f576115586301e285008461378a565b9250611570565b61156d6301e133808461378a565b92505b61157b600183613767565b915061152f565b509392505050565b6000546001600160a01b031633146115b45760405162461bcd60e51b8152600401610ca190613677565b6020805460ff9092166101000261ff0019909216919091179055565b60006115dd6004836137dc565b61ffff16156115ee57506000919050565b6115f96064836137dc565b61ffff161561160a57506001919050565b611616610190836137dc565b61ffff161561162757506000919050565b506001919050565b6000610997338484612166565b6000546001600160a01b031633146116665760405162461bcd60e51b8152600401610ca190613677565b64e8d4a510008110156116d95760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610ca1565b6611c37937e0800081111561174d5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610ca1565b601f55565b600061175f60018361378a565b915061176d61019083613734565b611778606484613734565b611783600485613734565b61178d919061378a565b61099b919061371c565b6000546001600160a01b031633146117c15760405162461bcd60e51b8152600401610ca190613677565b6020805460ff9092166401000000000264ff0000000019909216919091179055565b60008260ff16600114806117fa57508260ff166003145b8061180857508260ff166005145b8061181657508260ff166007145b8061182457508260ff166008145b8061183257508260ff16600a145b8061184057508260ff16600c145b1561184d5750601f61099b565b8260ff166004148061186257508260ff166006145b8061187057508260ff166009145b8061187e57508260ff16600b145b1561188b5750601e61099b565b611894826115d0565b156118a15750601d61099b565b50601c61099b565b6000546001600160a01b031633146118d35760405162461bcd60e51b8152600401610ca190613677565b60005b81518110156119495760016006600084848151811061190557634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580611941816137a1565b9150506118d6565b5050565b6000546001600160a01b031633146119775760405162461bcd60e51b8152600401610ca190613677565b600a8111156119d45760405162461bcd60e51b8152602060048201526024808201527f466f756e646174696f6e20466565206d757374206265206c657373207468616e6044820152632031302560e01b6064820152608401610ca1565b600e55565b6015546001600160a01b0316336001600160a01b0316146119f957600080fd5b3060009081526002602052604090205461121e81612a4a565b6000546001600160a01b03163314611a3c5760405162461bcd60e51b8152600401610ca190613677565b601954600160a01b900460ff1615611a965760405162461bcd60e51b815260206004820152601760248201527f74726164696e6720697320616c7265616479206f70656e0000000000000000006044820152606401610ca1565b601880546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d908117909155611ad2308267016345785d8a0000612041565b806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611b0b57600080fd5b505afa158015611b1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b439190613380565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611b8b57600080fd5b505afa158015611b9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bc39190613380565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015611c0b57600080fd5b505af1158015611c1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c439190613380565b601980546001600160a01b039283166001600160a01b03199091161790556018541663f305d7194730611c8b816001600160a01b031660009081526002602052604090205490565b600080611ca06000546001600160a01b031690565b426040518863ffffffff1660e01b8152600401611cc2969594939291906135e9565b6060604051808303818588803b158015611cdb57600080fd5b505af1158015611cef573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611d149190613570565b505060198054655af3107a4000601c819055601d55660110d9316ec000601e55652d79883d2000601f5566ffffffff0000ff60a01b198116660101010100000160a01b1790915543601a5560185460405163095ea7b360e01b81526001600160a01b03918216600482015260001960248201529116915063095ea7b390604401602060405180830381600087803b158015611dae57600080fd5b505af1158015611dc2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119499190613522565b6000546001600160a01b03163314611e105760405162461bcd60e51b8152600401610ca190613677565b60198054911515600160b81b0260ff60b81b19909216919091179055565b6000546001600160a01b03163314611e585760405162461bcd60e51b8152600401610ca190613677565b601b55565b6000546001600160a01b03163314611e875760405162461bcd60e51b8152600401610ca190613677565b601d55565b6000546001600160a01b03163314611eb65760405162461bcd60e51b8152600401610ca190613677565b6001600160a01b03166000908152600560205260409020805460ff19169055565b6000546001600160a01b03163314611f015760405162461bcd60e51b8152600401610ca190613677565b601c55565b6000546001600160a01b03163314611f305760405162461bcd60e51b8152600401610ca190613677565b601954600160a01b900460ff1615611f9e5760405162461bcd60e51b815260206004820152602b60248201527f43616e206f6e6c792077697468647261772069662074726164696e672068617360448201526a1b89dd081cdd185c9d195960aa1b6064820152608401610ca1565b604051600090339047908381818185875af1925050503d8060008114611fe0576040519150601f19603f3d011682016040523d82523d6000602084013e611fe5565b606091505b50505050565b6000546001600160a01b031633146120155760405162461bcd60e51b8152600401610ca190613677565b6020805460ff909216620100000262ff000019909216919091179055565b6000603c610f0e8184613734565b6001600160a01b0383166120a35760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610ca1565b6001600160a01b0382166121045760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610ca1565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166121ca5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610ca1565b6001600160a01b03821661222c5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610ca1565b6000811161228e5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610ca1565b6000806122a36000546001600160a01b031690565b6001600160a01b0316856001600160a01b0316141580156122d257506000546001600160a01b03858116911614155b80156122e657506001600160a01b03841615155b80156122fd57506001600160a01b03841661dead14155b80156123135750601954600160a81b900460ff16155b1561267d576001600160a01b03851660009081526006602052604090205460ff1615801561235a57506001600160a01b03841660009081526006602052604090205460ff16155b61236357600080fd5b601954600160c81b900460ff16801561239557506001600160a01b03851660009081526005602052604090205460ff16155b80156123ba57506001600160a01b03841660009081526005602052604090205460ff16155b15612408576123c842610a0a565b6124085760405162461bcd60e51b815260206004820152601160248201527026b0b935b2ba1034b99031b637b9b2b21760791b6044820152606401610ca1565b601954600192506001600160a01b03868116911614801561243757506018546001600160a01b03858116911614155b801561245c57506001600160a01b03841660009081526005602052604090205460ff16155b80156124715750601954600160c01b900460ff165b156125aa57601c548311156124da5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178426044820152683abca0b6b7bab73a1760b91b6064820152608401610ca1565b601e54836124fd866001600160a01b031660009081526002602052604090205490565b612507919061371c565b11156125615760405162461bcd60e51b8152602060048201526024808201527f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f6044820152633ab73a1760e11b6064820152608401610ca1565b6001600160a01b038416600090815260076020526040902054421161258557600080fd5b61259042601e61371c565b6001600160a01b0385166000908152600760205260409020555b6019546001600160a01b0385811691161480156125d557506018546001600160a01b03868116911614155b80156125fa57506001600160a01b03851660009081526005602052604090205460ff16155b801561260f5750601954600160c01b900460ff165b1561267d57601d548311156126795760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785360448201526932b63620b6b7bab73a1760b11b6064820152608401610ca1565b5060015b6001600160a01b03851660009081526005602052604090205460ff16806126bc57506001600160a01b03841660009081526005602052604090205460ff165b156126c657600091505b3060009081526002602052604081205490506000601f54821180156126e85750825b90508080156127005750601954600160b81b900460ff165b80156127165750601954600160a81b900460ff16155b801561273b57506001600160a01b03871660009081526005602052604090205460ff16155b801561276057506001600160a01b03861660009081526005602052604090205460ff16155b1561278e576019805460ff60a81b1916600160a81b179055612780612bef565b6019805460ff60a81b191690555b61279a87878787612e2f565b50505050505050565b600081848411156127c75760405162461bcd60e51b8152600401610ca19190613624565b5060006127d4848661378a565b95945050505050565b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c081018290529080806128218561149a565b61ffff1684526128326107b2611752565b84516128419061ffff16611752565b61284b919061378a565b915061285b826301e28500613748565b612865908461371c565b9250816107b2856000015161287a9190613767565b61ffff16612888919061378a565b612896906301e13380613748565b6128a0908461371c565b92506000600191505b600c8260ff1611612911576128c28286600001516117e3565b6128d29060ff1662015180613748565b9050856128df858361371c565b11156128f35760ff82166020860152612911565b6128fd818561371c565b935081612909816137bc565b9250506128a9565b600191505b612928856020015186600001516117e3565b60ff168260ff16116129775785612942856201518061371c565b11156129565760ff82166040860152612977565b612963620151808561371c565b93508161296f816137bc565b925050612916565b61298086610ef4565b60ff16606086015261299186612033565b60ff1660808601526129a28661144d565b60ff1660a08601526129b38661102e565b60ff1660c08601525092949350505050565b6015546001600160a01b03166108fc6129df836002612e81565b6040518115909202916000818181858888f19350505050158015612a07573d6000803e3d6000fd5b506016546001600160a01b03166108fc612a22836002612e81565b6040518115909202916000818181858888f19350505050158015611949573d6000803e3d6000fd5b6019805460ff60b01b1916600160b01b1790556040805160028082526060820183526000926020830190803683370190505090503081600081518110612aa057634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152601854604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015612af457600080fd5b505afa158015612b08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b2c9190613380565b81600181518110612b4d57634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152601854612b739130911684612041565b60185460405163791ac94760e01b81526001600160a01b039091169063791ac94790612bac9085906000908690309042906004016136ac565b600060405180830381600087803b158015612bc657600080fd5b505af1158015612bda573d6000803e3d6000fd5b50506019805460ff60b01b1916905550505050565b3060009081526002602052604081205490506000601354601254601454612c16919061371c565b612c20919061371c565b90506000821580612c2f575081155b15612c3957505050565b601f54612c4790600a613748565b831115612c5f57601f54612c5c90600a613748565b92505b600060028360145486612c729190613748565b612c7c9190613734565b612c869190613734565b90506000612c948583612eca565b905047612ca082612a4a565b6000612cac4783612eca565b90506000612ccf87612cc960125485612f0c90919063ffffffff16565b90612e81565b90506000612cec88612cc960135486612f0c90919063ffffffff16565b9050600081612cfb848661378a565b612d05919061378a565b60006014819055601281905560138190556016546040519293506001600160a01b031691849181818185875af1925050503d8060008114612d62576040519150601f19603f3d011682016040523d82523d6000602084013e612d67565b606091505b50909850508615801590612d7b5750600081115b15612dce57612d8a8782612f8b565b601454604080518881526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b6015546040516001600160a01b03909116904790600081818185875af1925050503d8060008114612e1b576040519150601f19603f3d011682016040523d82523d6000602084013e612e20565b606091505b50505050505050505050505050565b80612e4157612e3c61303c565b612e4e565b612e4b84836130ae565b91505b612e598484846131c0565b80611fe557611fe5600954600855600b54600a55600d54600c55600f54600e55601154601055565b6000612ec383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613266565b9392505050565b6000612ec383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506127a3565b600082612f1b5750600061099b565b6000612f278385613748565b905082612f348583613734565b14612ec35760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610ca1565b601854612fa39030906001600160a01b031684612041565b60185460175460405163f305d71960e01b81526001600160a01b039283169263f305d719928592612fe392309289926000928392169042906004016135e9565b6060604051808303818588803b158015612ffc57600080fd5b505af1158015613010573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906130359190613570565b5050505050565b60085415801561304c5750600a54155b80156130585750600c54155b80156130645750600e54155b80156130705750601054155b1561307757565b60088054600955600a8054600b55600c8054600d55600e8054600f5560108054601155600094859055928490559083905582905555565b600080600043601b54601a546130c4919061371c565b106130d5575060639050605c6130e5565b6130dd613294565b9150600c5490505b60006130f66064612cc98786612f0c565b905082600e5460105460085461310c919061371c565b613116919061371c565b6131209083613748565b61312a9190613734565b6012600082825461313b919061371c565b9091555050600a54839061314f9083613748565b6131599190613734565b6013600082825461316a919061371c565b9091555083905061317b8383613748565b6131859190613734565b60146000828254613196919061371c565b909155505080156131ac576131ac8630836131c0565b6131b6818661378a565b9695505050505050565b6001600160a01b0383166000908152600260205260409020546131e39082612eca565b6001600160a01b03808516600090815260026020526040808220939093559084168152205461321290826132d2565b6001600160a01b0380841660008181526002602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906121599085815260200190565b600081836132875760405162461bcd60e51b8152600401610ca19190613624565b5060006127d48486613734565b6000601054600e54600c54600a546008546132af919061371c565b6132b9919061371c565b6132c3919061371c565b6132cd919061371c565b905090565b6000806132df838561371c565b905083811015612ec35760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610ca1565b803561333c81613853565b919050565b803561ffff8116811461333c57600080fd5b803560ff8116811461333c57600080fd5b600060208284031215613375578081fd5b8135612ec381613853565b600060208284031215613391578081fd5b8151612ec381613853565b600080604083850312156133ae578081fd5b82356133b981613853565b915060208301356133c981613853565b809150509250929050565b6000806000606084860312156133e8578081fd5b83356133f381613853565b9250602084013561340381613853565b929592945050506040919091013590565b60008060408385031215613426578182fd5b823561343181613853565b946020939093013593505050565b60006020808385031215613451578182fd5b823567ffffffffffffffff80821115613468578384fd5b818501915085601f83011261347b578384fd5b81358181111561348d5761348d61383d565b8060051b604051601f19603f830116810181811085821117156134b2576134b261383d565b604052828152858101935084860182860187018a10156134d0578788fd5b8795505b838610156134f9576134e581613331565b8552600195909501949386019386016134d4565b5098975050505050505050565b600060208284031215613517578081fd5b8135612ec381613868565b600060208284031215613533578081fd5b8151612ec381613868565b60006020828403121561354f578081fd5b612ec382613341565b600060208284031215613569578081fd5b5035919050565b600080600060608486031215613584578283fd5b8351925060208401519150604084015190509250925092565b6000602082840312156135ae578081fd5b612ec382613353565b600080604083850312156135c9578182fd5b6135d283613353565b91506135e060208401613341565b90509250929050565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b6000602080835283518082850152825b8181101561365057858101830151858201604001528201613634565b818111156136615783604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b818110156136fb5784516001600160a01b0316835293830193918301916001016136d6565b50506001600160a01b03969096166060850152505050608001529392505050565b6000821982111561372f5761372f613811565b500190565b60008261374357613743613827565b500490565b600081600019048311821515161561376257613762613811565b500290565b600061ffff8381169083168181101561378257613782613811565b039392505050565b60008282101561379c5761379c613811565b500390565b60006000198214156137b5576137b5613811565b5060010190565b600060ff821660ff8114156137d3576137d3613811565b60010192915050565b600061ffff808416806137f1576137f1613827565b92169190910692915050565b60008261380c5761380c613827565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461121e57600080fd5b801515811461121e57600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220e664a901c9773b12392c76b932af1cc0c3fe1f02276e6b9063304f680123760864736f6c63430008040033

Deployed Bytecode

0x6080604052600436106102e85760003560e01c80638a78044711610190578063b515566a116100dc578063e6f7ef4d11610095578063f34eb0b81161006f578063f34eb0b814610915578063f5648a4f14610935578063f817eef51461094a578063fa93f8831461096a57600080fd5b8063e6f7ef4d146108b5578063e99c9d09146108d5578063ea2f0b37146108f557600080fd5b8063b515566a146107e5578063bce4da7414610805578063c3c8cd8014610825578063c9567bf91461083a578063dd62ed3e1461084f578063e01af92c1461089557600080fd5b8063a53a513211610149578063afa4f3b211610123578063afa4f3b214610765578063b199993714610785578063b229b024146107a5578063b238ad0e146107c557600080fd5b8063a53a513214610705578063a6f0e57714610725578063a9059cbb1461074557600080fd5b80638a7804471461064a5780638aa001fc1461066a5780638da5cb5b1461068a5780639061d34c146106b257806392d66313146106d257806395d89b41146102f457600080fd5b80633e239e1a1161024f5780635d69d06c116102085780636fc3eaec116101e25780636fc3eaec146105ca57806370a08231146105df578063715018a61461061557806372ac24861461062a57600080fd5b80635d69d06c1461056a578063625e764c1461058a5780636f972cd2146105aa57600080fd5b80633e239e1a146104aa57806341a2ac70146104ca578063437823ec146104ea5780634614a4301461050a5780634ac1ad781461052a5780635932ead11461054a57600080fd5b806327a14fc2116102a157806327a14fc2146103e8578063296f0a0c146104085780632cb15c71146104285780633116e58314610448578063313ce56714610468578063357bf15c1461048a57600080fd5b806306fdde03146102f4578063095ea7b31461033157806318160ddd1461036157806323b872dd1461038657806324ddcd24146103a6578063273123b7146103c657600080fd5b366102ef57005b600080fd5b34801561030057600080fd5b506040805180820182526005815264445245414d60d81b602082015290516103289190613624565b60405180910390f35b34801561033d57600080fd5b5061035161034c366004613414565b61098a565b6040519015158152602001610328565b34801561036d57600080fd5b5067016345785d8a00005b604051908152602001610328565b34801561039257600080fd5b506103516103a13660046133d4565b6109a1565b3480156103b257600080fd5b506103516103c1366004613558565b610a0a565b3480156103d257600080fd5b506103e66103e1366004613364565b610c77565b005b3480156103f457600080fd5b506103e6610403366004613558565b610ccb565b34801561041457600080fd5b506103e6610423366004613364565b610cfa565b34801561043457600080fd5b506103e661044336600461359d565b610dd6565b34801561045457600080fd5b506103e6610463366004613506565b610e20565b34801561047457600080fd5b5060095b60405160ff9091168152602001610328565b34801561049657600080fd5b506103e66104a5366004613558565b610e68565b3480156104b657600080fd5b506104786104c5366004613558565b610ef4565b3480156104d657600080fd5b506103e66104e5366004613558565b610f18565b3480156104f657600080fd5b506103e6610505366004613364565b610f98565b34801561051657600080fd5b506103e6610525366004613506565b610fe6565b34801561053657600080fd5b50610478610545366004613558565b61102e565b34801561055657600080fd5b506103e6610565366004613506565b61104a565b34801561057657600080fd5b506103e6610585366004613506565b611092565b34801561059657600080fd5b506103e66105a5366004613558565b6110da565b3480156105b657600080fd5b506103e66105c5366004613558565b611166565b3480156105d657600080fd5b506103e66111f4565b3480156105eb57600080fd5b506103786105fa366004613364565b6001600160a01b031660009081526002602052604090205490565b34801561062157600080fd5b506103e6611221565b34801561063657600080fd5b506103e6610645366004613364565b611295565b34801561065657600080fd5b506103e6610665366004613364565b611373565b34801561067657600080fd5b50610478610685366004613558565b61144d565b34801561069657600080fd5b506000546040516001600160a01b039091168152602001610328565b3480156106be57600080fd5b506103e66106cd36600461359d565b61145a565b3480156106de57600080fd5b506106f26106ed366004613558565b61149a565b60405161ffff9091168152602001610328565b34801561071157600080fd5b506103e661072036600461359d565b61158a565b34801561073157600080fd5b5061035161074036600461353e565b6115d0565b34801561075157600080fd5b50610351610760366004613414565b61162f565b34801561077157600080fd5b506103e6610780366004613558565b61163c565b34801561079157600080fd5b506103786107a0366004613558565b611752565b3480156107b157600080fd5b506103e66107c036600461359d565b611797565b3480156107d157600080fd5b506104786107e03660046135b7565b6117e3565b3480156107f157600080fd5b506103e661080036600461343f565b6118a9565b34801561081157600080fd5b506103e6610820366004613558565b61194d565b34801561083157600080fd5b506103e66119d9565b34801561084657600080fd5b506103e6611a12565b34801561085b57600080fd5b5061037861086a36600461339c565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b3480156108a157600080fd5b506103e66108b0366004613506565b611de6565b3480156108c157600080fd5b506103e66108d0366004613558565b611e2e565b3480156108e157600080fd5b506103e66108f0366004613558565b611e5d565b34801561090157600080fd5b506103e6610910366004613364565b611e8c565b34801561092157600080fd5b506103e6610930366004613558565b611ed7565b34801561094157600080fd5b506103e6611f06565b34801561095657600080fd5b506103e661096536600461359d565b611feb565b34801561097657600080fd5b50610478610985366004613558565b612033565b6000610997338484612041565b5060015b92915050565b60006109ae848484612166565b610a0084336109fb85604051806060016040528060288152602001613877602891396001600160a01b038a16600090815260046020908152604080832033845290915290205491906127a3565b612041565b5060019392505050565b600080610a16836127dd565b60205460c082015191925060ff91821691161480610a45575060205460c082015160ff90811661010090920416145b15610a535750600092915050565b602054606082015160ff62010000909204821691161080610a875750602054606082015160ff630100000090920482169116115b15610a955750600092915050565b602054606082015160ff9081166201000090920416148015610acb5750602054608082015160ff64010000000090920482169116105b15610ad95750600092915050565b601954600160d01b900460ff1615610c5c57806020015160ff166001148015610b1a5750806040015160ff1660011480610b1a5750806040015160ff166012145b15610b285750600092915050565b806020015160ff166002148015610b465750806040015160ff16600f145b15610b545750600092915050565b806020015160ff166004148015610b725750806040015160ff166002145b15610b805750600092915050565b806020015160ff166005148015610b9e5750806040015160ff16601f145b15610bac5750600092915050565b806020015160ff166007148015610bca5750806040015160ff166005145b15610bd85750600092915050565b806020015160ff166009148015610bf65750806040015160ff166006145b15610c045750600092915050565b806020015160ff16600b148015610c225750806040015160ff166019145b15610c305750600092915050565b806020015160ff16600c148015610c4e5750806040015160ff166018145b15610c5c5750600092915050565b601954600160d81b900460ff16156109975750600092915050565b6000546001600160a01b03163314610caa5760405162461bcd60e51b8152600401610ca190613677565b60405180910390fd5b6001600160a01b03166000908152600660205260409020805460ff19169055565b6000546001600160a01b03163314610cf55760405162461bcd60e51b8152600401610ca190613677565b601e55565b6000546001600160a01b03163314610d245760405162461bcd60e51b8152600401610ca190613677565b6001600160a01b038116610d865760405162461bcd60e51b815260206004820152602360248201527f6c697175696469747957616c6c657420616464726573732063616e6e6f74206260448201526206520360ec1b6064820152608401610ca1565b601780546001600160a01b03908116600090815260056020526040808220805460ff1990811690915584546001600160a01b03191695909316948517909355928352912080549091166001179055565b6000546001600160a01b03163314610e005760405162461bcd60e51b8152600401610ca190613677565b6020805460ff90921663010000000263ff00000019909216919091179055565b6000546001600160a01b03163314610e4a5760405162461bcd60e51b8152600401610ca190613677565b60198054911515600160c81b0260ff60c81b19909216919091179055565b6000546001600160a01b03163314610e925760405162461bcd60e51b8152600401610ca190613677565b600a811115610eef5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920466565206d757374206265206c657373207468616e2060448201526231302560e81b6064820152608401610ca1565b600c55565b60006018603c610f048185613734565b610f0e9190613734565b61099b91906137fd565b6000546001600160a01b03163314610f425760405162461bcd60e51b8152600401610ca190613677565b600a811115610f935760405162461bcd60e51b815260206004820181905260248201527f52657761726420466565206d757374206265206c657373207468616e203130256044820152606401610ca1565b601055565b6000546001600160a01b03163314610fc25760405162461bcd60e51b8152600401610ca190613677565b6001600160a01b03166000908152600560205260409020805460ff19166001179055565b6000546001600160a01b031633146110105760405162461bcd60e51b8152600401610ca190613677565b60198054911515600160d81b0260ff60d81b19909216919091179055565b6000600761103f6201518084613734565b610f0e90600461371c565b6000546001600160a01b031633146110745760405162461bcd60e51b8152600401610ca190613677565b60198054911515600160c01b0260ff60c01b19909216919091179055565b6000546001600160a01b031633146110bc5760405162461bcd60e51b8152600401610ca190613677565b60198054911515600160d01b0260ff60d01b19909216919091179055565b6000546001600160a01b031633146111045760405162461bcd60e51b8152600401610ca190613677565b600a8111156111615760405162461bcd60e51b815260206004820152602360248201527f4d61726b6574696e6720466565206d757374206265206c657373207468616e2060448201526231302560e81b6064820152608401610ca1565b600855565b6000546001600160a01b031633146111905760405162461bcd60e51b8152600401610ca190613677565b600a8111156111ef5760405162461bcd60e51b815260206004820152602560248201527f446576656c6f706d656e7420466565206d757374206265206c657373207468616044820152646e2031302560d81b6064820152608401610ca1565b600a55565b6015546001600160a01b0316336001600160a01b03161461121457600080fd5b4761121e816129c5565b50565b6000546001600160a01b0316331461124b5760405162461bcd60e51b8152600401610ca190613677565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146112bf5760405162461bcd60e51b8152600401610ca190613677565b6001600160a01b0381166113235760405162461bcd60e51b815260206004820152602560248201527f646576656c6f706d656e7457616c6c657420616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610ca1565b601680546001600160a01b03908116600090815260056020526040808220805460ff1990811690915584546001600160a01b03191695909316948517909355928352912080549091166001179055565b6000546001600160a01b0316331461139d5760405162461bcd60e51b8152600401610ca190613677565b6001600160a01b0381166113fd5760405162461bcd60e51b815260206004820152602160248201527f70726f6a65637457616c6c657420616464726573732063616e6e6f74206265206044820152600360fc1b6064820152608401610ca1565b601580546001600160a01b03908116600090815260056020526040808220805460ff1990811690915584546001600160a01b03191695909316948517909355928352912080549091166001179055565b600061099b603c836137fd565b6000546001600160a01b031633146114845760405162461bcd60e51b8152600401610ca190613677565b6020805460ff191660ff92909216919091179055565b60008080806114ad6301e1338086613734565b6114b9906107b261371c565b91506114c66107b2611752565b6114d38361ffff16611752565b6114dd919061378a565b90506114ed816301e28500613748565b6114f7908461371c565b9250806115066107b284613767565b61ffff16611514919061378a565b611522906301e13380613748565b61152c908461371c565b92505b8483111561158257611545610740600184613767565b1561155f576115586301e285008461378a565b9250611570565b61156d6301e133808461378a565b92505b61157b600183613767565b915061152f565b509392505050565b6000546001600160a01b031633146115b45760405162461bcd60e51b8152600401610ca190613677565b6020805460ff9092166101000261ff0019909216919091179055565b60006115dd6004836137dc565b61ffff16156115ee57506000919050565b6115f96064836137dc565b61ffff161561160a57506001919050565b611616610190836137dc565b61ffff161561162757506000919050565b506001919050565b6000610997338484612166565b6000546001600160a01b031633146116665760405162461bcd60e51b8152600401610ca190613677565b64e8d4a510008110156116d95760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610ca1565b6611c37937e0800081111561174d5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610ca1565b601f55565b600061175f60018361378a565b915061176d61019083613734565b611778606484613734565b611783600485613734565b61178d919061378a565b61099b919061371c565b6000546001600160a01b031633146117c15760405162461bcd60e51b8152600401610ca190613677565b6020805460ff9092166401000000000264ff0000000019909216919091179055565b60008260ff16600114806117fa57508260ff166003145b8061180857508260ff166005145b8061181657508260ff166007145b8061182457508260ff166008145b8061183257508260ff16600a145b8061184057508260ff16600c145b1561184d5750601f61099b565b8260ff166004148061186257508260ff166006145b8061187057508260ff166009145b8061187e57508260ff16600b145b1561188b5750601e61099b565b611894826115d0565b156118a15750601d61099b565b50601c61099b565b6000546001600160a01b031633146118d35760405162461bcd60e51b8152600401610ca190613677565b60005b81518110156119495760016006600084848151811061190557634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580611941816137a1565b9150506118d6565b5050565b6000546001600160a01b031633146119775760405162461bcd60e51b8152600401610ca190613677565b600a8111156119d45760405162461bcd60e51b8152602060048201526024808201527f466f756e646174696f6e20466565206d757374206265206c657373207468616e6044820152632031302560e01b6064820152608401610ca1565b600e55565b6015546001600160a01b0316336001600160a01b0316146119f957600080fd5b3060009081526002602052604090205461121e81612a4a565b6000546001600160a01b03163314611a3c5760405162461bcd60e51b8152600401610ca190613677565b601954600160a01b900460ff1615611a965760405162461bcd60e51b815260206004820152601760248201527f74726164696e6720697320616c7265616479206f70656e0000000000000000006044820152606401610ca1565b601880546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d908117909155611ad2308267016345785d8a0000612041565b806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611b0b57600080fd5b505afa158015611b1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b439190613380565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611b8b57600080fd5b505afa158015611b9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bc39190613380565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015611c0b57600080fd5b505af1158015611c1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c439190613380565b601980546001600160a01b039283166001600160a01b03199091161790556018541663f305d7194730611c8b816001600160a01b031660009081526002602052604090205490565b600080611ca06000546001600160a01b031690565b426040518863ffffffff1660e01b8152600401611cc2969594939291906135e9565b6060604051808303818588803b158015611cdb57600080fd5b505af1158015611cef573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611d149190613570565b505060198054655af3107a4000601c819055601d55660110d9316ec000601e55652d79883d2000601f5566ffffffff0000ff60a01b198116660101010100000160a01b1790915543601a5560185460405163095ea7b360e01b81526001600160a01b03918216600482015260001960248201529116915063095ea7b390604401602060405180830381600087803b158015611dae57600080fd5b505af1158015611dc2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119499190613522565b6000546001600160a01b03163314611e105760405162461bcd60e51b8152600401610ca190613677565b60198054911515600160b81b0260ff60b81b19909216919091179055565b6000546001600160a01b03163314611e585760405162461bcd60e51b8152600401610ca190613677565b601b55565b6000546001600160a01b03163314611e875760405162461bcd60e51b8152600401610ca190613677565b601d55565b6000546001600160a01b03163314611eb65760405162461bcd60e51b8152600401610ca190613677565b6001600160a01b03166000908152600560205260409020805460ff19169055565b6000546001600160a01b03163314611f015760405162461bcd60e51b8152600401610ca190613677565b601c55565b6000546001600160a01b03163314611f305760405162461bcd60e51b8152600401610ca190613677565b601954600160a01b900460ff1615611f9e5760405162461bcd60e51b815260206004820152602b60248201527f43616e206f6e6c792077697468647261772069662074726164696e672068617360448201526a1b89dd081cdd185c9d195960aa1b6064820152608401610ca1565b604051600090339047908381818185875af1925050503d8060008114611fe0576040519150601f19603f3d011682016040523d82523d6000602084013e611fe5565b606091505b50505050565b6000546001600160a01b031633146120155760405162461bcd60e51b8152600401610ca190613677565b6020805460ff909216620100000262ff000019909216919091179055565b6000603c610f0e8184613734565b6001600160a01b0383166120a35760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610ca1565b6001600160a01b0382166121045760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610ca1565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166121ca5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610ca1565b6001600160a01b03821661222c5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610ca1565b6000811161228e5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610ca1565b6000806122a36000546001600160a01b031690565b6001600160a01b0316856001600160a01b0316141580156122d257506000546001600160a01b03858116911614155b80156122e657506001600160a01b03841615155b80156122fd57506001600160a01b03841661dead14155b80156123135750601954600160a81b900460ff16155b1561267d576001600160a01b03851660009081526006602052604090205460ff1615801561235a57506001600160a01b03841660009081526006602052604090205460ff16155b61236357600080fd5b601954600160c81b900460ff16801561239557506001600160a01b03851660009081526005602052604090205460ff16155b80156123ba57506001600160a01b03841660009081526005602052604090205460ff16155b15612408576123c842610a0a565b6124085760405162461bcd60e51b815260206004820152601160248201527026b0b935b2ba1034b99031b637b9b2b21760791b6044820152606401610ca1565b601954600192506001600160a01b03868116911614801561243757506018546001600160a01b03858116911614155b801561245c57506001600160a01b03841660009081526005602052604090205460ff16155b80156124715750601954600160c01b900460ff165b156125aa57601c548311156124da5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178426044820152683abca0b6b7bab73a1760b91b6064820152608401610ca1565b601e54836124fd866001600160a01b031660009081526002602052604090205490565b612507919061371c565b11156125615760405162461bcd60e51b8152602060048201526024808201527f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f6044820152633ab73a1760e11b6064820152608401610ca1565b6001600160a01b038416600090815260076020526040902054421161258557600080fd5b61259042601e61371c565b6001600160a01b0385166000908152600760205260409020555b6019546001600160a01b0385811691161480156125d557506018546001600160a01b03868116911614155b80156125fa57506001600160a01b03851660009081526005602052604090205460ff16155b801561260f5750601954600160c01b900460ff165b1561267d57601d548311156126795760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785360448201526932b63620b6b7bab73a1760b11b6064820152608401610ca1565b5060015b6001600160a01b03851660009081526005602052604090205460ff16806126bc57506001600160a01b03841660009081526005602052604090205460ff165b156126c657600091505b3060009081526002602052604081205490506000601f54821180156126e85750825b90508080156127005750601954600160b81b900460ff165b80156127165750601954600160a81b900460ff16155b801561273b57506001600160a01b03871660009081526005602052604090205460ff16155b801561276057506001600160a01b03861660009081526005602052604090205460ff16155b1561278e576019805460ff60a81b1916600160a81b179055612780612bef565b6019805460ff60a81b191690555b61279a87878787612e2f565b50505050505050565b600081848411156127c75760405162461bcd60e51b8152600401610ca19190613624565b5060006127d4848661378a565b95945050505050565b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c081018290529080806128218561149a565b61ffff1684526128326107b2611752565b84516128419061ffff16611752565b61284b919061378a565b915061285b826301e28500613748565b612865908461371c565b9250816107b2856000015161287a9190613767565b61ffff16612888919061378a565b612896906301e13380613748565b6128a0908461371c565b92506000600191505b600c8260ff1611612911576128c28286600001516117e3565b6128d29060ff1662015180613748565b9050856128df858361371c565b11156128f35760ff82166020860152612911565b6128fd818561371c565b935081612909816137bc565b9250506128a9565b600191505b612928856020015186600001516117e3565b60ff168260ff16116129775785612942856201518061371c565b11156129565760ff82166040860152612977565b612963620151808561371c565b93508161296f816137bc565b925050612916565b61298086610ef4565b60ff16606086015261299186612033565b60ff1660808601526129a28661144d565b60ff1660a08601526129b38661102e565b60ff1660c08601525092949350505050565b6015546001600160a01b03166108fc6129df836002612e81565b6040518115909202916000818181858888f19350505050158015612a07573d6000803e3d6000fd5b506016546001600160a01b03166108fc612a22836002612e81565b6040518115909202916000818181858888f19350505050158015611949573d6000803e3d6000fd5b6019805460ff60b01b1916600160b01b1790556040805160028082526060820183526000926020830190803683370190505090503081600081518110612aa057634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152601854604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015612af457600080fd5b505afa158015612b08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b2c9190613380565b81600181518110612b4d57634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152601854612b739130911684612041565b60185460405163791ac94760e01b81526001600160a01b039091169063791ac94790612bac9085906000908690309042906004016136ac565b600060405180830381600087803b158015612bc657600080fd5b505af1158015612bda573d6000803e3d6000fd5b50506019805460ff60b01b1916905550505050565b3060009081526002602052604081205490506000601354601254601454612c16919061371c565b612c20919061371c565b90506000821580612c2f575081155b15612c3957505050565b601f54612c4790600a613748565b831115612c5f57601f54612c5c90600a613748565b92505b600060028360145486612c729190613748565b612c7c9190613734565b612c869190613734565b90506000612c948583612eca565b905047612ca082612a4a565b6000612cac4783612eca565b90506000612ccf87612cc960125485612f0c90919063ffffffff16565b90612e81565b90506000612cec88612cc960135486612f0c90919063ffffffff16565b9050600081612cfb848661378a565b612d05919061378a565b60006014819055601281905560138190556016546040519293506001600160a01b031691849181818185875af1925050503d8060008114612d62576040519150601f19603f3d011682016040523d82523d6000602084013e612d67565b606091505b50909850508615801590612d7b5750600081115b15612dce57612d8a8782612f8b565b601454604080518881526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b6015546040516001600160a01b03909116904790600081818185875af1925050503d8060008114612e1b576040519150601f19603f3d011682016040523d82523d6000602084013e612e20565b606091505b50505050505050505050505050565b80612e4157612e3c61303c565b612e4e565b612e4b84836130ae565b91505b612e598484846131c0565b80611fe557611fe5600954600855600b54600a55600d54600c55600f54600e55601154601055565b6000612ec383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613266565b9392505050565b6000612ec383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506127a3565b600082612f1b5750600061099b565b6000612f278385613748565b905082612f348583613734565b14612ec35760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610ca1565b601854612fa39030906001600160a01b031684612041565b60185460175460405163f305d71960e01b81526001600160a01b039283169263f305d719928592612fe392309289926000928392169042906004016135e9565b6060604051808303818588803b158015612ffc57600080fd5b505af1158015613010573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906130359190613570565b5050505050565b60085415801561304c5750600a54155b80156130585750600c54155b80156130645750600e54155b80156130705750601054155b1561307757565b60088054600955600a8054600b55600c8054600d55600e8054600f5560108054601155600094859055928490559083905582905555565b600080600043601b54601a546130c4919061371c565b106130d5575060639050605c6130e5565b6130dd613294565b9150600c5490505b60006130f66064612cc98786612f0c565b905082600e5460105460085461310c919061371c565b613116919061371c565b6131209083613748565b61312a9190613734565b6012600082825461313b919061371c565b9091555050600a54839061314f9083613748565b6131599190613734565b6013600082825461316a919061371c565b9091555083905061317b8383613748565b6131859190613734565b60146000828254613196919061371c565b909155505080156131ac576131ac8630836131c0565b6131b6818661378a565b9695505050505050565b6001600160a01b0383166000908152600260205260409020546131e39082612eca565b6001600160a01b03808516600090815260026020526040808220939093559084168152205461321290826132d2565b6001600160a01b0380841660008181526002602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906121599085815260200190565b600081836132875760405162461bcd60e51b8152600401610ca19190613624565b5060006127d48486613734565b6000601054600e54600c54600a546008546132af919061371c565b6132b9919061371c565b6132c3919061371c565b6132cd919061371c565b905090565b6000806132df838561371c565b905083811015612ec35760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610ca1565b803561333c81613853565b919050565b803561ffff8116811461333c57600080fd5b803560ff8116811461333c57600080fd5b600060208284031215613375578081fd5b8135612ec381613853565b600060208284031215613391578081fd5b8151612ec381613853565b600080604083850312156133ae578081fd5b82356133b981613853565b915060208301356133c981613853565b809150509250929050565b6000806000606084860312156133e8578081fd5b83356133f381613853565b9250602084013561340381613853565b929592945050506040919091013590565b60008060408385031215613426578182fd5b823561343181613853565b946020939093013593505050565b60006020808385031215613451578182fd5b823567ffffffffffffffff80821115613468578384fd5b818501915085601f83011261347b578384fd5b81358181111561348d5761348d61383d565b8060051b604051601f19603f830116810181811085821117156134b2576134b261383d565b604052828152858101935084860182860187018a10156134d0578788fd5b8795505b838610156134f9576134e581613331565b8552600195909501949386019386016134d4565b5098975050505050505050565b600060208284031215613517578081fd5b8135612ec381613868565b600060208284031215613533578081fd5b8151612ec381613868565b60006020828403121561354f578081fd5b612ec382613341565b600060208284031215613569578081fd5b5035919050565b600080600060608486031215613584578283fd5b8351925060208401519150604084015190509250925092565b6000602082840312156135ae578081fd5b612ec382613353565b600080604083850312156135c9578182fd5b6135d283613353565b91506135e060208401613341565b90509250929050565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b6000602080835283518082850152825b8181101561365057858101830151858201604001528201613634565b818111156136615783604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b818110156136fb5784516001600160a01b0316835293830193918301916001016136d6565b50506001600160a01b03969096166060850152505050608001529392505050565b6000821982111561372f5761372f613811565b500190565b60008261374357613743613827565b500490565b600081600019048311821515161561376257613762613811565b500290565b600061ffff8381169083168181101561378257613782613811565b039392505050565b60008282101561379c5761379c613811565b500390565b60006000198214156137b5576137b5613811565b5060010190565b600060ff821660ff8114156137d3576137d3613811565b60010192915050565b600061ffff808416806137f1576137f1613827565b92169190910692915050565b60008261380c5761380c613827565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461121e57600080fd5b801515811461121e57600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220e664a901c9773b12392c76b932af1cc0c3fe1f02276e6b9063304f680123760864736f6c63430008040033

Deployed Bytecode Sourcemap

3519:24825:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7298:83;;;;;;;;;;-1:-1:-1;7368:5:0;;;;;;;;;;;-1:-1:-1;;;7368:5:0;;;;7298:83;;;;7368:5;7298:83;:::i;:::-;;;;;;;;8129:161;;;;;;;;;;-1:-1:-1;8129:161:0;;;;;:::i;:::-;;:::i;:::-;;;7492:14:1;;7485:22;7467:41;;7455:2;7440:18;8129:161:0;7422:92:1;7575:95:0;;;;;;;;;;-1:-1:-1;3968:11:0;7575:95;;;17984:25:1;;;17972:2;17957:18;7575:95:0;17939:76:1;8298:313:0;;;;;;;;;;-1:-1:-1;8298:313:0;;;;;:::i;:::-;;:::i;21910:1378::-;;;;;;;;;;-1:-1:-1;21910:1378:0;;;;;:::i;:::-;;:::i;19484:88::-;;;;;;;;;;-1:-1:-1;19484:88:0;;;;;:::i;:::-;;:::i;:::-;;15775:109;;;;;;;;;;-1:-1:-1;15775:109:0;;;;;:::i;:::-;;:::i;16895:331::-;;;;;;;;;;-1:-1:-1;16895:331:0;;;;;:::i;:::-;;:::i;28083:123::-;;;;;;;;;;-1:-1:-1;28083:123:0;;;;;:::i;:::-;;:::i;8730:109::-;;;;;;;;;;-1:-1:-1;8730:109:0;;;;;:::i;:::-;;:::i;7484:83::-;;;;;;;;;;-1:-1:-1;4887:1:0;7484:83;;;19504:4:1;19492:17;;;19474:36;;19462:2;19447:18;7484:83:0;19429:87:1;17899:192:0;;;;;;;;;;-1:-1:-1;17899:192:0;;;;;:::i;:::-;;:::i;27178:132::-;;;;;;;;;;-1:-1:-1;27178:132:0;;;;;:::i;:::-;;:::i;18313:174::-;;;;;;;;;;-1:-1:-1;18313:174:0;;;;;:::i;:::-;;:::i;17234:111::-;;;;;;;;;;-1:-1:-1;17234:111:0;;;;;:::i;:::-;;:::i;8961:99::-;;;;;;;;;;-1:-1:-1;8961:99:0;;;;;:::i;:::-;;:::i;27597:145::-;;;;;;;;;;-1:-1:-1;27597:145:0;;;;;:::i;:::-;;:::i;8619:103::-;;;;;;;;;;-1:-1:-1;8619:103:0;;;;;:::i;:::-;;:::i;8847:106::-;;;;;;;;;;-1:-1:-1;8847:106:0;;;;;:::i;:::-;;:::i;17479:192::-;;;;;;;;;;-1:-1:-1;17479:192:0;;;;;:::i;:::-;;:::i;17683:204::-;;;;;;;;;;-1:-1:-1;17683:204:0;;;;;:::i;:::-;;:::i;21296:193::-;;;;;;;;;;;;;:::i;7678:117::-;;;;;;;;;;-1:-1:-1;7678:117:0;;;;;:::i;:::-;-1:-1:-1;;;;;7771:16:0;7744:7;7771:16;;;:7;:16;;;;;;;7678:117;2598:148;;;;;;;;;;;;;:::i;16540:347::-;;;;;;;;;;-1:-1:-1;16540:347:0;;;;;:::i;:::-;;:::i;16217:315::-;;;;;;;;;;-1:-1:-1;16217:315:0;;;;;:::i;:::-;;:::i;27463:122::-;;;;;;;;;;-1:-1:-1;27463:122:0;;;;;:::i;:::-;;:::i;2384:79::-;;;;;;;;;;-1:-1:-1;2422:7:0;2449:6;2384:79;;-1:-1:-1;;;;;2449:6:0;;;5445:51:1;;5433:2;5418:18;2384:79:0;5400:102:1;27750:89:0;;;;;;;;;;-1:-1:-1;27750:89:0;;;;;:::i;:::-;;:::i;26173:993::-;;;;;;;;;;-1:-1:-1;26173:993:0;;;;;:::i;:::-;;:::i;:::-;;;17819:6:1;17807:19;;;17789:38;;17777:2;17762:18;26173:993:0;17744:89:1;27847:97:0;;;;;;;;;;-1:-1:-1;27847:97:0;;;;;:::i;:::-;;:::i;23300:393::-;;;;;;;;;;-1:-1:-1;23300:393:0;;;;;:::i;:::-;;:::i;7803:167::-;;;;;;;;;;-1:-1:-1;7803:167:0;;;;;:::i;:::-;;:::i;15896:313::-;;;;;;;;;;-1:-1:-1;15896:313:0;;;;;:::i;:::-;;:::i;23705:163::-;;;;;;;;;;-1:-1:-1;23705:163:0;;;;;:::i;:::-;;:::i;28214:127::-;;;;;;;;;;-1:-1:-1;28214:127:0;;;;;:::i;:::-;;:::i;23880:584::-;;;;;;;;;;-1:-1:-1;23880:584:0;;;;;:::i;:::-;;:::i;15381:164::-;;;;;;;;;;-1:-1:-1;15381:164:0;;;;;:::i;:::-;;:::i;18103:198::-;;;;;;;;;;-1:-1:-1;18103:198:0;;;;;:::i;:::-;;:::i;21090:194::-;;;;;;;;;;;;;:::i;14326:1043::-;;;;;;;;;;;;;:::i;7978:143::-;;;;;;;;;;-1:-1:-1;7978:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;8086:18:0;;;8059:7;8086:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;7978:143;9068:94;;;;;;;;;;-1:-1:-1;9068:94:0;;;;;:::i;:::-;;:::i;18495:108::-;;;;;;;;;;-1:-1:-1;18495:108:0;;;;;:::i;:::-;;:::i;15660:103::-;;;;;;;;;;-1:-1:-1;15660:103:0;;;;;:::i;:::-;;:::i;17357:110::-;;;;;;;;;;-1:-1:-1;17357:110:0;;;;;:::i;:::-;;:::i;15553:99::-;;;;;;;;;;-1:-1:-1;15553:99:0;;;;;:::i;:::-;;:::i;21497:239::-;;;;;;;;;;;;;:::i;27952:123::-;;;;;;;;;;-1:-1:-1;27952:123:0;;;;;:::i;:::-;;:::i;27322:129::-;;;;;;;;;;-1:-1:-1;27322:129:0;;;;;:::i;:::-;;:::i;8129:161::-;8204:4;8221:39;182:10;8244:7;8253:6;8221:8;:39::i;:::-;-1:-1:-1;8278:4:0;8129:161;;;;;:::o;8298:313::-;8396:4;8413:36;8423:6;8431:9;8442:6;8413:9;:36::i;:::-;8460:121;8469:6;182:10;8491:89;8529:6;8491:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8491:19:0;;;;;;:11;:19;;;;;;;;182:10;8491:33;;;;;;;;;;:37;:89::i;:::-;8460:8;:121::i;:::-;-1:-1:-1;8599:4:0;8298:313;;;;;:::o;21910:1378::-;21969:4;21986:19;22008:25;22023:9;22008:14;:25::i;:::-;22062:7;;22048:10;;;;21986:47;;-1:-1:-1;22062:7:0;22048:21;;;22062:7;;22048:21;;:48;;-1:-1:-1;22087:9:0;;22073:10;;;;22087:9;22073:23;;;22087:9;;;;;22073:23;22048:48;22044:93;;;-1:-1:-1;22120:5:0;;21910:1378;-1:-1:-1;;21910:1378:0:o;22044:93::-;22161:14;;22151:7;;;;22161:14;;;;;;;22151:24;;;;:52;;-1:-1:-1;22189:14:0;;22179:7;;;;22189:14;;;;;;;22179:24;;;22151:52;22147:97;;;-1:-1:-1;22227:5:0;;21910:1378;-1:-1:-1;;21910:1378:0:o;22147:97::-;22269:14;;22258:7;;;;22269:14;22258:25;;;22269:14;;;;;22258:25;:56;;;;-1:-1:-1;22299:15:0;;22287:9;;;;22299:15;;;;;;;22287:27;;;22258:56;22254:101;;;-1:-1:-1;22338:5:0;;21910:1378;-1:-1:-1;;21910:1378:0:o;22254:101::-;22369:13;;-1:-1:-1;;;22369:13:0;;;;22365:815;;;22403:2;:8;;;:13;;22415:1;22403:13;:46;;;;;22421:2;:6;;;:11;;22431:1;22421:11;:27;;;;22436:2;:6;;;:12;;22446:2;22436:12;22421:27;22399:99;;;-1:-1:-1;22477:5:0;;21910:1378;-1:-1:-1;;21910:1378:0:o;22399:99::-;22516:2;:8;;;:13;;22528:1;22516:13;:29;;;;;22533:2;:6;;;:12;;22543:2;22533:12;22516:29;22512:82;;;-1:-1:-1;22573:5:0;;21910:1378;-1:-1:-1;;21910:1378:0:o;22512:82::-;22612:2;:8;;;:13;;22624:1;22612:13;:28;;;;;22629:2;:6;;;:11;;22639:1;22629:11;22612:28;22608:81;;;-1:-1:-1;22668:5:0;;21910:1378;-1:-1:-1;;21910:1378:0:o;22608:81::-;22707:2;:8;;;:13;;22719:1;22707:13;:29;;;;;22724:2;:6;;;:12;;22734:2;22724:12;22707:29;22703:82;;;-1:-1:-1;22764:5:0;;21910:1378;-1:-1:-1;;21910:1378:0:o;22703:82::-;22803:2;:8;;;:13;;22815:1;22803:13;:28;;;;;22820:2;:6;;;:11;;22830:1;22820:11;22803:28;22799:81;;;-1:-1:-1;22859:5:0;;21910:1378;-1:-1:-1;;21910:1378:0:o;22799:81::-;22898:2;:8;;;:13;;22910:1;22898:13;:28;;;;;22915:2;:6;;;:11;;22925:1;22915:11;22898:28;22894:81;;;-1:-1:-1;22954:5:0;;21910:1378;-1:-1:-1;;21910:1378:0:o;22894:81::-;22993:2;:8;;;:14;;23005:2;22993:14;:30;;;;;23011:2;:6;;;:12;;23021:2;23011:12;22993:30;22989:83;;;-1:-1:-1;23051:5:0;;21910:1378;-1:-1:-1;;21910:1378:0:o;22989:83::-;23090:2;:8;;;:14;;23102:2;23090:14;:30;;;;;23108:2;:6;;;:12;;23118:2;23108:12;23090:30;23086:83;;;-1:-1:-1;23148:5:0;;21910:1378;-1:-1:-1;;21910:1378:0:o;23086:83::-;23194:14;;-1:-1:-1;;;23194:14:0;;;;23190:59;;;-1:-1:-1;23232:5:0;;21910:1378;-1:-1:-1;;21910:1378:0:o;19484:88::-;2511:6;;-1:-1:-1;;;;;2511:6:0;182:10;2511:22;2503:67;;;;-1:-1:-1;;;2503:67:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;19544:12:0::1;19559:5;19544:12:::0;;;:4:::1;:12;::::0;;;;:20;;-1:-1:-1;;19544:20:0::1;::::0;;19484:88::o;15775:109::-;2511:6;;-1:-1:-1;;;;;2511:6:0;182:10;2511:22;2503:67;;;;-1:-1:-1;;;2503:67:0;;;;;;;:::i;:::-;15849:16:::1;:27:::0;15775:109::o;16895:331::-;2511:6;;-1:-1:-1;;;;;2511:6:0;182:10;2511:22;2503:67;;;;-1:-1:-1;;;2503:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16986:29:0;::::1;16978:77;;;::::0;-1:-1:-1;;;16978:77:0;;13882:2:1;16978:77:0::1;::::0;::::1;13864:21:1::0;13921:2;13901:18;;;13894:30;13960:34;13940:18;;;13933:62;-1:-1:-1;;;14011:18:1;;;14004:33;14054:19;;16978:77:0::1;13854:225:1::0;16978:77:0::1;17085:16;::::0;;-1:-1:-1;;;;;17085:16:0;;::::1;17105:5;17066:36:::0;;;:18:::1;:36;::::0;;;;;:44;;-1:-1:-1;;17066:44:0;;::::1;::::0;;;17121:43;;-1:-1:-1;;;;;;17121:43:0::1;::::0;;;::::1;::::0;;::::1;::::0;;;17175:36;;;;;:43;;;;::::1;-1:-1:-1::0;17175:43:0::1;::::0;;16895:331::o;28083:123::-;2511:6;;-1:-1:-1;;;;;2511:6:0;182:10;2511:22;2503:67;;;;-1:-1:-1;;;2503:67:0;;;;;;;:::i;:::-;28168:14:::1;:30:::0;;::::1;::::0;;::::1;::::0;::::1;-1:-1:-1::0;;28168:30:0;;::::1;::::0;;;::::1;::::0;;28083:123::o;8730:109::-;2511:6;;-1:-1:-1;;;;;2511:6:0;182:10;2511:22;2503:67;;;;-1:-1:-1;;;2503:67:0;;;;;;;:::i;:::-;8805:18:::1;:26:::0;;;::::1;;-1:-1:-1::0;;;8805:26:0::1;-1:-1:-1::0;;;;8805:26:0;;::::1;::::0;;;::::1;::::0;;8730:109::o;17899:192::-;2511:6;;-1:-1:-1;;;;;2511:6:0;182:10;2511:22;2503:67;;;;-1:-1:-1;;;2503:67:0;;;;;;;:::i;:::-;18002:2:::1;17986:12;:18;;17978:66;;;::::0;-1:-1:-1;;;17978:66:0;;16264:2:1;17978:66:0::1;::::0;::::1;16246:21:1::0;16303:2;16283:18;;;16276:30;16342:34;16322:18;;;16315:62;-1:-1:-1;;;16393:18:1;;;16386:33;16436:19;;17978:66:0::1;16236:225:1::0;17978:66:0::1;18055:13;:28:::0;17899:192::o;27178:132::-;27232:5;27295:2;27289;27272:14;27289:2;27272:9;:14;:::i;:::-;:19;;;;:::i;:::-;27271:26;;;;:::i;18313:174::-;2511:6;;-1:-1:-1;;;;;2511:6:0;182:10;2511:22;2503:67;;;;-1:-1:-1;;;2503:67:0;;;;;;;:::i;:::-;18407:2:::1;18394:9;:15;;18386:60;;;::::0;-1:-1:-1;;;18386:60:0;;16668:2:1;18386:60:0::1;::::0;::::1;16650:21:1::0;;;16687:18;;;16680:30;16746:34;16726:18;;;16719:62;16798:18;;18386:60:0::1;16640:182:1::0;18386:60:0::1;18457:10;:22:::0;18313:174::o;17234:111::-;2511:6;;-1:-1:-1;;;;;2511:6:0;182:10;2511:22;2503:67;;;;-1:-1:-1;;;2503:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17303:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;17303:34:0::1;17333:4;17303:34;::::0;;17234:111::o;8961:99::-;2511:6;;-1:-1:-1;;;;;2511:6:0;182:10;2511:22;2503:67;;;;-1:-1:-1;;;2503:67:0;;;;;;;:::i;:::-;9030:14:::1;:22:::0;;;::::1;;-1:-1:-1::0;;;9030:22:0::1;-1:-1:-1::0;;;;9030:22:0;;::::1;::::0;;;::::1;::::0;;8961:99::o;27597:145::-;27654:5;27728:1;27694:26;6071:5;27694:9;:26;:::i;:::-;:30;;27723:1;27694:30;:::i;8619:103::-;2511:6;;-1:-1:-1;;;;;2511:6:0;182:10;2511:22;2503:67;;;;-1:-1:-1;;;2503:67:0;;;;;;;:::i;:::-;8691:15:::1;:23:::0;;;::::1;;-1:-1:-1::0;;;8691:23:0::1;-1:-1:-1::0;;;;8691:23:0;;::::1;::::0;;;::::1;::::0;;8619:103::o;8847:106::-;2511:6;;-1:-1:-1;;;;;2511:6:0;182:10;2511:22;2503:67;;;;-1:-1:-1;;;2503:67:0;;;;;;;:::i;:::-;8924:13:::1;:21:::0;;;::::1;;-1:-1:-1::0;;;8924:21:0::1;-1:-1:-1::0;;;;8924:21:0;;::::1;::::0;;;::::1;::::0;;8847:106::o;17479:192::-;2511:6;;-1:-1:-1;;;;;2511:6:0;182:10;2511:22;2503:67;;;;-1:-1:-1;;;2503:67:0;;;;;;;:::i;:::-;17582:2:::1;17566:12;:18;;17558:66;;;::::0;-1:-1:-1;;;17558:66:0;;14286:2:1;17558:66:0::1;::::0;::::1;14268:21:1::0;14325:2;14305:18;;;14298:30;14364:34;14344:18;;;14337:62;-1:-1:-1;;;14415:18:1;;;14408:33;14458:19;;17558:66:0::1;14258:225:1::0;17558:66:0::1;17635:13;:28:::0;17479:192::o;17683:204::-;2511:6;;-1:-1:-1;;;;;2511:6:0;182:10;2511:22;2503:67;;;;-1:-1:-1;;;2503:67:0;;;;;;;:::i;:::-;17792:2:::1;17774:14;:20;;17766:70;;;::::0;-1:-1:-1;;;17766:70:0;;17029:2:1;17766:70:0::1;::::0;::::1;17011:21:1::0;17068:2;17048:18;;;17041:30;17107:34;17087:18;;;17080:62;-1:-1:-1;;;17158:18:1;;;17151:35;17203:19;;17766:70:0::1;17001:227:1::0;17766:70:0::1;17847:15;:32:::0;17683:204::o;21296:193::-;21362:14;;-1:-1:-1;;;;;21362:14:0;182:10;-1:-1:-1;;;;;21346:30:0;;21338:39;;;;;;21417:21;21449:32;21417:21;21449:12;:32::i;:::-;21296:193;:::o;2598:148::-;2511:6;;-1:-1:-1;;;;;2511:6:0;182:10;2511:22;2503:67;;;;-1:-1:-1;;;2503:67:0;;;;;;;:::i;:::-;2705:1:::1;2689:6:::0;;2668:40:::1;::::0;-1:-1:-1;;;;;2689:6:0;;::::1;::::0;2668:40:::1;::::0;2705:1;;2668:40:::1;2736:1;2719:19:::0;;-1:-1:-1;;;;;;2719:19:0::1;::::0;;2598:148::o;16540:347::-;2511:6;;-1:-1:-1;;;;;2511:6:0;182:10;2511:22;2503:67;;;;-1:-1:-1;;;2503:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16635:31:0;::::1;16627:81;;;::::0;-1:-1:-1;;;16627:81:0;;9492:2:1;16627:81:0::1;::::0;::::1;9474:21:1::0;9531:2;9511:18;;;9504:30;9570:34;9550:18;;;9543:62;-1:-1:-1;;;9621:18:1;;;9614:35;9666:19;;16627:81:0::1;9464:227:1::0;16627:81:0::1;16738:18;::::0;;-1:-1:-1;;;;;16738:18:0;;::::1;16760:5;16719:38:::0;;;:18:::1;:38;::::0;;;;;:46;;-1:-1:-1;;16719:46:0;;::::1;::::0;;;16776:47;;-1:-1:-1;;;;;;16776:47:0::1;::::0;;;::::1;::::0;;::::1;::::0;;;16834:38;;;;;:45;;;;::::1;-1:-1:-1::0;16834:45:0::1;::::0;;16540:347::o;16217:315::-;2511:6;;-1:-1:-1;;;;;2511:6:0;182:10;2511:22;2503:67;;;;-1:-1:-1;;;2503:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16304:27:0;::::1;16296:73;;;::::0;-1:-1:-1;;;16296:73:0;;9898:2:1;16296:73:0::1;::::0;::::1;9880:21:1::0;9937:2;9917:18;;;9910:30;9976:34;9956:18;;;9949:62;-1:-1:-1;;;10027:18:1;;;10020:31;10068:19;;16296:73:0::1;9870:223:1::0;16296:73:0::1;16399:14;::::0;;-1:-1:-1;;;;;16399:14:0;;::::1;16417:5;16380:34:::0;;;:18:::1;:34;::::0;;;;;:42;;-1:-1:-1;;16380:42:0;;::::1;::::0;;;16433:39;;-1:-1:-1;;;;;;16433:39:0::1;::::0;;;::::1;::::0;;::::1;::::0;;;16483:34;;;;;:41;;;;::::1;-1:-1:-1::0;16483:41:0::1;::::0;;16217:315::o;27463:122::-;27519:5;27558:14;27570:2;27558:9;:14;:::i;27750:89::-;2511:6;;-1:-1:-1;;;;;2511:6:0;182:10;2511:22;2503:67;;;;-1:-1:-1;;;2503:67:0;;;;;;;:::i;:::-;27815:7:::1;:16:::0;;-1:-1:-1;;27815:16:0::1;;::::0;;;::::1;::::0;;;::::1;::::0;;27750:89::o;26173:993::-;26227:6;;;;26422:27;6115:8;26422:9;:27;:::i;:::-;26408:41;;6298:4;26408:41;:::i;:::-;26394:56;-1:-1:-1;26508:28:0;6298:4;26508:15;:28::i;:::-;26484:21;26500:4;26484:21;;:15;:21::i;:::-;:52;;;;:::i;:::-;26469:67;-1:-1:-1;26580:35:0;26469:67;6167:8;26580:35;:::i;:::-;26557:58;;;;:::i;:::-;;-1:-1:-1;26697:12:0;26676:18;6298:4;26676;:18;:::i;:::-;:33;;;;;;:::i;:::-;26657:53;;6115:8;26657:53;:::i;:::-;26634:76;;;;:::i;:::-;;;26731:394;26760:9;26738:19;:31;26731:394;;;26802:28;26820:8;26827:1;26820:4;:8;:::i;26802:28::-;26798:272;;;26867:43;6167:8;26867:43;;:::i;:::-;;;26798:272;;;27004:38;6115:8;27004:38;;:::i;:::-;;;26798:272;27096:9;27104:1;27096:9;;:::i;:::-;;;26731:394;;;-1:-1:-1;27150:4:0;26173:993;-1:-1:-1;;;26173:993:0:o;27847:97::-;2511:6;;-1:-1:-1;;;;;2511:6:0;182:10;2511:22;2503:67;;;;-1:-1:-1;;;2503:67:0;;;;;;;:::i;:::-;27916:9:::1;:20:::0;;::::1;::::0;;::::1;;;-1:-1:-1::0;;27916:20:0;;::::1;::::0;;;::::1;::::0;;27847:97::o;23300:393::-;23354:4;23383:8;23390:1;23383:4;:8;:::i;:::-;:13;;;23379:78;;-1:-1:-1;23432:5:0;;23300:393;-1:-1:-1;23300:393:0:o;23379:78::-;23479:10;23486:3;23479:4;:10;:::i;:::-;:15;;;23475:79;;-1:-1:-1;23530:4:0;;23300:393;-1:-1:-1;23300:393:0:o;23475:79::-;23576:10;23583:3;23576:4;:10;:::i;:::-;:15;;;23572:80;;-1:-1:-1;23627:5:0;;23300:393;-1:-1:-1;23300:393:0:o;23572:80::-;-1:-1:-1;23677:4:0;;23300:393;-1:-1:-1;23300:393:0:o;7803:167::-;7881:4;7898:42;182:10;7922:9;7933:6;7898:9;:42::i;15896:313::-;2511:6;;-1:-1:-1;;;;;2511:6:0;182:10;2511:22;2503:67;;;;-1:-1:-1;;;2503:67:0;;;;;;;:::i;:::-;15994:11:::1;15981:9;:24;;15973:90;;;::::0;-1:-1:-1;;;15973:90:0;;10646:2:1;15973:90:0::1;::::0;::::1;10628:21:1::0;10685:2;10665:18;;;10658:30;10724:34;10704:18;;;10697:62;-1:-1:-1;;;10775:18:1;;;10768:51;10836:19;;15973:90:0::1;10618:243:1::0;15973:90:0::1;16094:11;16081:9;:24;;16073:89;;;::::0;-1:-1:-1;;;16073:89:0;;11068:2:1;16073:89:0::1;::::0;::::1;11050:21:1::0;11107:2;11087:18;;;11080:30;11146:34;11126:18;;;11119:62;-1:-1:-1;;;11197:18:1;;;11190:50;11257:19;;16073:89:0::1;11040:242:1::0;16073:89:0::1;16172:18;:30:::0;15896:313::o;23705:163::-;23762:4;23787:9;23795:1;23787:9;;:::i;:::-;;-1:-1:-1;23846:10:0;23853:3;23787:9;23846:10;:::i;:::-;23833;23840:3;23833:4;:10;:::i;:::-;23822:8;23829:1;23822:4;:8;:::i;:::-;:21;;;;:::i;:::-;:34;;;;:::i;28214:127::-;2511:6;;-1:-1:-1;;;;;2511:6:0;182:10;2511:22;2503:67;;;;-1:-1:-1;;;2503:67:0;;;;;;;:::i;:::-;28301:15:::1;:32:::0;;::::1;::::0;;::::1;::::0;::::1;-1:-1:-1::0;;28301:32:0;;::::1;::::0;;;::::1;::::0;;28214:127::o;23880:584::-;23951:5;23981;:10;;23990:1;23981:10;:24;;;;23995:5;:10;;24004:1;23995:10;23981:24;:38;;;;24009:5;:10;;24018:1;24009:10;23981:38;:52;;;;24023:5;:10;;24032:1;24023:10;23981:52;:66;;;;24037:5;:10;;24046:1;24037:10;23981:66;:81;;;;24051:5;:11;;24060:2;24051:11;23981:81;:96;;;;24066:5;:11;;24075:2;24066:11;23981:96;23977:476;;;-1:-1:-1;24113:2:0;24106:9;;23977:476;24162:5;:10;;24171:1;24162:10;:24;;;;24176:5;:10;;24185:1;24176:10;24162:24;:38;;;;24190:5;:10;;24199:1;24190:10;24162:38;:53;;;;24204:5;:11;;24213:2;24204:11;24162:53;24158:295;;;-1:-1:-1;24251:2:0;24244:9;;24158:295;24300:16;24311:4;24300:10;:16::i;:::-;24296:157;;;-1:-1:-1;24352:2:0;24345:9;;24296:157;-1:-1:-1;24431:2:0;24424:9;;15381:164;2511:6;;-1:-1:-1;;;;;2511:6:0;182:10;2511:22;2503:67;;;;-1:-1:-1;;;2503:67:0;;;;;;;:::i;:::-;15455:6:::1;15450:88;15471:5;:12;15467:1;:16;15450:88;;;15522:4;15505;:14;15510:5;15516:1;15510:8;;;;;;-1:-1:-1::0;;;15510:8:0::1;;;;;;;;;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;15505:14:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;15505:14:0;:21;;-1:-1:-1;;15505:21:0::1;::::0;::::1;;::::0;;;::::1;::::0;;15485:3;::::1;::::0;::::1;:::i;:::-;;;;15450:88;;;;15381:164:::0;:::o;18103:198::-;2511:6;;-1:-1:-1;;;;;2511:6:0;182:10;2511:22;2503:67;;;;-1:-1:-1;;;2503:67:0;;;;;;;:::i;:::-;18209:2:::1;18192:13;:19;;18184:68;;;::::0;-1:-1:-1;;;18184:68:0;;11489:2:1;18184:68:0::1;::::0;::::1;11471:21:1::0;11528:2;11508:18;;;11501:30;11567:34;11547:18;;;11540:62;-1:-1:-1;;;11618:18:1;;;11611:34;11662:19;;18184:68:0::1;11461:226:1::0;18184:68:0::1;18263:14;:30:::0;18103:198::o;21090:194::-;21156:14;;-1:-1:-1;;;;;21156:14:0;182:10;-1:-1:-1;;;;;21140:30:0;;21132:39;;;;;;21226:4;21182:23;7771:16;;;:7;:16;;;;;;21243:33;7771:16;21243;:33::i;14326:1043::-;2511:6;;-1:-1:-1;;;;;2511:6:0;182:10;2511:22;2503:67;;;;-1:-1:-1;;;2503:67:0;;;;;;;:::i;:::-;14390:11:::1;::::0;-1:-1:-1;;;14390:11:0;::::1;;;14389:12;14381:47;;;::::0;-1:-1:-1;;;14381:47:0;;15501:2:1;14381:47:0::1;::::0;::::1;15483:21:1::0;15540:2;15520:18;;;15513:30;15579:25;15559:18;;;15552:53;15622:18;;14381:47:0::1;15473:173:1::0;14381:47:0::1;14550:15;:34:::0;;-1:-1:-1;;;;;;14550:34:0::1;14496:42;14550:34:::0;;::::1;::::0;;;14595:58:::1;14612:4;14496:42:::0;3968:11:::1;14595:8;:58::i;:::-;14698:16;-1:-1:-1::0;;;;;14698:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;14680:56:0::1;;14745:4;14752:16;-1:-1:-1::0;;;;;14752:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14680:96;::::0;-1:-1:-1;;;;;;14680:96:0::1;::::0;;;;;;-1:-1:-1;;;;;5737:15:1;;;14680:96:0::1;::::0;::::1;5719:34:1::0;5789:15;;5769:18;;;5762:43;5654:18;;14680:96:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14664:13;:112:::0;;-1:-1:-1;;;;;14664:112:0;;::::1;-1:-1:-1::0;;;;;;14664:112:0;;::::1;;::::0;;14787:15:::1;::::0;::::1;:31;14826:21;14857:4;14863:24;14857:4:::0;-1:-1:-1;;;;;7771:16:0;7744:7;7771:16;;;:7;:16;;;;;;;7678:117;14863:24:::1;14888:1;14890::::0;14892:7:::1;2422::::0;2449:6;-1:-1:-1;;;;;2449:6:0;;2384:79;14892:7:::1;14900:15;14787:129;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;14927:11:0::1;:18:::0;;15072:11:::1;15056:13;:27:::0;;;15094:14:::1;:28:::0;15152:11:::1;15133:16;:30:::0;15195:11:::1;15174:18;:32:::0;-1:-1:-1;;;;15217:18:0;;-1:-1:-1;;;15217:18:0;;;;15267:12:::1;15025:13;15246:33:::0;14956:15:::1;15328::::0;15290:71:::1;::::0;-1:-1:-1;;;15290:71:0;;-1:-1:-1;;;;;15328:15:0;;::::1;-1:-1:-1::0;15290:71:0;::::1;5990:51:1::0;-1:-1:-1;;6057:18:1;;;6050:34;15297:13:0;;;-1:-1:-1;15290:29:0::1;::::0;5963:18:1;;15290:71:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;9068:94::-:0;2511:6;;-1:-1:-1;;;;;2511:6:0;182:10;2511:22;2503:67;;;;-1:-1:-1;;;2503:67:0;;;;;;;:::i;:::-;9135:11:::1;:19:::0;;;::::1;;-1:-1:-1::0;;;9135:19:0::1;-1:-1:-1::0;;;;9135:19:0;;::::1;::::0;;;::::1;::::0;;9068:94::o;18495:108::-;2511:6;;-1:-1:-1;;;;;2511:6:0;182:10;2511:22;2503:67;;;;-1:-1:-1;;;2503:67:0;;;;;;;:::i;:::-;18569:17:::1;:26:::0;18495:108::o;15660:103::-;2511:6;;-1:-1:-1;;;;;2511:6:0;182:10;2511:22;2503:67;;;;-1:-1:-1;;;2503:67:0;;;;;;;:::i;:::-;15731:14:::1;:24:::0;15660:103::o;17357:110::-;2511:6;;-1:-1:-1;;;;;2511:6:0;182:10;2511:22;2503:67;;;;-1:-1:-1;;;2503:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17424:27:0::1;17454:5;17424:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;17424:35:0::1;::::0;;17357:110::o;15553:99::-;2511:6;;-1:-1:-1;;;;;2511:6:0;182:10;2511:22;2503:67;;;;-1:-1:-1;;;2503:67:0;;;;;;;:::i;:::-;15622:13:::1;:22:::0;15553:99::o;21497:239::-;2511:6;;-1:-1:-1;;;;;2511:6:0;182:10;2511:22;2503:67;;;;-1:-1:-1;;;2503:67:0;;;;;;;:::i;:::-;21564:11:::1;::::0;-1:-1:-1;;;21564:11:0;::::1;;;21563:12;21555:68;;;::::0;-1:-1:-1;;;21555:68:0;;17435:2:1;21555:68:0::1;::::0;::::1;17417:21:1::0;17474:2;17454:18;;;17447:30;17513:34;17493:18;;;17486:62;-1:-1:-1;;;17564:18:1;;;17557:41;17615:19;;21555:68:0::1;17407:233:1::0;21555:68:0::1;21670:58;::::0;21634:12:::1;::::0;21678:10:::1;::::0;21702:21:::1;::::0;21634:12;21670:58;21634:12;21670:58;21702:21;21678:10;21670:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;21497:239:0:o;27952:123::-;2511:6;;-1:-1:-1;;;;;2511:6:0;182:10;2511:22;2503:67;;;;-1:-1:-1;;;2503:67:0;;;;;;;:::i;:::-;28037:14:::1;:30:::0;;::::1;::::0;;::::1;::::0;::::1;-1:-1:-1::0;;28037:30:0;;::::1;::::0;;;::::1;::::0;;27952:123::o;27322:129::-;27378:5;27436:2;27418:14;27436:2;27418:9;:14;:::i;9170:335::-;-1:-1:-1;;;;;9263:19:0;;9255:68;;;;-1:-1:-1;;;9255:68:0;;15096:2:1;9255:68:0;;;15078:21:1;15135:2;15115:18;;;15108:30;15174:34;15154:18;;;15147:62;-1:-1:-1;;;15225:18:1;;;15218:34;15269:19;;9255:68:0;15068:226:1;9255:68:0;-1:-1:-1;;;;;9342:21:0;;9334:68;;;;-1:-1:-1;;;9334:68:0;;8733:2:1;9334:68:0;;;8715:21:1;8772:2;8752:18;;;8745:30;8811:34;8791:18;;;8784:62;-1:-1:-1;;;8862:18:1;;;8855:32;8904:19;;9334:68:0;8705:224:1;9334:68:0;-1:-1:-1;;;;;9413:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;9465:32;;17984:25:1;;;9465:32:0;;17957:18:1;9465:32:0;;;;;;;;9170:335;;;:::o;9513:2028::-;-1:-1:-1;;;;;9601:18:0;;9593:68;;;;-1:-1:-1;;;9593:68:0;;14690:2:1;9593:68:0;;;14672:21:1;14729:2;14709:18;;;14702:30;14768:34;14748:18;;;14741:62;-1:-1:-1;;;14819:18:1;;;14812:35;14864:19;;9593:68:0;14662:227:1;9593:68:0;-1:-1:-1;;;;;9680:16:0;;9672:64;;;;-1:-1:-1;;;9672:64:0;;8329:2:1;9672:64:0;;;8311:21:1;8368:2;8348:18;;;8341:30;8407:34;8387:18;;;8380:62;-1:-1:-1;;;8458:18:1;;;8451:33;8501:19;;9672:64:0;8301:225:1;9672:64:0;9764:1;9755:6;:10;9747:64;;;;-1:-1:-1;;;9747:64:0;;13472:2:1;9747:64:0;;;13454:21:1;13511:2;13491:18;;;13484:30;13550:34;13530:18;;;13523:62;-1:-1:-1;;;13601:18:1;;;13594:39;13650:19;;9747:64:0;13444:231:1;9747:64:0;9822:12;9853:15;9899:7;2422;2449:6;-1:-1:-1;;;;;2449:6:0;;2384:79;9899:7;-1:-1:-1;;;;;9891:15:0;:4;-1:-1:-1;;;;;9891:15:0;;;:32;;;;-1:-1:-1;2422:7:0;2449:6;-1:-1:-1;;;;;9910:13:0;;;2449:6;;9910:13;;9891:32;:52;;;;-1:-1:-1;;;;;;9927:16:0;;;;9891:52;:77;;;;-1:-1:-1;;;;;;9947:21:0;;9961:6;9947:21;;9891:77;:90;;;;-1:-1:-1;9973:8:0;;-1:-1:-1;;;9973:8:0;;;;9972:9;9891:90;9887:1129;;;-1:-1:-1;;;;;10007:10:0;;;;;;:4;:10;;;;;;;;10006:11;:24;;;;-1:-1:-1;;;;;;10022:8:0;;;;;;:4;:8;;;;;;;;10021:9;10006:24;9998:33;;;;;;10052:18;;-1:-1:-1;;;10052:18:0;;;;:47;;;;-1:-1:-1;;;;;;10075:24:0;;;;;;:18;:24;;;;;;;;10074:25;10052:47;:74;;;;-1:-1:-1;;;;;;10104:22:0;;;;;;:18;:22;;;;;;;;10103:23;10052:74;10048:174;;;10155:29;10168:15;10155:12;:29::i;:::-;10147:59;;;;-1:-1:-1;;;10147:59:0;;10300:2:1;10147:59:0;;;10282:21:1;10339:2;10319:18;;;10312:30;-1:-1:-1;;;10358:18:1;;;10351:47;10415:18;;10147:59:0;10272:167:1;10147:59:0;10279:13;;10248:4;;-1:-1:-1;;;;;;10271:21:0;;;10279:13;;10271:21;:55;;;;-1:-1:-1;10310:15:0;;-1:-1:-1;;;;;10296:30:0;;;10310:15;;10296:30;;10271:55;:82;;;;-1:-1:-1;;;;;;10331:22:0;;;;;;:18;:22;;;;;;;;10330:23;10271:82;:101;;;;-1:-1:-1;10357:15:0;;-1:-1:-1;;;10357:15:0;;;;10271:101;10267:451;;;10411:13;;10401:6;:23;;10393:77;;;;-1:-1:-1;;;10393:77:0;;12299:2:1;10393:77:0;;;12281:21:1;12338:2;12318:18;;;12311:30;12377:34;12357:18;;;12350:62;-1:-1:-1;;;12428:18:1;;;12421:39;12477:19;;10393:77:0;12271:231:1;10393:77:0;10523:16;;10513:6;10497:13;10507:2;-1:-1:-1;;;;;7771:16:0;7744:7;7771:16;;;:7;:16;;;;;;;7678:117;10497:13;:22;;;;:::i;:::-;:42;;10489:91;;;;-1:-1:-1;;;10489:91:0;;11894:2:1;10489:91:0;;;11876:21:1;11933:2;11913:18;;;11906:30;11972:34;11952:18;;;11945:62;-1:-1:-1;;;12023:18:1;;;12016:34;12067:19;;10489:91:0;11866:226:1;10489:91:0;-1:-1:-1;;;;;10607:12:0;;;;;;:8;:12;;;;;;10622:15;-1:-1:-1;10599:39:0;;;;;;10672:30;:15;10691:10;10672:30;:::i;:::-;-1:-1:-1;;;;;10657:12:0;;;;;;:8;:12;;;;;:45;10267:451;10756:13;;-1:-1:-1;;;;;10750:19:0;;;10756:13;;10750:19;:55;;;;-1:-1:-1;10789:15:0;;-1:-1:-1;;;;;10773:32:0;;;10789:15;;10773:32;;10750:55;:84;;;;-1:-1:-1;;;;;;10810:24:0;;;;;;:18;:24;;;;;;;;10809:25;10750:84;:103;;;;-1:-1:-1;10838:15:0;;-1:-1:-1;;;10838:15:0;;;;10750:103;10746:259;;;10892:14;;10882:6;:24;;10874:79;;;;-1:-1:-1;;;10874:79:0;;15853:2:1;10874:79:0;;;15835:21:1;15892:2;15872:18;;;15865:30;15931:34;15911:18;;;15904:62;-1:-1:-1;;;15982:18:1;;;15975:40;16032:19;;10874:79:0;15825:232:1;10874:79:0;-1:-1:-1;10985:4:0;10746:259;-1:-1:-1;;;;;11031:24:0;;;;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;11059:22:0;;;;;;:18;:22;;;;;;;;11031:50;11028:97;;;11108:5;11098:15;;11028:97;11186:4;11137:28;7771:16;;;:7;:16;;;;;;11137:55;;11203:12;11242:18;;11219:20;:41;11218:57;;;;;11265:10;11218:57;11203:72;;11292:7;:22;;;;-1:-1:-1;11303:11:0;;-1:-1:-1;;;11303:11:0;;;;11292:22;:35;;;;-1:-1:-1;11319:8:0;;-1:-1:-1;;;11319:8:0;;;;11318:9;11292:35;:64;;;;-1:-1:-1;;;;;;11332:24:0;;;;;;:18;:24;;;;;;;;11331:25;11292:64;:91;;;;-1:-1:-1;;;;;;11361:22:0;;;;;;:18;:22;;;;;;;;11360:23;11292:91;11288:195;;;11400:8;:15;;-1:-1:-1;;;;11400:15:0;-1:-1:-1;;;11400:15:0;;;11430:10;:8;:10::i;:::-;11455:8;:16;;-1:-1:-1;;;;11455:16:0;;;11288:195;11495:38;11510:4;11515:2;11518:6;11525:7;11495:14;:38::i;:::-;9513:2028;;;;;;;:::o;1239:190::-;1325:7;1361:12;1353:6;;;;1345:29;;;;-1:-1:-1;;;1345:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1385:9:0;1397:5;1401:1;1397;:5;:::i;:::-;1385:17;1239:190;-1:-1:-1;;;;;1239:190:0:o;24476:1685::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24716:18:0;24724:9;24716:7;:18::i;:::-;24706:28;;;;24786;6298:4;24786:15;:28::i;:::-;24775:7;;24759:24;;;;:15;:24::i;:::-;:55;;;;:::i;:::-;24753:61;-1:-1:-1;24858:26:0;24753:61;6167:8;24858:26;:::i;:::-;24835:49;;;;:::i;:::-;;;24969:3;6298:4;24945:2;:7;;;:21;;;;:::i;:::-;:27;;;;;;:::i;:::-;24926:47;;6115:8;24926:47;:::i;:::-;24903:70;;;;:::i;:::-;;;25020:19;25067:1;25063:5;;25058:392;25075:2;25070:1;:7;;;25058:392;;25145:26;25160:1;25163:2;:7;;;25145:14;:26::i;:::-;25128:43;;;;6071:5;25128:43;:::i;:::-;25111:60;-1:-1:-1;25241:9:0;25202:36;25219:19;25111:60;25202:36;:::i;:::-;:48;25198:169;;;25287:12;;;:8;;;:12;25334:5;;25198:169;25393:37;25416:14;25393:37;;:::i;:::-;;-1:-1:-1;25079:3:0;;;;:::i;:::-;;;;25058:392;;;25503:1;25499:5;;25494:334;25511:33;25526:2;:8;;;25536:2;:7;;;25511:14;:33::i;:::-;25506:38;;:1;:38;;;25494:334;;25621:9;25582:36;25599:19;6071:5;25582:36;:::i;:::-;:48;25578:167;;;25667:10;;;:6;;;:10;25712:5;;25578:167;25771:37;6071:5;25771:37;;:::i;:::-;;-1:-1:-1;25546:3:0;;;;:::i;:::-;;;;25494:334;;;25883:18;25891:9;25883:7;:18::i;:::-;25873:28;;:7;;;:28;25961:20;25971:9;25961;:20::i;:::-;25949:32;;:9;;;:32;26041:20;26051:9;26041;:20::i;:::-;26029:32;;:9;;;:32;26128:21;26139:9;26128:10;:21::i;:::-;26115:34;;:10;;;:34;-1:-1:-1;26115:2:0;;24476:1685;-1:-1:-1;;;;24476:1685:0:o;14158:156::-;14215:14;;-1:-1:-1;;;;;14215:14:0;:38;14239:13;:6;14250:1;14239:10;:13::i;:::-;14215:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14264:18:0;;-1:-1:-1;;;;;14264:18:0;:42;14292:13;:6;14303:1;14292:10;:13::i;:::-;14264:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13228:483;6587:6;:13;;-1:-1:-1;;;;6587:13:0;-1:-1:-1;;;6587:13:0;;;13330:16:::1;::::0;;13344:1:::1;13330:16:::0;;;;;::::1;::::0;;-1:-1:-1;;13330:16:0::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;13330:16:0::1;13306:40;;13375:4;13357;13362:1;13357:7;;;;;;-1:-1:-1::0;;;13357:7:0::1;;;;;;;;;-1:-1:-1::0;;;;;13357:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;13401:15:::1;::::0;:22:::1;::::0;;-1:-1:-1;;;13401:22:0;;;;:15;;;::::1;::::0;:20:::1;::::0;:22:::1;::::0;;::::1;::::0;13357:7;;13401:22;;;;;:15;:22;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13391:4;13396:1;13391:7;;;;;;-1:-1:-1::0;;;13391:7:0::1;;;;;;;;;-1:-1:-1::0;;;;;13391:32:0;;::::1;:7;::::0;;::::1;::::0;;;;;:32;13466:15:::1;::::0;13434:62:::1;::::0;13451:4:::1;::::0;13466:15:::1;13484:11:::0;13434:8:::1;:62::i;:::-;13507:15;::::0;:196:::1;::::0;-1:-1:-1;;;13507:196:0;;-1:-1:-1;;;;;13507:15:0;;::::1;::::0;:66:::1;::::0;:196:::1;::::0;13588:11;;13507:15:::1;::::0;13630:4;;13657::::1;::::0;13677:15:::1;::::0;13507:196:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;6623:6:0;:14;;-1:-1:-1;;;;6623:14:0;;;-1:-1:-1;;;;13228:483:0:o;11549:1671::-;11632:4;11588:23;7771:16;;;:7;:16;;;;;;11588:50;;11649:25;11717:12;;11698:16;;11677:18;;:37;;;;:::i;:::-;:52;;;;:::i;:::-;11649:80;-1:-1:-1;11740:12:0;11776:20;;;:46;;-1:-1:-1;11800:22:0;;11776:46;11773:60;;;11825:7;;;11549:1671::o;11773:60::-;11866:18;;:23;;11887:2;11866:23;:::i;:::-;11848:15;:41;11845:114;;;11924:18;;:23;;11945:2;11924:23;:::i;:::-;11906:41;;11845:114;12028:23;12113:1;12093:17;12072:18;;12054:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;12028:86;-1:-1:-1;12125:26:0;12154:36;:15;12028:86;12154:19;:36::i;:::-;12125:65;-1:-1:-1;12239:21:0;12273:36;12125:65;12273:16;:36::i;:::-;12331:18;12352:44;:21;12378:17;12352:25;:44::i;:::-;12331:65;;12417:23;12443:55;12480:17;12443:32;12458:16;;12443:10;:14;;:32;;;;:::i;:::-;:36;;:55::i;:::-;12417:81;;12509:17;12529:51;12562:17;12529:28;12544:12;;12529:10;:14;;:28;;;;:::i;:51::-;12509:71;-1:-1:-1;12611:23:0;12509:71;12637:28;12650:15;12637:10;:28;:::i;:::-;:40;;;;:::i;:::-;12729:1;12708:18;:22;;;12741:16;:20;;;12772:12;:16;;;12830:18;;12822:54;;12611:66;;-1:-1:-1;;;;;;12830:18:0;;12862:9;;12822:54;12729:1;12822:54;12862:9;12830:18;12822:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12809:67:0;;-1:-1:-1;;12900:19:0;;;;;:42;;;12941:1;12923:15;:19;12900:42;12897:210;;;12958:46;12971:15;12988;12958:12;:46::i;:::-;13076:18;;13024:71;;;19210:25:1;;;19266:2;19251:18;;19244:34;;;19294:18;;;19287:34;;;;13024:71:0;;;;;;19198:2:1;13024:71:0;;;12897:210;13158:14;;13150:62;;-1:-1:-1;;;;;13158:14:0;;;;13186:21;;13150:62;;;;13186:21;13158:14;13150:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;11549:1671:0:o;19588:368::-;19700:7;19696:121;;19724:14;:12;:14::i;:::-;19696:121;;;19780:25;19790:6;19798;19780:9;:25::i;:::-;19771:34;;19696:121;19829:44;19847:6;19855:9;19866:6;19829:17;:44::i;:::-;19898:7;19894:55;;19922:15;19251:21;;19235:13;:37;19301:23;;19283:15;:41;19351:21;;19335:13;:37;19400:22;;19383:14;:39;19446:18;;19433:10;:31;19191:281;1691:132;1749:7;1776:39;1780:1;1783;1776:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;1769:46;1691:132;-1:-1:-1;;;1691:132:0:o;1095:136::-;1153:7;1180:43;1184:1;1187;1180:43;;;;;;;;;;;;;;;;;:3;:43::i;1437:246::-;1495:7;1519:6;1515:47;;-1:-1:-1;1549:1:0;1542:8;;1515:47;1572:9;1584:5;1588:1;1584;:5;:::i;:::-;1572:17;-1:-1:-1;1617:1:0;1608:5;1612:1;1572:17;1608:5;:::i;:::-;:10;1600:56;;;;-1:-1:-1;;;1600:56:0;;12709:2:1;1600:56:0;;;12691:21:1;12748:2;12728:18;;;12721:30;12787:34;12767:18;;;12760:62;-1:-1:-1;;;12838:18:1;;;12831:31;12879:19;;1600:56:0;12681:223:1;13719:423:0;13832:15;;13800:62;;13817:4;;-1:-1:-1;;;;;13832:15:0;13850:11;13800:8;:62::i;:::-;13873:15;;14077:16;;13873:261;;-1:-1:-1;;;13873:261:0;;-1:-1:-1;;;;;13873:15:0;;;;:31;;13912:9;;13873:261;;13945:4;;13965:11;;13873:15;;;;14077:16;;14108:15;;13873:261;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;13719:423;;:::o;18611:568::-;18657:13;;:18;:42;;;;-1:-1:-1;18679:15:0;;:20;18657:42;:64;;;;-1:-1:-1;18703:13:0;;:18;18657:64;:87;;;;-1:-1:-1;18725:14:0;;:19;18657:87;:106;;;;-1:-1:-1;18748:10:0;;:15;18657:106;18654:118;;;18611:568::o;18654:118::-;18816:13;;;18792:21;:37;18866:15;;;18840:23;:41;18916:13;;;18892:21;:37;18965:14;;;18940:22;:39;19011:10;;;18990:18;:31;-1:-1:-1;19042:17:0;;;;19070:19;;;;19100:17;;;;19128:18;;;19157:14;18611:568::o;20239:802::-;20307:7;20327:18;20356:14;20426:12;20405:17;;20384:18;;:38;;;;:::i;:::-;:54;20381:224;;-1:-1:-1;20467:2:0;;-1:-1:-1;20493:2:0;20381:224;;;20541:15;:13;:15::i;:::-;20528:28;;20580:13;;20571:22;;20381:224;20617:12;20632:31;20659:3;20632:22;:6;20643:10;20632;:22::i;:31::-;20617:46;;20749:10;20731:14;;20718:10;;20702:13;;:26;;;;:::i;:::-;:43;;;;:::i;:::-;20694:52;;:4;:52;:::i;:::-;:65;;;;:::i;:::-;20674:16;;:85;;;;;;;:::i;:::-;;;;-1:-1:-1;;20793:15:0;;20811:10;;20786:22;;:4;:22;:::i;:::-;:35;;;;:::i;:::-;20770:12;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;20870:10:0;;-1:-1:-1;20854:13:0;20861:6;20854:4;:13;:::i;:::-;:26;;;;:::i;:::-;20832:18;;:48;;;;;;;:::i;:::-;;;;-1:-1:-1;;20908:8:0;;20905:86;;20933:46;20951:6;20967:4;20974;20933:17;:46::i;:::-;21019:14;21029:4;21019:14;;:::i;:::-;;20239:802;-1:-1:-1;;;;;;20239:802:0:o;19964:267::-;-1:-1:-1;;;;;20080:15:0;;;;;;:7;:15;;;;;;:28;;20100:7;20080:19;:28::i;:::-;-1:-1:-1;;;;;20062:15:0;;;;;;;:7;:15;;;;;;:46;;;;20140:18;;;;;;;:31;;20163:7;20140:22;:31::i;:::-;-1:-1:-1;;;;;20119:18:0;;;;;;;:7;:18;;;;;;;:52;;;;20187:36;;;;;;;;;;20215:7;17984:25:1;;17972:2;17957:18;;17939:76;1831:189:0;1917:7;1952:12;1945:5;1937:28;;;;-1:-1:-1;;;1937:28:0;;;;;;;;:::i;:::-;-1:-1:-1;1976:9:0;1988:5;1992:1;1988;:5;:::i;21744:158::-;21790:7;21884:10;;21867:14;;21851:13;;21833:15;;21817:13;;:31;;;;:::i;:::-;:47;;;;:::i;:::-;:64;;;;:::i;:::-;:77;;;;:::i;:::-;21810:84;;21744:158;:::o;908:179::-;966:7;;998:5;1002:1;998;:5;:::i;:::-;986:17;;1027:1;1022;:6;;1014:46;;;;-1:-1:-1;;;1014:46:0;;9136:2:1;1014:46:0;;;9118:21:1;9175:2;9155:18;;;9148:30;9214:29;9194:18;;;9187:57;9261:18;;1014:46:0;9108:177:1;14:134;82:20;;111:31;82:20;111:31;:::i;:::-;63:85;;;:::o;153:159::-;220:20;;280:6;269:18;;259:29;;249:2;;302:1;299;292:12;317:156;383:20;;443:4;432:16;;422:27;;412:2;;463:1;460;453:12;478:257;537:6;590:2;578:9;569:7;565:23;561:32;558:2;;;611:6;603;596:22;558:2;655:9;642:23;674:31;699:5;674:31;:::i;740:261::-;810:6;863:2;851:9;842:7;838:23;834:32;831:2;;;884:6;876;869:22;831:2;921:9;915:16;940:31;965:5;940:31;:::i;1006:398::-;1074:6;1082;1135:2;1123:9;1114:7;1110:23;1106:32;1103:2;;;1156:6;1148;1141:22;1103:2;1200:9;1187:23;1219:31;1244:5;1219:31;:::i;:::-;1269:5;-1:-1:-1;1326:2:1;1311:18;;1298:32;1339:33;1298:32;1339:33;:::i;:::-;1391:7;1381:17;;;1093:311;;;;;:::o;1409:466::-;1486:6;1494;1502;1555:2;1543:9;1534:7;1530:23;1526:32;1523:2;;;1576:6;1568;1561:22;1523:2;1620:9;1607:23;1639:31;1664:5;1639:31;:::i;:::-;1689:5;-1:-1:-1;1746:2:1;1731:18;;1718:32;1759:33;1718:32;1759:33;:::i;:::-;1513:362;;1811:7;;-1:-1:-1;;;1865:2:1;1850:18;;;;1837:32;;1513:362::o;1880:325::-;1948:6;1956;2009:2;1997:9;1988:7;1984:23;1980:32;1977:2;;;2030:6;2022;2015:22;1977:2;2074:9;2061:23;2093:31;2118:5;2093:31;:::i;:::-;2143:5;2195:2;2180:18;;;;2167:32;;-1:-1:-1;;;1967:238:1:o;2210:1177::-;2294:6;2325:2;2368;2356:9;2347:7;2343:23;2339:32;2336:2;;;2389:6;2381;2374:22;2336:2;2434:9;2421:23;2463:18;2504:2;2496:6;2493:14;2490:2;;;2525:6;2517;2510:22;2490:2;2568:6;2557:9;2553:22;2543:32;;2613:7;2606:4;2602:2;2598:13;2594:27;2584:2;;2640:6;2632;2625:22;2584:2;2681;2668:16;2703:2;2699;2696:10;2693:2;;;2709:18;;:::i;:::-;2755:2;2752:1;2748:10;2787:2;2781:9;2850:2;2846:7;2841:2;2837;2833:11;2829:25;2821:6;2817:38;2905:6;2893:10;2890:22;2885:2;2873:10;2870:18;2867:46;2864:2;;;2916:18;;:::i;:::-;2952:2;2945:22;3002:18;;;3036:15;;;;-1:-1:-1;3071:11:1;;;3101;;;3097:20;;3094:33;-1:-1:-1;3091:2:1;;;3145:6;3137;3130:22;3091:2;3172:6;3163:15;;3187:169;3201:2;3198:1;3195:9;3187:169;;;3258:23;3277:3;3258:23;:::i;:::-;3246:36;;3219:1;3212:9;;;;;3302:12;;;;3334;;3187:169;;;-1:-1:-1;3375:6:1;2305:1082;-1:-1:-1;;;;;;;;2305:1082:1:o;3392:251::-;3448:6;3501:2;3489:9;3480:7;3476:23;3472:32;3469:2;;;3522:6;3514;3507:22;3469:2;3566:9;3553:23;3585:28;3607:5;3585:28;:::i;3648:255::-;3715:6;3768:2;3756:9;3747:7;3743:23;3739:32;3736:2;;;3789:6;3781;3774:22;3736:2;3826:9;3820:16;3845:28;3867:5;3845:28;:::i;3908:194::-;3966:6;4019:2;4007:9;3998:7;3994:23;3990:32;3987:2;;;4040:6;4032;4025:22;3987:2;4068:28;4086:9;4068:28;:::i;4107:190::-;4166:6;4219:2;4207:9;4198:7;4194:23;4190:32;4187:2;;;4240:6;4232;4225:22;4187:2;-1:-1:-1;4268:23:1;;4177:120;-1:-1:-1;4177:120:1:o;4302:316::-;4390:6;4398;4406;4459:2;4447:9;4438:7;4434:23;4430:32;4427:2;;;4480:6;4472;4465:22;4427:2;4514:9;4508:16;4498:26;;4564:2;4553:9;4549:18;4543:25;4533:35;;4608:2;4597:9;4593:18;4587:25;4577:35;;4417:201;;;;;:::o;4623:192::-;4680:6;4733:2;4721:9;4712:7;4708:23;4704:32;4701:2;;;4754:6;4746;4739:22;4701:2;4782:27;4799:9;4782:27;:::i;4820:264::-;4885:6;4893;4946:2;4934:9;4925:7;4921:23;4917:32;4914:2;;;4967:6;4959;4952:22;4914:2;4995:27;5012:9;4995:27;:::i;:::-;4985:37;;5041;5074:2;5063:9;5059:18;5041:37;:::i;:::-;5031:47;;4904:180;;;;;:::o;6095:615::-;-1:-1:-1;;;;;6462:15:1;;;6444:34;;6509:2;6494:18;;6487:34;;;;6552:2;6537:18;;6530:34;;;;6595:2;6580:18;;6573:34;;;;6644:15;;;6638:3;6623:19;;6616:44;6424:3;6676:19;;6669:35;;;;6393:3;6378:19;;6360:350::o;7519:603::-;7631:4;7660:2;7689;7678:9;7671:21;7721:6;7715:13;7764:6;7759:2;7748:9;7744:18;7737:34;7789:4;7802:140;7816:6;7813:1;7810:13;7802:140;;;7911:14;;;7907:23;;7901:30;7877:17;;;7896:2;7873:26;7866:66;7831:10;;7802:140;;;7960:6;7957:1;7954:13;7951:2;;;8030:4;8025:2;8016:6;8005:9;8001:22;7997:31;7990:45;7951:2;-1:-1:-1;8106:2:1;8085:15;-1:-1:-1;;8081:29:1;8066:45;;;;8113:2;8062:54;;7640:482;-1:-1:-1;;;7640:482:1:o;12909:356::-;13111:2;13093:21;;;13130:18;;;13123:30;13189:34;13184:2;13169:18;;13162:62;13256:2;13241:18;;13083:182::o;18020:983::-;18282:4;18330:3;18319:9;18315:19;18361:6;18350:9;18343:25;18387:2;18425:6;18420:2;18409:9;18405:18;18398:34;18468:3;18463:2;18452:9;18448:18;18441:31;18492:6;18527;18521:13;18558:6;18550;18543:22;18596:3;18585:9;18581:19;18574:26;;18635:2;18627:6;18623:15;18609:29;;18656:4;18669:195;18683:6;18680:1;18677:13;18669:195;;;18748:13;;-1:-1:-1;;;;;18744:39:1;18732:52;;18839:15;;;;18804:12;;;;18780:1;18698:9;18669:195;;;-1:-1:-1;;;;;;;18920:32:1;;;;18915:2;18900:18;;18893:60;-1:-1:-1;;;18984:3:1;18969:19;18962:35;18881:3;18291:712;-1:-1:-1;;;18291:712:1:o;19521:128::-;19561:3;19592:1;19588:6;19585:1;19582:13;19579:2;;;19598:18;;:::i;:::-;-1:-1:-1;19634:9:1;;19569:80::o;19654:120::-;19694:1;19720;19710:2;;19725:18;;:::i;:::-;-1:-1:-1;19759:9:1;;19700:74::o;19779:168::-;19819:7;19885:1;19881;19877:6;19873:14;19870:1;19867:21;19862:1;19855:9;19848:17;19844:45;19841:2;;;19892:18;;:::i;:::-;-1:-1:-1;19932:9:1;;19831:116::o;19952:217::-;19991:4;20020:6;20076:10;;;;20046;;20098:12;;;20095:2;;;20113:18;;:::i;:::-;20150:13;;20000:169;-1:-1:-1;;;20000:169:1:o;20174:125::-;20214:4;20242:1;20239;20236:8;20233:2;;;20247:18;;:::i;:::-;-1:-1:-1;20284:9:1;;20223:76::o;20304:135::-;20343:3;-1:-1:-1;;20364:17:1;;20361:2;;;20384:18;;:::i;:::-;-1:-1:-1;20431:1:1;20420:13;;20351:88::o;20444:175::-;20481:3;20525:4;20518:5;20514:16;20554:4;20545:7;20542:17;20539:2;;;20562:18;;:::i;:::-;20611:1;20598:15;;20489:130;-1:-1:-1;;20489:130:1:o;20624:179::-;20655:1;20681:6;20714:2;20711:1;20707:10;20736:3;20726:2;;20743:18;;:::i;:::-;20781:10;;20777:20;;;;;20661:142;-1:-1:-1;;20661:142:1:o;20808:112::-;20840:1;20866;20856:2;;20871:18;;:::i;:::-;-1:-1:-1;20905:9:1;;20846:74::o;20925:127::-;20986:10;20981:3;20977:20;20974:1;20967:31;21017:4;21014:1;21007:15;21041:4;21038:1;21031:15;21057:127;21118:10;21113:3;21109:20;21106:1;21099:31;21149:4;21146:1;21139:15;21173:4;21170:1;21163:15;21189:127;21250:10;21245:3;21241:20;21238:1;21231:31;21281:4;21278:1;21271:15;21305:4;21302:1;21295:15;21321:131;-1:-1:-1;;;;;21396:31:1;;21386:42;;21376:2;;21442:1;21439;21432:12;21457:118;21543:5;21536:13;21529:21;21522:5;21519:32;21509:2;;21565:1;21562;21555:12

Swarm Source

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