ETH Price: $3,388.45 (-1.55%)
Gas: 2 Gwei

Token

Doge-TV ($DGTV)
 

Overview

Max Total Supply

10,000,000 $DGTV

Holders

1,289 (0.00%)

Market

Price

$0.00 @ 0.000000 ETH

Onchain Market Cap

$2,980.60

Circulating Supply Market Cap

$0.00

Other Info

Token Contract (WITH 18 Decimals)

Balance
2,874.586534011259953118 $DGTV

Value
$0.86 ( ~0.000253803131313915 Eth) [0.0287%]
0x941d830d97b1f7a8ecbcf22413af14a5b1299726
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

DogeTV is an innovative deflationary ecosystem born on the Ethereum blockchain (ERC20). By bringing TV and Web3 technology together in a revolutionary way.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
DogeTV

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-10-27
*/

pragma solidity ^0.8.7;
//SPDX-License-Identifier: UNLICENCED
/*
    DogeTV
    8% tax on buy and sell, 8% tax on transfers
    starting taxes: 20/25%
    contract dev: @CryptoBatmanBSC
    Telegram:
    https://t.me/dogetvofficial
    Website: 
    https://Dogetv.app 
*/

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

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

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

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

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

        return c;
    }
}

interface INFTREWARDS {
    function Deposit(uint256 amount) external returns (bool success);
}

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

abstract contract Auth {
    address internal owner;
    mapping (address => bool) internal authorizations;

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

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

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

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

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

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

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

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

    event OwnershipTransferred(address owner);
}

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

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

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

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

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

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

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    
    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}


contract DogeTV is IERC20, Auth {

    struct DogeTvPackage{
        uint256 price;
        uint256 durationDays;
        uint256 packageID;
        string name;
        bool isOnlySpecial;
    }

    struct SubbedTvPackage{
        uint256 subbedTime;
        uint256 expiration_time;
        uint256 packageID;
        uint256 packageVariant;
        bool wasDiscounted;
        bool isSpecial;
    }

    using SafeMath for uint256;
    // fees. all uint8 for gas efficiency and storage.
    /* @dev   
        all fees are set with 1 decimal places added, please remember this when setting fees.
    */
    uint8 public liquidityFee = 20;
    uint8 public marketingFee = 60;
    uint8 public totalFee = 80;

    uint8 public initialSellFee = 250;
    uint8 public initialBuyFee = 200;

    /*
    @dev:
        these are multipled by 10 so that you can have fractional percents
    */
    uint8 public specialPercentHigh = 20;
    uint8 public specialPercentLow = 16;

    uint8 public discountPercentHigh = 15;
    uint8 public discountPercentLow = 10;


    // denominator. uint 16 for storage efficiency - makes the above fees all to 1 dp.
    uint16 public AllfeeDenominator = 1000;
    
    // trading control;
    bool public canTrade = false;
    uint256 public launchedAt;
    
    
    // tokenomics - uint256 BN but located here fro storage efficiency
    uint256 _totalSupply = 1 * 10**7 * (10 **_decimals); //10 mil
    uint256 public _maxTxAmount = _totalSupply / 100; // 1%
    uint256 public _maxHoldAmount = _totalSupply / 50; // 2%
    uint256 public swapThreshold = _totalSupply / 500; // 0.2%

    //Important addresses    
    address USDT = 0xdAC17F958D2ee523a2206206994597C13D831ec7; // mainnet tether, used to get price;
    //address USDT = 0xF99a0CbEa2799f8d4b51709024454F74eD63a86D;
    address DEAD = 0x000000000000000000000000000000000000dEaD;
    address ZERO = 0x0000000000000000000000000000000000000000;

    address public autoLiquidityReceiver;
    address public marketingFeeReceiver;

    address public pair;

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

    mapping (address => bool) public pairs;

    mapping (address => bool) isFeeExempt;
    mapping (address => bool) isTxLimitExempt;
    mapping (address => bool) isMaxHoldExempt;
    mapping (address => bool) isBlacklisted;

    mapping (address => SubbedTvPackage) public userSubs;

    IDEXRouter public router;
    INFTREWARDS public NftStakingContract;


    bool public swapEnabled = true;
    bool inSwap;
    mapping(uint =>  DogeTvPackage) public DtvPackages;
    //DogeTvPackage[] public DtvPackages;
    address[] public subbedUsers;
    uint public totalSubs;
    modifier swapping() { inSwap = true; _; inSwap = false; }

    string constant _name = "Doge-TV";
    string constant _symbol = "$DGTV";
    uint8 constant _decimals = 18;

    bool public initialTaxesEnabled = true;

    constructor (address tokenOwner) Auth(tokenOwner) {
        router = IDEXRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); //Mainnet Uniswap
        pair = IDEXFactory(router.factory()).createPair(router.WETH(), address(this)); // ETH pair
        pairs[pair] = true;
        _allowances[address(this)][address(router)] = _totalSupply;
        isMaxHoldExempt[pair] = true;
        isMaxHoldExempt[DEAD] = true;
        isMaxHoldExempt[ZERO] = true;
        
        owner = tokenOwner;
        DummyNFT nftctrct = new DummyNFT(address(this), owner);
        NftStakingContract = INFTREWARDS(nftctrct);
        isTxLimitExempt[owner] = true;
        isFeeExempt[owner] = true;
        authorizations[owner] = true;
        isMaxHoldExempt[owner] = true;
        autoLiquidityReceiver = owner;
        marketingFeeReceiver = owner;

        _balances[owner] = _totalSupply;

        emit Transfer(address(0), owner, _totalSupply);
    }

    receive() external payable { }

    function totalSupply() external view override returns (uint256) { return _totalSupply; }
    function decimals() external pure override returns (uint8) { return _decimals; }
    function symbol() external pure override returns (string memory) { return _symbol; }
    function name() external pure override returns (string memory) { return _name; }
    function getOwner() external view override returns (address) { return owner; }
    function balanceOf(address account) public view override returns (uint256) { return _balances[account]; }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender];} 

    
    function getEstimatedTokenForUSDT(uint USDTAmount) public view returns (uint) {
            address[] memory path = new address[](3);
                path[0] = USDT;
                path[1] = router.WETH();
                path[2] = address(this);
            return router.getAmountsOut(USDTAmount, path)[2];
    }
    
    function setBlacklistedStatus(address walletToBlacklist, bool isBlacklistedBool)external authorized{
        isBlacklisted[walletToBlacklist] = isBlacklistedBool;
    }

    function setBlacklistArray(address[] calldata walletToBlacklistArray)external authorized{
        for(uint i = 0; i < walletToBlacklistArray.length; i++){
            isBlacklisted[walletToBlacklistArray[i]] = true;
        }
    }

    function getPackageWithId(uint ID) internal view returns (DogeTvPackage memory package){
                return DtvPackages[ID];
    }

    function subToPackage(uint _packageID, uint durationVariant)external returns(bool success){
            /*
             struct SubbedTvPackage{
                uint256 expiration_time;
                uint256 packageID;
                bool wasDiscounted;
                bool isSpecial;
            }
            */
            DogeTvPackage memory pack = getPackageWithId(_packageID);
            // get the price in token
            uint256 tokenPrice = getEstimatedTokenForUSDT(pack.price);
            
            require(_balances[msg.sender] >= tokenPrice, "DogeTV, You dont have enough token for this");
            uint divisor = 1;
            bool isfree = false;
            bool isDiscounted = false;
            uint256 percentageHeld = ((_balances[msg.sender]*10) / _totalSupply) * 100;
            if(percentageHeld >= discountPercentLow && percentageHeld <= discountPercentHigh){
                divisor = 2;
                isDiscounted = true;
            }
            if(percentageHeld > specialPercentLow){
                isfree = true;
            }
            if(pack.isOnlySpecial){
                require(isfree, "DogeTV: this package is not available to anyone not holding the requirements");
            }
            tokenPrice = tokenPrice / divisor;
            SubbedTvPackage memory packageSubbed;
            if(!isfree){
                require(!pack.isOnlySpecial, "DTV, only high percentage holders can have this package");
                _balances[msg.sender] -= tokenPrice;
                _balances[DEAD] += tokenPrice /2;
                emit Transfer(msg.sender, DEAD, tokenPrice/2);
                _balances[address(NftStakingContract)]+= tokenPrice/2;
                NftStakingContract.Deposit(tokenPrice/2);
                emit Transfer(msg.sender, address(NftStakingContract), tokenPrice/2);
            }
            
            packageSubbed.packageID =  pack.packageID;
            packageSubbed.wasDiscounted = isDiscounted;
            packageSubbed.isSpecial = isfree;
            packageSubbed.subbedTime = block.timestamp;
            packageSubbed.packageVariant = durationVariant;
            packageSubbed.expiration_time = block.timestamp + pack.durationDays * 86400;
            emit PackageSubbed(msg.sender, pack.name);
            userSubs[msg.sender] = packageSubbed;
            subbedUsers.push(msg.sender);
            return true;
    }

    function checkSubs(address user)internal view returns (bool wasdiscounted, bool isSpecial){
        return (userSubs[user].wasDiscounted,userSubs[user].isSpecial );
    }

    function getSubbedUsersLength()external view returns (uint SubbedUsersLength){
        return subbedUsers.length;
    }

    function setNFTContract(INFTREWARDS ctrct)external authorized{
        NftStakingContract = ctrct;
    }

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

    function setSwapThresholdDivisor(uint divisor)external authorized {
        require(divisor >= 100, "DogeTV: max sell percent is 1%");
        swapThreshold = _totalSupply / divisor;
    }
    
    function approveMax(address spender) external returns (bool) {
        return approve(spender, _totalSupply);
    }
    
    function setmaxholdpercentage(uint256 percentageMul10) external authorized {
        require(percentageMul10 >= 5, "DogeTV, max hold cannot be less than 0.5%"); // cant change percentage below 0.5%, so everyone can hold the percentage
        _maxHoldAmount = _totalSupply * percentageMul10 / 1000; // percentage based on amount
    }
    
    function allowtrading()external authorized {
        canTrade = true;
    }
    
    function addNewPair(address newPair)external authorized{
        pairs[newPair] = true;
        isMaxHoldExempt[newPair] = true;
    }
    
    function removePair(address pairToRemove)external authorized{
        pairs[pairToRemove] = false;
        isMaxHoldExempt[pairToRemove] = false;
    }

    function addTVPackage( uint256 ppvID, uint256 _USDTPriceNoDecimals, uint256 _durationDays, string calldata packName, bool onlyTopHolders) external authorized {
        DogeTvPackage memory packageToAdd;
        packageToAdd.durationDays = _durationDays;
        packageToAdd.packageID = ppvID;
        packageToAdd.name = packName;
        packageToAdd.price = _USDTPriceNoDecimals * 10 ** 18;
        packageToAdd.isOnlySpecial = onlyTopHolders;
        DtvPackages[ppvID] = packageToAdd;
    }

    function changeTvPackagePrice(uint256 _ID, uint256 newPrice) external authorized returns(bool success){
                DtvPackages[_ID].price = newPrice * 10 ** 18;
                return true;
    }

    function removeTvPackage(uint256 _ID) external authorized returns(bool success){
                delete DtvPackages[_ID];
                return true;
    }
    
    function transfer(address recipient, uint256 amount) external override returns (bool) {
        return _transferFrom(msg.sender, recipient, amount);
    }

    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        if(_allowances[sender][msg.sender] != uint256(_totalSupply)){
            _allowances[sender][msg.sender] = _allowances[sender][msg.sender].sub(amount, "Insufficient Allowance");
        }

        return _transferFrom(sender, recipient, amount);
    }

    function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {

        if(!canTrade){
            require(sender == owner, "DogeTV, Only owner or presale Contract allowed to add LP"); // only owner allowed to trade or add liquidity
        }
        if(sender != owner && recipient != owner){
            if(!pairs[recipient] && !isMaxHoldExempt[recipient]){
                require (balanceOf(recipient) + amount <= _maxHoldAmount, "DogeTV, cant hold more than max hold dude, sorry");
            }
        }
        
        checkTxLimit(sender, recipient, amount);
        require(!isBlacklisted[sender] && !isBlacklisted[recipient], "DogeTV, Sorry bro, youre blacklisted");
        if(!launched() && pairs[recipient]){ require(_balances[sender] > 0); launch(); }
        if(inSwap){ return _basicTransfer(sender, recipient, amount); }
        
        _balances[sender] = _balances[sender].sub(amount, "DogeTV, Insufficient Balance");

        if(pairs[recipient]){
            // its a sell
            /*
                struct SubbedTvPackage{
                    uint256 subbedTime;
                    uint256 expiration_time;
                    uint256 packageID;
                    uint256 packageVariant;
                    bool wasDiscounted;
                    bool isSpecial;
                }
            */
            (bool discounted, bool special) = checkSubs(sender);
            if(special){
                if((_balances[sender] * 10 /100) < specialPercentLow){ // theyve crossed the threshold
                    delete userSubs[sender];
                    emit SubWithdrawn(sender);
                }
            }
            if(discounted){
                 if((_balances[sender] * 10 /100) < discountPercentLow){ // theyve crossed the threshold
                     userSubs[sender].expiration_time = userSubs[sender].subbedTime + ((userSubs[sender].expiration_time - userSubs[sender].subbedTime) / 2);
                     if(userSubs[sender].expiration_time >= block.timestamp){
                        delete userSubs[sender];
                        emit SubWithdrawn(sender);
                     }
                }
            }
        }

        uint256 amountReceived = 0;
        if(!shouldTakeFee(sender) || !shouldTakeFee(recipient)){
            amountReceived = amount;
        }else{
            bool isbuy = pairs[sender];
            amountReceived = takeFee(sender, isbuy, amount);
        }

        if(shouldSwapBack(recipient)){ swapBack(); }

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

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

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

    function checkTxLimit(address sender, address reciever, uint256 amount) internal view {
        if(sender != owner && reciever != owner){
            require(amount <= _maxTxAmount || isTxLimitExempt[sender], "TX Limit Exceeded");
        }
    }

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

    function takeFee(address sender, bool isBuy, uint256 amount) internal returns (uint256) {
        uint fee = totalFee;
        if(initialTaxesEnabled){
            fee = initialSellFee;
            if(isBuy){
                fee = initialBuyFee;
            }
        }

        uint256 feeAmount = amount.mul(fee).div(AllfeeDenominator);
        
        _balances[address(this)] = _balances[address(this)].add(feeAmount);
        emit Transfer(sender, address(this), feeAmount);

        return amount.sub(feeAmount);
    }

    function setInitialfees(uint8 _initialBuyFeePercentMul10, uint8 _initialSellFeePercentMul10) external authorized {
        if(initialBuyFee >= _initialBuyFeePercentMul10){initialBuyFee = _initialBuyFeePercentMul10;}else{initialTaxesEnabled = false;}
        if(initialSellFee >= _initialSellFeePercentMul10){initialSellFee = _initialSellFeePercentMul10;}else{initialTaxesEnabled = false;}
    }

    // returns any mis-sent tokens to the marketing wallet
    function claimtokensback(IERC20 tokenAddress) external authorized {
        payable(marketingFeeReceiver).transfer(address(this).balance);
        tokenAddress.transfer(marketingFeeReceiver, tokenAddress.balanceOf(address(this)));
    }

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

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

    function stopInitialTax()external authorized{
        // this can only ever be called once
        initialTaxesEnabled = false;
    }

    function setTxLimit(uint256 amount) external authorized {
        require(amount >= _totalSupply / 200, "DogeTV, must be higher than 0.5%");
        require(amount > _maxTxAmount, "DogeTV, can only ever increase the tx limit");
        _maxTxAmount = amount;
    }

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


    function setIsTxLimitExempt(address holder, bool exempt) external authorized {
        isTxLimitExempt[holder] = exempt;
    }
    /*
    Dev sets the individual buy fees
    */
    function setFees(uint8 _liquidityFeeMul10, uint8 _marketingFeeMul10) external authorized {
        require(_liquidityFeeMul10 + _marketingFeeMul10 <= 80, "DogeTV taxes can never exceed 8%");
        require(_liquidityFeeMul10 + _marketingFeeMul10 <= totalFee, "Dogetv, taxes can only ever change ratio");
        liquidityFee = _liquidityFeeMul10;
        marketingFee = _marketingFeeMul10;
       
        totalFee = _liquidityFeeMul10 + (_marketingFeeMul10) ;
    }

    function setSpecialPackPercentages(uint8 percentLowerMul10, uint8 percentHigherMul10) external authorized {
        
        specialPercentHigh = percentHigherMul10;
        specialPercentLow = percentLowerMul10;
       
    }

    function setDiscountPackPercentages(uint8 percentLowerMul10, uint8 percentHigherMul10) external authorized {
        
        discountPercentHigh = percentHigherMul10;
        discountPercentLow = percentLowerMul10;
       
    }
    
    function swapBack() internal swapping {
        uint256 amountToLiquify = 0;
        if(liquidityFee > 0){
            amountToLiquify = swapThreshold.mul(liquidityFee).div(totalFee).div(2); // leave some tokens for liquidity addition
        }
        
        uint256 amountToSwap = swapThreshold.sub(amountToLiquify); // swap everything bar the liquidity tokens. we need to add a pair

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();
        uint256 balanceBefore = address(this).balance;
        
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amountToSwap,
            0,
            path,
            address(this),
            block.timestamp + 100
        );

        uint256 amountETH = address(this).balance.sub(balanceBefore);
        
        uint256 totalETHFee = totalFee - (liquidityFee /2);
        if(totalETHFee > 0){
            uint256 amountETHMarketing = 0;
            if(marketingFee > 0){
                amountETHMarketing = amountETH.mul(marketingFee).div(totalETHFee);
                payable(marketingFeeReceiver).transfer(amountETHMarketing);
            }
            if(amountToLiquify > 0){
                
                uint256 amountETHLiquidity = amountETH - amountETHMarketing;
                router.addLiquidityETH{value: amountETHLiquidity}(
                    address(this),
                    amountToLiquify,
                    0,
                    0,
                    autoLiquidityReceiver,
                    block.timestamp
                );
                emit AutoLiquify(amountETHLiquidity, amountToLiquify);
            }
        }
    }

    function setFeeReceivers(address _autoLiquidityReceiver, address _marketingFeeReceiver) external authorized {
        autoLiquidityReceiver = _autoLiquidityReceiver;
        marketingFeeReceiver = _marketingFeeReceiver;
    }

    function setSwapBackSettings(bool _enabled, uint256 _amount) external authorized {
        swapEnabled = _enabled;
        swapThreshold = _amount;
    }
    
    function shouldSwapBack(address recipient) internal view returns (bool) {
        return !inSwap
        && swapEnabled
        && pairs[recipient]
        && _balances[address(this)] >= swapThreshold;
    }
    
    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(ZERO));
    }

    event AutoLiquify(uint256 amountPairToken, uint256 amountToken);
    event PackageSubbed(address user,string packName);
    event SubWithdrawn(address user);

}

contract DummyNFT is INFTREWARDS {

    address public owner;
    IERC20 public rewardToken;
    uint256 oldBalance;

    function Deposit(uint amount) external override returns (bool success) {
        require(oldBalance + amount == rewardToken.balanceOf(address(this)));
        // reflect the amount here
        oldBalance = rewardToken.balanceOf(address(this));
        return true;

    }

    function claimTokensBack()external {
        require(msg.sender == owner);
        rewardToken.transfer(msg.sender, rewardToken.balanceOf(address(this)));
        oldBalance = rewardToken.balanceOf(address(this));
    }

     constructor (address rewardsToken, address _owner){
         owner = _owner;
         rewardToken = IERC20(rewardsToken);
     }

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"tokenOwner","type":"address"}],"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":"amountPairToken","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountToken","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"string","name":"packName","type":"string"}],"name":"PackageSubbed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"}],"name":"SubWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"AllfeeDenominator","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"DtvPackages","outputs":[{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"durationDays","type":"uint256"},{"internalType":"uint256","name":"packageID","type":"uint256"},{"internalType":"string","name":"name","type":"string"},{"internalType":"bool","name":"isOnlySpecial","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NftStakingContract","outputs":[{"internalType":"contract INFTREWARDS","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxHoldAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newPair","type":"address"}],"name":"addNewPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"ppvID","type":"uint256"},{"internalType":"uint256","name":"_USDTPriceNoDecimals","type":"uint256"},{"internalType":"uint256","name":"_durationDays","type":"uint256"},{"internalType":"string","name":"packName","type":"string"},{"internalType":"bool","name":"onlyTopHolders","type":"bool"}],"name":"addTVPackage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allowtrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"authorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoLiquidityReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"canTrade","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_ID","type":"uint256"},{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"changeTvPackagePrice","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"tokenAddress","type":"address"}],"name":"claimtokensback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"discountPercentHigh","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"discountPercentLow","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"USDTAmount","type":"uint256"}],"name":"getEstimatedTokenForUSDT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSubbedUsersLength","outputs":[{"internalType":"uint256","name":"SubbedUsersLength","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initialBuyFee","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initialSellFee","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initialTaxesEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"isAuthorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFee","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFee","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFeeReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"pairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pairToRemove","type":"address"}],"name":"removePair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_ID","type":"uint256"}],"name":"removeTvPackage","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"walletToBlacklistArray","type":"address[]"}],"name":"setBlacklistArray","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"walletToBlacklist","type":"address"},{"internalType":"bool","name":"isBlacklistedBool","type":"bool"}],"name":"setBlacklistedStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"percentLowerMul10","type":"uint8"},{"internalType":"uint8","name":"percentHigherMul10","type":"uint8"}],"name":"setDiscountPackPercentages","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_autoLiquidityReceiver","type":"address"},{"internalType":"address","name":"_marketingFeeReceiver","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_liquidityFeeMul10","type":"uint8"},{"internalType":"uint8","name":"_marketingFeeMul10","type":"uint8"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_initialBuyFeePercentMul10","type":"uint8"},{"internalType":"uint8","name":"_initialSellFeePercentMul10","type":"uint8"}],"name":"setInitialfees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract INFTREWARDS","name":"ctrct","type":"address"}],"name":"setNFTContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"percentLowerMul10","type":"uint8"},{"internalType":"uint8","name":"percentHigherMul10","type":"uint8"}],"name":"setSpecialPackPercentages","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setSwapThresholdDivisor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percentageMul10","type":"uint256"}],"name":"setmaxholdpercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"specialPercentHigh","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"specialPercentLow","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stopInitialTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_packageID","type":"uint256"},{"internalType":"uint256","name":"durationVariant","type":"uint256"}],"name":"subToPackage","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"subbedUsers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalFee","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSubs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"adr","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"unauthorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userSubs","outputs":[{"internalType":"uint256","name":"subbedTime","type":"uint256"},{"internalType":"uint256","name":"expiration_time","type":"uint256"},{"internalType":"uint256","name":"packageID","type":"uint256"},{"internalType":"uint256","name":"packageVariant","type":"uint256"},{"internalType":"bool","name":"wasDiscounted","type":"bool"},{"internalType":"bool","name":"isSpecial","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600280546001600160601b0319166a03e80a0f1014c8fa503c141790556200002f6012600a6200057f565b6200003e906298968062000640565b600455606460045462000052919062000513565b600555603260045462000066919062000513565b6006556101f46004546200007b919062000513565b600755600880546001600160a01b031990811673dac17f958d2ee523a2206206994597c13d831ec71790915560098054821661dead179055600a805490911690556017805460ff60a01b1916600160a01b179055601b805460ff19166001179055348015620000e957600080fd5b506040516200476b3803806200476b8339810160408190526200010c91620004e1565b600080546001600160a01b03199081166001600160a01b0384169081178355825260016020818152604093849020805460ff191690921790915560168054737a250d5630b4cf539739df2c5dacb4c659f2488d931683179055825163c45a015560e01b81529251919263c45a01559260048083019392829003018186803b1580156200019757600080fd5b505afa158015620001ac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001d29190620004e1565b6001600160a01b031663c9c65396601660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200022f57600080fd5b505afa15801562000244573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200026a9190620004e1565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604401602060405180830381600087803b158015620002b257600080fd5b505af1158015620002c7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ed9190620004e1565b600d80546001600160a01b039283166001600160a01b0319918216811783556000908152601060209081526040808320805460ff19908116600190811790925560045430808752600f86528487206016548b16885286528487209190915596548816855260139093528184208054841682179055600954871684528184208054841682179055600a5487168452818420805490931617909155815494861694909216841781559051909290620003a390620004d3565b6001600160a01b03928316815291166020820152604001604051809103906000f080158015620003d7573d6000803e3d6000fd5b50601780546001600160a01b038084166001600160a01b0319928316179092556000805483168152601260209081526040808320805460ff199081166001908117909255845487168552601184528285208054821683179055845487168552818452828520805482168317905584548716855260138452828520805490911690911790558254600b805486169187169182179055600c80549095168117909455600454938352600e90915280822083905581549051949550909216927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91620004c39190815260200190565b60405180910390a3505062000678565b6104ee806200427d83390190565b600060208284031215620004f457600080fd5b81516001600160a01b03811681146200050c57600080fd5b9392505050565b6000826200053157634e487b7160e01b600052601260045260246000fd5b500490565b600181815b80851115620005775781600019048211156200055b576200055b62000662565b808516156200056957918102915b93841c93908002906200053b565b509250929050565b60006200050c60ff8416836000826200059b575060016200063a565b81620005aa575060006200063a565b8160018114620005c35760028114620005ce57620005ee565b60019150506200063a565b60ff841115620005e257620005e262000662565b50506001821b6200063a565b5060208310610133831016604e8410600b841016171562000613575081810a6200063a565b6200061f838362000536565b806000190482111562000636576200063662000662565b0290505b92915050565b60008160001904831182151516156200065d576200065d62000662565b500290565b634e487b7160e01b600052601160045260246000fd5b613bf580620006886000396000f3fe6080604052600436106103fe5760003560e01c80637d1db4a511610213578063ca33e64c11610123578063f0b37c04116100ab578063f84ba65d1161007a578063f84ba65d14610cce578063f887ea4014610cee578063fe33b30214610d0e578063fe9fbb8014610d3e578063ffcc1fa814610d5e57600080fd5b8063f0b37c0414610c58578063f1366d9a14610c78578063f2fde38b14610c98578063f5676f8f14610cb857600080fd5b8063dd62ed3e116100f2578063dd62ed3e14610b92578063df20fd4914610bd8578063e405be2914610bf8578063e96fada214610c18578063ee8969c514610c3857600080fd5b8063ca33e64c14610b11578063d90ec3a714610b31578063daa09bf814610b51578063dbc993db14610b7157600080fd5b8063a4b45c00116101a6578063a9059cbb11610175578063a9059cbb14610a7b578063af6c9c1d14610a9b578063b00755df14610abb578063b6a5d7de14610adb578063bf56b37114610afb57600080fd5b8063a4b45c0014610a06578063a633423114610a26578063a7ccabdf14610a3b578063a8aa1b3114610a5b57600080fd5b80639215a2a4116101e25780639215a2a41461097b57806395d89b411461099e57806398118cb4146109cc578063a41d40e1146109e657600080fd5b80637d1db4a5146108a057806381530a92146108b6578063893d20e8146108d65780638f3184cd146108f457600080fd5b80633ab045de1161030e578063683c3063116102a15780636f2a4914116102705780636f2a4914146107f557806370a082311461080a578063715b1c3b14610840578063759f62a6146108605780637bdd90f01461088057600080fd5b8063683c30631461077f5780636b67c4df146107a05780636bad6a6a146107bf5780636ddd1713146107d457600080fd5b8063571ac8b0116102dd578063571ac8b0146106ff5780635c85974f1461071f578063658d4b7f1461073f57806366bb5dd31461075f57600080fd5b80633ab045de1461066a578063413f60921461069f57806342c7a6f7146106bf5780634fcd2446146106df57600080fd5b806321d13a66116103915780632f05205c116103605780632f05205c146105ca5780632f54bf6e146105eb578063313ce5671461061a57806331e02e0b1461062e57806332406b351461065057600080fd5b806321d13a661461055257806323b872dd146105745780632b112e49146105945780632b36a6d2146105a957600080fd5b806318160ddd116103cd57806318160ddd146104cf5780631936d368146104e45780631df4ccfc1461051c5780631fc9efa11461053c57600080fd5b80630445b6671461040a57806306fdde0314610433578063095ea7b31461046c5780631720513f1461049c57600080fd5b3661040557005b600080fd5b34801561041657600080fd5b5061042060075481565b6040519081526020015b60405180910390f35b34801561043f57600080fd5b506040805180820190915260078152662237b3b296aa2b60c91b60208201525b60405161042a919061391c565b34801561047857600080fd5b5061048c61048736600461356e565b610d8f565b604051901515815260200161042a565b3480156104a857600080fd5b506002546104bd90600160301b900460ff1681565b60405160ff909116815260200161042a565b3480156104db57600080fd5b50600454610420565b3480156104f057600080fd5b506105046104ff36600461370f565b610dfc565b6040516001600160a01b03909116815260200161042a565b34801561052857600080fd5b506002546104bd9062010000900460ff1681565b34801561054857600080fd5b5061042060065481565b34801561055e57600080fd5b5061057261056d366004613834565b610e26565b005b34801561058057600080fd5b5061048c61058f3660046134ff565b610e8c565b3480156105a057600080fd5b50610420610f50565b3480156105b557600080fd5b506002546104bd906301000000900460ff1681565b3480156105d657600080fd5b5060025461048c90600160581b900460ff1681565b3480156105f757600080fd5b5061048c61060636600461348c565b6000546001600160a01b0391821691161490565b34801561062657600080fd5b5060126104bd565b34801561063a57600080fd5b506002546104bd90640100000000900460ff1681565b34801561065c57600080fd5b50601b5461048c9060ff1681565b34801561067657600080fd5b5060025461068c90600160481b900461ffff1681565b60405161ffff909116815260200161042a565b3480156106ab57600080fd5b50601754610504906001600160a01b031681565b3480156106cb57600080fd5b506105726106da366004613834565b610fa2565b3480156106eb57600080fd5b506105726106fa366004613834565b61104b565b34801561070b57600080fd5b5061048c61071a36600461348c565b611187565b34801561072b57600080fd5b5061057261073a36600461370f565b611195565b34801561074b57600080fd5b5061057261075a366004613540565b611282565b34801561076b57600080fd5b5061057261077a36600461348c565b6112d2565b34801561078b57600080fd5b506002546104bd90600160381b900460ff1681565b3480156107ac57600080fd5b506002546104bd90610100900460ff1681565b3480156107cb57600080fd5b50601954610420565b3480156107e057600080fd5b5060175461048c90600160a01b900460ff1681565b34801561080157600080fd5b50610572611435565b34801561081657600080fd5b5061042061082536600461348c565b6001600160a01b03166000908152600e602052604090205490565b34801561084c57600080fd5b5061057261085b36600461370f565b611466565b34801561086c57600080fd5b5061057261087b366004613540565b61150f565b34801561088c57600080fd5b5061048c61089b36600461370f565b61155f565b3480156108ac57600080fd5b5061042060055481565b3480156108c257600080fd5b5061048c6108d1366004613741565b6115c8565b3480156108e257600080fd5b506000546001600160a01b0316610504565b34801561090057600080fd5b5061094a61090f36600461348c565b601560205260009081526040902080546001820154600283015460038401546004909401549293919290919060ff8082169161010090041686565b60408051968752602087019590955293850192909252606084015215156080830152151560a082015260c00161042a565b34801561098757600080fd5b506002546104bd9065010000000000900460ff1681565b3480156109aa57600080fd5b50604080518082019091526005815264122223aa2b60d91b602082015261045f565b3480156109d857600080fd5b506002546104bd9060ff1681565b3480156109f257600080fd5b50610572610a0136600461348c565b611619565b348015610a1257600080fd5b50610572610a213660046134c6565b61167a565b348015610a3257600080fd5b506105726116cd565b348015610a4757600080fd5b50610572610a5636600461348c565b611707565b348015610a6757600080fd5b50600d54610504906001600160a01b031681565b348015610a8757600080fd5b5061048c610a9636600461356e565b61174e565b348015610aa757600080fd5b50610572610ab636600461348c565b61175b565b348015610ac757600080fd5b5061048c610ad6366004613741565b6117b6565b348015610ae757600080fd5b50610572610af636600461348c565b611cfe565b348015610b0757600080fd5b5061042060035481565b348015610b1d57600080fd5b50600b54610504906001600160a01b031681565b348015610b3d57600080fd5b50610572610b4c366004613791565b611d4f565b348015610b5d57600080fd5b50610572610b6c366004613834565b611e71565b348015610b7d57600080fd5b506002546104bd90600160401b900460ff1681565b348015610b9e57600080fd5b50610420610bad3660046134c6565b6001600160a01b039182166000908152600f6020908152604080832093909416825291909152205490565b348015610be457600080fd5b50610572610bf33660046136f1565b611ed0565b348015610c0457600080fd5b50610572610c1336600461359a565b611f17565b348015610c2457600080fd5b50600c54610504906001600160a01b031681565b348015610c4457600080fd5b50610420610c5336600461370f565b611fb3565b348015610c6457600080fd5b50610572610c7336600461348c565b612181565b348015610c8457600080fd5b50610572610c9336600461370f565b6121cc565b348015610ca457600080fd5b50610572610cb336600461348c565b612256565b348015610cc457600080fd5b50610420601a5481565b348015610cda57600080fd5b50610572610ce9366004613540565b6122ec565b348015610cfa57600080fd5b50601654610504906001600160a01b031681565b348015610d1a57600080fd5b5061048c610d2936600461348c565b60106020526000908152604090205460ff1681565b348015610d4a57600080fd5b5061048c610d5936600461348c565b61233c565b348015610d6a57600080fd5b50610d7e610d7936600461370f565b61235a565b60405161042a9594939291906139c9565b336000818152600f602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610dea9086815260200190565b60405180910390a35060015b92915050565b60198181548110610e0c57600080fd5b6000918252602090912001546001600160a01b0316905081565b610e2f3361233c565b610e545760405162461bcd60e51b8152600401610e4b9061394f565b60405180910390fd5b6002805466ffff000000000019166501000000000060ff9384160266ff000000000000191617600160301b9390921692909202179055565b6004546001600160a01b0384166000908152600f60209081526040808320338452909152812054909114610f3b576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152600f82528381203382529091529190912054610f16918490612416565b6001600160a01b0385166000908152600f602090815260408083203384529091529020555b610f46848484612450565b90505b9392505050565b600a546001600160a01b03166000908152600e6020526040812054610f9d906009546001600160a01b03166000908152600e6020526040902054610f979060045490612ad1565b90612ad1565b905090565b610fab3361233c565b610fc75760405162461bcd60e51b8152600401610e4b9061394f565b60025460ff8084166401000000009092041610610ffd576002805464ff00000000191664010000000060ff851602179055611008565b601b805460ff191690555b60025460ff8083166301000000909204161061103c576002805460ff831663010000000263ff000000199091161790555050565b601b805460ff191690555b5050565b6110543361233c565b6110705760405162461bcd60e51b8152600401610e4b9061394f565b605061107c8284613a1a565b60ff1611156110cd5760405162461bcd60e51b815260206004820181905260248201527f446f676554562074617865732063616e206e65766572206578636565642038256044820152606401610e4b565b60025462010000900460ff166110e38284613a1a565b60ff1611156111455760405162461bcd60e51b815260206004820152602860248201527f446f676574762c2074617865732063616e206f6e6c792065766572206368616e604482015267676520726174696f60c01b6064820152608401610e4b565b6002805460ff8381166101000261ffff199092169085161717905561116a8183613a1a565b6002806101000a81548160ff021916908360ff1602179055505050565b6000610df682600454610d8f565b61119e3361233c565b6111ba5760405162461bcd60e51b8152600401610e4b9061394f565b60c86004546111c99190613a3f565b8110156112185760405162461bcd60e51b815260206004820181905260248201527f446f676554562c206d75737420626520686967686572207468616e20302e35256044820152606401610e4b565b600554811161127d5760405162461bcd60e51b815260206004820152602b60248201527f446f676554562c2063616e206f6e6c79206576657220696e637265617365207460448201526a1a19481d1e081b1a5b5a5d60aa1b6064820152608401610e4b565b600555565b61128b3361233c565b6112a75760405162461bcd60e51b8152600401610e4b9061394f565b6001600160a01b03919091166000908152601160205260409020805460ff1916911515919091179055565b6112db3361233c565b6112f75760405162461bcd60e51b8152600401610e4b9061394f565b600c546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015611330573d6000803e3d6000fd5b50600c546040516370a0823160e01b81523060048201526001600160a01b038381169263a9059cbb9291169083906370a082319060240160206040518083038186803b15801561137f57600080fd5b505afa158015611393573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113b79190613728565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b1580156113fd57600080fd5b505af1158015611411573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061104791906136d4565b61143e3361233c565b61145a5760405162461bcd60e51b8152600401610e4b9061394f565b601b805460ff19169055565b61146f3361233c565b61148b5760405162461bcd60e51b8152600401610e4b9061394f565b60058110156114ee5760405162461bcd60e51b815260206004820152602960248201527f446f676554562c206d617820686f6c642063616e6e6f74206265206c657373206044820152687468616e20302e352560b81b6064820152608401610e4b565b6103e8816004546114ff9190613a75565b6115099190613a3f565b60065550565b6115183361233c565b6115345760405162461bcd60e51b8152600401610e4b9061394f565b6001600160a01b03919091166000908152601460205260409020805460ff1916911515919091179055565b600061156a3361233c565b6115865760405162461bcd60e51b8152600401610e4b9061394f565b60008281526018602052604081208181556001810182905560028101829055906115b360038301826133a5565b50600401805460ff191690555060015b919050565b60006115d33361233c565b6115ef5760405162461bcd60e51b8152600401610e4b9061394f565b61160182670de0b6b3a7640000613a75565b60008481526018602052604090205550600192915050565b6116223361233c565b61163e5760405162461bcd60e51b8152600401610e4b9061394f565b6001600160a01b031660009081526010602090815260408083208054600160ff1991821681179092556013909352922080549091169091179055565b6116833361233c565b61169f5760405162461bcd60e51b8152600401610e4b9061394f565b600b80546001600160a01b039384166001600160a01b031991821617909155600c8054929093169116179055565b6116d63361233c565b6116f25760405162461bcd60e51b8152600401610e4b9061394f565b6002805460ff60581b1916600160581b179055565b6117103361233c565b61172c5760405162461bcd60e51b8152600401610e4b9061394f565b601780546001600160a01b0319166001600160a01b0392909216919091179055565b6000610f49338484612450565b6117643361233c565b6117805760405162461bcd60e51b8152600401610e4b9061394f565b6001600160a01b03166000908152601060209081526040808320805460ff19908116909155601390925290912080549091169055565b6000806117c284612b13565b905060006117d38260000151611fb3565b336000908152600e60205260409020549091508111156118495760405162461bcd60e51b815260206004820152602b60248201527f446f676554562c20596f7520646f6e74206861766520656e6f75676820746f6b60448201526a656e20666f72207468697360a81b6064820152608401610e4b565b600454336000908152600e6020526040812054600192829182919061186f90600a613a75565b6118799190613a3f565b611884906064613a75565b600254909150600160401b900460ff1681108015906118af5750600254600160381b900460ff168111155b156118bd5760029350600191505b600254600160301b900460ff168111156118d657600192505b85608001511561196857826119685760405162461bcd60e51b815260206004820152604c60248201527f446f676554563a2074686973207061636b616765206973206e6f74206176616960448201527f6c61626c6520746f20616e796f6e65206e6f7420686f6c64696e67207468652060648201526b726571756972656d656e747360a01b608482015260a401610e4b565b6119728486613a3f565b94506119b16040518060c00160405280600081526020016000815260200160008152602001600081526020016000151581526020016000151581525090565b83611bc557866080015115611a2e5760405162461bcd60e51b815260206004820152603760248201527f4454562c206f6e6c7920686967682070657263656e7461676520686f6c64657260448201527f732063616e20686176652074686973207061636b6167650000000000000000006064820152608401610e4b565b336000908152600e602052604081208054889290611a4d908490613a94565b90915550611a5e9050600287613a3f565b6009546001600160a01b03166000908152600e602052604081208054909190611a88908490613a02565b90915550506009546001600160a01b031633600080516020613ba0833981519152611ab460028a613a3f565b60405190815260200160405180910390a3611ad0600287613a3f565b6017546001600160a01b03166000908152600e602052604081208054909190611afa908490613a02565b90915550506017546001600160a01b0316634d6ce1e5611b1b600289613a3f565b6040518263ffffffff1660e01b8152600401611b3991815260200190565b602060405180830381600087803b158015611b5357600080fd5b505af1158015611b67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b8b91906136d4565b506017546001600160a01b031633600080516020613ba0833981519152611bb360028a613a3f565b60405190815260200160405180910390a35b60408088015190820152821515608082015283151560a0820152428152606081018990526020870151611bfb9062015180613a75565b611c059042613a02565b602082015260608701516040517f39dc1b34ded6b839d48dab8499d0500ef59a8747e57b4c3216747b22ede5a25191611c40913391906138f8565b60405180910390a133600081815260156020908152604080832085518155918501516001808401919091559085015160028301556060850151600383015560808501516004909201805460a09096015161ffff1990961692151561ff001916929092176101009515159590950294909417905560198054808501825591527f944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c96950180546001600160a01b03191690911790559998505050505050505050565b6000546001600160a01b03163314611d285760405162461bcd60e51b8152600401610e4b9061392f565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b611d583361233c565b611d745760405162461bcd60e51b8152600401610e4b9061394f565b611da86040518060a00160405280600081526020016000815260200160008152602001606081526020016000151581525090565b602080820186905260408083018990528051601f86018390048302810183019091528481529085908590819084018382808284376000920191909152505050506060820152611dff86670de0b6b3a7640000613a75565b815281151560808201526000878152601860209081526040918290208351815581840151600182015591830151600283015560608301518051849392611e4c9260038501929101906133e2565b50608091909101516004909101805460ff191691151591909117905550505050505050565b611e7a3361233c565b611e965760405162461bcd60e51b8152600401610e4b9061394f565b6002805468ffff000000000000001916600160381b60ff9384160268ff0000000000000000191617600160401b9390921692909202179055565b611ed93361233c565b611ef55760405162461bcd60e51b8152600401610e4b9061394f565b60178054921515600160a01b0260ff60a01b1990931692909217909155600755565b611f203361233c565b611f3c5760405162461bcd60e51b8152600401610e4b9061394f565b60005b81811015611fae57600160146000858585818110611f5f57611f5f613b50565b9050602002016020810190611f74919061348c565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580611fa681613b09565b915050611f3f565b505050565b6040805160038082526080820190925260009182919060208201606080368337505060085482519293506001600160a01b031691839150600090611ff957611ff9613b50565b6001600160a01b03928316602091820292909201810191909152601654604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561204d57600080fd5b505afa158015612061573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061208591906134a9565b8160018151811061209857612098613b50565b60200260200101906001600160a01b031690816001600160a01b03168152505030816002815181106120cc576120cc613b50565b6001600160a01b03928316602091820292909201015260165460405163d06ca61f60e01b815291169063d06ca61f9061210b9086908590600401613974565b60006040518083038186803b15801561212357600080fd5b505afa158015612137573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261215f919081019061360f565b60028151811061217157612171613b50565b6020026020010151915050919050565b6000546001600160a01b031633146121ab5760405162461bcd60e51b8152600401610e4b9061392f565b6001600160a01b03166000908152600160205260409020805460ff19169055565b6121d53361233c565b6121f15760405162461bcd60e51b8152600401610e4b9061394f565b60648110156122425760405162461bcd60e51b815260206004820152601e60248201527f446f676554563a206d61782073656c6c2070657263656e7420697320312500006044820152606401610e4b565b806004546122509190613a3f565b60075550565b6000546001600160a01b031633146122805760405162461bcd60e51b8152600401610e4b9061392f565b600080546001600160a01b0319166001600160a01b038316908117825580825260016020818152604093849020805460ff191690921790915591519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163910160405180910390a150565b6122f53361233c565b6123115760405162461bcd60e51b8152600401610e4b9061394f565b6001600160a01b03919091166000908152601260205260409020805460ff1916911515919091179055565b6001600160a01b031660009081526001602052604090205460ff1690565b60186020526000908152604090208054600182015460028301546003840180549394929391929161238a90613ace565b80601f01602080910402602001604051908101604052809291908181526020018280546123b690613ace565b80156124035780601f106123d857610100808354040283529160200191612403565b820191906000526020600020905b8154815290600101906020018083116123e657829003601f168201915b5050506004909301549192505060ff1685565b6000818484111561243a5760405162461bcd60e51b8152600401610e4b919061391c565b5060006124478486613a94565b95945050505050565b600254600090600160581b900460ff166124e7576000546001600160a01b038581169116146124e75760405162461bcd60e51b815260206004820152603860248201527f446f676554562c204f6e6c79206f776e6572206f722070726573616c6520436f60448201527f6e747261637420616c6c6f77656420746f20616464204c5000000000000000006064820152608401610e4b565b6000546001600160a01b0385811691161480159061251357506000546001600160a01b03848116911614155b156125f3576001600160a01b03831660009081526010602052604090205460ff1615801561255a57506001600160a01b03831660009081526013602052604090205460ff16155b156125f35760065482612582856001600160a01b03166000908152600e602052604090205490565b61258c9190613a02565b11156125f35760405162461bcd60e51b815260206004820152603060248201527f446f676554562c2063616e7420686f6c64206d6f7265207468616e206d61782060448201526f686f6c6420647564652c20736f72727960801b6064820152608401610e4b565b6125fe848484612c2c565b6001600160a01b03841660009081526014602052604090205460ff1615801561264057506001600160a01b03831660009081526014602052604090205460ff16155b6126985760405162461bcd60e51b8152602060048201526024808201527f446f676554562c20536f7272792062726f2c20796f75726520626c61636b6c696044820152631cdd195960e21b6064820152608401610e4b565b6003541580156126c057506001600160a01b03831660009081526010602052604090205460ff165b156126f0576001600160a01b0384166000908152600e60205260409020546126e757600080fd5b6126f042600355565b601754600160a81b900460ff16156127145761270d848484612cc6565b9050610f49565b604080518082018252601c81527f446f676554562c20496e73756666696369656e742042616c616e6365000000006020808301919091526001600160a01b0387166000908152600e909152919091205461276f918490612416565b6001600160a01b038086166000908152600e602090815260408083209490945591861681526010909152205460ff16156129c9576001600160a01b03841660009081526015602052604090206004015460ff80821691610100900416801561288a576002546001600160a01b0387166000908152600e6020526040902054600160301b90910460ff169060649061280790600a613a75565b6128119190613a3f565b101561288a576001600160a01b0386166000818152601560209081526040808320838155600181018490556002810184905560038101939093556004909201805461ffff1916905590519182527f4bb63b43e31da369bd81d81e679aa662904e90c88dee0dd4bed8876ab83a18bc910160405180910390a15b81156129c6576002546001600160a01b0387166000908152600e6020526040902054600160401b90910460ff16906064906128c690600a613a75565b6128d09190613a3f565b10156129c6576001600160a01b0386166000908152601560205260409020805460019091015460029161290291613a94565b61290c9190613a3f565b6001600160a01b03871660009081526015602052604090205461292f9190613a02565b6001600160a01b038716600090815260156020526040902060010181905542116129c6576001600160a01b0386166000818152601560209081526040808320838155600181018490556002810184905560038101939093556004909201805461ffff1916905590519182527f4bb63b43e31da369bd81d81e679aa662904e90c88dee0dd4bed8876ab83a18bc910160405180910390a15b50505b6001600160a01b03841660009081526011602052604081205460ff16151580612a0c57506001600160a01b03841660009081526011602052604090205460ff1615155b15612a18575081612a43565b6001600160a01b03851660009081526010602052604090205460ff16612a3f868286612d9a565b9150505b612a4c84612e76565b15612a5957612a59612ee2565b6001600160a01b0384166000908152600e6020526040902054612a7c908261325c565b6001600160a01b038086166000818152600e60205260409081902093909355915190871690600080516020613ba083398151915290612abe9085815260200190565b60405180910390a3506001949350505050565b6000610f4983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612416565b612b476040518060a00160405280600081526020016000815260200160008152602001606081526020016000151581525090565b601860008381526020019081526020016000206040518060a0016040529081600082015481526020016001820154815260200160028201548152602001600382018054612b9390613ace565b80601f0160208091040260200160405190810160405280929190818152602001828054612bbf90613ace565b8015612c0c5780601f10612be157610100808354040283529160200191612c0c565b820191906000526020600020905b815481529060010190602001808311612bef57829003601f168201915b50505091835250506004919091015460ff16151560209091015292915050565b6000546001600160a01b03848116911614801590612c5857506000546001600160a01b03838116911614155b15611fae5760055481111580612c8657506001600160a01b03831660009081526012602052604090205460ff165b611fae5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610e4b565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152600e90915291822054612d17918490612416565b6001600160a01b038086166000908152600e60205260408082209390935590851681522054612d46908361325c565b6001600160a01b038085166000818152600e60205260409081902093909355915190861690600080516020613ba083398151915290612d889086815260200190565b60405180910390a35060019392505050565b600254601b5460009160ff620100009091048116911615612dd957506002546301000000900460ff168315612dd95750600254640100000000900460ff165b600254600090612dfe90600160481b900461ffff16612df886856132bb565b9061333a565b306000908152600e6020526040902054909150612e1b908261325c565b306000818152600e6020526040908190209290925590516001600160a01b03881690600080516020613ba083398151915290612e5a9085815260200190565b60405180910390a3612e6c8482612ad1565b9695505050505050565b601754600090600160a81b900460ff16158015612e9c5750601754600160a01b900460ff165b8015612ec057506001600160a01b03821660009081526010602052604090205460ff165b8015610df65750600754306000908152600e6020526040902054101592915050565b6017805460ff60a81b1916600160a81b17905560025460009060ff1615612f2a5760028054600754612f279291612df89160ff620100008304811692849291166132bb565b90505b600754600090612f3a9083612ad1565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110612f7457612f74613b50565b6001600160a01b03928316602091820292909201810191909152601654604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015612fc857600080fd5b505afa158015612fdc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061300091906134a9565b8160018151811061301357613013613b50565b6001600160a01b03928316602091820292909201015260165447911663791ac9478460008530613044426064613a02565b6040518663ffffffff1660e01b815260040161306495949392919061398d565b600060405180830381600087803b15801561307e57600080fd5b505af1158015613092573d6000803e3d6000fd5b5050505060006130ab8247612ad190919063ffffffff16565b600280549192506000916130c2919060ff16613a53565b6002546130d8919062010000900460ff16613aab565b60ff169050801561324757600254600090610100900460ff161561314f57600254613112908390612df8908690610100900460ff166132bb565b600c546040519192506001600160a01b03169082156108fc029083906000818181858888f1935050505015801561314d573d6000803e3d6000fd5b505b86156132455760006131618285613a94565b601654600b5460405163f305d71960e01b8152306004820152602481018c905260006044820181905260648201526001600160a01b0391821660848201524260a4820152929350169063f305d71990839060c4016060604051808303818588803b1580156131ce57600080fd5b505af11580156131e2573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906132079190613763565b505060408051838152602081018b90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a1505b505b50506017805460ff60a81b1916905550505050565b6000806132698385613a02565b905083811015610f495760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610e4b565b6000826132ca57506000610df6565b60006132d68385613a75565b9050826132e38583613a3f565b14610f495760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610e4b565b6000610f4983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250600081836133985760405162461bcd60e51b8152600401610e4b919061391c565b5060006124478486613a3f565b5080546133b190613ace565b6000825580601f106133c1575050565b601f0160209004906000526020600020908101906133df9190613466565b50565b8280546133ee90613ace565b90600052602060002090601f0160209004810192826134105760008555613456565b82601f1061342957805160ff1916838001178555613456565b82800160010185558215613456579182015b8281111561345657825182559160200191906001019061343b565b50613462929150613466565b5090565b5b808211156134625760008155600101613467565b803560ff811681146115c357600080fd5b60006020828403121561349e57600080fd5b8135610f4981613b7c565b6000602082840312156134bb57600080fd5b8151610f4981613b7c565b600080604083850312156134d957600080fd5b82356134e481613b7c565b915060208301356134f481613b7c565b809150509250929050565b60008060006060848603121561351457600080fd5b833561351f81613b7c565b9250602084013561352f81613b7c565b929592945050506040919091013590565b6000806040838503121561355357600080fd5b823561355e81613b7c565b915060208301356134f481613b91565b6000806040838503121561358157600080fd5b823561358c81613b7c565b946020939093013593505050565b600080602083850312156135ad57600080fd5b823567ffffffffffffffff808211156135c557600080fd5b818501915085601f8301126135d957600080fd5b8135818111156135e857600080fd5b8660208260051b85010111156135fd57600080fd5b60209290920196919550909350505050565b6000602080838503121561362257600080fd5b825167ffffffffffffffff8082111561363a57600080fd5b818501915085601f83011261364e57600080fd5b81518181111561366057613660613b66565b8060051b604051601f19603f8301168101818110858211171561368557613685613b66565b604052828152858101935084860182860187018a10156136a457600080fd5b600095505b838610156136c75780518552600195909501949386019386016136a9565b5098975050505050505050565b6000602082840312156136e657600080fd5b8151610f4981613b91565b6000806040838503121561370457600080fd5b823561358c81613b91565b60006020828403121561372157600080fd5b5035919050565b60006020828403121561373a57600080fd5b5051919050565b6000806040838503121561375457600080fd5b50508035926020909101359150565b60008060006060848603121561377857600080fd5b8351925060208401519150604084015190509250925092565b60008060008060008060a087890312156137aa57600080fd5b863595506020870135945060408701359350606087013567ffffffffffffffff808211156137d757600080fd5b818901915089601f8301126137eb57600080fd5b8135818111156137fa57600080fd5b8a602082850101111561380c57600080fd5b602083019550809450505050608087013561382681613b91565b809150509295509295509295565b6000806040838503121561384757600080fd5b6138508361347b565b915061385e6020840161347b565b90509250929050565b600081518084526020808501945080840160005b838110156138a05781516001600160a01b03168752958201959082019060010161387b565b509495945050505050565b6000815180845260005b818110156138d1576020818501810151868301820152016138b5565b818111156138e3576000602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0383168152604060208201819052600090610f46908301846138ab565b602081526000610f4960208301846138ab565b60208082526006908201526510a7aba722a960d11b604082015260600190565b6020808252600b908201526a085055551213d49256915160aa1b604082015260600190565b828152604060208201526000610f466040830184613867565b85815284602082015260a0604082015260006139ac60a0830186613867565b6001600160a01b0394909416606083015250608001529392505050565b85815284602082015283604082015260a0606082015260006139ee60a08301856138ab565b905082151560808301529695505050505050565b60008219821115613a1557613a15613b24565b500190565b600060ff821660ff84168060ff03821115613a3757613a37613b24565b019392505050565b600082613a4e57613a4e613b3a565b500490565b600060ff831680613a6657613a66613b3a565b8060ff84160491505092915050565b6000816000190483118215151615613a8f57613a8f613b24565b500290565b600082821015613aa657613aa6613b24565b500390565b600060ff821660ff841680821015613ac557613ac5613b24565b90039392505050565b600181811c90821680613ae257607f821691505b60208210811415613b0357634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415613b1d57613b1d613b24565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146133df57600080fd5b80151581146133df57600080fdfeddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220308b5a7910be6eb522cf0fdea430079b289eab6b56c0ae2021716b529e5bd4b164736f6c63430008070033608060405234801561001057600080fd5b506040516104ee3803806104ee83398101604081905261002f9161007f565b600080546001600160a01b039283166001600160a01b031991821617909155600180549390921692169190911790556100b2565b80516001600160a01b038116811461007a57600080fd5b919050565b6000806040838503121561009257600080fd5b61009b83610063565b91506100a960208401610063565b90509250929050565b61042d806100c16000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80634d6ce1e5146100515780638da5cb5b14610079578063c93f895d146100a4578063f7c618c1146100ae575b600080fd5b61006461005f36600461039f565b6100c1565b60405190151581526020015b60405180910390f35b60005461008c906001600160a01b031681565b6040516001600160a01b039091168152602001610070565b6100ac6101db565b005b60015461008c906001600160a01b031681565b6001546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a082319060240160206040518083038186803b15801561010557600080fd5b505afa158015610119573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061013d91906103b8565b8260025461014b91906103d1565b1461015557600080fd5b6001546040516370a0823160e01b81523060048201526001600160a01b03909116906370a082319060240160206040518083038186803b15801561019857600080fd5b505afa1580156101ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d091906103b8565b600255506001919050565b6000546001600160a01b031633146101f257600080fd5b6001546040516370a0823160e01b81523060048201526001600160a01b039091169063a9059cbb90339083906370a082319060240160206040518083038186803b15801561023f57600080fd5b505afa158015610253573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061027791906103b8565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b1580156102bd57600080fd5b505af11580156102d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102f59190610376565b506001546040516370a0823160e01b81523060048201526001600160a01b03909116906370a082319060240160206040518083038186803b15801561033957600080fd5b505afa15801561034d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061037191906103b8565b600255565b60006020828403121561038857600080fd5b8151801515811461039857600080fd5b9392505050565b6000602082840312156103b157600080fd5b5035919050565b6000602082840312156103ca57600080fd5b5051919050565b600082198211156103f257634e487b7160e01b600052601160045260246000fd5b50019056fea2646970667358221220ed4f843aaa4999fbad0c59cb38d286e671c0ee0ce22b8b91de90e281d1d708e064736f6c634300080700330000000000000000000000000fdc977660c0603320ebcdcb63bff2123a97153d

Deployed Bytecode

0x6080604052600436106103fe5760003560e01c80637d1db4a511610213578063ca33e64c11610123578063f0b37c04116100ab578063f84ba65d1161007a578063f84ba65d14610cce578063f887ea4014610cee578063fe33b30214610d0e578063fe9fbb8014610d3e578063ffcc1fa814610d5e57600080fd5b8063f0b37c0414610c58578063f1366d9a14610c78578063f2fde38b14610c98578063f5676f8f14610cb857600080fd5b8063dd62ed3e116100f2578063dd62ed3e14610b92578063df20fd4914610bd8578063e405be2914610bf8578063e96fada214610c18578063ee8969c514610c3857600080fd5b8063ca33e64c14610b11578063d90ec3a714610b31578063daa09bf814610b51578063dbc993db14610b7157600080fd5b8063a4b45c00116101a6578063a9059cbb11610175578063a9059cbb14610a7b578063af6c9c1d14610a9b578063b00755df14610abb578063b6a5d7de14610adb578063bf56b37114610afb57600080fd5b8063a4b45c0014610a06578063a633423114610a26578063a7ccabdf14610a3b578063a8aa1b3114610a5b57600080fd5b80639215a2a4116101e25780639215a2a41461097b57806395d89b411461099e57806398118cb4146109cc578063a41d40e1146109e657600080fd5b80637d1db4a5146108a057806381530a92146108b6578063893d20e8146108d65780638f3184cd146108f457600080fd5b80633ab045de1161030e578063683c3063116102a15780636f2a4914116102705780636f2a4914146107f557806370a082311461080a578063715b1c3b14610840578063759f62a6146108605780637bdd90f01461088057600080fd5b8063683c30631461077f5780636b67c4df146107a05780636bad6a6a146107bf5780636ddd1713146107d457600080fd5b8063571ac8b0116102dd578063571ac8b0146106ff5780635c85974f1461071f578063658d4b7f1461073f57806366bb5dd31461075f57600080fd5b80633ab045de1461066a578063413f60921461069f57806342c7a6f7146106bf5780634fcd2446146106df57600080fd5b806321d13a66116103915780632f05205c116103605780632f05205c146105ca5780632f54bf6e146105eb578063313ce5671461061a57806331e02e0b1461062e57806332406b351461065057600080fd5b806321d13a661461055257806323b872dd146105745780632b112e49146105945780632b36a6d2146105a957600080fd5b806318160ddd116103cd57806318160ddd146104cf5780631936d368146104e45780631df4ccfc1461051c5780631fc9efa11461053c57600080fd5b80630445b6671461040a57806306fdde0314610433578063095ea7b31461046c5780631720513f1461049c57600080fd5b3661040557005b600080fd5b34801561041657600080fd5b5061042060075481565b6040519081526020015b60405180910390f35b34801561043f57600080fd5b506040805180820190915260078152662237b3b296aa2b60c91b60208201525b60405161042a919061391c565b34801561047857600080fd5b5061048c61048736600461356e565b610d8f565b604051901515815260200161042a565b3480156104a857600080fd5b506002546104bd90600160301b900460ff1681565b60405160ff909116815260200161042a565b3480156104db57600080fd5b50600454610420565b3480156104f057600080fd5b506105046104ff36600461370f565b610dfc565b6040516001600160a01b03909116815260200161042a565b34801561052857600080fd5b506002546104bd9062010000900460ff1681565b34801561054857600080fd5b5061042060065481565b34801561055e57600080fd5b5061057261056d366004613834565b610e26565b005b34801561058057600080fd5b5061048c61058f3660046134ff565b610e8c565b3480156105a057600080fd5b50610420610f50565b3480156105b557600080fd5b506002546104bd906301000000900460ff1681565b3480156105d657600080fd5b5060025461048c90600160581b900460ff1681565b3480156105f757600080fd5b5061048c61060636600461348c565b6000546001600160a01b0391821691161490565b34801561062657600080fd5b5060126104bd565b34801561063a57600080fd5b506002546104bd90640100000000900460ff1681565b34801561065c57600080fd5b50601b5461048c9060ff1681565b34801561067657600080fd5b5060025461068c90600160481b900461ffff1681565b60405161ffff909116815260200161042a565b3480156106ab57600080fd5b50601754610504906001600160a01b031681565b3480156106cb57600080fd5b506105726106da366004613834565b610fa2565b3480156106eb57600080fd5b506105726106fa366004613834565b61104b565b34801561070b57600080fd5b5061048c61071a36600461348c565b611187565b34801561072b57600080fd5b5061057261073a36600461370f565b611195565b34801561074b57600080fd5b5061057261075a366004613540565b611282565b34801561076b57600080fd5b5061057261077a36600461348c565b6112d2565b34801561078b57600080fd5b506002546104bd90600160381b900460ff1681565b3480156107ac57600080fd5b506002546104bd90610100900460ff1681565b3480156107cb57600080fd5b50601954610420565b3480156107e057600080fd5b5060175461048c90600160a01b900460ff1681565b34801561080157600080fd5b50610572611435565b34801561081657600080fd5b5061042061082536600461348c565b6001600160a01b03166000908152600e602052604090205490565b34801561084c57600080fd5b5061057261085b36600461370f565b611466565b34801561086c57600080fd5b5061057261087b366004613540565b61150f565b34801561088c57600080fd5b5061048c61089b36600461370f565b61155f565b3480156108ac57600080fd5b5061042060055481565b3480156108c257600080fd5b5061048c6108d1366004613741565b6115c8565b3480156108e257600080fd5b506000546001600160a01b0316610504565b34801561090057600080fd5b5061094a61090f36600461348c565b601560205260009081526040902080546001820154600283015460038401546004909401549293919290919060ff8082169161010090041686565b60408051968752602087019590955293850192909252606084015215156080830152151560a082015260c00161042a565b34801561098757600080fd5b506002546104bd9065010000000000900460ff1681565b3480156109aa57600080fd5b50604080518082019091526005815264122223aa2b60d91b602082015261045f565b3480156109d857600080fd5b506002546104bd9060ff1681565b3480156109f257600080fd5b50610572610a0136600461348c565b611619565b348015610a1257600080fd5b50610572610a213660046134c6565b61167a565b348015610a3257600080fd5b506105726116cd565b348015610a4757600080fd5b50610572610a5636600461348c565b611707565b348015610a6757600080fd5b50600d54610504906001600160a01b031681565b348015610a8757600080fd5b5061048c610a9636600461356e565b61174e565b348015610aa757600080fd5b50610572610ab636600461348c565b61175b565b348015610ac757600080fd5b5061048c610ad6366004613741565b6117b6565b348015610ae757600080fd5b50610572610af636600461348c565b611cfe565b348015610b0757600080fd5b5061042060035481565b348015610b1d57600080fd5b50600b54610504906001600160a01b031681565b348015610b3d57600080fd5b50610572610b4c366004613791565b611d4f565b348015610b5d57600080fd5b50610572610b6c366004613834565b611e71565b348015610b7d57600080fd5b506002546104bd90600160401b900460ff1681565b348015610b9e57600080fd5b50610420610bad3660046134c6565b6001600160a01b039182166000908152600f6020908152604080832093909416825291909152205490565b348015610be457600080fd5b50610572610bf33660046136f1565b611ed0565b348015610c0457600080fd5b50610572610c1336600461359a565b611f17565b348015610c2457600080fd5b50600c54610504906001600160a01b031681565b348015610c4457600080fd5b50610420610c5336600461370f565b611fb3565b348015610c6457600080fd5b50610572610c7336600461348c565b612181565b348015610c8457600080fd5b50610572610c9336600461370f565b6121cc565b348015610ca457600080fd5b50610572610cb336600461348c565b612256565b348015610cc457600080fd5b50610420601a5481565b348015610cda57600080fd5b50610572610ce9366004613540565b6122ec565b348015610cfa57600080fd5b50601654610504906001600160a01b031681565b348015610d1a57600080fd5b5061048c610d2936600461348c565b60106020526000908152604090205460ff1681565b348015610d4a57600080fd5b5061048c610d5936600461348c565b61233c565b348015610d6a57600080fd5b50610d7e610d7936600461370f565b61235a565b60405161042a9594939291906139c9565b336000818152600f602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610dea9086815260200190565b60405180910390a35060015b92915050565b60198181548110610e0c57600080fd5b6000918252602090912001546001600160a01b0316905081565b610e2f3361233c565b610e545760405162461bcd60e51b8152600401610e4b9061394f565b60405180910390fd5b6002805466ffff000000000019166501000000000060ff9384160266ff000000000000191617600160301b9390921692909202179055565b6004546001600160a01b0384166000908152600f60209081526040808320338452909152812054909114610f3b576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152600f82528381203382529091529190912054610f16918490612416565b6001600160a01b0385166000908152600f602090815260408083203384529091529020555b610f46848484612450565b90505b9392505050565b600a546001600160a01b03166000908152600e6020526040812054610f9d906009546001600160a01b03166000908152600e6020526040902054610f979060045490612ad1565b90612ad1565b905090565b610fab3361233c565b610fc75760405162461bcd60e51b8152600401610e4b9061394f565b60025460ff8084166401000000009092041610610ffd576002805464ff00000000191664010000000060ff851602179055611008565b601b805460ff191690555b60025460ff8083166301000000909204161061103c576002805460ff831663010000000263ff000000199091161790555050565b601b805460ff191690555b5050565b6110543361233c565b6110705760405162461bcd60e51b8152600401610e4b9061394f565b605061107c8284613a1a565b60ff1611156110cd5760405162461bcd60e51b815260206004820181905260248201527f446f676554562074617865732063616e206e65766572206578636565642038256044820152606401610e4b565b60025462010000900460ff166110e38284613a1a565b60ff1611156111455760405162461bcd60e51b815260206004820152602860248201527f446f676574762c2074617865732063616e206f6e6c792065766572206368616e604482015267676520726174696f60c01b6064820152608401610e4b565b6002805460ff8381166101000261ffff199092169085161717905561116a8183613a1a565b6002806101000a81548160ff021916908360ff1602179055505050565b6000610df682600454610d8f565b61119e3361233c565b6111ba5760405162461bcd60e51b8152600401610e4b9061394f565b60c86004546111c99190613a3f565b8110156112185760405162461bcd60e51b815260206004820181905260248201527f446f676554562c206d75737420626520686967686572207468616e20302e35256044820152606401610e4b565b600554811161127d5760405162461bcd60e51b815260206004820152602b60248201527f446f676554562c2063616e206f6e6c79206576657220696e637265617365207460448201526a1a19481d1e081b1a5b5a5d60aa1b6064820152608401610e4b565b600555565b61128b3361233c565b6112a75760405162461bcd60e51b8152600401610e4b9061394f565b6001600160a01b03919091166000908152601160205260409020805460ff1916911515919091179055565b6112db3361233c565b6112f75760405162461bcd60e51b8152600401610e4b9061394f565b600c546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015611330573d6000803e3d6000fd5b50600c546040516370a0823160e01b81523060048201526001600160a01b038381169263a9059cbb9291169083906370a082319060240160206040518083038186803b15801561137f57600080fd5b505afa158015611393573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113b79190613728565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b1580156113fd57600080fd5b505af1158015611411573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061104791906136d4565b61143e3361233c565b61145a5760405162461bcd60e51b8152600401610e4b9061394f565b601b805460ff19169055565b61146f3361233c565b61148b5760405162461bcd60e51b8152600401610e4b9061394f565b60058110156114ee5760405162461bcd60e51b815260206004820152602960248201527f446f676554562c206d617820686f6c642063616e6e6f74206265206c657373206044820152687468616e20302e352560b81b6064820152608401610e4b565b6103e8816004546114ff9190613a75565b6115099190613a3f565b60065550565b6115183361233c565b6115345760405162461bcd60e51b8152600401610e4b9061394f565b6001600160a01b03919091166000908152601460205260409020805460ff1916911515919091179055565b600061156a3361233c565b6115865760405162461bcd60e51b8152600401610e4b9061394f565b60008281526018602052604081208181556001810182905560028101829055906115b360038301826133a5565b50600401805460ff191690555060015b919050565b60006115d33361233c565b6115ef5760405162461bcd60e51b8152600401610e4b9061394f565b61160182670de0b6b3a7640000613a75565b60008481526018602052604090205550600192915050565b6116223361233c565b61163e5760405162461bcd60e51b8152600401610e4b9061394f565b6001600160a01b031660009081526010602090815260408083208054600160ff1991821681179092556013909352922080549091169091179055565b6116833361233c565b61169f5760405162461bcd60e51b8152600401610e4b9061394f565b600b80546001600160a01b039384166001600160a01b031991821617909155600c8054929093169116179055565b6116d63361233c565b6116f25760405162461bcd60e51b8152600401610e4b9061394f565b6002805460ff60581b1916600160581b179055565b6117103361233c565b61172c5760405162461bcd60e51b8152600401610e4b9061394f565b601780546001600160a01b0319166001600160a01b0392909216919091179055565b6000610f49338484612450565b6117643361233c565b6117805760405162461bcd60e51b8152600401610e4b9061394f565b6001600160a01b03166000908152601060209081526040808320805460ff19908116909155601390925290912080549091169055565b6000806117c284612b13565b905060006117d38260000151611fb3565b336000908152600e60205260409020549091508111156118495760405162461bcd60e51b815260206004820152602b60248201527f446f676554562c20596f7520646f6e74206861766520656e6f75676820746f6b60448201526a656e20666f72207468697360a81b6064820152608401610e4b565b600454336000908152600e6020526040812054600192829182919061186f90600a613a75565b6118799190613a3f565b611884906064613a75565b600254909150600160401b900460ff1681108015906118af5750600254600160381b900460ff168111155b156118bd5760029350600191505b600254600160301b900460ff168111156118d657600192505b85608001511561196857826119685760405162461bcd60e51b815260206004820152604c60248201527f446f676554563a2074686973207061636b616765206973206e6f74206176616960448201527f6c61626c6520746f20616e796f6e65206e6f7420686f6c64696e67207468652060648201526b726571756972656d656e747360a01b608482015260a401610e4b565b6119728486613a3f565b94506119b16040518060c00160405280600081526020016000815260200160008152602001600081526020016000151581526020016000151581525090565b83611bc557866080015115611a2e5760405162461bcd60e51b815260206004820152603760248201527f4454562c206f6e6c7920686967682070657263656e7461676520686f6c64657260448201527f732063616e20686176652074686973207061636b6167650000000000000000006064820152608401610e4b565b336000908152600e602052604081208054889290611a4d908490613a94565b90915550611a5e9050600287613a3f565b6009546001600160a01b03166000908152600e602052604081208054909190611a88908490613a02565b90915550506009546001600160a01b031633600080516020613ba0833981519152611ab460028a613a3f565b60405190815260200160405180910390a3611ad0600287613a3f565b6017546001600160a01b03166000908152600e602052604081208054909190611afa908490613a02565b90915550506017546001600160a01b0316634d6ce1e5611b1b600289613a3f565b6040518263ffffffff1660e01b8152600401611b3991815260200190565b602060405180830381600087803b158015611b5357600080fd5b505af1158015611b67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b8b91906136d4565b506017546001600160a01b031633600080516020613ba0833981519152611bb360028a613a3f565b60405190815260200160405180910390a35b60408088015190820152821515608082015283151560a0820152428152606081018990526020870151611bfb9062015180613a75565b611c059042613a02565b602082015260608701516040517f39dc1b34ded6b839d48dab8499d0500ef59a8747e57b4c3216747b22ede5a25191611c40913391906138f8565b60405180910390a133600081815260156020908152604080832085518155918501516001808401919091559085015160028301556060850151600383015560808501516004909201805460a09096015161ffff1990961692151561ff001916929092176101009515159590950294909417905560198054808501825591527f944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c96950180546001600160a01b03191690911790559998505050505050505050565b6000546001600160a01b03163314611d285760405162461bcd60e51b8152600401610e4b9061392f565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b611d583361233c565b611d745760405162461bcd60e51b8152600401610e4b9061394f565b611da86040518060a00160405280600081526020016000815260200160008152602001606081526020016000151581525090565b602080820186905260408083018990528051601f86018390048302810183019091528481529085908590819084018382808284376000920191909152505050506060820152611dff86670de0b6b3a7640000613a75565b815281151560808201526000878152601860209081526040918290208351815581840151600182015591830151600283015560608301518051849392611e4c9260038501929101906133e2565b50608091909101516004909101805460ff191691151591909117905550505050505050565b611e7a3361233c565b611e965760405162461bcd60e51b8152600401610e4b9061394f565b6002805468ffff000000000000001916600160381b60ff9384160268ff0000000000000000191617600160401b9390921692909202179055565b611ed93361233c565b611ef55760405162461bcd60e51b8152600401610e4b9061394f565b60178054921515600160a01b0260ff60a01b1990931692909217909155600755565b611f203361233c565b611f3c5760405162461bcd60e51b8152600401610e4b9061394f565b60005b81811015611fae57600160146000858585818110611f5f57611f5f613b50565b9050602002016020810190611f74919061348c565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580611fa681613b09565b915050611f3f565b505050565b6040805160038082526080820190925260009182919060208201606080368337505060085482519293506001600160a01b031691839150600090611ff957611ff9613b50565b6001600160a01b03928316602091820292909201810191909152601654604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561204d57600080fd5b505afa158015612061573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061208591906134a9565b8160018151811061209857612098613b50565b60200260200101906001600160a01b031690816001600160a01b03168152505030816002815181106120cc576120cc613b50565b6001600160a01b03928316602091820292909201015260165460405163d06ca61f60e01b815291169063d06ca61f9061210b9086908590600401613974565b60006040518083038186803b15801561212357600080fd5b505afa158015612137573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261215f919081019061360f565b60028151811061217157612171613b50565b6020026020010151915050919050565b6000546001600160a01b031633146121ab5760405162461bcd60e51b8152600401610e4b9061392f565b6001600160a01b03166000908152600160205260409020805460ff19169055565b6121d53361233c565b6121f15760405162461bcd60e51b8152600401610e4b9061394f565b60648110156122425760405162461bcd60e51b815260206004820152601e60248201527f446f676554563a206d61782073656c6c2070657263656e7420697320312500006044820152606401610e4b565b806004546122509190613a3f565b60075550565b6000546001600160a01b031633146122805760405162461bcd60e51b8152600401610e4b9061392f565b600080546001600160a01b0319166001600160a01b038316908117825580825260016020818152604093849020805460ff191690921790915591519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163910160405180910390a150565b6122f53361233c565b6123115760405162461bcd60e51b8152600401610e4b9061394f565b6001600160a01b03919091166000908152601260205260409020805460ff1916911515919091179055565b6001600160a01b031660009081526001602052604090205460ff1690565b60186020526000908152604090208054600182015460028301546003840180549394929391929161238a90613ace565b80601f01602080910402602001604051908101604052809291908181526020018280546123b690613ace565b80156124035780601f106123d857610100808354040283529160200191612403565b820191906000526020600020905b8154815290600101906020018083116123e657829003601f168201915b5050506004909301549192505060ff1685565b6000818484111561243a5760405162461bcd60e51b8152600401610e4b919061391c565b5060006124478486613a94565b95945050505050565b600254600090600160581b900460ff166124e7576000546001600160a01b038581169116146124e75760405162461bcd60e51b815260206004820152603860248201527f446f676554562c204f6e6c79206f776e6572206f722070726573616c6520436f60448201527f6e747261637420616c6c6f77656420746f20616464204c5000000000000000006064820152608401610e4b565b6000546001600160a01b0385811691161480159061251357506000546001600160a01b03848116911614155b156125f3576001600160a01b03831660009081526010602052604090205460ff1615801561255a57506001600160a01b03831660009081526013602052604090205460ff16155b156125f35760065482612582856001600160a01b03166000908152600e602052604090205490565b61258c9190613a02565b11156125f35760405162461bcd60e51b815260206004820152603060248201527f446f676554562c2063616e7420686f6c64206d6f7265207468616e206d61782060448201526f686f6c6420647564652c20736f72727960801b6064820152608401610e4b565b6125fe848484612c2c565b6001600160a01b03841660009081526014602052604090205460ff1615801561264057506001600160a01b03831660009081526014602052604090205460ff16155b6126985760405162461bcd60e51b8152602060048201526024808201527f446f676554562c20536f7272792062726f2c20796f75726520626c61636b6c696044820152631cdd195960e21b6064820152608401610e4b565b6003541580156126c057506001600160a01b03831660009081526010602052604090205460ff165b156126f0576001600160a01b0384166000908152600e60205260409020546126e757600080fd5b6126f042600355565b601754600160a81b900460ff16156127145761270d848484612cc6565b9050610f49565b604080518082018252601c81527f446f676554562c20496e73756666696369656e742042616c616e6365000000006020808301919091526001600160a01b0387166000908152600e909152919091205461276f918490612416565b6001600160a01b038086166000908152600e602090815260408083209490945591861681526010909152205460ff16156129c9576001600160a01b03841660009081526015602052604090206004015460ff80821691610100900416801561288a576002546001600160a01b0387166000908152600e6020526040902054600160301b90910460ff169060649061280790600a613a75565b6128119190613a3f565b101561288a576001600160a01b0386166000818152601560209081526040808320838155600181018490556002810184905560038101939093556004909201805461ffff1916905590519182527f4bb63b43e31da369bd81d81e679aa662904e90c88dee0dd4bed8876ab83a18bc910160405180910390a15b81156129c6576002546001600160a01b0387166000908152600e6020526040902054600160401b90910460ff16906064906128c690600a613a75565b6128d09190613a3f565b10156129c6576001600160a01b0386166000908152601560205260409020805460019091015460029161290291613a94565b61290c9190613a3f565b6001600160a01b03871660009081526015602052604090205461292f9190613a02565b6001600160a01b038716600090815260156020526040902060010181905542116129c6576001600160a01b0386166000818152601560209081526040808320838155600181018490556002810184905560038101939093556004909201805461ffff1916905590519182527f4bb63b43e31da369bd81d81e679aa662904e90c88dee0dd4bed8876ab83a18bc910160405180910390a15b50505b6001600160a01b03841660009081526011602052604081205460ff16151580612a0c57506001600160a01b03841660009081526011602052604090205460ff1615155b15612a18575081612a43565b6001600160a01b03851660009081526010602052604090205460ff16612a3f868286612d9a565b9150505b612a4c84612e76565b15612a5957612a59612ee2565b6001600160a01b0384166000908152600e6020526040902054612a7c908261325c565b6001600160a01b038086166000818152600e60205260409081902093909355915190871690600080516020613ba083398151915290612abe9085815260200190565b60405180910390a3506001949350505050565b6000610f4983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612416565b612b476040518060a00160405280600081526020016000815260200160008152602001606081526020016000151581525090565b601860008381526020019081526020016000206040518060a0016040529081600082015481526020016001820154815260200160028201548152602001600382018054612b9390613ace565b80601f0160208091040260200160405190810160405280929190818152602001828054612bbf90613ace565b8015612c0c5780601f10612be157610100808354040283529160200191612c0c565b820191906000526020600020905b815481529060010190602001808311612bef57829003601f168201915b50505091835250506004919091015460ff16151560209091015292915050565b6000546001600160a01b03848116911614801590612c5857506000546001600160a01b03838116911614155b15611fae5760055481111580612c8657506001600160a01b03831660009081526012602052604090205460ff165b611fae5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610e4b565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152600e90915291822054612d17918490612416565b6001600160a01b038086166000908152600e60205260408082209390935590851681522054612d46908361325c565b6001600160a01b038085166000818152600e60205260409081902093909355915190861690600080516020613ba083398151915290612d889086815260200190565b60405180910390a35060019392505050565b600254601b5460009160ff620100009091048116911615612dd957506002546301000000900460ff168315612dd95750600254640100000000900460ff165b600254600090612dfe90600160481b900461ffff16612df886856132bb565b9061333a565b306000908152600e6020526040902054909150612e1b908261325c565b306000818152600e6020526040908190209290925590516001600160a01b03881690600080516020613ba083398151915290612e5a9085815260200190565b60405180910390a3612e6c8482612ad1565b9695505050505050565b601754600090600160a81b900460ff16158015612e9c5750601754600160a01b900460ff165b8015612ec057506001600160a01b03821660009081526010602052604090205460ff165b8015610df65750600754306000908152600e6020526040902054101592915050565b6017805460ff60a81b1916600160a81b17905560025460009060ff1615612f2a5760028054600754612f279291612df89160ff620100008304811692849291166132bb565b90505b600754600090612f3a9083612ad1565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110612f7457612f74613b50565b6001600160a01b03928316602091820292909201810191909152601654604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015612fc857600080fd5b505afa158015612fdc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061300091906134a9565b8160018151811061301357613013613b50565b6001600160a01b03928316602091820292909201015260165447911663791ac9478460008530613044426064613a02565b6040518663ffffffff1660e01b815260040161306495949392919061398d565b600060405180830381600087803b15801561307e57600080fd5b505af1158015613092573d6000803e3d6000fd5b5050505060006130ab8247612ad190919063ffffffff16565b600280549192506000916130c2919060ff16613a53565b6002546130d8919062010000900460ff16613aab565b60ff169050801561324757600254600090610100900460ff161561314f57600254613112908390612df8908690610100900460ff166132bb565b600c546040519192506001600160a01b03169082156108fc029083906000818181858888f1935050505015801561314d573d6000803e3d6000fd5b505b86156132455760006131618285613a94565b601654600b5460405163f305d71960e01b8152306004820152602481018c905260006044820181905260648201526001600160a01b0391821660848201524260a4820152929350169063f305d71990839060c4016060604051808303818588803b1580156131ce57600080fd5b505af11580156131e2573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906132079190613763565b505060408051838152602081018b90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a1505b505b50506017805460ff60a81b1916905550505050565b6000806132698385613a02565b905083811015610f495760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610e4b565b6000826132ca57506000610df6565b60006132d68385613a75565b9050826132e38583613a3f565b14610f495760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610e4b565b6000610f4983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250600081836133985760405162461bcd60e51b8152600401610e4b919061391c565b5060006124478486613a3f565b5080546133b190613ace565b6000825580601f106133c1575050565b601f0160209004906000526020600020908101906133df9190613466565b50565b8280546133ee90613ace565b90600052602060002090601f0160209004810192826134105760008555613456565b82601f1061342957805160ff1916838001178555613456565b82800160010185558215613456579182015b8281111561345657825182559160200191906001019061343b565b50613462929150613466565b5090565b5b808211156134625760008155600101613467565b803560ff811681146115c357600080fd5b60006020828403121561349e57600080fd5b8135610f4981613b7c565b6000602082840312156134bb57600080fd5b8151610f4981613b7c565b600080604083850312156134d957600080fd5b82356134e481613b7c565b915060208301356134f481613b7c565b809150509250929050565b60008060006060848603121561351457600080fd5b833561351f81613b7c565b9250602084013561352f81613b7c565b929592945050506040919091013590565b6000806040838503121561355357600080fd5b823561355e81613b7c565b915060208301356134f481613b91565b6000806040838503121561358157600080fd5b823561358c81613b7c565b946020939093013593505050565b600080602083850312156135ad57600080fd5b823567ffffffffffffffff808211156135c557600080fd5b818501915085601f8301126135d957600080fd5b8135818111156135e857600080fd5b8660208260051b85010111156135fd57600080fd5b60209290920196919550909350505050565b6000602080838503121561362257600080fd5b825167ffffffffffffffff8082111561363a57600080fd5b818501915085601f83011261364e57600080fd5b81518181111561366057613660613b66565b8060051b604051601f19603f8301168101818110858211171561368557613685613b66565b604052828152858101935084860182860187018a10156136a457600080fd5b600095505b838610156136c75780518552600195909501949386019386016136a9565b5098975050505050505050565b6000602082840312156136e657600080fd5b8151610f4981613b91565b6000806040838503121561370457600080fd5b823561358c81613b91565b60006020828403121561372157600080fd5b5035919050565b60006020828403121561373a57600080fd5b5051919050565b6000806040838503121561375457600080fd5b50508035926020909101359150565b60008060006060848603121561377857600080fd5b8351925060208401519150604084015190509250925092565b60008060008060008060a087890312156137aa57600080fd5b863595506020870135945060408701359350606087013567ffffffffffffffff808211156137d757600080fd5b818901915089601f8301126137eb57600080fd5b8135818111156137fa57600080fd5b8a602082850101111561380c57600080fd5b602083019550809450505050608087013561382681613b91565b809150509295509295509295565b6000806040838503121561384757600080fd5b6138508361347b565b915061385e6020840161347b565b90509250929050565b600081518084526020808501945080840160005b838110156138a05781516001600160a01b03168752958201959082019060010161387b565b509495945050505050565b6000815180845260005b818110156138d1576020818501810151868301820152016138b5565b818111156138e3576000602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0383168152604060208201819052600090610f46908301846138ab565b602081526000610f4960208301846138ab565b60208082526006908201526510a7aba722a960d11b604082015260600190565b6020808252600b908201526a085055551213d49256915160aa1b604082015260600190565b828152604060208201526000610f466040830184613867565b85815284602082015260a0604082015260006139ac60a0830186613867565b6001600160a01b0394909416606083015250608001529392505050565b85815284602082015283604082015260a0606082015260006139ee60a08301856138ab565b905082151560808301529695505050505050565b60008219821115613a1557613a15613b24565b500190565b600060ff821660ff84168060ff03821115613a3757613a37613b24565b019392505050565b600082613a4e57613a4e613b3a565b500490565b600060ff831680613a6657613a66613b3a565b8060ff84160491505092915050565b6000816000190483118215151615613a8f57613a8f613b24565b500290565b600082821015613aa657613aa6613b24565b500390565b600060ff821660ff841680821015613ac557613ac5613b24565b90039392505050565b600181811c90821680613ae257607f821691505b60208210811415613b0357634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415613b1d57613b1d613b24565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146133df57600080fd5b80151581146133df57600080fdfeddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220308b5a7910be6eb522cf0fdea430079b289eab6b56c0ae2021716b529e5bd4b164736f6c63430008070033

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

0000000000000000000000000fdc977660c0603320ebcdcb63bff2123a97153d

-----Decoded View---------------
Arg [0] : tokenOwner (address): 0x0fDC977660c0603320ebCDCB63Bff2123A97153D

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000000fdc977660c0603320ebcdcb63bff2123a97153d


Deployed Bytecode Sourcemap

6233:20635:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7844:49;;;;;;;;;;;;;;;;;;;17920:25:1;;;17908:2;17893:18;7844:49:0;;;;;;;;10567:80;;;;;;;;;;-1:-1:-1;10639:5:0;;;;;;;;;;;;-1:-1:-1;;;10639:5:0;;;;10567:80;;;;;;;:::i;14787:216::-;;;;;;;;;;-1:-1:-1;14787:216:0;;;;;:::i;:::-;;:::i;:::-;;;10218:14:1;;10211:22;10193:41;;10181:2;10166:18;14787:216:0;10053:187:1;7204:35:0;;;;;;;;;;-1:-1:-1;7204:35:0;;;;-1:-1:-1;;;7204:35:0;;;;;;;;;20387:4:1;20375:17;;;20357:36;;20345:2;20330:18;7204:35:0;20215:184:1;10297:88:0;;;;;;;;;;-1:-1:-1;10370:12:0;;10297:88;;8999:28;;;;;;;;;;-1:-1:-1;8999:28:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;8580:32:1;;;8562:51;;8550:2;8535:18;8999:28:0;8416:203:1;6942:26:0;;;;;;;;;;-1:-1:-1;6942:26:0;;;;;;;;;;;7782:49;;;;;;;;;;;;;;;;23688:231;;;;;;;;;;-1:-1:-1;23688:231:0;;;;;:::i;:::-;;:::i;:::-;;17149:374;;;;;;;;;;-1:-1:-1;17149:374:0;;;;;:::i;:::-;;:::i;26554:142::-;;;;;;;;;;;;;:::i;6977:33::-;;;;;;;;;;-1:-1:-1;6977:33:0;;;;;;;;;;;7503:28;;;;;;;;;;-1:-1:-1;7503:28:0;;;;-1:-1:-1;;;7503:28:0;;;;;;3559:103;;;;;;;;;;-1:-1:-1;3559:103:0;;;;;:::i;:::-;3614:4;3649:5;-1:-1:-1;;;;;3638:16:0;;;3649:5;;3638:16;;3559:103;10391:80;;;;;;;;;;-1:-1:-1;9234:2:0;10391:80;;7017:32;;;;;;;;;;-1:-1:-1;7017:32:0;;;;;;;;;;;9245:38;;;;;;;;;;-1:-1:-1;9245:38:0;;;;;;;;7427;;;;;;;;;;-1:-1:-1;7427:38:0;;;;-1:-1:-1;;;7427:38:0;;;;;;;;;17755:6:1;17743:19;;;17725:38;;17713:2;17698:18;7427:38:0;17581:188:1;8796:37:0;;;;;;;;;;-1:-1:-1;8796:37:0;;;;-1:-1:-1;;;;;8796:37:0;;;21576:397;;;;;;;;;;-1:-1:-1;21576:397:0;;;;;:::i;:::-;;:::i;23206:474::-;;;;;;;;;;-1:-1:-1;23206:474:0;;;;;:::i;:::-;;:::i;15214:117::-;;;;;;;;;;-1:-1:-1;15214:117:0;;;;;:::i;:::-;;:::i;22612:268::-;;;;;;;;;;-1:-1:-1;22612:268:0;;;;;:::i;:::-;;:::i;22888:120::-;;;;;;;;;;-1:-1:-1;22888:120:0;;;;;:::i;:::-;;:::i;22041:239::-;;;;;;;;;;-1:-1:-1;22041:239:0;;;;;:::i;:::-;;:::i;7248:37::-;;;;;;;;;;-1:-1:-1;7248:37:0;;;;-1:-1:-1;;;7248:37:0;;;;;;6905:30;;;;;;;;;;-1:-1:-1;6905:30:0;;;;;;;;;;;14544:121;;;;;;;;;;-1:-1:-1;14639:11:0;:18;14544:121;;8844:30;;;;;;;;;;-1:-1:-1;8844:30:0;;;;-1:-1:-1;;;8844:30:0;;;;;;22468:136;;;;;;;;;;;;;:::i;10737:105::-;;;;;;;;;;-1:-1:-1;10737:105:0;;;;;:::i;:::-;-1:-1:-1;;;;;10821:18:0;10803:7;10821:18;;;:9;:18;;;;;;;10737:105;15343:337;;;;;;;;;;-1:-1:-1;15343:337:0;;;;;:::i;:::-;;:::i;11328:170::-;;;;;;;;;;-1:-1:-1;11328:170:0;;;;;:::i;:::-;;:::i;16814:159::-;;;;;;;;;;-1:-1:-1;16814:159:0;;;;;:::i;:::-;;:::i;7721:48::-;;;;;;;;;;;;;;;;16603:203;;;;;;;;;;-1:-1:-1;16603:203:0;;;;;:::i;:::-;;:::i;10653:78::-;;;;;;;;;;-1:-1:-1;10705:7:0;10723:5;-1:-1:-1;;;;;10723:5:0;10653:78;;8704:52;;;;;;;;;;-1:-1:-1;8704:52:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19930:25:1;;;19986:2;19971:18;;19964:34;;;;20014:18;;;20007:34;;;;20072:2;20057:18;;20050:34;20128:14;20121:22;20115:3;20100:19;;20093:51;20188:14;20181:22;20175:3;20160:19;;20153:51;19917:3;19902:19;8704:52:0;19655:555:1;7161:36:0;;;;;;;;;;-1:-1:-1;7161:36:0;;;;;;;;;;;10477:84;;;;;;;;;;-1:-1:-1;10551:7:0;;;;;;;;;;;;-1:-1:-1;;;10551:7:0;;;;10477:84;;6868:30;;;;;;;;;;-1:-1:-1;6868:30:0;;;;;;;;15781:137;;;;;;;;;;-1:-1:-1;15781:137:0;;;;;:::i;:::-;;:::i;25926:228::-;;;;;;;;;;-1:-1:-1;25926:228:0;;;;;:::i;:::-;;:::i;15692:77::-;;;;;;;;;;;;;:::i;14673:106::-;;;;;;;;;;-1:-1:-1;14673:106:0;;;;;:::i;:::-;;:::i;8326:19::-;;;;;;;;;;-1:-1:-1;8326:19:0;;;;-1:-1:-1;;;;;8326:19:0;;;16985:156;;;;;;;;;;-1:-1:-1;16985:156:0;;;;;:::i;:::-;;:::i;15930:154::-;;;;;;;;;;-1:-1:-1;15930:154:0;;;;;:::i;:::-;;:::i;11893:2463::-;;;;;;;;;;-1:-1:-1;11893:2463:0;;;;;:::i;:::-;;:::i;3232:94::-;;;;;;;;;;-1:-1:-1;3232:94:0;;;;;:::i;:::-;;:::i;7538:25::-;;;;;;;;;;;;;;;;8239:36;;;;;;;;;;-1:-1:-1;8239:36:0;;;;-1:-1:-1;;;;;8239:36:0;;;16092:503;;;;;;;;;;-1:-1:-1;16092:503:0;;;;;:::i;:::-;;:::i;23927:234::-;;;;;;;;;;-1:-1:-1;23927:234:0;;;;;:::i;:::-;;:::i;7292:36::-;;;;;;;;;;-1:-1:-1;7292:36:0;;;;-1:-1:-1;;;7292:36:0;;;;;;10848:132;;;;;;;;;;-1:-1:-1;10848:132:0;;;;;:::i;:::-;-1:-1:-1;;;;;10950:19:0;;;10932:7;10950:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;10848:132;26162:156;;;;;;;;;;-1:-1:-1;26162:156:0;;;;;:::i;:::-;;:::i;11506:235::-;;;;;;;;;;-1:-1:-1;11506:235:0;;;;;:::i;:::-;;:::i;8282:35::-;;;;;;;;;;-1:-1:-1;8282:35:0;;;;-1:-1:-1;;;;;8282:35:0;;;10995:321;;;;;;;;;;-1:-1:-1;10995:321:0;;;;;:::i;:::-;;:::i;3402:97::-;;;;;;;;;;-1:-1:-1;3402:97:0;;;;;:::i;:::-;;:::i;15011:191::-;;;;;;;;;;-1:-1:-1;15011:191:0;;;;;:::i;:::-;;:::i;3959:173::-;;;;;;;;;;-1:-1:-1;3959:173:0;;;;;:::i;:::-;;:::i;9034:21::-;;;;;;;;;;;;;;;;23018:128;;;;;;;;;;-1:-1:-1;23018:128:0;;;;;:::i;:::-;;:::i;8765:24::-;;;;;;;;;;-1:-1:-1;8765:24:0;;;;-1:-1:-1;;;;;8765:24:0;;;8469:38;;;;;;;;;;-1:-1:-1;8469:38:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;3733:107;;;;;;;;;;-1:-1:-1;3733:107:0;;;;;:::i;:::-;;:::i;8899:50::-;;;;;;;;;;-1:-1:-1;8899:50:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;:::i;14787:216::-;14891:10;14862:4;14879:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;14879:32:0;;;;;;;;;;:41;;;14936:37;14862:4;;14879:32;;14936:37;;;;14914:6;17920:25:1;;17908:2;17893:18;;17774:177;14936:37:0;;;;;;;;-1:-1:-1;14991:4:0;14787:216;;;;;:::o;8999:28::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8999:28:0;;-1:-1:-1;8999:28:0;:::o;23688:231::-;3117:24;3130:10;3117:12;:24::i;:::-;3109:48;;;;-1:-1:-1;;;3109:48:0;;;;;;;:::i;:::-;;;;;;;;;23815:18:::1;:39:::0;;-1:-1:-1;;23865:37:0;23815:39;::::1;::::0;;::::1;;-1:-1:-1::0;;23865:37:0;;-1:-1:-1;;;23865:37:0;;;::::1;::::0;;;::::1;;::::0;;23688:231::o;17149:374::-;17312:12;;-1:-1:-1;;;;;17269:19:0;;17249:4;17269:19;;;:11;:19;;;;;;;;17289:10;17269:31;;;;;;;;17249:4;;17269:56;17266:190;;17375:69;;;;;;;;;;;-1:-1:-1;;;17375:69:0;;;;;;;;-1:-1:-1;;;;;17375:19:0;;-1:-1:-1;17375:19:0;;;:11;:19;;;;;17395:10;17375:31;;;;;;;;;;:69;;17411:6;;17375:35;:69::i;:::-;-1:-1:-1;;;;;17341:19:0;;;;;;:11;:19;;;;;;;;17361:10;17341:31;;;;;;;:103;17266:190;17475:40;17489:6;17497:9;17508:6;17475:13;:40::i;:::-;17468:47;;17149:374;;;;;;:::o;26554:142::-;26682:4;;-1:-1:-1;;;;;26682:4:0;26607:7;10821:18;;;:9;:18;;;;;;26634:54;;26661:4;;-1:-1:-1;;;;;26661:4:0;10803:7;10821:18;;;:9;:18;;;;;;26634:33;;:12;;;:16;:33::i;:::-;:37;;:54::i;:::-;26627:61;;26554:142;:::o;21576:397::-;3117:24;3130:10;3117:12;:24::i;:::-;3109:48;;;;-1:-1:-1;;;3109:48:0;;;;;;;:::i;:::-;21703:13:::1;::::0;:43:::1;::::0;;::::1;:13:::0;;;::::1;;:43;21700:126;;21748:13;:42:::0;;-1:-1:-1;;21748:42:0::1;::::0;::::1;::::0;::::1;;;::::0;;21700:126:::1;;;21797:19;:27:::0;;-1:-1:-1;;21797:27:0::1;::::0;;21700:126:::1;21839:14;::::0;:45:::1;::::0;;::::1;:14:::0;;;::::1;;:45;21836:130;;21886:14;:44:::0;;::::1;::::0;::::1;::::0;::::1;-1:-1:-1::0;;21886:44:0;;::::1;;::::0;;21576:397;;:::o;21836:130::-:1;21937:19;:27:::0;;-1:-1:-1;;21937:27:0::1;::::0;;21836:130:::1;21576:397:::0;;:::o;23206:474::-;3117:24;3130:10;3117:12;:24::i;:::-;3109:48;;;;-1:-1:-1;;;3109:48:0;;;;;;;:::i;:::-;23357:2:::1;23314:39;23335:18:::0;23314;:39:::1;:::i;:::-;:45;;;;23306:90;;;::::0;-1:-1:-1;;;23306:90:0;;13396:2:1;23306:90:0::1;::::0;::::1;13378:21:1::0;;;13415:18;;;13408:30;13474:34;13454:18;;;13447:62;13526:18;;23306:90:0::1;13194:356:1::0;23306:90:0::1;23458:8;::::0;;;::::1;;;23415:39;23436:18:::0;23415;:39:::1;:::i;:::-;:51;;;;23407:104;;;::::0;-1:-1:-1;;;23407:104:0;;16629:2:1;23407:104:0::1;::::0;::::1;16611:21:1::0;16668:2;16648:18;;;16641:30;16707:34;16687:18;;;16680:62;-1:-1:-1;;;16758:18:1;;;16751:38;16806:19;;23407:104:0::1;16427:404:1::0;23407:104:0::1;23522:12;:33:::0;;::::1;23566::::0;;::::1;23522;23566;-1:-1:-1::0;;23566:33:0;;;23522;;::::1;23566::::0;::::1;::::0;;23630:41:::1;23581:18:::0;23537;23630:41:::1;:::i;:::-;23619:8;::::0;:52:::1;;;;;;;;;;;;;;;;;;23206:474:::0;;:::o;15214:117::-;15269:4;15293:30;15301:7;15310:12;;15293:7;:30::i;22612:268::-;3117:24;3130:10;3117:12;:24::i;:::-;3109:48;;;;-1:-1:-1;;;3109:48:0;;;;;;;:::i;:::-;22712:3:::1;22697:12;;:18;;;;:::i;:::-;22687:6;:28;;22679:73;;;::::0;-1:-1:-1;;;22679:73:0;;13035:2:1;22679:73:0::1;::::0;::::1;13017:21:1::0;;;13054:18;;;13047:30;13113:34;13093:18;;;13086:62;13165:18;;22679:73:0::1;12833:356:1::0;22679:73:0::1;22780:12;;22771:6;:21;22763:77;;;::::0;-1:-1:-1;;;22763:77:0;;15471:2:1;22763:77:0::1;::::0;::::1;15453:21:1::0;15510:2;15490:18;;;15483:30;15549:34;15529:18;;;15522:62;-1:-1:-1;;;15600:18:1;;;15593:41;15651:19;;22763:77:0::1;15269:407:1::0;22763:77:0::1;22851:12;:21:::0;22612:268::o;22888:120::-;3117:24;3130:10;3117:12;:24::i;:::-;3109:48;;;;-1:-1:-1;;;3109:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22972:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:28;;-1:-1:-1;;22972:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;22888:120::o;22041:239::-;3117:24;3130:10;3117:12;:24::i;:::-;3109:48;;;;-1:-1:-1;;;3109:48:0;;;;;;;:::i;:::-;22126:20:::1;::::0;22118:61:::1;::::0;-1:-1:-1;;;;;22126:20:0;;::::1;::::0;22157:21:::1;22118:61:::0;::::1;;;::::0;22126:20:::1;22118:61:::0;22126:20;22118:61;22157:21;22126:20;22118:61;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;22212:20:0::1;::::0;22234:37:::1;::::0;-1:-1:-1;;;22234:37:0;;22265:4:::1;22234:37;::::0;::::1;8562:51:1::0;-1:-1:-1;;;;;22190:21:0;;::::1;::::0;::::1;::::0;22212:20;::::1;::::0;22190:21;;22234:22:::1;::::0;8535:18:1;;22234:37:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22190:82;::::0;-1:-1:-1;;;;;;22190:82:0::1;::::0;;;;;;-1:-1:-1;;;;;9354:32:1;;;22190:82:0::1;::::0;::::1;9336:51:1::0;9403:18;;;9396:34;9309:18;;22190:82:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;22468:136::-:0;3117:24;3130:10;3117:12;:24::i;:::-;3109:48;;;;-1:-1:-1;;;3109:48:0;;;;;;;:::i;:::-;22569:19:::1;:27:::0;;-1:-1:-1;;22569:27:0::1;::::0;;22468:136::o;15343:337::-;3117:24;3130:10;3117:12;:24::i;:::-;3109:48;;;;-1:-1:-1;;;3109:48:0;;;;;;;:::i;:::-;15456:1:::1;15437:15;:20;;15429:74;;;::::0;-1:-1:-1;;;15429:74:0;;13757:2:1;15429:74:0::1;::::0;::::1;13739:21:1::0;13796:2;13776:18;;;13769:30;13835:34;13815:18;;;13808:62;-1:-1:-1;;;13886:18:1;;;13879:39;13935:19;;15429:74:0::1;13555:405:1::0;15429:74:0::1;15638:4;15620:15;15605:12;;:30;;;;:::i;:::-;:37;;;;:::i;:::-;15588:14;:54:::0;-1:-1:-1;15343:337:0:o;11328:170::-;3117:24;3130:10;3117:12;:24::i;:::-;3109:48;;;;-1:-1:-1;;;3109:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11438:32:0;;;::::1;;::::0;;;:13:::1;:32;::::0;;;;:52;;-1:-1:-1;;11438:52:0::1;::::0;::::1;;::::0;;;::::1;::::0;;11328:170::o;16814:159::-;16880:12;3117:24;3130:10;3117:12;:24::i;:::-;3109:48;;;;-1:-1:-1;;;3109:48:0;;;;;;;:::i;:::-;16919:16:::1;::::0;;;:11:::1;:16;::::0;;;;16912:23;;;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;16919:16;16912:23:::1;;::::0;::::1;16919:16:::0;16912:23:::1;:::i;:::-;-1:-1:-1::0;16912:23:0::1;;::::0;;-1:-1:-1;;16912:23:0::1;::::0;;-1:-1:-1;16912:23:0;3159:1:::1;16814:159:::0;;;:::o;16603:203::-;16692:12;3117:24;3130:10;3117:12;:24::i;:::-;3109:48;;;;-1:-1:-1;;;3109:48:0;;;;;;;:::i;:::-;16749:19:::1;:8:::0;16760::::1;16749:19;:::i;:::-;16724:16;::::0;;;:11:::1;:16;::::0;;;;:44;-1:-1:-1;16794:4:0::1;16603:203:::0;;;;:::o;15781:137::-;3117:24;3130:10;3117:12;:24::i;:::-;3109:48;;;;-1:-1:-1;;;3109:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15847:14:0::1;;::::0;;;:5:::1;:14;::::0;;;;;;;:21;;15864:4:::1;-1:-1:-1::0;;15847:21:0;;::::1;::::0;::::1;::::0;;;15879:15:::1;:24:::0;;;;;:31;;;;::::1;::::0;;::::1;::::0;;15781:137::o;25926:228::-;3117:24;3130:10;3117:12;:24::i;:::-;3109:48;;;;-1:-1:-1;;;3109:48:0;;;;;;;:::i;:::-;26045:21:::1;:46:::0;;-1:-1:-1;;;;;26045:46:0;;::::1;-1:-1:-1::0;;;;;;26045:46:0;;::::1;;::::0;;;26102:20:::1;:44:::0;;;;;::::1;::::0;::::1;;::::0;;25926:228::o;15692:77::-;3117:24;3130:10;3117:12;:24::i;:::-;3109:48;;;;-1:-1:-1;;;3109:48:0;;;;;;;:::i;:::-;15746:8:::1;:15:::0;;-1:-1:-1;;;;15746:15:0::1;-1:-1:-1::0;;;15746:15:0::1;::::0;;15692:77::o;14673:106::-;3117:24;3130:10;3117:12;:24::i;:::-;3109:48;;;;-1:-1:-1;;;3109:48:0;;;;;;;:::i;:::-;14745:18:::1;:26:::0;;-1:-1:-1;;;;;;14745:26:0::1;-1:-1:-1::0;;;;;14745:26:0;;;::::1;::::0;;;::::1;::::0;;14673:106::o;16985:156::-;17065:4;17089:44;17103:10;17115:9;17126:6;17089:13;:44::i;15930:154::-;3117:24;3130:10;3117:12;:24::i;:::-;3109:48;;;;-1:-1:-1;;;3109:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16001:19:0::1;16023:5;16001:19:::0;;;:5:::1;:19;::::0;;;;;;;:27;;-1:-1:-1;;16001:27:0;;::::1;::::0;;;16039:15:::1;:29:::0;;;;;;:37;;;;::::1;::::0;;15930:154::o;11893:2463::-;11970:12;12231:25;12259:28;12276:10;12259:16;:28::i;:::-;12231:56;;12341:18;12362:36;12387:4;:10;;;12362:24;:36::i;:::-;12445:10;12435:21;;;;:9;:21;;;;;;12341:57;;-1:-1:-1;12435:35:0;-1:-1:-1;12435:35:0;12427:91;;;;-1:-1:-1;;;12427:91:0;;16217:2:1;12427:91:0;;;16199:21:1;16256:2;16236:18;;;16229:30;16295:34;16275:18;;;16268:62;-1:-1:-1;;;16346:18:1;;;16339:41;16397:19;;12427:91:0;16015:407:1;12427:91:0;12693:12;;12675:10;12533:12;12665:21;;;:9;:21;;;;;;12548:1;;12533:12;;;;12693;12665:24;;12687:2;12665:24;:::i;:::-;12664:41;;;;:::i;:::-;12663:49;;12709:3;12663:49;:::i;:::-;12748:18;;12638:74;;-1:-1:-1;;;;12748:18:0;;;;12730:36;;;;;:77;;-1:-1:-1;12788:19:0;;-1:-1:-1;;;12788:19:0;;;;12770:37;;;12730:77;12727:165;;;12837:1;12827:11;;12872:4;12857:19;;12727:165;12926:17;;-1:-1:-1;;;12926:17:0;;;;12909:34;;12906:86;;;12972:4;12963:13;;12906:86;13009:4;:18;;;13006:152;;;13055:6;13047:95;;;;-1:-1:-1;;;13047:95:0;;14584:2:1;13047:95:0;;;14566:21:1;14623:2;14603:18;;;14596:30;14662:34;14642:18;;;14635:62;14733:34;14713:18;;;14706:62;-1:-1:-1;;;14784:19:1;;;14777:43;14837:19;;13047:95:0;14382:480:1;13047:95:0;13185:20;13198:7;13185:10;:20;:::i;:::-;13172:33;;13220:36;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13220:36:0;13275:6;13271:520;;13310:4;:18;;;13309:19;13301:87;;;;-1:-1:-1;;;13301:87:0;;11830:2:1;13301:87:0;;;11812:21:1;11869:2;11849:18;;;11842:30;11908:34;11888:18;;;11881:62;11979:25;11959:18;;;11952:53;12022:19;;13301:87:0;11628:419:1;13301:87:0;13417:10;13407:21;;;;:9;:21;;;;;:35;;13432:10;;13407:21;:35;;13432:10;;13407:35;:::i;:::-;;;;-1:-1:-1;13480:13:0;;-1:-1:-1;13492:1:0;13480:10;:13;:::i;:::-;13471:4;;-1:-1:-1;;;;;13471:4:0;13461:15;;;;:9;:15;;;;;:32;;:15;;;:32;;;;;:::i;:::-;;;;-1:-1:-1;;13538:4:0;;-1:-1:-1;;;;;13538:4:0;13526:10;-1:-1:-1;;;;;;;;;;;13544:12:0;13555:1;13544:10;:12;:::i;:::-;13517:40;;17920:25:1;;;17908:2;17893:18;13517:40:0;;;;;;;13617:12;13628:1;13617:10;:12;:::i;:::-;13594:18;;-1:-1:-1;;;;;13594:18:0;13576:38;;;;:9;:38;;;;;:53;;:38;;;:53;;;;;:::i;:::-;;;;-1:-1:-1;;13648:18:0;;-1:-1:-1;;;;;13648:18:0;:26;13675:12;13686:1;13675:10;:12;:::i;:::-;13648:40;;;;;;;;;;;;;17920:25:1;;17908:2;17893:18;;17774:177;13648:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;13741:18:0;;-1:-1:-1;;;;;13741:18:0;13721:10;-1:-1:-1;;;;;;;;;;;13762:12:0;13773:1;13762:10;:12;:::i;:::-;13712:63;;17920:25:1;;;17908:2;17893:18;13712:63:0;;;;;;;13271:520;13846:14;;;;;13819:23;;;:41;13875:42;;;:27;;;:42;13932:32;;;:23;;;:32;14006:15;13979:42;;14036:28;;;:46;;;-1:-1:-1;14147:17:0;;;:25;;14167:5;14147:25;:::i;:::-;14129:43;;:15;:43;:::i;:::-;14097:29;;;:75;14218:9;;;;14192:36;;;;;;14206:10;;14218:9;14192:36;:::i;:::-;;;;;;;;14252:10;14243:20;;;;:8;:20;;;;;;;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;14243:36:0;;;;;;-1:-1:-1;;14243:36:0;;;;;;;;;;;;;;;;;;;14294:11;:28;;;;;;;;;;;;;-1:-1:-1;;;;;;14294:28:0;;;;;;14243:36;11893:2463;-1:-1:-1;;;;;;;;;11893:2463:0:o;3232:94::-;3614:4;3649:5;-1:-1:-1;;;;;3649:5:0;2956:10;3638:16;2940:38;;;;-1:-1:-1;;;2940:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;3292:19:0::1;;::::0;;;3314:4:::1;3292:19;::::0;;;;;;;:26;;-1:-1:-1;;3292:26:0::1;::::0;;::::1;::::0;;3232:94::o;16092:503::-;3117:24;3130:10;3117:12;:24::i;:::-;3109:48;;;;-1:-1:-1;;;3109:48:0;;;;;;;:::i;:::-;16261:33:::1;-1:-1:-1::0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16261:33:0::1;16305:25;::::0;;::::1;:41:::0;;;16357:22:::1;::::0;;::::1;:30:::0;;;16398:28;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;;;16418:8;;;;;;16398:28;::::1;16418:8:::0;;;;16398:28;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;;;;16398:17:0::1;::::0;::::1;:28:::0;16458:31:::1;:20:::0;16481:8:::1;16458:31;:::i;:::-;16437:52:::0;;16500:43;::::1;;:26;::::0;::::1;:43:::0;16437:18:::1;16554::::0;;;:11:::1;:18;::::0;;;;;;;;:33;;;;;;::::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;;16437:12;;16554:18;:33:::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;16554:33:0::1;::::0;;;::::1;::::0;::::1;::::0;;::::1;::::0;;-1:-1:-1;;16554:33:0::1;::::0;::::1;;::::0;;;::::1;::::0;;-1:-1:-1;;;;;;;16092:503:0:o;23927:234::-;3117:24;3130:10;3117:12;:24::i;:::-;3109:48;;;;-1:-1:-1;;;3109:48:0;;;;;;;:::i;:::-;24055:19:::1;:40:::0;;-1:-1:-1;;24106:38:0;-1:-1:-1;;;24055:40:0::1;::::0;;::::1;;-1:-1:-1::0;;24106:38:0;;-1:-1:-1;;;24106:38:0;;;::::1;::::0;;;::::1;;::::0;;23927:234::o;26162:156::-;3117:24;3130:10;3117:12;:24::i;:::-;3109:48;;;;-1:-1:-1;;;3109:48:0;;;;;;;:::i;:::-;26254:11:::1;:22:::0;;;::::1;;-1:-1:-1::0;;;26254:22:0::1;-1:-1:-1::0;;;;26254:22:0;;::::1;::::0;;;::::1;::::0;;;26287:13:::1;:23:::0;26162:156::o;11506:235::-;3117:24;3130:10;3117:12;:24::i;:::-;3109:48;;;;-1:-1:-1;;;3109:48:0;;;;;;;:::i;:::-;11609:6:::1;11605:129;11621:33:::0;;::::1;11605:129;;;11718:4;11675:13;:40;11689:22;;11712:1;11689:25;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;11675:40:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;11675:40:0;:47;;-1:-1:-1;;11675:47:0::1;::::0;::::1;;::::0;;;::::1;::::0;;11656:3;::::1;::::0;::::1;:::i;:::-;;;;11605:129;;;;11506:235:::0;;:::o;10995:321::-;11112:16;;;11126:1;11112:16;;;;;;;;;11067:4;;;;11112:16;;;;;;;;;-1:-1:-1;;11157:4:0;;11147:7;;;;-1:-1:-1;;;;;;11157:4:0;;11147:7;;-1:-1:-1;11157:4:0;;11147:7;;;;:::i;:::-;-1:-1:-1;;;;;11147:14:0;;;:7;;;;;;;;;;:14;;;;11190:6;;:13;;;-1:-1:-1;;;11190:13:0;;;;:6;;;;;:11;;:13;;;;;11147:7;;11190:13;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11180:4;11185:1;11180:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;11180:23:0;;;-1:-1:-1;;;;;11180:23:0;;;;;11240:4;11222;11227:1;11222:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;11222:23:0;;;:7;;;;;;;;;:23;11267:6;;:38;;-1:-1:-1;;;11267:38:0;;:6;;;:20;;:38;;11288:10;;11300:4;;11267:38;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;11267:38:0;;;;;;;;;;;;:::i;:::-;11306:1;11267:41;;;;;;;;:::i;:::-;;;;;;;11260:48;;;10995:321;;;:::o;3402:97::-;3614:4;3649:5;-1:-1:-1;;;;;3649:5:0;2956:10;3638:16;2940:38;;;;-1:-1:-1;;;2940:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;3464:19:0::1;3486:5;3464:19:::0;;;:14:::1;:19;::::0;;;;:27;;-1:-1:-1;;3464:27:0::1;::::0;;3402:97::o;15011:191::-;3117:24;3130:10;3117:12;:24::i;:::-;3109:48;;;;-1:-1:-1;;;3109:48:0;;;;;;;:::i;:::-;15107:3:::1;15096:7;:14;;15088:57;;;::::0;-1:-1:-1;;;15088:57:0;;11125:2:1;15088:57:0::1;::::0;::::1;11107:21:1::0;11164:2;11144:18;;;11137:30;11203:32;11183:18;;;11176:60;11253:18;;15088:57:0::1;10923:354:1::0;15088:57:0::1;15187:7;15172:12;;:22;;;;:::i;:::-;15156:13;:38:::0;-1:-1:-1;15011:191:0:o;3959:173::-;3614:4;3649:5;-1:-1:-1;;;;;3649:5:0;2956:10;3638:16;2940:38;;;;-1:-1:-1;;;2940:38:0;;;;;;;:::i;:::-;4035:5:::1;:11:::0;;-1:-1:-1;;;;;;4035:11:0::1;-1:-1:-1::0;;;;;4035:11:0;::::1;::::0;;::::1;::::0;;4057:19;;;-1:-1:-1;4057:19:0::1;::::0;;;;;;;;:26;;-1:-1:-1;;4057:26:0::1;::::0;;::::1;::::0;;;4099:25;;8562:51:1;;;4099:25:0::1;::::0;8535:18:1;4099:25:0::1;;;;;;;3959:173:::0;:::o;23018:128::-;3117:24;3130:10;3117:12;:24::i;:::-;3109:48;;;;-1:-1:-1;;;3109:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23106:23:0;;;::::1;;::::0;;;:15:::1;:23;::::0;;;;:32;;-1:-1:-1;;23106:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;23018:128::o;3733:107::-;-1:-1:-1;;;;;3813:19:0;3789:4;3813:19;;;:14;:19;;;;;;;;;3733:107::o;8899:50::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;8899:50:0;;;;;;;-1:-1:-1;;8899:50:0;;;:::o;640:192::-;726:7;762:12;754:6;;;;746:29;;;;-1:-1:-1;;;746:29:0;;;;;;;;:::i;:::-;-1:-1:-1;786:9:0;798:5;802:1;798;:5;:::i;:::-;786:17;640:192;-1:-1:-1;;;;;640:192:0:o;17531:2759::-;17646:8;;17623:4;;-1:-1:-1;;;17646:8:0;;;;17642:172;;17688:5;;-1:-1:-1;;;;;17678:15:0;;;17688:5;;17678:15;17670:84;;;;-1:-1:-1;;;17670:84:0;;12610:2:1;17670:84:0;;;12592:21:1;12649:2;12629:18;;;12622:30;12688:34;12668:18;;;12661:62;12759:26;12739:18;;;12732:54;12803:19;;17670:84:0;12408:420:1;17670:84:0;17837:5;;-1:-1:-1;;;;;17827:15:0;;;17837:5;;17827:15;;;;:37;;-1:-1:-1;17859:5:0;;-1:-1:-1;;;;;17846:18:0;;;17859:5;;17846:18;;17827:37;17824:263;;;-1:-1:-1;;;;;17884:16:0;;;;;;:5;:16;;;;;;;;17883:17;:48;;;;-1:-1:-1;;;;;;17905:26:0;;;;;;:15;:26;;;;;;;;17904:27;17883:48;17880:196;;;17993:14;;17983:6;17960:20;17970:9;-1:-1:-1;;;;;10821:18:0;10803:7;10821:18;;;:9;:18;;;;;;;10737:105;17960:20;:29;;;;:::i;:::-;:47;;17951:109;;;;-1:-1:-1;;;17951:109:0;;14167:2:1;17951:109:0;;;14149:21:1;14206:2;14186:18;;;14179:30;14245:34;14225:18;;;14218:62;-1:-1:-1;;;14296:18:1;;;14289:46;14352:19;;17951:109:0;13965:412:1;17951:109:0;18107:39;18120:6;18128:9;18139:6;18107:12;:39::i;:::-;-1:-1:-1;;;;;18166:21:0;;;;;;:13;:21;;;;;;;;18165:22;:51;;;;-1:-1:-1;;;;;;18192:24:0;;;;;;:13;:24;;;;;;;;18191:25;18165:51;18157:100;;;;-1:-1:-1;;;18157:100:0;;17378:2:1;18157:100:0;;;17360:21:1;17417:2;17397:18;;;17390:30;17456:34;17436:18;;;17429:62;-1:-1:-1;;;17507:18:1;;;17500:34;17551:19;;18157:100:0;17176:400:1;18157:100:0;22355:10;;:15;;;18271:31;;-1:-1:-1;;;;;;18286:16:0;;;;;;:5;:16;;;;;;;;18271:31;18268:80;;;-1:-1:-1;;;;;18313:17:0;;18333:1;18313:17;;;:9;:17;;;;;;18305:30;;;;;;18337:8;22437:15;22424:10;:28;22386:74;18337:8;18361:6;;-1:-1:-1;;;18361:6:0;;;;18358:63;;;18377:41;18392:6;18400:9;18411:6;18377:14;:41::i;:::-;18370:48;;;;18358:63;18461:61;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18461:17:0;;-1:-1:-1;18461:17:0;;;:9;:17;;;;;;;;:61;;18483:6;;18461:21;:61::i;:::-;-1:-1:-1;;;;;18441:17:0;;;;;;;:9;:17;;;;;;;;:81;;;;18538:16;;;;;:5;:16;;;;;;;18535:1258;;;-1:-1:-1;;;;;14473:14:0;;18940:15;14473:14;;;:8;:14;;;;;:28;;;;;;;;;14502:24;;;19005:244;;;;19070:17;;-1:-1:-1;;;;;19039:17:0;;;;;;:9;:17;;;;;;-1:-1:-1;;;19070:17:0;;;;;;19063:3;;19039:22;;19059:2;19039:22;:::i;:::-;:27;;;;:::i;:::-;19038:49;19035:199;;;-1:-1:-1;;;;;19150:16:0;;;;;;:8;:16;;;;;;;;19143:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;19143:23:0;;;19194:20;;8562:51:1;;;19194:20:0;;8535:18:1;19194:20:0;;;;;;;19035:199;19266:10;19263:519;;;19332:18;;-1:-1:-1;;;;;19301:17:0;;;;;;:9;:17;;;;;;-1:-1:-1;;;19332:18:0;;;;;;19325:3;;19301:22;;19321:2;19301:22;:::i;:::-;:27;;;;:::i;:::-;19300:50;19297:470;;;-1:-1:-1;;;;;19509:16:0;;;;;;:8;:16;;;;;:27;;19474:32;;;;;19540:1;;19474:62;;;:::i;:::-;19473:68;;;;:::i;:::-;-1:-1:-1;;;;;19442:16:0;;;;;;:8;:16;;;;;:27;:100;;;;:::i;:::-;-1:-1:-1;;;;;19407:16:0;;;;;;:8;:16;;;;;:32;;:135;;;19605:15;-1:-1:-1;19566:182:0;;-1:-1:-1;;;;;19655:16:0;;;;;;:8;:16;;;;;;;;19648:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;19648:23:0;;;19703:20;;8562:51:1;;;19703:20:0;;8535:18:1;19703:20:0;;;;;;;19566:182;18555:1238;;18535:1258;-1:-1:-1;;;;;20994:18:0;;19805:22;20994:18;;;:11;:18;;;;;;;;20993:19;19845:22;:51;;;-1:-1:-1;;;;;;20994:18:0;;20959:4;20994:18;;;:11;:18;;;;;;;;20993:19;19871:25;19845:51;19842:224;;;-1:-1:-1;19929:6:0;19842:224;;;-1:-1:-1;;;;;19979:13:0;;19966:10;19979:13;;;:5;:13;;;;;;;;20024:30;19985:6;19979:13;20047:6;20024:7;:30::i;:::-;20007:47;;19951:115;19842:224;20081:25;20096:9;20081:14;:25::i;:::-;20078:44;;;20109:10;:8;:10::i;:::-;-1:-1:-1;;;;;20157:20:0;;;;;;:9;:20;;;;;;:40;;20182:14;20157:24;:40::i;:::-;-1:-1:-1;;;;;20134:20:0;;;;;;;:9;:20;;;;;;;:63;;;;20215:43;;;;;;-1:-1:-1;;;;;;;;;;;20215:43:0;;;20243:14;17920:25:1;;17908:2;17893:18;;17774:177;20215:43:0;;;;;;;;-1:-1:-1;20276:4:0;;17531:2759;-1:-1:-1;;;;17531:2759:0:o;498:136::-;556:7;583:43;587:1;590;583:43;;;;;;;;;;;;;;;;;:3;:43::i;11749:136::-;11807:28;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11807:28:0;11862:11;:15;11874:2;11862:15;;;;;;;;;;;11855:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11855:22:0;;;-1:-1:-1;;11855:22:0;;;;;;;;;;;;;;;;11749:136;-1:-1:-1;;11749:136:0:o;20640:250::-;20750:5;;-1:-1:-1;;;;;20740:15:0;;;20750:5;;20740:15;;;;:36;;-1:-1:-1;20771:5:0;;-1:-1:-1;;;;;20759:17:0;;;20771:5;;20759:17;;20740:36;20737:146;;;20810:12;;20800:6;:22;;:49;;;-1:-1:-1;;;;;;20826:23:0;;;;;;:15;:23;;;;;;;;20800:49;20792:79;;;;-1:-1:-1;;;20792:79:0;;11484:2:1;20792:79:0;;;11466:21:1;11523:2;11503:18;;;11496:30;-1:-1:-1;;;11542:18:1;;;11535:47;11599:18;;20792:79:0;11282:341:1;20302:330:0;20432:53;;;;;;;;;;;-1:-1:-1;;;20432:53:0;;;;;;;;-1:-1:-1;;;;;20432:17:0;;20395:4;20432:17;;;:9;:17;;;;;;;:53;;20454:6;;20432:21;:53::i;:::-;-1:-1:-1;;;;;20412:17:0;;;;;;;:9;:17;;;;;;:73;;;;20519:20;;;;;;;:32;;20544:6;20519:24;:32::i;:::-;-1:-1:-1;;;;;20496:20:0;;;;;;;:9;:20;;;;;;;:55;;;;20567:35;;;;;;-1:-1:-1;;;;;;;;;;;20567:35:0;;;20595:6;17920:25:1;;17908:2;17893:18;;17774:177;20567:35:0;;;;;;;;-1:-1:-1;20620:4:0;20302:330;;;;;:::o;21028:540::-;21138:8;;21160:19;;21107:7;;21138:8;;;;;;;;21160:19;21157:147;;;-1:-1:-1;21201:14:0;;;;;;;21230:63;;;;-1:-1:-1;21264:13:0;;;;;;;21230:63;21356:17;;21316;;21336:38;;-1:-1:-1;;;21356:17:0;;;;21336:15;:6;21347:3;21336:10;:15::i;:::-;:19;;:38::i;:::-;21440:4;21422:24;;;;:9;:24;;;;;;21316:58;;-1:-1:-1;21422:39:0;;21316:58;21422:28;:39::i;:::-;21413:4;21395:24;;;;:9;:24;;;;;;;:66;;;;21477:42;;-1:-1:-1;;;;;21477:42:0;;;-1:-1:-1;;;;;;;;;;;21477:42:0;;;21509:9;17920:25:1;;17908:2;17893:18;;17774:177;21477:42:0;;;;;;;;21539:21;:6;21550:9;21539:10;:21::i;:::-;21532:28;21028:540;-1:-1:-1;;;;;;21028:540:0:o;26330:212::-;26421:6;;26396:4;;-1:-1:-1;;;26421:6:0;;;;26420:7;:31;;;;-1:-1:-1;26440:11:0;;-1:-1:-1;;;26440:11:0;;;;26420:31;:60;;;;-1:-1:-1;;;;;;26464:16:0;;;;;;:5;:16;;;;;;;;26420:60;:114;;;;-1:-1:-1;26521:13:0;;26511:4;26493:24;;;;:9;:24;;;;;;:41;;26413:121;26330:212;-1:-1:-1;;26330:212:0:o;24173:1745::-;9084:6;:13;;-1:-1:-1;;;;9084:13:0;-1:-1:-1;;;9084:13:0;;;24263:12:::1;::::0;9084:13;;;24263:12:::1;:16:::0;24260:161:::1;;24363:1;24349:8:::0;;24313:13:::1;::::0;:52:::1;::::0;24363:1;24313:45:::1;::::0;24349:8:::1;::::0;;::::1;::::0;::::1;::::0;24313:45;;:13;24331:12:::1;24313:17;:31::i;:52::-;24295:70;;24260:161;24464:13;::::0;24441:20:::1;::::0;24464:34:::1;::::0;24482:15;24464:17:::1;:34::i;:::-;24602:16;::::0;;24616:1:::1;24602:16:::0;;;;;::::1;::::0;;24441:57;;-1:-1:-1;24578:21:0::1;::::0;24602:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;24602:16:0::1;24578:40;;24647:4;24629;24634:1;24629:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;24629:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;24673:6:::1;::::0;:13:::1;::::0;;-1:-1:-1;;;24673:13:0;;;;:6;;;::::1;::::0;:11:::1;::::0;:13:::1;::::0;;::::1;::::0;24629:7;;24673:13;;;;;:6;:13;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24663:4;24668:1;24663:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;24663:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;24763:6:::1;::::0;24721:21:::1;::::0;24763:6:::1;:57;24835:12:::0;24697:21:::1;24878:4:::0;24905::::1;24925:21;:15;24943:3;24925:21;:::i;:::-;24763:194;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;24970:17;24990:40;25016:13;24990:21;:25;;:40;;;;:::i;:::-;25099:1;25085:12:::0;;24970:60;;-1:-1:-1;25051:19:0::1;::::0;25085:15:::1;::::0;25099:1;25085:12:::1;;:15;:::i;:::-;25073:8;::::0;:28:::1;::::0;;:8;;::::1;;;:28;:::i;:::-;25051:50;;::::0;-1:-1:-1;25115:15:0;;25112:799:::1;;25194:12;::::0;25146:26:::1;::::0;25194:12:::1;::::0;::::1;;;:16:::0;25191:197:::1;;25265:12;::::0;25251:44:::1;::::0;25283:11;;25251:27:::1;::::0;:9;;25265:12:::1;::::0;::::1;;;25251:13;:27::i;:44::-;25322:20;::::0;25314:58:::1;::::0;25230:65;;-1:-1:-1;;;;;;25322:20:0::1;::::0;25314:58;::::1;;;::::0;25230:65;;25322:20:::1;25314:58:::0;25322:20;25314:58;25230:65;25322:20;25314:58;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;25191:197;25405:19:::0;;25402:498:::1;;25462:26;25491:30;25503:18:::0;25491:9;:30:::1;:::i;:::-;25540:6;::::0;25734:21:::1;::::0;25540:272:::1;::::0;-1:-1:-1;;;25540:272:0;;25620:4:::1;25540:272;::::0;::::1;9782:34:1::0;9832:18;;;9825:34;;;25540:6:0::1;9875:18:1::0;;;9868:34;;;9918:18;;;9911:34;-1:-1:-1;;;;;25734:21:0;;::::1;9961:19:1::0;;;9954:44;25778:15:0::1;10014:19:1::0;;;10007:35;25462:59:0;;-1:-1:-1;25540:6:0::1;::::0;:22:::1;::::0;25462:59;;9716:19:1;;25540:272:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;25836:48:0::1;::::0;;19054:25:1;;;19110:2;19095:18;;19088:34;;;25836:48:0::1;::::0;-1:-1:-1;19027:18:1;25836:48:0::1;;;;;;;25425:475;25402:498;25131:780;25112:799;-1:-1:-1::0;;9102:6:0;:14;;-1:-1:-1;;;;9102:14:0;;;-1:-1:-1;;;;24173:1745:0:o;311:181::-;369:7;;401:5;405:1;401;:5;:::i;:::-;389:17;;430:1;425;:6;;417:46;;;;-1:-1:-1;;;417:46:0;;12254:2:1;417:46:0;;;12236:21:1;12293:2;12273:18;;;12266:30;12332:29;12312:18;;;12305:57;12379:18;;417:46:0;12052:351:1;838:250:0;896:7;920:6;916:47;;-1:-1:-1;950:1:0;943:8;;916:47;975:9;987:5;991:1;987;:5;:::i;:::-;975:17;-1:-1:-1;1020:1:0;1011:5;1015:1;975:17;1011:5;:::i;:::-;:10;1003:56;;;;-1:-1:-1;;;1003:56:0;;15069:2:1;1003:56:0;;;15051:21:1;15108:2;15088:18;;;15081:30;15147:34;15127:18;;;15120:62;-1:-1:-1;;;15198:18:1;;;15191:31;15239:19;;1003:56:0;14867:397:1;1094:132:0;1152:7;1179:39;1183:1;1186;1179:39;;;;;;;;;;;;;;;;;1318:7;1420:12;1413:5;1405:28;;;;-1:-1:-1;;;1405:28:0;;;;;;;;:::i;:::-;-1:-1:-1;1444:9:0;1456:5;1460:1;1456;:5;:::i;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:156:1;80:20;;140:4;129:16;;119:27;;109:55;;160:1;157;150:12;175:247;234:6;287:2;275:9;266:7;262:23;258:32;255:52;;;303:1;300;293:12;255:52;342:9;329:23;361:31;386:5;361:31;:::i;427:251::-;497:6;550:2;538:9;529:7;525:23;521:32;518:52;;;566:1;563;556:12;518:52;598:9;592:16;617:31;642:5;617:31;:::i;943:388::-;1011:6;1019;1072:2;1060:9;1051:7;1047:23;1043:32;1040:52;;;1088:1;1085;1078:12;1040:52;1127:9;1114:23;1146:31;1171:5;1146:31;:::i;:::-;1196:5;-1:-1:-1;1253:2:1;1238:18;;1225:32;1266:33;1225:32;1266:33;:::i;:::-;1318:7;1308:17;;;943:388;;;;;:::o;1336:456::-;1413:6;1421;1429;1482:2;1470:9;1461:7;1457:23;1453:32;1450:52;;;1498:1;1495;1488:12;1450:52;1537:9;1524:23;1556:31;1581:5;1556:31;:::i;:::-;1606:5;-1:-1:-1;1663:2:1;1648:18;;1635:32;1676:33;1635:32;1676:33;:::i;:::-;1336:456;;1728:7;;-1:-1:-1;;;1782:2:1;1767:18;;;;1754:32;;1336:456::o;1797:382::-;1862:6;1870;1923:2;1911:9;1902:7;1898:23;1894:32;1891:52;;;1939:1;1936;1929:12;1891:52;1978:9;1965:23;1997:31;2022:5;1997:31;:::i;:::-;2047:5;-1:-1:-1;2104:2:1;2089:18;;2076:32;2117:30;2076:32;2117:30;:::i;2184:315::-;2252:6;2260;2313:2;2301:9;2292:7;2288:23;2284:32;2281:52;;;2329:1;2326;2319:12;2281:52;2368:9;2355:23;2387:31;2412:5;2387:31;:::i;:::-;2437:5;2489:2;2474:18;;;;2461:32;;-1:-1:-1;;;2184:315:1:o;2504:615::-;2590:6;2598;2651:2;2639:9;2630:7;2626:23;2622:32;2619:52;;;2667:1;2664;2657:12;2619:52;2707:9;2694:23;2736:18;2777:2;2769:6;2766:14;2763:34;;;2793:1;2790;2783:12;2763:34;2831:6;2820:9;2816:22;2806:32;;2876:7;2869:4;2865:2;2861:13;2857:27;2847:55;;2898:1;2895;2888:12;2847:55;2938:2;2925:16;2964:2;2956:6;2953:14;2950:34;;;2980:1;2977;2970:12;2950:34;3033:7;3028:2;3018:6;3015:1;3011:14;3007:2;3003:23;2999:32;2996:45;2993:65;;;3054:1;3051;3044:12;2993:65;3085:2;3077:11;;;;;3107:6;;-1:-1:-1;2504:615:1;;-1:-1:-1;;;;2504:615:1:o;3124:1116::-;3219:6;3250:2;3293;3281:9;3272:7;3268:23;3264:32;3261:52;;;3309:1;3306;3299:12;3261:52;3342:9;3336:16;3371:18;3412:2;3404:6;3401:14;3398:34;;;3428:1;3425;3418:12;3398:34;3466:6;3455:9;3451:22;3441:32;;3511:7;3504:4;3500:2;3496:13;3492:27;3482:55;;3533:1;3530;3523:12;3482:55;3562:2;3556:9;3584:2;3580;3577:10;3574:36;;;3590:18;;:::i;:::-;3636:2;3633:1;3629:10;3668:2;3662:9;3731:2;3727:7;3722:2;3718;3714:11;3710:25;3702:6;3698:38;3786:6;3774:10;3771:22;3766:2;3754:10;3751:18;3748:46;3745:72;;;3797:18;;:::i;:::-;3833:2;3826:22;3883:18;;;3917:15;;;;-1:-1:-1;3952:11:1;;;3982;;;3978:20;;3975:33;-1:-1:-1;3972:53:1;;;4021:1;4018;4011:12;3972:53;4043:1;4034:10;;4053:156;4067:2;4064:1;4061:9;4053:156;;;4124:10;;4112:23;;4085:1;4078:9;;;;;4155:12;;;;4187;;4053:156;;;-1:-1:-1;4228:6:1;3124:1116;-1:-1:-1;;;;;;;;3124:1116:1:o;4245:245::-;4312:6;4365:2;4353:9;4344:7;4340:23;4336:32;4333:52;;;4381:1;4378;4371:12;4333:52;4413:9;4407:16;4432:28;4454:5;4432:28;:::i;4495:309::-;4560:6;4568;4621:2;4609:9;4600:7;4596:23;4592:32;4589:52;;;4637:1;4634;4627:12;4589:52;4676:9;4663:23;4695:28;4717:5;4695:28;:::i;5346:180::-;5405:6;5458:2;5446:9;5437:7;5433:23;5429:32;5426:52;;;5474:1;5471;5464:12;5426:52;-1:-1:-1;5497:23:1;;5346:180;-1:-1:-1;5346:180:1:o;5531:184::-;5601:6;5654:2;5642:9;5633:7;5629:23;5625:32;5622:52;;;5670:1;5667;5660:12;5622:52;-1:-1:-1;5693:16:1;;5531:184;-1:-1:-1;5531:184:1:o;5720:248::-;5788:6;5796;5849:2;5837:9;5828:7;5824:23;5820:32;5817:52;;;5865:1;5862;5855:12;5817:52;-1:-1:-1;;5888:23:1;;;5958:2;5943:18;;;5930:32;;-1:-1:-1;5720:248:1:o;5973:306::-;6061:6;6069;6077;6130:2;6118:9;6109:7;6105:23;6101:32;6098:52;;;6146:1;6143;6136:12;6098:52;6175:9;6169:16;6159:26;;6225:2;6214:9;6210:18;6204:25;6194:35;;6269:2;6258:9;6254:18;6248:25;6238:35;;5973:306;;;;;:::o;6284:927::-;6388:6;6396;6404;6412;6420;6428;6481:3;6469:9;6460:7;6456:23;6452:33;6449:53;;;6498:1;6495;6488:12;6449:53;6534:9;6521:23;6511:33;;6591:2;6580:9;6576:18;6563:32;6553:42;;6642:2;6631:9;6627:18;6614:32;6604:42;;6697:2;6686:9;6682:18;6669:32;6720:18;6761:2;6753:6;6750:14;6747:34;;;6777:1;6774;6767:12;6747:34;6815:6;6804:9;6800:22;6790:32;;6860:7;6853:4;6849:2;6845:13;6841:27;6831:55;;6882:1;6879;6872:12;6831:55;6922:2;6909:16;6948:2;6940:6;6937:14;6934:34;;;6964:1;6961;6954:12;6934:34;7009:7;7004:2;6995:6;6991:2;6987:15;6983:24;6980:37;6977:57;;;7030:1;7027;7020:12;6977:57;7061:2;7057;7053:11;7043:21;;7083:6;7073:16;;;;;7139:3;7128:9;7124:19;7111:33;7153:28;7175:5;7153:28;:::i;:::-;7200:5;7190:15;;;6284:927;;;;;;;;:::o;7216:252::-;7280:6;7288;7341:2;7329:9;7320:7;7316:23;7312:32;7309:52;;;7357:1;7354;7347:12;7309:52;7380:27;7397:9;7380:27;:::i;:::-;7370:37;;7426:36;7458:2;7447:9;7443:18;7426:36;:::i;:::-;7416:46;;7216:252;;;;;:::o;7473:461::-;7526:3;7564:5;7558:12;7591:6;7586:3;7579:19;7617:4;7646:2;7641:3;7637:12;7630:19;;7683:2;7676:5;7672:14;7704:1;7714:195;7728:6;7725:1;7722:13;7714:195;;;7793:13;;-1:-1:-1;;;;;7789:39:1;7777:52;;7849:12;;;;7884:15;;;;7825:1;7743:9;7714:195;;;-1:-1:-1;7925:3:1;;7473:461;-1:-1:-1;;;;;7473:461:1:o;7939:472::-;7981:3;8019:5;8013:12;8046:6;8041:3;8034:19;8071:1;8081:162;8095:6;8092:1;8089:13;8081:162;;;8157:4;8213:13;;;8209:22;;8203:29;8185:11;;;8181:20;;8174:59;8110:12;8081:162;;;8261:6;8258:1;8255:13;8252:87;;;8327:1;8320:4;8311:6;8306:3;8302:16;8298:27;8291:38;8252:87;-1:-1:-1;8393:2:1;8372:15;-1:-1:-1;;8368:29:1;8359:39;;;;8400:4;8355:50;;7939:472;-1:-1:-1;;7939:472:1:o;8840:317::-;-1:-1:-1;;;;;9017:32:1;;8999:51;;9086:2;9081;9066:18;;9059:30;;;-1:-1:-1;;9106:45:1;;9132:18;;9124:6;9106:45;:::i;10698:220::-;10847:2;10836:9;10829:21;10810:4;10867:45;10908:2;10897:9;10893:18;10885:6;10867:45;:::i;15681:329::-;15883:2;15865:21;;;15922:1;15902:18;;;15895:29;-1:-1:-1;;;15955:2:1;15940:18;;15933:36;16001:2;15986:18;;15681:329::o;16836:335::-;17038:2;17020:21;;;17077:2;17057:18;;;17050:30;-1:-1:-1;;;17111:2:1;17096:18;;17089:41;17162:2;17147:18;;16836:335::o;17956:332::-;18163:6;18152:9;18145:25;18206:2;18201;18190:9;18186:18;18179:30;18126:4;18226:56;18278:2;18267:9;18263:18;18255:6;18226:56;:::i;18293:582::-;18592:6;18581:9;18574:25;18635:6;18630:2;18619:9;18615:18;18608:34;18678:3;18673:2;18662:9;18658:18;18651:31;18555:4;18699:57;18751:3;18740:9;18736:19;18728:6;18699:57;:::i;:::-;-1:-1:-1;;;;;18792:32:1;;;;18787:2;18772:18;;18765:60;-1:-1:-1;18856:3:1;18841:19;18834:35;18691:65;18293:582;-1:-1:-1;;;18293:582:1:o;19133:517::-;19388:6;19377:9;19370:25;19431:6;19426:2;19415:9;19411:18;19404:34;19474:6;19469:2;19458:9;19454:18;19447:34;19517:3;19512:2;19501:9;19497:18;19490:31;19351:4;19538:46;19579:3;19568:9;19564:19;19556:6;19538:46;:::i;:::-;19530:54;;19635:6;19628:14;19621:22;19615:3;19604:9;19600:19;19593:51;19133:517;;;;;;;;:::o;20404:128::-;20444:3;20475:1;20471:6;20468:1;20465:13;20462:39;;;20481:18;;:::i;:::-;-1:-1:-1;20517:9:1;;20404:128::o;20537:204::-;20575:3;20611:4;20608:1;20604:12;20643:4;20640:1;20636:12;20678:3;20672:4;20668:14;20663:3;20660:23;20657:49;;;20686:18;;:::i;:::-;20722:13;;20537:204;-1:-1:-1;;;20537:204:1:o;20746:120::-;20786:1;20812;20802:35;;20817:18;;:::i;:::-;-1:-1:-1;20851:9:1;;20746:120::o;20871:165::-;20909:1;20943:4;20940:1;20936:12;20967:3;20957:37;;20974:18;;:::i;:::-;21026:3;21019:4;21016:1;21012:12;21008:22;21003:27;;;20871:165;;;;:::o;21041:168::-;21081:7;21147:1;21143;21139:6;21135:14;21132:1;21129:21;21124:1;21117:9;21110:17;21106:45;21103:71;;;21154:18;;:::i;:::-;-1:-1:-1;21194:9:1;;21041:168::o;21214:125::-;21254:4;21282:1;21279;21276:8;21273:34;;;21287:18;;:::i;:::-;-1:-1:-1;21324:9:1;;21214:125::o;21344:195::-;21382:4;21419;21416:1;21412:12;21451:4;21448:1;21444:12;21476:3;21471;21468:12;21465:38;;;21483:18;;:::i;:::-;21520:13;;;21344:195;-1:-1:-1;;;21344:195:1:o;21544:380::-;21623:1;21619:12;;;;21666;;;21687:61;;21741:4;21733:6;21729:17;21719:27;;21687:61;21794:2;21786:6;21783:14;21763:18;21760:38;21757:161;;;21840:10;21835:3;21831:20;21828:1;21821:31;21875:4;21872:1;21865:15;21903:4;21900:1;21893:15;21757:161;;21544:380;;;:::o;21929:135::-;21968:3;-1:-1:-1;;21989:17:1;;21986:43;;;22009:18;;:::i;:::-;-1:-1:-1;22056:1:1;22045:13;;21929:135::o;22069:127::-;22130:10;22125:3;22121:20;22118:1;22111:31;22161:4;22158:1;22151:15;22185:4;22182:1;22175:15;22201:127;22262:10;22257:3;22253:20;22250:1;22243:31;22293:4;22290:1;22283:15;22317:4;22314:1;22307:15;22333:127;22394:10;22389:3;22385:20;22382:1;22375:31;22425:4;22422:1;22415:15;22449:4;22446:1;22439:15;22465:127;22526:10;22521:3;22517:20;22514:1;22507:31;22557:4;22554:1;22547:15;22581:4;22578:1;22571:15;22597:131;-1:-1:-1;;;;;22672:31:1;;22662:42;;22652:70;;22718:1;22715;22708:12;22733:118;22819:5;22812:13;22805:21;22798:5;22795:32;22785:60;;22841:1;22838;22831:12

Swarm Source

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