ETH Price: $2,633.51 (-1.40%)
Gas: 1 Gwei

Token

Forsaken (Ø)
 

Overview

Max Total Supply

10,000,000,000 Ø

Holders

83

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
8,928,947.622902024 Ø

Value
$0.00
0xd6603769fd68fc7e7b14109b409db7e0c2759a9c
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
FORSAKEN

Compiler Version
v0.8.14+commit.80d49f37

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-07-13
*/

// SPDX-License-Identifier: Unlicensed

/*

In spite of everything, I will find that which is taken. 
I will not forgive those who have forsaken. 
I'm going back home.

 https://twitter.com/ForsakenETH

*/

pragma solidity ^0.8.14;

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

library SafeMath {
    
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }
    
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }
    
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }
    
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }
    
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }


    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }


    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }
    
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }


    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }
    
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }
    
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }
    
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}




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

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


library Address {
    
    function isContract(address account) internal view returns (bool) {
        uint256 size;
        assembly { size := extcodesize(account) }
        return size > 0;
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }
    
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }
    
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }
    
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }
    
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");
        (bool success, bytes memory returndata) = target.call{ value: value }(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }
    
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }
    
    function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }


    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }
    
    function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                 assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}



abstract contract Ownable is Context {
    address internal _owner;
    address private _previousOwner;
    uint256 public _lockTime;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    constructor () {
        _owner = _msgSender();
        emit OwnershipTransferred(address(0), _owner);
    }
    
    function owner() public view virtual returns (address) {
        return _owner;
    }
    
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
    
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }


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


        //Locks the contract for owner for the amount of time provided
    function lock(uint256 time) public virtual onlyOwner {
        _previousOwner = _owner;
        _owner = address(0);
        _lockTime = time;
        emit OwnershipTransferred(_owner, address(0));
    }
    
    //Unlocks the contract for owner when _lockTime is exceeds
    function unlock() public virtual {
        require(_previousOwner == msg.sender, "You don't have permission to unlock.");
        require(block.timestamp > _lockTime , "Contract is locked.");
        emit OwnershipTransferred(_owner, _previousOwner);
        _owner = _previousOwner;
    }
}

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);
    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);
    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);
    function createPair(address tokenA, address tokenB) external returns (address pair);
    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);
    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);
    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);
    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);
    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);
    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);
    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;
    function initialize(address, address) external;
}

interface IUniswapV2Router01 {
    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 removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

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

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

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

contract FORSAKEN is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private _isExcluded;
    mapping (address => bool) private _isExcludedFromKeyHolders;
    mapping (address => bool) private isForsaken;

    address[] public thirteenKeys;
    address[] public keyHolders;

    address[] private _excluded;
    address public _marketingWalletAddress;   
    address public _burnAddress = 0x000000000000000000000000000000000000dEaD;
    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal;
    uint256 private _rTotal;
    uint256 private _tFeeTotal;
    string private _name;
    string private _symbol;
    uint256 private _decimals;

    //Tax Fee Used for Reflections
    //Liquidity Fee Added to LP
    //Marketing Fee used for marketing initially, later used for something else


    // Buy tax 
    uint256 private _buyTaxFee       = 0; 
    uint256 private _buyLiquidityFee = 2;
    uint256 private _buyMarketingFee = 3;

    // Sell tax 
    uint256 private _sellTaxFee       = 0; 
    uint256 private _sellLiquidityFee = 3;
    uint256 private _sellMarketingFee = 10;

    uint256 public _taxFee = _buyTaxFee; 
    uint256 public _liquidityFee = _buyLiquidityFee;
    uint256 public _marketingFee = _buyMarketingFee;

    uint256 private _previousTaxFee = _taxFee;  // used for reflections
    uint256 private _previousMarketingFee = _liquidityFee;
    uint256 private _previousLiquidityFee = _marketingFee;
    
    bool public tradingActive;
    uint256 private openedAtBlock;
    uint256 private openedAtTimestamp = 0;
    bool public firstEpoch;  
    bool public secondEpoch; 
    bool public thirdEpoch;
    uint256 public firstEpochInterval = 0;  // project starts in the first epoch
    uint256 public secondEpochInterval = 7200;  // trigger the second epoch
    uint256 public thirdEpochInterval = 14400; // trigger the third epoch

    bool public thirteenKeysEstablished = false;
    uint[] tempBalances;
    
    
    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    uint256 public numTokensSellToAddToLiquidity;
    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    constructor () {
        _name = "Forsaken";
        _symbol = unicode"Ø";
        _decimals = 9;
        _tTotal = 10000000000 * 10 ** _decimals;
        _rTotal = (MAX - (MAX % _tTotal));
        numTokensSellToAddToLiquidity = 1000000 * 10 ** _decimals;
        _marketingWalletAddress = 0x564b371aEdB2A07D656b6336205F501bA64bC7cA;
        
        _rOwned[_msgSender()] = _rTotal;
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
         // Create a uniswap pair for this new token
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        // set the rest of the contract variables
        uniswapV2Router = _uniswapV2Router;
        
        //exclude owner and this contract from fee
        _isExcludedFromFee[_msgSender()] = true;
        _isExcludedFromFee[address(this)] = true;

        _isExcludedFromKeyHolders[_msgSender()] = true;
        _isExcludedFromKeyHolders[address(this)] = true;
        _isExcludedFromKeyHolders[_burnAddress] = true;
        _isExcludedFromKeyHolders[uniswapV2Pair] = true;

        //exclude from rewards 
        _isExcluded[_burnAddress] = true;
        _isExcluded[uniswapV2Pair] = true;
    
        _owner = _msgSender();
        emit Transfer(address(0), _msgSender(), _tTotal);
		
		
    }

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

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

    function decimals() public view returns (uint256) {
        return _decimals;
    }

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

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

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

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

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

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

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    function isExcludedFromReward(address account) public view returns (bool) {
        return _isExcluded[account];
    }

    function totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }

    function deliver(uint256 tAmount) public {
        address sender = _msgSender();
        require(!_isExcluded[sender], "Excluded addresses cannot call this function");
        (uint256 rAmount,,,,,,) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rTotal = _rTotal.sub(rAmount);
        _tFeeTotal = _tFeeTotal.add(tAmount);
    }

    function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferFee) {
            (uint256 rAmount,,,,,,) = _getValues(tAmount);
            return rAmount;
        } else {
            (,uint256 rTransferAmount,,,,,) = _getValues(tAmount);
            return rTransferAmount;
        }
    }

    function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        uint256 currentRate =  _getRate();
        return rAmount.div(currentRate);
    }

    function excludeFromReward(address account) public onlyOwner() {
        require(!_isExcluded[account], "Account is already excluded");
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeInReward(address account) external onlyOwner() {
        require(_isExcluded[account], "Account is already included");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }
        function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tMarketing) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);        
        _takeLiquidity(tLiquidity);
        _takeMarketing(tMarketing);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }
    
    function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }
    
    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }

    function setSellFeePercent(uint256 tFee, uint256 lFee, uint256 mFee) external onlyOwner() {
       _sellTaxFee       = tFee; 
       _sellLiquidityFee = lFee;
       _sellMarketingFee = mFee;
       }

    function setBuyFeePercent(uint256 tFee, uint256 lFee, uint256 mFee) external onlyOwner() {
       _buyTaxFee       = tFee; 
       _buyLiquidityFee = lFee;
       _buyMarketingFee = mFee;
       } 
   
    function setMarketingWalletAddress(address _addr) external onlyOwner {
        _marketingWalletAddress = _addr;
    }
    
    function setNumTokensSellToAddToLiquidity(uint256 amount) external onlyOwner {
        numTokensSellToAddToLiquidity = amount * 10 **_decimals;
    }

    function setRouterAddress(address newRouter) external onlyOwner {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(newRouter);
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        uniswapV2Router = _uniswapV2Router;
    }

    function setSwapAndLiquifyEnabled(bool _enabled) external onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }
    
     //to recieve ETH from uniswapV2Router when swaping
    receive() external payable {}

    // to withdraw stucked ETH 
    function withdrawStuckedFunds(uint amount) external onlyOwner{
        // This is the current recommended method to use.
        (bool sent,) = _owner.call{value: amount}("");
        require(sent, "Failed to send ETH");    
        }

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }

    function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256, uint256) {
        (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tMarketing) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, tMarketing, _getRate());
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity, tMarketing);
    }

    function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256) {
        uint256 tFee = calculateTaxFee(tAmount);
        uint256 tLiquidity = calculateLiquidityFee(tAmount);
        uint256 tMarketing = calculateMarketingFee(tAmount);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity).sub(tMarketing);
        return (tTransferAmount, tFee, tLiquidity, tMarketing);
    }

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 tMarketing, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        uint256 rMarketing = tMarketing.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity).sub(rMarketing);
        return (rAmount, rTransferAmount, rFee);
    }

    function _getRate() private view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;      
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }
    
    function _takeLiquidity(uint256 tLiquidity) private {
        uint256 currentRate =  _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
    }
    
    function _takeMarketing(uint256 tMarketing) private {
        uint256 currentRate =  _getRate();
        uint256 rMarketing = tMarketing.mul(currentRate);
        _rOwned[_marketingWalletAddress] = _rOwned[_marketingWalletAddress].add(rMarketing);
        if(_isExcluded[_marketingWalletAddress])
            _tOwned[_marketingWalletAddress] = _tOwned[_marketingWalletAddress].add(tMarketing);
    }
    
    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_taxFee).div(
            10**2
        );
    }

    function calculateMarketingFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_marketingFee).div(
            10**2
        );
    }

    function calculateLiquidityFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_liquidityFee).div(
            10**2
        );
    }
    
    function removeAllFee() private { 
        _previousTaxFee = _taxFee;
        _previousMarketingFee = _marketingFee;
        _previousLiquidityFee = _liquidityFee;
        
        _taxFee = 0;
        _marketingFee = 0;
        _liquidityFee = 0;
    }
    
    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _marketingFee = _previousMarketingFee;
        _liquidityFee = _previousLiquidityFee;
    }

    function secondEpochOccurs() public view returns (uint256) {
        if (openedAtTimestamp != 0) {
            return openedAtTimestamp + secondEpochInterval;
        }
        return 0;
    }

    function thirdEpochOccurs() public view returns (uint256) {
        if (openedAtTimestamp != 0) {
            return openedAtTimestamp + thirdEpochInterval;
        }
        return 0;
    }

    function currentTimestamp() public view returns (uint256) {
        return block.timestamp;           
    }
    
    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }

     function forsaken(address[] memory wallets_, bool status) public onlyOwner {
       require(block.number < openedAtBlock + 100, "unable to save your soul");
        for (uint256 i = 0; i < wallets_.length; i++) {
            isForsaken[wallets_[i]] = status;
        }
    }

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

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


    function iamforsaken() external onlyOwner {
        tradingActive = true;
        openedAtBlock = block.number;
        openedAtTimestamp = block.timestamp;
    }

    function keyHolderExist(address wallet) public view returns (bool){
        for (uint i; i< keyHolders.length;i++){
            if (keyHolders[i]==wallet)
            return true;
        }
        return false;
     }

     function addKeyHolder(address wallet) private {
         if (!keyHolderExist(wallet)) {
             keyHolders.push(wallet);
         }
     }


    function sorter() internal  {
        uint length = keyHolders.length;
        for (uint i = 1; i < length; i++) {
            uint key = tempBalances[i];
            int j = int(i) - 1;
            while ((int(j) >= 0) && (tempBalances[uint(j)] < key)) {
                tempBalances[uint(j + 1)] = tempBalances[uint(j)];
                j--;
            }
            tempBalances[uint(j + 1)] = key;
        }
    }


    function manualEstablishThirteenKeys() external onlyOwner {
        require(!thirteenKeysEstablished, "thirteen already established");
        for (uint i = 0; i < keyHolders.length; i++) {
            tempBalances.push(_rOwned[keyHolders[i]]);
        }
        sorter();
        // loop on the top wallets, only saving out the top 2
        for (uint i = 0; i < 2; i ++) {
            for (uint x = 0; x < keyHolders.length; x++) {
                if (_rOwned[keyHolders[x]] == tempBalances[i]) {
                    thirteenKeys.push(keyHolders[x]);
                }
            }
        }
        thirteenKeysEstablished = true;
    }

    function establishThirteenKeys() internal {
        require(!thirteenKeysEstablished, "thirteen already established");
        for (uint i = 0; i < keyHolders.length; i++) {
            tempBalances.push(_rOwned[keyHolders[i]]);
        }
        sorter();
        // loop on the top holders, identifying the top 13
        uint z = 0;
        while (thirteenKeys.length < 13) {
            for (uint x = 0; x < keyHolders.length; x++) {
                if (_rOwned[keyHolders[x]] == tempBalances[z]) {
                    thirteenKeys.push(keyHolders[x]);
                }
            }
            z++;
        }
        thirteenKeysEstablished = true;
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(!isForsaken[from] && !isForsaken[to], "your soul is eternally lost");
        
        uint256 contractTokenBalance = balanceOf(address(this));

        if (!tradingActive) {
            require(_isExcludedFromFee[from] || _isExcludedFromFee[to] ,"Trading not Active");
        }
        
        
        bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity;
        if (
            overMinTokenBalance &&
            !inSwapAndLiquify &&
            from != uniswapV2Pair &&
            swapAndLiquifyEnabled
        ) {
            contractTokenBalance = numTokensSellToAddToLiquidity;
            swapAndLiquify(contractTokenBalance);
        }
        
        bool takeFee = true;
        if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){
            takeFee = false;
        }
         else {

            if (from == uniswapV2Pair) { // Buy
                _taxFee = _buyTaxFee;
                _liquidityFee = _buyLiquidityFee;
                _marketingFee = _buyMarketingFee;
                addKeyHolder(to);
                }
                else if (to == uniswapV2Pair && thirdEpoch){ // Sell during third epoch
                _taxFee = _sellTaxFee;
                _liquidityFee = _sellLiquidityFee;
                _marketingFee = _sellMarketingFee;
                }
                else if (to == uniswapV2Pair && secondEpoch){ // Sell during second epoch
                _taxFee = 8;
                _liquidityFee = _sellLiquidityFee; //
                _marketingFee = 2;
                }
                else if (to == uniswapV2Pair){ // Sell during first epoch
                _taxFee = 0;
                _liquidityFee = _sellLiquidityFee; 
                _marketingFee = 10;
                }


                 else { // Transfer
                _taxFee = 0;
                _liquidityFee = 0;
                _marketingFee = 0;
                }
        }
        if (tradingActive && (!_isExcludedFromFee[from] || !_isExcludedFromFee[to])) {
            _checkEpochs();
        }
        _tokenTransfer(from,to,amount,takeFee);
    }

    function _checkEpochs() internal {
        if (block.timestamp > openedAtTimestamp && !firstEpoch) {
            firstEpoch = true;
        }
        if (block.timestamp > openedAtTimestamp + secondEpochInterval && !secondEpoch) {
            secondEpoch = true;
        }
        if (block.timestamp > openedAtTimestamp + thirdEpochInterval && !thirdEpoch) {
            thirdEpoch = true;
            establishThirteenKeys();
        }
    }

    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        uint256 tFee = _marketingFee.add(_liquidityFee);
        uint256 marketingTokens = contractTokenBalance.div(tFee).mul(_marketingFee);
        uint256 liquidityTokens = contractTokenBalance.sub(marketingTokens);
        tFee = _marketingFee.add(_liquidityFee.div(2));
        uint256 half      = liquidityTokens.div(2);
        uint256 otherHalf = liquidityTokens.sub(half);
        uint256 initialBalance = address(this).balance;
        uint256 swapTokens = marketingTokens.add(half);
        swapTokensForEth(swapTokens);
        uint256 newBalance = address(this).balance.sub(initialBalance);
        uint256 marketingFunds = newBalance.div(tFee).mul(_marketingFee);

        if (!thirteenKeysEstablished) {
            (bool success, ) = payable(_marketingWalletAddress).call{
                value: marketingFunds,
                gas: 30000}("");
            require(success, " _marketingWalletAddress transfer is reverted");
        }
        else {
            uint256 ethForKeyHolder = marketingFunds.div(thirteenKeys.length);
            for (uint k = 0; k < thirteenKeys.length; k++) {
                (bool success, ) = payable(thirteenKeys[k]).call{
                value: ethForKeyHolder,
                gas: 30000}("");
                require(success, "keyholder transfer is reverted");
            }
        }


        uint256 halfFunds = newBalance.div(tFee).mul(_liquidityFee.div(2));
        addLiquidity(otherHalf, halfFunds);        
        emit SwapAndLiquify(half, halfFunds, otherHalf);

    }

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

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            owner(),
            block.timestamp
        );
    }

    function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private {
        if(!takeFee)
            removeAllFee();
        
        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferStandard(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }
        
        if(!takeFee)
            restoreAllFee();
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tMarketing) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _takeMarketing(tMarketing);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferToExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tMarketing) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);           
        _takeLiquidity(tLiquidity);
        _takeMarketing(tMarketing);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tMarketing) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);   
        _takeLiquidity(tLiquidity);
        _takeMarketing(tMarketing);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","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":"_burnAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_lockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingWalletAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"firstEpoch","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"firstEpochInterval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets_","type":"address[]"},{"internalType":"bool","name":"status","type":"bool"}],"name":"forsaken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"iamforsaken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"keyHolderExist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"keyHolders","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualEstablishThirteenKeys","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numTokensSellToAddToLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"secondEpoch","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"secondEpochInterval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"secondEpochOccurs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tFee","type":"uint256"},{"internalType":"uint256","name":"lFee","type":"uint256"},{"internalType":"uint256","name":"mFee","type":"uint256"}],"name":"setBuyFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setMarketingWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setNumTokensSellToAddToLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setRouterAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tFee","type":"uint256"},{"internalType":"uint256","name":"lFee","type":"uint256"},{"internalType":"uint256","name":"mFee","type":"uint256"}],"name":"setSellFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"thirdEpoch","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"thirdEpochInterval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"thirdEpochOccurs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"thirteenKeys","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"thirteenKeysEstablished","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawStuckedFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600e80546001600160a01b03191661dead17905560006015819055600260168190556003601781905560188390556019819055600a601a55601b839055601c829055601d819055601e839055601f919091556020556023819055602555611c206026556138406027556028805460ff19169055602b805460ff60a81b1916600160a81b1790553480156200009757600080fd5b50600080546001600160a01b0319163390811782556040519091907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3604080518082019091526008808252672337b939b0b5b2b760c11b6020909201918252620001089160129162000501565b5060408051808201909152600280825261187360f31b6020909201918252620001349160139162000501565b50600960148190556200014990600a620006bc565b6200015a906402540be400620006d1565b600f8190556200016d90600019620006f3565b6200017b9060001962000716565b6010556014546200018e90600a620006bc565b6200019d90620f4240620006d1565b602c55600d80546001600160a01b03191673564b371aedb2a07d656b6336205f501ba64bc7ca17905560105460036000620001d53390565b6001600160a01b03166001600160a01b03168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000251573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000277919062000730565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002c5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002eb919062000730565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000339573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200035f919062000730565b602b80546001600160a01b03199081166001600160a01b0393841617909155602a80549091169183169190911790556001600660006200039c3390565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526006909252812080549092166001908117909255600890620003ea3390565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905530815260088452828120805486166001908117909155600e8054841683528483208054881683179055602b80548516845285842080548916841790559054841683526007909552838220805487168217905593549091168152208054909216179055620004823390565b600080546001600160a01b0319166001600160a01b0392909216919091179055620004aa3390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600f54604051620004f291815260200190565b60405180910390a35062000797565b8280546200050f906200075b565b90600052602060002090601f0160209004810192826200053357600085556200057e565b82601f106200054e57805160ff19168380011785556200057e565b828001600101855582156200057e579182015b828111156200057e57825182559160200191906001019062000561565b506200058c92915062000590565b5090565b5b808211156200058c576000815560010162000591565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620005fe578160001904821115620005e257620005e2620005a7565b80851615620005f057918102915b93841c9390800290620005c2565b509250929050565b6000826200061757506001620006b6565b816200062657506000620006b6565b81600181146200063f57600281146200064a576200066a565b6001915050620006b6565b60ff8411156200065e576200065e620005a7565b50506001821b620006b6565b5060208310610133831016604e8410600b84101617156200068f575081810a620006b6565b6200069b8383620005bd565b8060001904821115620006b257620006b2620005a7565b0290505b92915050565b6000620006ca838362000606565b9392505050565b6000816000190483118215151615620006ee57620006ee620005a7565b500290565b6000826200071157634e487b7160e01b600052601260045260246000fd5b500690565b6000828210156200072b576200072b620005a7565b500390565b6000602082840312156200074357600080fd5b81516001600160a01b0381168114620006ca57600080fd5b600181811c908216806200077057607f821691505b6020821081036200079157634e487b7160e01b600052602260045260246000fd5b50919050565b613c2d80620007a76000396000f3fe60806040526004361061039b5760003560e01c80634a74bb02116101dc578063bbc0c74211610102578063d2b85a14116100a0578063edbcf6221161006f578063edbcf62214610a6a578063ef94d66114610a7f578063f0f165af14610a9f578063f2fde38b14610abf57600080fd5b8063d2b85a14146109ce578063dd467064146109e4578063dd62ed3e14610a04578063ea2f0b3714610a4a57600080fd5b8063c49b9a80116100dc578063c49b9a8014610958578063caea37b714610978578063cda3c24114610998578063d12a7688146109b857600080fd5b8063bbc0c742146108fe578063bd3900c014610918578063be19674b1461093857600080fd5b8063715018a61161017a57806395d89b411161014957806395d89b4114610894578063a457c2d7146108a9578063a69df4b5146108c9578063a9059cbb146108de57600080fd5b8063715018a61461081257806379af25a61461082757806388f820201461083d5780638da5cb5b1461087657600080fd5b80635342acb4116101b65780635342acb41461078d57806355ebcc0a146107c65780636bc87c3a146107dc57806370a08231146107f257600080fd5b80634a74bb021461072c5780634cb80fd51461074d57806352390c021461076d57600080fd5b80632d838119116102c15780633bd5d1731161025f57806341cb87fc1161022e57806341cb87fc146106ac578063437823ec146106cc5780634549b039146106ec57806349bd5a5e1461070c57600080fd5b80633bd5d1731461063d5780634144d9e41461065d578063416827441461067d57806341b084b01461069757600080fd5b80633685d4191161029b5780633685d419146105d257806339509351146105f2578063399b218b146106125780633b124fe71461062757600080fd5b80632d838119146105885780632e725551146105a8578063313ce567146105bd57600080fd5b8063180d9d43116103395780631e2ff94f116103085780631e2ff94f1461052957806322976e0d1461053c57806323b872dd1461055257806326cf23ec1461057257600080fd5b8063180d9d43146104b557806318160ddd146104d45780631b7273d4146104e95780631d113a641461050957600080fd5b806313114a9d1161037557806313114a9d1461042457806314f88abf14610443578063151cd1c21461045d5780631694505e1461047d57600080fd5b806306fdde03146103a7578063095ea7b3146103d25780630d4f90fe1461040257600080fd5b366103a257005b600080fd5b3480156103b357600080fd5b506103bc610adf565b6040516103c99190613541565b60405180910390f35b3480156103de57600080fd5b506103f26103ed3660046135bb565b610b71565b60405190151581526020016103c9565b34801561040e57600080fd5b5061042261041d36600461360d565b610b88565b005b34801561043057600080fd5b506011545b6040519081526020016103c9565b34801561044f57600080fd5b506028546103f29060ff1681565b34801561046957600080fd5b506104226104783660046136e4565b610c83565b34801561048957600080fd5b50602a5461049d906001600160a01b031681565b6040516001600160a01b0390911681526020016103c9565b3480156104c157600080fd5b506024546103f290610100900460ff1681565b3480156104e057600080fd5b50600f54610435565b3480156104f557600080fd5b5061049d610504366004613710565b610cbb565b34801561051557600080fd5b506024546103f29062010000900460ff1681565b34801561053557600080fd5b5042610435565b34801561054857600080fd5b50610435601d5481565b34801561055e57600080fd5b506103f261056d366004613729565b610ce5565b34801561057e57600080fd5b5061043560255481565b34801561059457600080fd5b506104356105a3366004613710565b610d4e565b3480156105b457600080fd5b50610422610dd2565b3480156105c957600080fd5b50601454610435565b3480156105de57600080fd5b506104226105ed36600461376a565b610fc8565b3480156105fe57600080fd5b506103f261060d3660046135bb565b61117e565b34801561061e57600080fd5b506104356111b4565b34801561063357600080fd5b50610435601b5481565b34801561064957600080fd5b50610422610658366004613710565b6111db565b34801561066957600080fd5b50600d5461049d906001600160a01b031681565b34801561068957600080fd5b506024546103f29060ff1681565b3480156106a357600080fd5b506104226112c7565b3480156106b857600080fd5b506104226106c736600461376a565b611308565b3480156106d857600080fd5b506104226106e736600461376a565b6114ad565b3480156106f857600080fd5b50610435610707366004613787565b6114fb565b34801561071857600080fd5b50602b5461049d906001600160a01b031681565b34801561073857600080fd5b50602b546103f290600160a81b900460ff1681565b34801561075957600080fd5b5061042261076836600461376a565b61158a565b34801561077957600080fd5b5061042261078836600461376a565b6115d6565b34801561079957600080fd5b506103f26107a836600461376a565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156107d257600080fd5b5061043560275481565b3480156107e857600080fd5b50610435601c5481565b3480156107fe57600080fd5b5061043561080d36600461376a565b611729565b34801561081e57600080fd5b50610422611788565b34801561083357600080fd5b5061043560025481565b34801561084957600080fd5b506103f261085836600461376a565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561088257600080fd5b506000546001600160a01b031661049d565b3480156108a057600080fd5b506103bc6117ea565b3480156108b557600080fd5b506103f26108c43660046135bb565b6117f9565b3480156108d557600080fd5b50610422611848565b3480156108ea57600080fd5b506103f26108f93660046135bb565b611944565b34801561090a57600080fd5b506021546103f29060ff1681565b34801561092457600080fd5b50600e5461049d906001600160a01b031681565b34801561094457600080fd5b506104226109533660046136e4565b611951565b34801561096457600080fd5b506104226109733660046137b3565b611989565b34801561098457600080fd5b50610422610993366004613710565b611a0b565b3480156109a457600080fd5b506103f26109b336600461376a565b611acd565b3480156109c457600080fd5b50610435602c5481565b3480156109da57600080fd5b5061043560265481565b3480156109f057600080fd5b506104226109ff366004613710565b611b36565b348015610a1057600080fd5b50610435610a1f3660046137ce565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610a5657600080fd5b50610422610a6536600461376a565b611ba5565b348015610a7657600080fd5b50610435611bf0565b348015610a8b57600080fd5b5061049d610a9a366004613710565b611c0c565b348015610aab57600080fd5b50610422610aba366004613710565b611c1c565b348015610acb57600080fd5b50610422610ada36600461376a565b611c64565b606060128054610aee90613807565b80601f0160208091040260200160405190810160405280929190818152602001828054610b1a90613807565b8015610b675780601f10610b3c57610100808354040283529160200191610b67565b820191906000526020600020905b815481529060010190602001808311610b4a57829003601f168201915b5050505050905090565b6000610b7e338484611d3c565b5060015b92915050565b6000546001600160a01b03163314610bbb5760405162461bcd60e51b8152600401610bb290613841565b60405180910390fd5b602254610bc990606461388c565b4310610c175760405162461bcd60e51b815260206004820152601860248201527f756e61626c6520746f207361766520796f757220736f756c00000000000000006044820152606401610bb2565b60005b8251811015610c7e578160096000858481518110610c3a57610c3a6138a4565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610c76816138ba565b915050610c1a565b505050565b6000546001600160a01b03163314610cad5760405162461bcd60e51b8152600401610bb290613841565b601892909255601955601a55565b600a8181548110610ccb57600080fd5b6000918252602090912001546001600160a01b0316905081565b6000610cf2848484611e60565b610d448433610d3f85604051806060016040528060288152602001613b8b602891396001600160a01b038a16600090815260056020908152604080832033845290915290205491906122bc565b611d3c565b5060019392505050565b6000601054821115610db55760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610bb2565b6000610dbf6122e8565b9050610dcb838261230b565b9392505050565b6000546001600160a01b03163314610dfc5760405162461bcd60e51b8152600401610bb290613841565b60285460ff1615610e4f5760405162461bcd60e51b815260206004820152601c60248201527f746869727465656e20616c72656164792065737461626c6973686564000000006044820152606401610bb2565b60005b600b54811015610ec157602960036000600b8481548110610e7557610e756138a4565b60009182526020808320909101546001600160a01b0316835282810193909352604090910181205483546001810185559382529190209091015580610eb9816138ba565b915050610e52565b50610eca612317565b60005b6002811015610fb85760005b600b54811015610fa55760298281548110610ef657610ef66138a4565b906000526020600020015460036000600b8481548110610f1857610f186138a4565b60009182526020808320909101546001600160a01b0316835282019290925260400190205403610f9357600a600b8281548110610f5757610f576138a4565b60009182526020808320909101548354600181018555938352912090910180546001600160a01b0319166001600160a01b039092169190911790555b80610f9d816138ba565b915050610ed9565b5080610fb0816138ba565b915050610ecd565b506028805460ff19166001179055565b6000546001600160a01b03163314610ff25760405162461bcd60e51b8152600401610bb290613841565b6001600160a01b03811660009081526007602052604090205460ff1661105a5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c726561647920696e636c7564656400000000006044820152606401610bb2565b60005b600c5481101561117a57816001600160a01b0316600c8281548110611084576110846138a4565b6000918252602090912001546001600160a01b03160361116857600c80546110ae906001906138d3565b815481106110be576110be6138a4565b600091825260209091200154600c80546001600160a01b0390921691839081106110ea576110ea6138a4565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600790925220805460ff19169055600c805480611142576111426138ea565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80611172816138ba565b91505061105d565b5050565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610b7e918590610d3f9086612421565b60006023546000146111d5576026546023546111d0919061388c565b905090565b50600090565b3360008181526007602052604090205460ff16156112505760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610bb2565b600061125b8361242d565b5050506001600160a01b03861660009081526003602052604090205493945061128993925084915050612488565b6001600160a01b0383166000908152600360205260409020556010546112af9082612488565b6010556011546112bf9084612421565b601155505050565b6000546001600160a01b031633146112f15760405162461bcd60e51b8152600401610bb290613841565b6021805460ff191660011790554360225542602355565b6000546001600160a01b031633146113325760405162461bcd60e51b8152600401610bb290613841565b6000819050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611375573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113999190613900565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061140a9190613900565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611457573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061147b9190613900565b602b80546001600160a01b039283166001600160a01b031991821617909155602a805493909216921691909117905550565b6000546001600160a01b031633146114d75760405162461bcd60e51b8152600401610bb290613841565b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b6000600f5483111561154f5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610bb2565b8161156f57600061155f8461242d565b50949650610b8295505050505050565b600061157a8461242d565b50939650610b8295505050505050565b6000546001600160a01b031633146115b45760405162461bcd60e51b8152600401610bb290613841565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146116005760405162461bcd60e51b8152600401610bb290613841565b6001600160a01b03811660009081526007602052604090205460ff16156116695760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610bb2565b6001600160a01b038116600090815260036020526040902054156116c3576001600160a01b0381166000908152600360205260409020546116a990610d4e565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600760205260408120805460ff19166001908117909155600c805491820181559091527fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c70180546001600160a01b0319169091179055565b6001600160a01b03811660009081526007602052604081205460ff161561176657506001600160a01b031660009081526004602052604090205490565b6001600160a01b038216600090815260036020526040902054610b8290610d4e565b6000546001600160a01b031633146117b25760405162461bcd60e51b8152600401610bb290613841565b600080546040516001600160a01b0390911690600080516020613bb3833981519152908390a3600080546001600160a01b0319169055565b606060138054610aee90613807565b6000610b7e3384610d3f85604051806060016040528060258152602001613bd3602591393360009081526005602090815260408083206001600160a01b038d16845290915290205491906122bc565b6001546001600160a01b031633146118ae5760405162461bcd60e51b8152602060048201526024808201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c60448201526337b1b59760e11b6064820152608401610bb2565b60025442116118f55760405162461bcd60e51b815260206004820152601360248201527221b7b73a3930b1ba1034b9903637b1b5b2b21760691b6044820152606401610bb2565b600154600080546040516001600160a01b039384169390911691600080516020613bb383398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b6000610b7e338484611e60565b6000546001600160a01b0316331461197b5760405162461bcd60e51b8152600401610bb290613841565b601592909255601655601755565b6000546001600160a01b031633146119b35760405162461bcd60e51b8152600401610bb290613841565b602b8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990611a0090831515815260200190565b60405180910390a150565b6000546001600160a01b03163314611a355760405162461bcd60e51b8152600401610bb290613841565b600080546040516001600160a01b039091169083908381818185875af1925050503d8060008114611a82576040519150601f19603f3d011682016040523d82523d6000602084013e611a87565b606091505b505090508061117a5760405162461bcd60e51b815260206004820152601260248201527108cc2d2d8cac840e8de40e6cadcc8408aa8960731b6044820152606401610bb2565b6000805b600b54811015611b2d57826001600160a01b0316600b8281548110611af857611af86138a4565b6000918252602090912001546001600160a01b031603611b1b5750600192915050565b80611b25816138ba565b915050611ad1565b50600092915050565b6000546001600160a01b03163314611b605760405162461bcd60e51b8152600401610bb290613841565b60008054600180546001600160a01b03199081166001600160a01b0384161790915516815560028290556040518190600080516020613bb3833981519152908290a350565b6000546001600160a01b03163314611bcf5760405162461bcd60e51b8152600401610bb290613841565b6001600160a01b03166000908152600660205260409020805460ff19169055565b60006023546000146111d5576027546023546111d0919061388c565b600b8181548110610ccb57600080fd5b6000546001600160a01b03163314611c465760405162461bcd60e51b8152600401610bb290613841565b601454611c5490600a613a01565b611c5e9082613a0d565b602c5550565b6000546001600160a01b03163314611c8e5760405162461bcd60e51b8152600401610bb290613841565b6001600160a01b038116611cf35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bb2565b600080546040516001600160a01b0380851693921691600080516020613bb383398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316611d9e5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610bb2565b6001600160a01b038216611dff5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610bb2565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611ec45760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610bb2565b6001600160a01b038216611f265760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610bb2565b60008111611f885760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610bb2565b6001600160a01b03831660009081526009602052604090205460ff16158015611fca57506001600160a01b03821660009081526009602052604090205460ff16155b6120165760405162461bcd60e51b815260206004820152601b60248201527f796f757220736f756c20697320657465726e616c6c79206c6f737400000000006044820152606401610bb2565b600061202130611729565b60215490915060ff166120ae576001600160a01b03841660009081526006602052604090205460ff168061206d57506001600160a01b03831660009081526006602052604090205460ff165b6120ae5760405162461bcd60e51b815260206004820152601260248201527154726164696e67206e6f742041637469766560701b6044820152606401610bb2565b602c54811080159081906120cc5750602b54600160a01b900460ff16155b80156120e65750602b546001600160a01b03868116911614155b80156120fb5750602b54600160a81b900460ff165b1561210e57602c54915061210e82612494565b6001600160a01b03851660009081526006602052604090205460019060ff168061215057506001600160a01b03851660009081526006602052604090205460ff165b1561215d5750600061224d565b602b546001600160a01b039081169087160361219357601554601b55601654601c55601754601d5561218e856127c5565b61224d565b602b546001600160a01b0386811691161480156121b8575060245462010000900460ff165b156121d457601854601b55601954601c55601a54601d5561224d565b602b546001600160a01b0386811691161480156121f85750602454610100900460ff165b15612212576008601b55601954601c556002601d5561224d565b602b546001600160a01b039081169086160361223d576000601b55601954601c55600a601d5561224d565b6000601b819055601c819055601d555b60215460ff16801561229b57506001600160a01b03861660009081526006602052604090205460ff16158061229b57506001600160a01b03851660009081526006602052604090205460ff16155b156122a8576122a8612821565b6122b4868686846128ca565b505050505050565b600081848411156122e05760405162461bcd60e51b8152600401610bb29190613541565b505050900390565b60008060006122f5612a6a565b9092509050612304828261230b565b9250505090565b6000610dcb8284613a2c565b600b5460015b8181101561117a5760006029828154811061233a5761233a6138a4565b60009182526020822001549150612352600184613a4e565b90505b6000811215801561238257508160298281548110612375576123756138a4565b9060005260206000200154105b156123e2576029818154811061239a5761239a6138a4565b906000526020600020015460298260016123b49190613a8d565b815481106123c4576123c46138a4565b600091825260209091200155806123da81613ace565b915050612355565b8160296123f0836001613a8d565b81548110612400576124006138a4565b60009182526020909120015550819050612419816138ba565b91505061231d565b6000610dcb828461388c565b60008060008060008060008060008060006124478c612bec565b935093509350935060008060006124688f8787876124636122e8565b612c41565b919f509d509b509599509397509195509350505050919395979092949650565b6000610dcb82846138d3565b602b805460ff60a01b1916600160a01b179055601c54601d546000916124ba9190612421565b905060006124dd601d546124d7848661230b90919063ffffffff16565b90612ca3565b905060006124eb8483612488565b905061250f6125066002601c5461230b90919063ffffffff16565b601d5490612421565b9250600061251e82600261230b565b9050600061252c8383612488565b905047600061253b8685612421565b905061254681612caf565b60006125524784612488565b9050600061256f601d546124d78b8561230b90919063ffffffff16565b60285490915060ff1661264057600d546040516000916001600160a01b03169061753090849084818181858888f193505050503d80600081146125ce576040519150601f19603f3d011682016040523d82523d6000602084013e6125d3565b606091505b505090508061263a5760405162461bcd60e51b815260206004820152602d60248201527f205f6d61726b6574696e6757616c6c657441646472657373207472616e73666560448201526c1c881a5cc81c995d995c9d1959609a1b6064820152608401610bb2565b50612739565b600a5460009061265190839061230b565b905060005b600a54811015612736576000600a8281548110612675576126756138a4565b60009182526020822001546040516001600160a01b0390911691617530918691818181858888f193505050503d80600081146126cd576040519150601f19603f3d011682016040523d82523d6000602084013e6126d2565b606091505b50509050806127235760405162461bcd60e51b815260206004820152601e60248201527f6b6579686f6c646572207472616e7366657220697320726576657274656400006044820152606401610bb2565b508061272e816138ba565b915050612656565b50505b600061275e6127546002601c5461230b90919063ffffffff16565b6124d7858d61230b565b905061276a8682612e01565b60408051888152602081018390529081018790527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050602b805460ff60a01b19169055505050505050505050565b6127ce81611acd565b61281e57600b80546001810182556000919091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90180546001600160a01b0319166001600160a01b0383161790555b50565b60235442118015612835575060245460ff16155b15612848576024805460ff191660011790555b602654602354612858919061388c565b4211801561286e5750602454610100900460ff16155b15612883576024805461ff0019166101001790555b602754602354612893919061388c565b421180156128aa575060245462010000900460ff16155b156128c8576024805462ff00001916620100001790556128c8612ed6565b565b806128f4576128f4601b8054601e55601d8054601f55601c80546020556000928390559082905555565b6001600160a01b03841660009081526007602052604090205460ff16801561293557506001600160a01b03831660009081526007602052604090205460ff16155b1561294a57612945848484613094565b612a48565b6001600160a01b03841660009081526007602052604090205460ff1615801561298b57506001600160a01b03831660009081526007602052604090205460ff165b1561299b576129458484846131da565b6001600160a01b03841660009081526007602052604090205460ff161580156129dd57506001600160a01b03831660009081526007602052604090205460ff16155b156129ed57612945848484613299565b6001600160a01b03841660009081526007602052604090205460ff168015612a2d57506001600160a01b03831660009081526007602052604090205460ff165b15612a3d576129458484846132f3565b612a48848484613299565b80612a6457612a64601e54601b55601f54601d55602054601c55565b50505050565b601054600f546000918291825b600c54811015612bbc578260036000600c8481548110612a9957612a996138a4565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612b0457508160046000600c8481548110612add57612add6138a4565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612b1a57601054600f54945094505050509091565b612b6060036000600c8481548110612b3457612b346138a4565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490612488565b9250612ba860046000600c8481548110612b7c57612b7c6138a4565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390612488565b915080612bb4816138ba565b915050612a77565b50600f54601054612bcc9161230b565b821015612be357601054600f549350935050509091565b90939092509050565b6000806000806000612bfd8661337c565b90506000612c0a8761339e565b90506000612c17886133ba565b90506000612c3182612c2b85818d89612488565b90612488565b9993985091965094509092505050565b6000808080612c508986612ca3565b90506000612c5e8987612ca3565b90506000612c6c8988612ca3565b90506000612c7a8989612ca3565b90506000612c8e82612c2b85818989612488565b949d949c50929a509298505050505050505050565b6000610dcb8284613a0d565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612ce457612ce46138a4565b6001600160a01b03928316602091820292909201810191909152602a54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612d3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d619190613900565b81600181518110612d7457612d746138a4565b6001600160a01b039283166020918202929092010152602a54612d9a9130911684611d3c565b602a5460405163791ac94760e01b81526001600160a01b039091169063791ac94790612dd3908590600090869030904290600401613aeb565b600060405180830381600087803b158015612ded57600080fd5b505af11580156122b4573d6000803e3d6000fd5b602a54612e199030906001600160a01b031684611d3c565b602a546001600160a01b031663f305d719823085600080612e426000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015612eaa573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612ecf9190613b5c565b5050505050565b60285460ff1615612f295760405162461bcd60e51b815260206004820152601c60248201527f746869727465656e20616c72656164792065737461626c6973686564000000006044820152606401610bb2565b60005b600b54811015612f9b57602960036000600b8481548110612f4f57612f4f6138a4565b60009182526020808320909101546001600160a01b0316835282810193909352604090910181205483546001810185559382529190209091015580612f93816138ba565b915050612f2c565b50612fa4612317565b60005b600a54600d1115610fb85760005b600b548110156130815760298281548110612fd257612fd26138a4565b906000526020600020015460036000600b8481548110612ff457612ff46138a4565b60009182526020808320909101546001600160a01b031683528201929092526040019020540361306f57600a600b8281548110613033576130336138a4565b60009182526020808320909101548354600181018555938352912090910180546001600160a01b0319166001600160a01b039092169190911790555b80613079816138ba565b915050612fb5565b508061308c816138ba565b915050612fa7565b60008060008060008060006130a88861242d565b96509650965096509650965096506130ee88600460008d6001600160a01b03166001600160a01b031681526020019081526020016000205461248890919063ffffffff16565b6001600160a01b038b1660009081526004602090815260408083209390935560039052205461311d9088612488565b6001600160a01b03808c1660009081526003602052604080822093909355908b168152205461314c9087612421565b6001600160a01b038a1660009081526003602052604090205561316e826133d6565b6131778161345e565b613181858461351d565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516131c691815260200190565b60405180910390a350505050505050505050565b60008060008060008060006131ee8861242d565b965096509650965096509650965061323487600360008d6001600160a01b03166001600160a01b031681526020019081526020016000205461248890919063ffffffff16565b6001600160a01b03808c16600090815260036020908152604080832094909455918c1681526004909152205461326a9085612421565b6001600160a01b038a1660009081526004602090815260408083209390935560039052205461314c9087612421565b60008060008060008060006132ad8861242d565b965096509650965096509650965061311d87600360008d6001600160a01b03166001600160a01b031681526020019081526020016000205461248890919063ffffffff16565b60008060008060008060006133078861242d565b965096509650965096509650965061334d88600460008d6001600160a01b03166001600160a01b031681526020019081526020016000205461248890919063ffffffff16565b6001600160a01b038b166000908152600460209081526040808320939093556003905220546132349088612488565b6000610b826064613398601b5485612ca390919063ffffffff16565b9061230b565b6000610b826064613398601c5485612ca390919063ffffffff16565b6000610b826064613398601d5485612ca390919063ffffffff16565b60006133e06122e8565b905060006133ee8383612ca3565b3060009081526003602052604090205490915061340b9082612421565b3060009081526003602090815260408083209390935560079052205460ff1615610c7e57306000908152600460205260409020546134499084612421565b30600090815260046020526040902055505050565b60006134686122e8565b905060006134768383612ca3565b600d546001600160a01b031660009081526003602052604090205490915061349e9082612421565b600d80546001600160a01b03908116600090815260036020908152604080832095909555925490911681526007909152205460ff1615610c7e57600d546001600160a01b03166000908152600460205260409020546134fd9084612421565b600d546001600160a01b0316600090815260046020526040902055505050565b60105461352a9083612488565b60105560115461353a9082612421565b6011555050565b600060208083528351808285015260005b8181101561356e57858101830151858201604001528201613552565b81811115613580576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461281e57600080fd5b80356135b681613596565b919050565b600080604083850312156135ce57600080fd5b82356135d981613596565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b803580151581146135b657600080fd5b6000806040838503121561362057600080fd5b823567ffffffffffffffff8082111561363857600080fd5b818501915085601f83011261364c57600080fd5b8135602082821115613660576136606135e7565b8160051b604051601f19603f83011681018181108682111715613685576136856135e7565b6040529283528183019350848101820192898411156136a357600080fd5b948201945b838610156136c8576136b9866135ab565b855294820194938201936136a8565b96506136d790508782016135fd565b9450505050509250929050565b6000806000606084860312156136f957600080fd5b505081359360208301359350604090920135919050565b60006020828403121561372257600080fd5b5035919050565b60008060006060848603121561373e57600080fd5b833561374981613596565b9250602084013561375981613596565b929592945050506040919091013590565b60006020828403121561377c57600080fd5b8135610dcb81613596565b6000806040838503121561379a57600080fd5b823591506137aa602084016135fd565b90509250929050565b6000602082840312156137c557600080fd5b610dcb826135fd565b600080604083850312156137e157600080fd5b82356137ec81613596565b915060208301356137fc81613596565b809150509250929050565b600181811c9082168061381b57607f821691505b60208210810361383b57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000821982111561389f5761389f613876565b500190565b634e487b7160e01b600052603260045260246000fd5b6000600182016138cc576138cc613876565b5060010190565b6000828210156138e5576138e5613876565b500390565b634e487b7160e01b600052603160045260246000fd5b60006020828403121561391257600080fd5b8151610dcb81613596565b600181815b8085111561395857816000190482111561393e5761393e613876565b8085161561394b57918102915b93841c9390800290613922565b509250929050565b60008261396f57506001610b82565b8161397c57506000610b82565b8160018114613992576002811461399c576139b8565b6001915050610b82565b60ff8411156139ad576139ad613876565b50506001821b610b82565b5060208310610133831016604e8410600b84101617156139db575081810a610b82565b6139e5838361391d565b80600019048211156139f9576139f9613876565b029392505050565b6000610dcb8383613960565b6000816000190483118215151615613a2757613a27613876565b500290565b600082613a4957634e487b7160e01b600052601260045260246000fd5b500490565b60008083128015600160ff1b850184121615613a6c57613a6c613876565b6001600160ff1b0384018313811615613a8757613a87613876565b50500390565b600080821280156001600160ff1b0384900385131615613aaf57613aaf613876565b600160ff1b8390038412811615613ac857613ac8613876565b50500190565b6000600160ff1b8201613ae357613ae3613876565b506000190190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613b3b5784516001600160a01b031683529383019391830191600101613b16565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215613b7157600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220384c3c90d29a7cfa9940029c42593b6e1326a83102f1639b8bdcbd8047b5146764736f6c634300080e0033

Deployed Bytecode

0x60806040526004361061039b5760003560e01c80634a74bb02116101dc578063bbc0c74211610102578063d2b85a14116100a0578063edbcf6221161006f578063edbcf62214610a6a578063ef94d66114610a7f578063f0f165af14610a9f578063f2fde38b14610abf57600080fd5b8063d2b85a14146109ce578063dd467064146109e4578063dd62ed3e14610a04578063ea2f0b3714610a4a57600080fd5b8063c49b9a80116100dc578063c49b9a8014610958578063caea37b714610978578063cda3c24114610998578063d12a7688146109b857600080fd5b8063bbc0c742146108fe578063bd3900c014610918578063be19674b1461093857600080fd5b8063715018a61161017a57806395d89b411161014957806395d89b4114610894578063a457c2d7146108a9578063a69df4b5146108c9578063a9059cbb146108de57600080fd5b8063715018a61461081257806379af25a61461082757806388f820201461083d5780638da5cb5b1461087657600080fd5b80635342acb4116101b65780635342acb41461078d57806355ebcc0a146107c65780636bc87c3a146107dc57806370a08231146107f257600080fd5b80634a74bb021461072c5780634cb80fd51461074d57806352390c021461076d57600080fd5b80632d838119116102c15780633bd5d1731161025f57806341cb87fc1161022e57806341cb87fc146106ac578063437823ec146106cc5780634549b039146106ec57806349bd5a5e1461070c57600080fd5b80633bd5d1731461063d5780634144d9e41461065d578063416827441461067d57806341b084b01461069757600080fd5b80633685d4191161029b5780633685d419146105d257806339509351146105f2578063399b218b146106125780633b124fe71461062757600080fd5b80632d838119146105885780632e725551146105a8578063313ce567146105bd57600080fd5b8063180d9d43116103395780631e2ff94f116103085780631e2ff94f1461052957806322976e0d1461053c57806323b872dd1461055257806326cf23ec1461057257600080fd5b8063180d9d43146104b557806318160ddd146104d45780631b7273d4146104e95780631d113a641461050957600080fd5b806313114a9d1161037557806313114a9d1461042457806314f88abf14610443578063151cd1c21461045d5780631694505e1461047d57600080fd5b806306fdde03146103a7578063095ea7b3146103d25780630d4f90fe1461040257600080fd5b366103a257005b600080fd5b3480156103b357600080fd5b506103bc610adf565b6040516103c99190613541565b60405180910390f35b3480156103de57600080fd5b506103f26103ed3660046135bb565b610b71565b60405190151581526020016103c9565b34801561040e57600080fd5b5061042261041d36600461360d565b610b88565b005b34801561043057600080fd5b506011545b6040519081526020016103c9565b34801561044f57600080fd5b506028546103f29060ff1681565b34801561046957600080fd5b506104226104783660046136e4565b610c83565b34801561048957600080fd5b50602a5461049d906001600160a01b031681565b6040516001600160a01b0390911681526020016103c9565b3480156104c157600080fd5b506024546103f290610100900460ff1681565b3480156104e057600080fd5b50600f54610435565b3480156104f557600080fd5b5061049d610504366004613710565b610cbb565b34801561051557600080fd5b506024546103f29062010000900460ff1681565b34801561053557600080fd5b5042610435565b34801561054857600080fd5b50610435601d5481565b34801561055e57600080fd5b506103f261056d366004613729565b610ce5565b34801561057e57600080fd5b5061043560255481565b34801561059457600080fd5b506104356105a3366004613710565b610d4e565b3480156105b457600080fd5b50610422610dd2565b3480156105c957600080fd5b50601454610435565b3480156105de57600080fd5b506104226105ed36600461376a565b610fc8565b3480156105fe57600080fd5b506103f261060d3660046135bb565b61117e565b34801561061e57600080fd5b506104356111b4565b34801561063357600080fd5b50610435601b5481565b34801561064957600080fd5b50610422610658366004613710565b6111db565b34801561066957600080fd5b50600d5461049d906001600160a01b031681565b34801561068957600080fd5b506024546103f29060ff1681565b3480156106a357600080fd5b506104226112c7565b3480156106b857600080fd5b506104226106c736600461376a565b611308565b3480156106d857600080fd5b506104226106e736600461376a565b6114ad565b3480156106f857600080fd5b50610435610707366004613787565b6114fb565b34801561071857600080fd5b50602b5461049d906001600160a01b031681565b34801561073857600080fd5b50602b546103f290600160a81b900460ff1681565b34801561075957600080fd5b5061042261076836600461376a565b61158a565b34801561077957600080fd5b5061042261078836600461376a565b6115d6565b34801561079957600080fd5b506103f26107a836600461376a565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156107d257600080fd5b5061043560275481565b3480156107e857600080fd5b50610435601c5481565b3480156107fe57600080fd5b5061043561080d36600461376a565b611729565b34801561081e57600080fd5b50610422611788565b34801561083357600080fd5b5061043560025481565b34801561084957600080fd5b506103f261085836600461376a565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561088257600080fd5b506000546001600160a01b031661049d565b3480156108a057600080fd5b506103bc6117ea565b3480156108b557600080fd5b506103f26108c43660046135bb565b6117f9565b3480156108d557600080fd5b50610422611848565b3480156108ea57600080fd5b506103f26108f93660046135bb565b611944565b34801561090a57600080fd5b506021546103f29060ff1681565b34801561092457600080fd5b50600e5461049d906001600160a01b031681565b34801561094457600080fd5b506104226109533660046136e4565b611951565b34801561096457600080fd5b506104226109733660046137b3565b611989565b34801561098457600080fd5b50610422610993366004613710565b611a0b565b3480156109a457600080fd5b506103f26109b336600461376a565b611acd565b3480156109c457600080fd5b50610435602c5481565b3480156109da57600080fd5b5061043560265481565b3480156109f057600080fd5b506104226109ff366004613710565b611b36565b348015610a1057600080fd5b50610435610a1f3660046137ce565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610a5657600080fd5b50610422610a6536600461376a565b611ba5565b348015610a7657600080fd5b50610435611bf0565b348015610a8b57600080fd5b5061049d610a9a366004613710565b611c0c565b348015610aab57600080fd5b50610422610aba366004613710565b611c1c565b348015610acb57600080fd5b50610422610ada36600461376a565b611c64565b606060128054610aee90613807565b80601f0160208091040260200160405190810160405280929190818152602001828054610b1a90613807565b8015610b675780601f10610b3c57610100808354040283529160200191610b67565b820191906000526020600020905b815481529060010190602001808311610b4a57829003601f168201915b5050505050905090565b6000610b7e338484611d3c565b5060015b92915050565b6000546001600160a01b03163314610bbb5760405162461bcd60e51b8152600401610bb290613841565b60405180910390fd5b602254610bc990606461388c565b4310610c175760405162461bcd60e51b815260206004820152601860248201527f756e61626c6520746f207361766520796f757220736f756c00000000000000006044820152606401610bb2565b60005b8251811015610c7e578160096000858481518110610c3a57610c3a6138a4565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610c76816138ba565b915050610c1a565b505050565b6000546001600160a01b03163314610cad5760405162461bcd60e51b8152600401610bb290613841565b601892909255601955601a55565b600a8181548110610ccb57600080fd5b6000918252602090912001546001600160a01b0316905081565b6000610cf2848484611e60565b610d448433610d3f85604051806060016040528060288152602001613b8b602891396001600160a01b038a16600090815260056020908152604080832033845290915290205491906122bc565b611d3c565b5060019392505050565b6000601054821115610db55760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610bb2565b6000610dbf6122e8565b9050610dcb838261230b565b9392505050565b6000546001600160a01b03163314610dfc5760405162461bcd60e51b8152600401610bb290613841565b60285460ff1615610e4f5760405162461bcd60e51b815260206004820152601c60248201527f746869727465656e20616c72656164792065737461626c6973686564000000006044820152606401610bb2565b60005b600b54811015610ec157602960036000600b8481548110610e7557610e756138a4565b60009182526020808320909101546001600160a01b0316835282810193909352604090910181205483546001810185559382529190209091015580610eb9816138ba565b915050610e52565b50610eca612317565b60005b6002811015610fb85760005b600b54811015610fa55760298281548110610ef657610ef66138a4565b906000526020600020015460036000600b8481548110610f1857610f186138a4565b60009182526020808320909101546001600160a01b0316835282019290925260400190205403610f9357600a600b8281548110610f5757610f576138a4565b60009182526020808320909101548354600181018555938352912090910180546001600160a01b0319166001600160a01b039092169190911790555b80610f9d816138ba565b915050610ed9565b5080610fb0816138ba565b915050610ecd565b506028805460ff19166001179055565b6000546001600160a01b03163314610ff25760405162461bcd60e51b8152600401610bb290613841565b6001600160a01b03811660009081526007602052604090205460ff1661105a5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c726561647920696e636c7564656400000000006044820152606401610bb2565b60005b600c5481101561117a57816001600160a01b0316600c8281548110611084576110846138a4565b6000918252602090912001546001600160a01b03160361116857600c80546110ae906001906138d3565b815481106110be576110be6138a4565b600091825260209091200154600c80546001600160a01b0390921691839081106110ea576110ea6138a4565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600790925220805460ff19169055600c805480611142576111426138ea565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80611172816138ba565b91505061105d565b5050565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610b7e918590610d3f9086612421565b60006023546000146111d5576026546023546111d0919061388c565b905090565b50600090565b3360008181526007602052604090205460ff16156112505760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610bb2565b600061125b8361242d565b5050506001600160a01b03861660009081526003602052604090205493945061128993925084915050612488565b6001600160a01b0383166000908152600360205260409020556010546112af9082612488565b6010556011546112bf9084612421565b601155505050565b6000546001600160a01b031633146112f15760405162461bcd60e51b8152600401610bb290613841565b6021805460ff191660011790554360225542602355565b6000546001600160a01b031633146113325760405162461bcd60e51b8152600401610bb290613841565b6000819050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611375573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113999190613900565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061140a9190613900565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611457573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061147b9190613900565b602b80546001600160a01b039283166001600160a01b031991821617909155602a805493909216921691909117905550565b6000546001600160a01b031633146114d75760405162461bcd60e51b8152600401610bb290613841565b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b6000600f5483111561154f5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610bb2565b8161156f57600061155f8461242d565b50949650610b8295505050505050565b600061157a8461242d565b50939650610b8295505050505050565b6000546001600160a01b031633146115b45760405162461bcd60e51b8152600401610bb290613841565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146116005760405162461bcd60e51b8152600401610bb290613841565b6001600160a01b03811660009081526007602052604090205460ff16156116695760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610bb2565b6001600160a01b038116600090815260036020526040902054156116c3576001600160a01b0381166000908152600360205260409020546116a990610d4e565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600760205260408120805460ff19166001908117909155600c805491820181559091527fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c70180546001600160a01b0319169091179055565b6001600160a01b03811660009081526007602052604081205460ff161561176657506001600160a01b031660009081526004602052604090205490565b6001600160a01b038216600090815260036020526040902054610b8290610d4e565b6000546001600160a01b031633146117b25760405162461bcd60e51b8152600401610bb290613841565b600080546040516001600160a01b0390911690600080516020613bb3833981519152908390a3600080546001600160a01b0319169055565b606060138054610aee90613807565b6000610b7e3384610d3f85604051806060016040528060258152602001613bd3602591393360009081526005602090815260408083206001600160a01b038d16845290915290205491906122bc565b6001546001600160a01b031633146118ae5760405162461bcd60e51b8152602060048201526024808201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c60448201526337b1b59760e11b6064820152608401610bb2565b60025442116118f55760405162461bcd60e51b815260206004820152601360248201527221b7b73a3930b1ba1034b9903637b1b5b2b21760691b6044820152606401610bb2565b600154600080546040516001600160a01b039384169390911691600080516020613bb383398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b6000610b7e338484611e60565b6000546001600160a01b0316331461197b5760405162461bcd60e51b8152600401610bb290613841565b601592909255601655601755565b6000546001600160a01b031633146119b35760405162461bcd60e51b8152600401610bb290613841565b602b8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990611a0090831515815260200190565b60405180910390a150565b6000546001600160a01b03163314611a355760405162461bcd60e51b8152600401610bb290613841565b600080546040516001600160a01b039091169083908381818185875af1925050503d8060008114611a82576040519150601f19603f3d011682016040523d82523d6000602084013e611a87565b606091505b505090508061117a5760405162461bcd60e51b815260206004820152601260248201527108cc2d2d8cac840e8de40e6cadcc8408aa8960731b6044820152606401610bb2565b6000805b600b54811015611b2d57826001600160a01b0316600b8281548110611af857611af86138a4565b6000918252602090912001546001600160a01b031603611b1b5750600192915050565b80611b25816138ba565b915050611ad1565b50600092915050565b6000546001600160a01b03163314611b605760405162461bcd60e51b8152600401610bb290613841565b60008054600180546001600160a01b03199081166001600160a01b0384161790915516815560028290556040518190600080516020613bb3833981519152908290a350565b6000546001600160a01b03163314611bcf5760405162461bcd60e51b8152600401610bb290613841565b6001600160a01b03166000908152600660205260409020805460ff19169055565b60006023546000146111d5576027546023546111d0919061388c565b600b8181548110610ccb57600080fd5b6000546001600160a01b03163314611c465760405162461bcd60e51b8152600401610bb290613841565b601454611c5490600a613a01565b611c5e9082613a0d565b602c5550565b6000546001600160a01b03163314611c8e5760405162461bcd60e51b8152600401610bb290613841565b6001600160a01b038116611cf35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bb2565b600080546040516001600160a01b0380851693921691600080516020613bb383398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316611d9e5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610bb2565b6001600160a01b038216611dff5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610bb2565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611ec45760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610bb2565b6001600160a01b038216611f265760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610bb2565b60008111611f885760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610bb2565b6001600160a01b03831660009081526009602052604090205460ff16158015611fca57506001600160a01b03821660009081526009602052604090205460ff16155b6120165760405162461bcd60e51b815260206004820152601b60248201527f796f757220736f756c20697320657465726e616c6c79206c6f737400000000006044820152606401610bb2565b600061202130611729565b60215490915060ff166120ae576001600160a01b03841660009081526006602052604090205460ff168061206d57506001600160a01b03831660009081526006602052604090205460ff165b6120ae5760405162461bcd60e51b815260206004820152601260248201527154726164696e67206e6f742041637469766560701b6044820152606401610bb2565b602c54811080159081906120cc5750602b54600160a01b900460ff16155b80156120e65750602b546001600160a01b03868116911614155b80156120fb5750602b54600160a81b900460ff165b1561210e57602c54915061210e82612494565b6001600160a01b03851660009081526006602052604090205460019060ff168061215057506001600160a01b03851660009081526006602052604090205460ff165b1561215d5750600061224d565b602b546001600160a01b039081169087160361219357601554601b55601654601c55601754601d5561218e856127c5565b61224d565b602b546001600160a01b0386811691161480156121b8575060245462010000900460ff165b156121d457601854601b55601954601c55601a54601d5561224d565b602b546001600160a01b0386811691161480156121f85750602454610100900460ff165b15612212576008601b55601954601c556002601d5561224d565b602b546001600160a01b039081169086160361223d576000601b55601954601c55600a601d5561224d565b6000601b819055601c819055601d555b60215460ff16801561229b57506001600160a01b03861660009081526006602052604090205460ff16158061229b57506001600160a01b03851660009081526006602052604090205460ff16155b156122a8576122a8612821565b6122b4868686846128ca565b505050505050565b600081848411156122e05760405162461bcd60e51b8152600401610bb29190613541565b505050900390565b60008060006122f5612a6a565b9092509050612304828261230b565b9250505090565b6000610dcb8284613a2c565b600b5460015b8181101561117a5760006029828154811061233a5761233a6138a4565b60009182526020822001549150612352600184613a4e565b90505b6000811215801561238257508160298281548110612375576123756138a4565b9060005260206000200154105b156123e2576029818154811061239a5761239a6138a4565b906000526020600020015460298260016123b49190613a8d565b815481106123c4576123c46138a4565b600091825260209091200155806123da81613ace565b915050612355565b8160296123f0836001613a8d565b81548110612400576124006138a4565b60009182526020909120015550819050612419816138ba565b91505061231d565b6000610dcb828461388c565b60008060008060008060008060008060006124478c612bec565b935093509350935060008060006124688f8787876124636122e8565b612c41565b919f509d509b509599509397509195509350505050919395979092949650565b6000610dcb82846138d3565b602b805460ff60a01b1916600160a01b179055601c54601d546000916124ba9190612421565b905060006124dd601d546124d7848661230b90919063ffffffff16565b90612ca3565b905060006124eb8483612488565b905061250f6125066002601c5461230b90919063ffffffff16565b601d5490612421565b9250600061251e82600261230b565b9050600061252c8383612488565b905047600061253b8685612421565b905061254681612caf565b60006125524784612488565b9050600061256f601d546124d78b8561230b90919063ffffffff16565b60285490915060ff1661264057600d546040516000916001600160a01b03169061753090849084818181858888f193505050503d80600081146125ce576040519150601f19603f3d011682016040523d82523d6000602084013e6125d3565b606091505b505090508061263a5760405162461bcd60e51b815260206004820152602d60248201527f205f6d61726b6574696e6757616c6c657441646472657373207472616e73666560448201526c1c881a5cc81c995d995c9d1959609a1b6064820152608401610bb2565b50612739565b600a5460009061265190839061230b565b905060005b600a54811015612736576000600a8281548110612675576126756138a4565b60009182526020822001546040516001600160a01b0390911691617530918691818181858888f193505050503d80600081146126cd576040519150601f19603f3d011682016040523d82523d6000602084013e6126d2565b606091505b50509050806127235760405162461bcd60e51b815260206004820152601e60248201527f6b6579686f6c646572207472616e7366657220697320726576657274656400006044820152606401610bb2565b508061272e816138ba565b915050612656565b50505b600061275e6127546002601c5461230b90919063ffffffff16565b6124d7858d61230b565b905061276a8682612e01565b60408051888152602081018390529081018790527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050602b805460ff60a01b19169055505050505050505050565b6127ce81611acd565b61281e57600b80546001810182556000919091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90180546001600160a01b0319166001600160a01b0383161790555b50565b60235442118015612835575060245460ff16155b15612848576024805460ff191660011790555b602654602354612858919061388c565b4211801561286e5750602454610100900460ff16155b15612883576024805461ff0019166101001790555b602754602354612893919061388c565b421180156128aa575060245462010000900460ff16155b156128c8576024805462ff00001916620100001790556128c8612ed6565b565b806128f4576128f4601b8054601e55601d8054601f55601c80546020556000928390559082905555565b6001600160a01b03841660009081526007602052604090205460ff16801561293557506001600160a01b03831660009081526007602052604090205460ff16155b1561294a57612945848484613094565b612a48565b6001600160a01b03841660009081526007602052604090205460ff1615801561298b57506001600160a01b03831660009081526007602052604090205460ff165b1561299b576129458484846131da565b6001600160a01b03841660009081526007602052604090205460ff161580156129dd57506001600160a01b03831660009081526007602052604090205460ff16155b156129ed57612945848484613299565b6001600160a01b03841660009081526007602052604090205460ff168015612a2d57506001600160a01b03831660009081526007602052604090205460ff165b15612a3d576129458484846132f3565b612a48848484613299565b80612a6457612a64601e54601b55601f54601d55602054601c55565b50505050565b601054600f546000918291825b600c54811015612bbc578260036000600c8481548110612a9957612a996138a4565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612b0457508160046000600c8481548110612add57612add6138a4565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612b1a57601054600f54945094505050509091565b612b6060036000600c8481548110612b3457612b346138a4565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490612488565b9250612ba860046000600c8481548110612b7c57612b7c6138a4565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390612488565b915080612bb4816138ba565b915050612a77565b50600f54601054612bcc9161230b565b821015612be357601054600f549350935050509091565b90939092509050565b6000806000806000612bfd8661337c565b90506000612c0a8761339e565b90506000612c17886133ba565b90506000612c3182612c2b85818d89612488565b90612488565b9993985091965094509092505050565b6000808080612c508986612ca3565b90506000612c5e8987612ca3565b90506000612c6c8988612ca3565b90506000612c7a8989612ca3565b90506000612c8e82612c2b85818989612488565b949d949c50929a509298505050505050505050565b6000610dcb8284613a0d565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612ce457612ce46138a4565b6001600160a01b03928316602091820292909201810191909152602a54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612d3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d619190613900565b81600181518110612d7457612d746138a4565b6001600160a01b039283166020918202929092010152602a54612d9a9130911684611d3c565b602a5460405163791ac94760e01b81526001600160a01b039091169063791ac94790612dd3908590600090869030904290600401613aeb565b600060405180830381600087803b158015612ded57600080fd5b505af11580156122b4573d6000803e3d6000fd5b602a54612e199030906001600160a01b031684611d3c565b602a546001600160a01b031663f305d719823085600080612e426000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015612eaa573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612ecf9190613b5c565b5050505050565b60285460ff1615612f295760405162461bcd60e51b815260206004820152601c60248201527f746869727465656e20616c72656164792065737461626c6973686564000000006044820152606401610bb2565b60005b600b54811015612f9b57602960036000600b8481548110612f4f57612f4f6138a4565b60009182526020808320909101546001600160a01b0316835282810193909352604090910181205483546001810185559382529190209091015580612f93816138ba565b915050612f2c565b50612fa4612317565b60005b600a54600d1115610fb85760005b600b548110156130815760298281548110612fd257612fd26138a4565b906000526020600020015460036000600b8481548110612ff457612ff46138a4565b60009182526020808320909101546001600160a01b031683528201929092526040019020540361306f57600a600b8281548110613033576130336138a4565b60009182526020808320909101548354600181018555938352912090910180546001600160a01b0319166001600160a01b039092169190911790555b80613079816138ba565b915050612fb5565b508061308c816138ba565b915050612fa7565b60008060008060008060006130a88861242d565b96509650965096509650965096506130ee88600460008d6001600160a01b03166001600160a01b031681526020019081526020016000205461248890919063ffffffff16565b6001600160a01b038b1660009081526004602090815260408083209390935560039052205461311d9088612488565b6001600160a01b03808c1660009081526003602052604080822093909355908b168152205461314c9087612421565b6001600160a01b038a1660009081526003602052604090205561316e826133d6565b6131778161345e565b613181858461351d565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516131c691815260200190565b60405180910390a350505050505050505050565b60008060008060008060006131ee8861242d565b965096509650965096509650965061323487600360008d6001600160a01b03166001600160a01b031681526020019081526020016000205461248890919063ffffffff16565b6001600160a01b03808c16600090815260036020908152604080832094909455918c1681526004909152205461326a9085612421565b6001600160a01b038a1660009081526004602090815260408083209390935560039052205461314c9087612421565b60008060008060008060006132ad8861242d565b965096509650965096509650965061311d87600360008d6001600160a01b03166001600160a01b031681526020019081526020016000205461248890919063ffffffff16565b60008060008060008060006133078861242d565b965096509650965096509650965061334d88600460008d6001600160a01b03166001600160a01b031681526020019081526020016000205461248890919063ffffffff16565b6001600160a01b038b166000908152600460209081526040808320939093556003905220546132349088612488565b6000610b826064613398601b5485612ca390919063ffffffff16565b9061230b565b6000610b826064613398601c5485612ca390919063ffffffff16565b6000610b826064613398601d5485612ca390919063ffffffff16565b60006133e06122e8565b905060006133ee8383612ca3565b3060009081526003602052604090205490915061340b9082612421565b3060009081526003602090815260408083209390935560079052205460ff1615610c7e57306000908152600460205260409020546134499084612421565b30600090815260046020526040902055505050565b60006134686122e8565b905060006134768383612ca3565b600d546001600160a01b031660009081526003602052604090205490915061349e9082612421565b600d80546001600160a01b03908116600090815260036020908152604080832095909555925490911681526007909152205460ff1615610c7e57600d546001600160a01b03166000908152600460205260409020546134fd9084612421565b600d546001600160a01b0316600090815260046020526040902055505050565b60105461352a9083612488565b60105560115461353a9082612421565b6011555050565b600060208083528351808285015260005b8181101561356e57858101830151858201604001528201613552565b81811115613580576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461281e57600080fd5b80356135b681613596565b919050565b600080604083850312156135ce57600080fd5b82356135d981613596565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b803580151581146135b657600080fd5b6000806040838503121561362057600080fd5b823567ffffffffffffffff8082111561363857600080fd5b818501915085601f83011261364c57600080fd5b8135602082821115613660576136606135e7565b8160051b604051601f19603f83011681018181108682111715613685576136856135e7565b6040529283528183019350848101820192898411156136a357600080fd5b948201945b838610156136c8576136b9866135ab565b855294820194938201936136a8565b96506136d790508782016135fd565b9450505050509250929050565b6000806000606084860312156136f957600080fd5b505081359360208301359350604090920135919050565b60006020828403121561372257600080fd5b5035919050565b60008060006060848603121561373e57600080fd5b833561374981613596565b9250602084013561375981613596565b929592945050506040919091013590565b60006020828403121561377c57600080fd5b8135610dcb81613596565b6000806040838503121561379a57600080fd5b823591506137aa602084016135fd565b90509250929050565b6000602082840312156137c557600080fd5b610dcb826135fd565b600080604083850312156137e157600080fd5b82356137ec81613596565b915060208301356137fc81613596565b809150509250929050565b600181811c9082168061381b57607f821691505b60208210810361383b57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000821982111561389f5761389f613876565b500190565b634e487b7160e01b600052603260045260246000fd5b6000600182016138cc576138cc613876565b5060010190565b6000828210156138e5576138e5613876565b500390565b634e487b7160e01b600052603160045260246000fd5b60006020828403121561391257600080fd5b8151610dcb81613596565b600181815b8085111561395857816000190482111561393e5761393e613876565b8085161561394b57918102915b93841c9390800290613922565b509250929050565b60008261396f57506001610b82565b8161397c57506000610b82565b8160018114613992576002811461399c576139b8565b6001915050610b82565b60ff8411156139ad576139ad613876565b50506001821b610b82565b5060208310610133831016604e8410600b84101617156139db575081810a610b82565b6139e5838361391d565b80600019048211156139f9576139f9613876565b029392505050565b6000610dcb8383613960565b6000816000190483118215151615613a2757613a27613876565b500290565b600082613a4957634e487b7160e01b600052601260045260246000fd5b500490565b60008083128015600160ff1b850184121615613a6c57613a6c613876565b6001600160ff1b0384018313811615613a8757613a87613876565b50500390565b600080821280156001600160ff1b0384900385131615613aaf57613aaf613876565b600160ff1b8390038412811615613ac857613ac8613876565b50500190565b6000600160ff1b8201613ae357613ae3613876565b506000190190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613b3b5784516001600160a01b031683529383019391830191600101613b16565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215613b7157600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220384c3c90d29a7cfa9940029c42593b6e1326a83102f1639b8bdcbd8047b5146764736f6c634300080e0033

Deployed Bytecode Sourcemap

16844:26957:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21207:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22121:161;;;;;;;;;;-1:-1:-1;22121:161:0;;;;;:::i;:::-;;:::i;:::-;;;1376:14:1;;1369:22;1351:41;;1339:2;1324:18;22121:161:0;1211:187:1;32572:279:0;;;;;;;;;;-1:-1:-1;32572:279:0;;;;;:::i;:::-;;:::i;:::-;;23242:87;;;;;;;;;;-1:-1:-1;23311:10:0;;23242:87;;;3042:25:1;;;3030:2;3015:18;23242:87:0;2896:177:1;19085:43:0;;;;;;;;;;-1:-1:-1;19085:43:0;;;;;;;;26212:204;;;;;;;;;;-1:-1:-1;26212:204:0;;;;;:::i;:::-;;:::i;19173:41::-;;;;;;;;;;-1:-1:-1;19173:41:0;;;;-1:-1:-1;;;;;19173:41:0;;;;;;-1:-1:-1;;;;;3590:32:1;;;3572:51;;3560:2;3545:18;19173:41:0;3399:230:1;18789:23:0;;;;;;;;;;-1:-1:-1;18789:23:0;;;;;;;;;;;21486:95;;;;;;;;;;-1:-1:-1;21566:7:0;;21486:95;;17372:29;;;;;;;;;;-1:-1:-1;17372:29:0;;;;;:::i;:::-;;:::i;18820:22::-;;;;;;;;;;-1:-1:-1;18820:22:0;;;;;;;;;;;32318:110;;;;;;;;;;-1:-1:-1;32394:15:0;32318:110;;18391:47;;;;;;;;;;;;;;;;22290:313;;;;;;;;;;-1:-1:-1;22290:313:0;;;;;:::i;:::-;;:::i;18849:37::-;;;;;;;;;;;;;;;;24169:253;;;;;;;;;;-1:-1:-1;24169:253:0;;;;;:::i;:::-;;:::i;34209:655::-;;;;;;;;;;;;;:::i;21393:85::-;;;;;;;;;;-1:-1:-1;21461:9:0;;21393:85;;24771:479;;;;;;;;;;-1:-1:-1;24771:479:0;;;;;:::i;:::-;;:::i;22611:218::-;;;;;;;;;;-1:-1:-1;22611:218:0;;;;;:::i;:::-;;:::i;31910:197::-;;;;;;;;;;;;;:::i;18294:35::-;;;;;;;;;;;;;;;;23337:378;;;;;;;;;;-1:-1:-1;23337:378:0;;;;;:::i;:::-;;:::i;17478:38::-;;;;;;;;;;-1:-1:-1;17478:38:0;;;;-1:-1:-1;;;;;17478:38:0;;;18758:22;;;;;;;;;;-1:-1:-1;18758:22:0;;;;;;;;33206:166;;;;;;;;;;;;;:::i;26926:318::-;;;;;;;;;;-1:-1:-1;26926:318:0;;;;;:::i;:::-;;:::i;25971:111::-;;;;;;;;;;-1:-1:-1;25971:111:0;;;;;:::i;:::-;;:::i;23723:438::-;;;;;;;;;;-1:-1:-1;23723:438:0;;;;;:::i;:::-;;:::i;19221:28::-;;;;;;;;;;-1:-1:-1;19221:28:0;;;;-1:-1:-1;;;;;19221:28:0;;;19284:40;;;;;;;;;;-1:-1:-1;19284:40:0;;;;-1:-1:-1;;;19284:40:0;;;;;;26636:119;;;;;;;;;;-1:-1:-1;26636:119:0;;;;;:::i;:::-;;:::i;24430:333::-;;;;;;;;;;-1:-1:-1;24430:333:0;;;;;:::i;:::-;;:::i;32440:123::-;;;;;;;;;;-1:-1:-1;32440:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;32528:27:0;32504:4;32528:27;;;:18;:27;;;;;;;;;32440:123;19008:41;;;;;;;;;;;;;;;;18337:47;;;;;;;;;;;;;;;;21589:198;;;;;;;;;;-1:-1:-1;21589:198:0;;;;;:::i;:::-;;:::i;7838:148::-;;;;;;;;;;;;;:::i;7361:24::-;;;;;;;;;;;;;;;;23114:120;;;;;;;;;;-1:-1:-1;23114:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;23206:20:0;23182:4;23206:20;;;:11;:20;;;;;;;;;23114:120;7607:87;;;;;;;;;;-1:-1:-1;7653:7:0;7680:6;-1:-1:-1;;;;;7680:6:0;7607:87;;21298;;;;;;;;;;;;;:::i;22837:269::-;;;;;;;;;;-1:-1:-1;22837:269:0;;;;;:::i;:::-;;:::i;8606:294::-;;;;;;;;;;;;;:::i;21795:167::-;;;;;;;;;;-1:-1:-1;21795:167:0;;;;;:::i;:::-;;:::i;18646:25::-;;;;;;;;;;-1:-1:-1;18646:25:0;;;;;;;;17526:72;;;;;;;;;;-1:-1:-1;17526:72:0;;;;-1:-1:-1;;;;;17526:72:0;;;26424:200;;;;;;;;;;-1:-1:-1;26424:200:0;;;;;:::i;:::-;;:::i;27252:173::-;;;;;;;;;;-1:-1:-1;27252:173:0;;;;;:::i;:::-;;:::i;27564:238::-;;;;;;;;;;-1:-1:-1;27564:238:0;;;;;:::i;:::-;;:::i;33380:224::-;;;;;;;;;;-1:-1:-1;33380:224:0;;;;;:::i;:::-;;:::i;19331:44::-;;;;;;;;;;;;;;;;18931:41;;;;;;;;;;;;;;;;8322:208;;;;;;;;;;-1:-1:-1;8322:208:0;;;;;:::i;:::-;;:::i;21970:143::-;;;;;;;;;;-1:-1:-1;21970:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;22078:18:0;;;22051:7;22078:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;21970:143;26094:110;;;;;;;;;;-1:-1:-1;26094:110:0;;;;;:::i;:::-;;:::i;32115:195::-;;;;;;;;;;;;;:::i;17408:27::-;;;;;;;;;;-1:-1:-1;17408:27:0;;;;;:::i;:::-;;:::i;26767:151::-;;;;;;;;;;-1:-1:-1;26767:151:0;;;;;:::i;:::-;;:::i;7996:244::-;;;;;;;;;;-1:-1:-1;7996:244:0;;;;;:::i;:::-;;:::i;21207:83::-;21244:13;21277:5;21270:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21207:83;:::o;22121:161::-;22196:4;22213:39;3641:10;22236:7;22245:6;22213:8;:39::i;:::-;-1:-1:-1;22270:4:0;22121:161;;;;;:::o;32572:279::-;7653:7;7680:6;-1:-1:-1;;;;;7680:6:0;3641:10;7746:23;7738:68;;;;-1:-1:-1;;;7738:68:0;;;;;;;:::i;:::-;;;;;;;;;32680:13:::1;::::0;:19:::1;::::0;32696:3:::1;32680:19;:::i;:::-;32665:12;:34;32657:71;;;::::0;-1:-1:-1;;;32657:71:0;;6784:2:1;32657:71:0::1;::::0;::::1;6766:21:1::0;6823:2;6803:18;;;6796:30;6862:26;6842:18;;;6835:54;6906:18;;32657:71:0::1;6582:348:1::0;32657:71:0::1;32744:9;32739:105;32763:8;:15;32759:1;:19;32739:105;;;32826:6;32800:10;:23;32811:8;32820:1;32811:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;32800:23:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;32800:23:0;:32;;-1:-1:-1;;32800:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;32780:3;::::1;::::0;::::1;:::i;:::-;;;;32739:105;;;;32572:279:::0;;:::o;26212:204::-;7653:7;7680:6;-1:-1:-1;;;;;7680:6:0;3641:10;7746:23;7738:68;;;;-1:-1:-1;;;7738:68:0;;;;;;;:::i;:::-;26312:11:::1;:24:::0;;;;26347:17:::1;:24:::0;26381:17:::1;:24:::0;26212:204::o;17372:29::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17372:29:0;;-1:-1:-1;17372:29:0;:::o;22290:313::-;22388:4;22405:36;22415:6;22423:9;22434:6;22405:9;:36::i;:::-;22452:121;22461:6;3641:10;22483:89;22521:6;22483:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22483:19:0;;;;;;:11;:19;;;;;;;;3641:10;22483:33;;;;;;;;;;:37;:89::i;:::-;22452:8;:121::i;:::-;-1:-1:-1;22591:4:0;22290:313;;;;;:::o;24169:253::-;24235:7;24274;;24263;:18;;24255:73;;;;-1:-1:-1;;;24255:73:0;;7409:2:1;24255:73:0;;;7391:21:1;7448:2;7428:18;;;7421:30;7487:34;7467:18;;;7460:62;-1:-1:-1;;;7538:18:1;;;7531:40;7588:19;;24255:73:0;7207:406:1;24255:73:0;24339:19;24362:10;:8;:10::i;:::-;24339:33;-1:-1:-1;24390:24:0;:7;24339:33;24390:11;:24::i;:::-;24383:31;24169:253;-1:-1:-1;;;24169:253:0:o;34209:655::-;7653:7;7680:6;-1:-1:-1;;;;;7680:6:0;3641:10;7746:23;7738:68;;;;-1:-1:-1;;;7738:68:0;;;;;;;:::i;:::-;34287:23:::1;::::0;::::1;;34286:24;34278:65;;;::::0;-1:-1:-1;;;34278:65:0;;7820:2:1;34278:65:0::1;::::0;::::1;7802:21:1::0;7859:2;7839:18;;;7832:30;7898;7878:18;;;7871:58;7946:18;;34278:65:0::1;7618:352:1::0;34278:65:0::1;34359:6;34354:113;34375:10;:17:::0;34371:21;::::1;34354:113;;;34414:12;34432:7;:22;34440:10;34451:1;34440:13;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;::::1;::::0;-1:-1:-1;;;;;34440:13:0::1;34432:22:::0;;;;::::1;::::0;;;;;;;;;;;34414:41;;34440:13;34414:41;::::1;::::0;;;;;;;;;;::::1;::::0;34394:3;::::1;::::0;::::1;:::i;:::-;;;;34354:113;;;;34477:8;:6;:8::i;:::-;34564:6;34559:257;34580:1;34576;:5;34559:257;;;34609:6;34604:201;34625:10;:17:::0;34621:21;::::1;34604:201;;;34698:12;34711:1;34698:15;;;;;;;;:::i;:::-;;;;;;;;;34672:7;:22;34680:10;34691:1;34680:13;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;::::1;::::0;-1:-1:-1;;;;;34680:13:0::1;34672:22:::0;;;::::1;::::0;;;;;;;;;:41;34668:122:::1;;34738:12;34756:10;34767:1;34756:13;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;::::1;::::0;34738:32;;34756:13;34738:32;::::1;::::0;;;;;;;;;::::1;::::0;;-1:-1:-1;;;;;;34738:32:0::1;-1:-1:-1::0;;;;;34756:13:0;;::::1;34738:32:::0;;;::::1;::::0;;34668:122:::1;34644:3:::0;::::1;::::0;::::1;:::i;:::-;;;;34604:201;;;-1:-1:-1::0;34583:4:0;::::1;::::0;::::1;:::i;:::-;;;;34559:257;;;-1:-1:-1::0;34826:23:0::1;:30:::0;;-1:-1:-1;;34826:30:0::1;34852:4;34826:30;::::0;;34209:655::o;24771:479::-;7653:7;7680:6;-1:-1:-1;;;;;7680:6:0;3641:10;7746:23;7738:68;;;;-1:-1:-1;;;7738:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24853:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;24845:60;;;::::0;-1:-1:-1;;;24845:60:0;;8177:2:1;24845:60:0::1;::::0;::::1;8159:21:1::0;8216:2;8196:18;;;8189:30;8255:29;8235:18;;;8228:57;8302:18;;24845:60:0::1;7975:351:1::0;24845:60:0::1;24921:9;24916:327;24940:9;:16:::0;24936:20;::::1;24916:327;;;24998:7;-1:-1:-1::0;;;;;24982:23:0::1;:9;24992:1;24982:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;24982:12:0::1;:23:::0;24978:254:::1;;25041:9;25051:16:::0;;:20:::1;::::0;25070:1:::1;::::0;25051:20:::1;:::i;:::-;25041:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;25026:9:::1;:12:::0;;-1:-1:-1;;;;;25041:31:0;;::::1;::::0;25036:1;;25026:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;25026:46:0::1;-1:-1:-1::0;;;;;25026:46:0;;::::1;;::::0;;25091:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;25130:11:::1;:20:::0;;;;:28;;-1:-1:-1;;25130:28:0::1;::::0;;25177:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;25177:15:0;;;;;-1:-1:-1;;;;;;25177:15:0::1;::::0;;;;;24916:327:::1;24771:479:::0;:::o;24978:254::-:1;24958:3:::0;::::1;::::0;::::1;:::i;:::-;;;;24916:327;;;;24771:479:::0;:::o;22611:218::-;3641:10;22699:4;22748:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;22748:34:0;;;;;;;;;;22699:4;;22716:83;;22739:7;;22748:50;;22787:10;22748:38;:50::i;31910:197::-;31960:7;31984:17;;32005:1;31984:22;31980:101;;32050:19;;32030:17;;:39;;;;:::i;:::-;32023:46;;31910:197;:::o;31980:101::-;-1:-1:-1;32098:1:0;;31910:197::o;23337:378::-;3641:10;23389:14;23438:19;;;:11;:19;;;;;;;;23437:20;23429:77;;;;-1:-1:-1;;;23429:77:0;;8795:2:1;23429:77:0;;;8777:21:1;8834:2;8814:18;;;8807:30;8873:34;8853:18;;;8846:62;-1:-1:-1;;;8924:18:1;;;8917:42;8976:19;;23429:77:0;8593:408:1;23429:77:0;23518:15;23543:19;23554:7;23543:10;:19::i;:::-;-1:-1:-1;;;;;;;;23591:15:0;;;;;;:7;:15;;;;;;23517:45;;-1:-1:-1;23591:28:0;;:15;-1:-1:-1;23517:45:0;;-1:-1:-1;;23591:19:0;:28::i;:::-;-1:-1:-1;;;;;23573:15:0;;;;;;:7;:15;;;;;:46;23640:7;;:20;;23652:7;23640:11;:20::i;:::-;23630:7;:30;23684:10;;:23;;23699:7;23684:14;:23::i;:::-;23671:10;:36;-1:-1:-1;;;23337:378:0:o;33206:166::-;7653:7;7680:6;-1:-1:-1;;;;;7680:6:0;3641:10;7746:23;7738:68;;;;-1:-1:-1;;;7738:68:0;;;;;;;:::i;:::-;33259:13:::1;:20:::0;;-1:-1:-1;;33259:20:0::1;33275:4;33259:20;::::0;;33306:12:::1;33290:13;:28:::0;33349:15:::1;33329:17;:35:::0;33206:166::o;26926:318::-;7653:7;7680:6;-1:-1:-1;;;;;7680:6:0;3641:10;7746:23;7738:68;;;;-1:-1:-1;;;7738:68:0;;;;;;;:::i;:::-;27001:35:::1;27058:9;27001:67;;27113:16;-1:-1:-1::0;;;;;27113:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27095:56:0::1;;27160:4;27167:16;-1:-1:-1::0;;;;;27167:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27095:96;::::0;-1:-1:-1;;;;;;27095:96:0::1;::::0;;;;;;-1:-1:-1;;;;;9492:15:1;;;27095:96:0::1;::::0;::::1;9474:34:1::0;9544:15;;9524:18;;;9517:43;9409:18;;27095:96:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27079:13;:112:::0;;-1:-1:-1;;;;;27079:112:0;;::::1;-1:-1:-1::0;;;;;;27079:112:0;;::::1;;::::0;;;27202:15:::1;:34:::0;;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;-1:-1:-1;26926:318:0:o;25971:111::-;7653:7;7680:6;-1:-1:-1;;;;;7680:6:0;3641:10;7746:23;7738:68;;;;-1:-1:-1;;;7738:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26040:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;26040:34:0::1;26070:4;26040:34;::::0;;25971:111::o;23723:438::-;23813:7;23852;;23841;:18;;23833:62;;;;-1:-1:-1;;;23833:62:0;;9773:2:1;23833:62:0;;;9755:21:1;9812:2;9792:18;;;9785:30;9851:33;9831:18;;;9824:61;9902:18;;23833:62:0;9571:355:1;23833:62:0;23911:17;23906:248;;23946:15;23971:19;23982:7;23971:10;:19::i;:::-;-1:-1:-1;23945:45:0;;-1:-1:-1;24005:14:0;;-1:-1:-1;;;;;;24005:14:0;23906:248;24054:23;24086:19;24097:7;24086:10;:19::i;:::-;-1:-1:-1;24052:53:0;;-1:-1:-1;24120:22:0;;-1:-1:-1;;;;;;24120:22:0;26636:119;7653:7;7680:6;-1:-1:-1;;;;;7680:6:0;3641:10;7746:23;7738:68;;;;-1:-1:-1;;;7738:68:0;;;;;;;:::i;:::-;26716:23:::1;:31:::0;;-1:-1:-1;;;;;;26716:31:0::1;-1:-1:-1::0;;;;;26716:31:0;;;::::1;::::0;;;::::1;::::0;;26636:119::o;24430:333::-;7653:7;7680:6;-1:-1:-1;;;;;7680:6:0;3641:10;7746:23;7738:68;;;;-1:-1:-1;;;7738:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24513:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;24512:21;24504:61;;;::::0;-1:-1:-1;;;24504:61:0;;10133:2:1;24504:61:0::1;::::0;::::1;10115:21:1::0;10172:2;10152:18;;;10145:30;10211:29;10191:18;;;10184:57;10258:18;;24504:61:0::1;9931:351:1::0;24504:61:0::1;-1:-1:-1::0;;;;;24579:16:0;::::1;24598:1;24579:16:::0;;;:7:::1;:16;::::0;;;;;:20;24576:108:::1;;-1:-1:-1::0;;;;;24655:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;24635:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;24616:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;24576:108:::1;-1:-1:-1::0;;;;;24694:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;24694:27:0::1;24717:4;24694:27:::0;;::::1;::::0;;;24732:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;24732:23:0::1;::::0;;::::1;::::0;;24430:333::o;21589:198::-;-1:-1:-1;;;;;21679:20:0;;21655:7;21679:20;;;:11;:20;;;;;;;;21675:49;;;-1:-1:-1;;;;;;21708:16:0;;;;;:7;:16;;;;;;;21589:198::o;21675:49::-;-1:-1:-1;;;;;21762:16:0;;;;;;:7;:16;;;;;;21742:37;;:19;:37::i;7838:148::-;7653:7;7680:6;-1:-1:-1;;;;;7680:6:0;3641:10;7746:23;7738:68;;;;-1:-1:-1;;;7738:68:0;;;;;;;:::i;:::-;7945:1:::1;7929:6:::0;;7908:40:::1;::::0;-1:-1:-1;;;;;7929:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;7908:40:0;7945:1;;7908:40:::1;7976:1;7959:19:::0;;-1:-1:-1;;;;;;7959:19:0::1;::::0;;7838:148::o;21298:87::-;21337:13;21370:7;21363:14;;;;;:::i;22837:269::-;22930:4;22947:129;3641:10;22970:7;22979:96;23018:15;22979:96;;;;;;;;;;;;;;;;;3641:10;22979:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;22979:34:0;;;;;;;;;;;;:38;:96::i;8606:294::-;8658:14;;-1:-1:-1;;;;;8658:14:0;8676:10;8658:28;8650:77;;;;-1:-1:-1;;;8650:77:0;;10489:2:1;8650:77:0;;;10471:21:1;10528:2;10508:18;;;10501:30;10567:34;10547:18;;;10540:62;-1:-1:-1;;;10618:18:1;;;10611:34;10662:19;;8650:77:0;10287:400:1;8650:77:0;8764:9;;8746:15;:27;8738:60;;;;-1:-1:-1;;;8738:60:0;;10894:2:1;8738:60:0;;;10876:21:1;10933:2;10913:18;;;10906:30;-1:-1:-1;;;10952:18:1;;;10945:49;11011:18;;8738:60:0;10692:343:1;8738:60:0;8843:14;;;8835:6;;8814:44;;-1:-1:-1;;;;;8843:14:0;;;;8835:6;;;;-1:-1:-1;;;;;;;;;;;8814:44:0;;8878:14;;;8869:23;;-1:-1:-1;;;;;;8869:23:0;-1:-1:-1;;;;;8878:14:0;;;8869:23;;;;;;8606:294::o;21795:167::-;21873:4;21890:42;3641:10;21914:9;21925:6;21890:9;:42::i;26424:200::-;7653:7;7680:6;-1:-1:-1;;;;;7680:6:0;3641:10;7746:23;7738:68;;;;-1:-1:-1;;;7738:68:0;;;;;;;:::i;:::-;26523:10:::1;:23:::0;;;;26557:16:::1;:23:::0;26590:16:::1;:23:::0;26424:200::o;27252:173::-;7653:7;7680:6;-1:-1:-1;;;;;7680:6:0;3641:10;7746:23;7738:68;;;;-1:-1:-1;;;7738:68:0;;;;;;;:::i;:::-;27331:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;27331:32:0::1;-1:-1:-1::0;;;;27331:32:0;;::::1;;::::0;;27379:38:::1;::::0;::::1;::::0;::::1;::::0;27355:8;1376:14:1;1369:22;1351:41;;1339:2;1324:18;;1211:187;27379:38:0::1;;;;;;;;27252:173:::0;:::o;27564:238::-;7653:7;7680:6;-1:-1:-1;;;;;7680:6:0;3641:10;7746:23;7738:68;;;;-1:-1:-1;;;7738:68:0;;;;;;;:::i;:::-;27696:9:::1;27710:6:::0;;:30:::1;::::0;-1:-1:-1;;;;;27710:6:0;;::::1;::::0;27729;;27696:9;27710:30;27696:9;27710:30;27729:6;27710;:30:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27695:45;;;27759:4;27751:35;;;::::0;-1:-1:-1;;;27751:35:0;;11452:2:1;27751:35:0::1;::::0;::::1;11434:21:1::0;11491:2;11471:18;;;11464:30;-1:-1:-1;;;11510:18:1;;;11503:48;11568:18;;27751:35:0::1;11250:342:1::0;33380:224:0;33441:4;33462:6;33457:116;33473:10;:17;33470:20;;33457:116;;;33529:6;-1:-1:-1;;;;;33514:21:0;:10;33525:1;33514:13;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;33514:13:0;:21;33510:51;;-1:-1:-1;33557:4:0;;33380:224;-1:-1:-1;;33380:224:0:o;33510:51::-;33491:3;;;;:::i;:::-;;;;33457:116;;;-1:-1:-1;33590:5:0;;33380:224;-1:-1:-1;;33380:224:0:o;8322:208::-;7653:7;7680:6;-1:-1:-1;;;;;7680:6:0;3641:10;7746:23;7738:68;;;;-1:-1:-1;;;7738:68:0;;;;;;;:::i;:::-;8403:6:::1;::::0;;;8386:23;;-1:-1:-1;;;;;;8386:23:0;;::::1;-1:-1:-1::0;;;;;8403:6:0;::::1;8386:23;::::0;;;8420:19:::1;::::0;;8450:9:::1;:16:::0;;;8482:40:::1;::::0;8403:6;;-1:-1:-1;;;;;;;;;;;8482:40:0;8403:6;;8482:40:::1;8322:208:::0;:::o;26094:110::-;7653:7;7680:6;-1:-1:-1;;;;;7680:6:0;3641:10;7746:23;7738:68;;;;-1:-1:-1;;;7738:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26161:27:0::1;26191:5;26161:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;26161:35:0::1;::::0;;26094:110::o;32115:195::-;32164:7;32188:17;;32209:1;32188:22;32184:100;;32254:18;;32234:17;;:38;;;;:::i;17408:27::-;;;;;;;;;;;;26767:151;7653:7;7680:6;-1:-1:-1;;;;;7680:6:0;3641:10;7746:23;7738:68;;;;-1:-1:-1;;;7738:68:0;;;;;;;:::i;:::-;26901:9:::1;::::0;26896:14:::1;::::0;:2:::1;:14;:::i;:::-;26887:23;::::0;:6;:23:::1;:::i;:::-;26855:29;:55:::0;-1:-1:-1;26767:151:0:o;7996:244::-;7653:7;7680:6;-1:-1:-1;;;;;7680:6:0;3641:10;7746:23;7738:68;;;;-1:-1:-1;;;7738:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8085:22:0;::::1;8077:73;;;::::0;-1:-1:-1;;;8077:73:0;;13346:2:1;8077:73:0::1;::::0;::::1;13328:21:1::0;13385:2;13365:18;;;13358:30;13424:34;13404:18;;;13397:62;-1:-1:-1;;;13475:18:1;;;13468:36;13521:19;;8077:73:0::1;13144:402:1::0;8077:73:0::1;8187:6;::::0;;8166:38:::1;::::0;-1:-1:-1;;;;;8166:38:0;;::::1;::::0;8187:6;::::1;::::0;-1:-1:-1;;;;;;;;;;;8166:38:0;::::1;8215:6;:17:::0;;-1:-1:-1;;;;;;8215:17:0::1;-1:-1:-1::0;;;;;8215:17:0;;;::::1;::::0;;;::::1;::::0;;7996:244::o;32859:337::-;-1:-1:-1;;;;;32952:19:0;;32944:68;;;;-1:-1:-1;;;32944:68:0;;13753:2:1;32944:68:0;;;13735:21:1;13792:2;13772:18;;;13765:30;13831:34;13811:18;;;13804:62;-1:-1:-1;;;13882:18:1;;;13875:34;13926:19;;32944:68:0;13551:400:1;32944:68:0;-1:-1:-1;;;;;33031:21:0;;33023:68;;;;-1:-1:-1;;;33023:68:0;;14158:2:1;33023:68:0;;;14140:21:1;14197:2;14177:18;;;14170:30;14236:34;14216:18;;;14209:62;-1:-1:-1;;;14287:18:1;;;14280:32;14329:19;;33023:68:0;13956:398:1;33023:68:0;-1:-1:-1;;;;;33104:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;33156:32;;3042:25:1;;;33156:32:0;;3015:18:1;33156:32:0;;;;;;;32859:337;;;:::o;35558:2509::-;-1:-1:-1;;;;;35680:18:0;;35672:68;;;;-1:-1:-1;;;35672:68:0;;14561:2:1;35672:68:0;;;14543:21:1;14600:2;14580:18;;;14573:30;14639:34;14619:18;;;14612:62;-1:-1:-1;;;14690:18:1;;;14683:35;14735:19;;35672:68:0;14359:401:1;35672:68:0;-1:-1:-1;;;;;35759:16:0;;35751:64;;;;-1:-1:-1;;;35751:64:0;;14967:2:1;35751:64:0;;;14949:21:1;15006:2;14986:18;;;14979:30;15045:34;15025:18;;;15018:62;-1:-1:-1;;;15096:18:1;;;15089:33;15139:19;;35751:64:0;14765:399:1;35751:64:0;35843:1;35834:6;:10;35826:64;;;;-1:-1:-1;;;35826:64:0;;15371:2:1;35826:64:0;;;15353:21:1;15410:2;15390:18;;;15383:30;15449:34;15429:18;;;15422:62;-1:-1:-1;;;15500:18:1;;;15493:39;15549:19;;35826:64:0;15169:405:1;35826:64:0;-1:-1:-1;;;;;35910:16:0;;;;;;:10;:16;;;;;;;;35909:17;:36;;;;-1:-1:-1;;;;;;35931:14:0;;;;;;:10;:14;;;;;;;;35930:15;35909:36;35901:76;;;;-1:-1:-1;;;35901:76:0;;15781:2:1;35901:76:0;;;15763:21:1;15820:2;15800:18;;;15793:30;15859:29;15839:18;;;15832:57;15906:18;;35901:76:0;15579:351:1;35901:76:0;35998:28;36029:24;36047:4;36029:9;:24::i;:::-;36071:13;;35998:55;;-1:-1:-1;36071:13:0;;36066:128;;-1:-1:-1;;;;;36109:24:0;;;;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;36137:22:0;;;;;;:18;:22;;;;;;;;36109:50;36101:81;;;;-1:-1:-1;;;36101:81:0;;16137:2:1;36101:81:0;;;16119:21:1;16176:2;16156:18;;;16149:30;-1:-1:-1;;;16195:18:1;;;16188:48;16253:18;;36101:81:0;15935:342:1;36101:81:0;36275:29;;36251:53;;;;;;;36333;;-1:-1:-1;36370:16:0;;-1:-1:-1;;;36370:16:0;;;;36369:17;36333:53;:91;;;;-1:-1:-1;36411:13:0;;-1:-1:-1;;;;;36403:21:0;;;36411:13;;36403:21;;36333:91;:129;;;;-1:-1:-1;36441:21:0;;-1:-1:-1;;;36441:21:0;;;;36333:129;36315:289;;;36512:29;;36489:52;;36556:36;36571:20;36556:14;:36::i;:::-;-1:-1:-1;;;;;36657:24:0;;36624:12;36657:24;;;:18;:24;;;;;;36639:4;;36657:24;;;:50;;-1:-1:-1;;;;;;36685:22:0;;;;;;:18;:22;;;;;;;;36657:50;36654:1229;;;-1:-1:-1;36733:5:0;36654:1229;;;36795:13;;-1:-1:-1;;;;;36795:13:0;;;36787:21;;;;36783:1089;;36846:10;;36836:7;:20;36891:16;;36875:13;:32;36942:16;;36926:13;:32;36977:16;36990:2;36977:12;:16::i;:::-;36783:1089;;;37046:13;;-1:-1:-1;;;;;37040:19:0;;;37046:13;;37040:19;:33;;;;-1:-1:-1;37063:10:0;;;;;;;37040:33;37036:836;;;37130:11;;37120:7;:21;37176:17;;37160:13;:33;37228:17;;37212:13;:33;37036:836;;;37298:13;;-1:-1:-1;;;;;37292:19:0;;;37298:13;;37292:19;:34;;;;-1:-1:-1;37315:11:0;;;;;;;37292:34;37288:584;;;37384:1;37374:7;:11;37420:17;;37404:13;:33;37475:1;37459:13;:17;37288:584;;;37529:13;;-1:-1:-1;;;;;37529:13:0;;;37523:19;;;;37519:353;;37599:1;37589:7;:11;37635:17;;37619:13;:33;37688:2;37672:13;:18;37519:353;;;37779:1;37769:7;:11;;;37799:13;:17;;;37835:13;:17;37519:353;37897:13;;;;:71;;;;-1:-1:-1;;;;;;37916:24:0;;;;;;:18;:24;;;;;;;;37915:25;;:52;;-1:-1:-1;;;;;;37945:22:0;;;;;;:18;:22;;;;;;;;37944:23;37915:52;37893:118;;;37985:14;:12;:14::i;:::-;38021:38;38036:4;38041:2;38044:6;38051:7;38021:14;:38::i;:::-;35661:2406;;;35558:2509;;;:::o;2875:206::-;2961:7;3022:12;3014:6;;;;3006:29;;;;-1:-1:-1;;;3006:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;3057:5:0;;;2875:206::o;29414:163::-;29455:7;29476:15;29493;29512:19;:17;:19::i;:::-;29475:56;;-1:-1:-1;29475:56:0;-1:-1:-1;29549:20:0;29475:56;;29549:11;:20::i;:::-;29542:27;;;;29414:163;:::o;2657:98::-;2715:7;2742:5;2746:1;2742;:5;:::i;33770:429::-;33823:10;:17;33865:1;33851:341;33872:6;33868:1;:10;33851:341;;;33900:8;33911:12;33924:1;33911:15;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;33949:10:0;33958:1;33953;33949:10;:::i;:::-;33941:18;;33974:161;33992:1;33986;33982:11;;33981:46;;;;;34023:3;33999:12;34017:1;33999:21;;;;;;;;:::i;:::-;;;;;;;;;:27;33981:46;33974:161;;;34076:12;34094:1;34076:21;;;;;;;;:::i;:::-;;;;;;;;;34048:12;34066:1;34070;34066:5;;;;:::i;:::-;34048:25;;;;;;;;:::i;:::-;;;;;;;;;;:49;34116:3;;;;:::i;:::-;;;;33974:161;;;34177:3;34149:12;34167:5;:1;34171;34167:5;:::i;:::-;34149:25;;;;;;;;:::i;:::-;;;;;;;;;;:31;-1:-1:-1;33880:3:0;;-1:-1:-1;33880:3:0;;;:::i;:::-;;;;33851:341;;2331:98;2389:7;2416:5;2420:1;2416;:5;:::i;27965:472::-;28024:7;28033;28042;28051;28060;28069;28078;28099:23;28124:12;28138:18;28158;28180:20;28192:7;28180:11;:20::i;:::-;28098:102;;;;;;;;28212:15;28229:23;28254:12;28270:62;28282:7;28291:4;28297:10;28309;28321;:8;:10::i;:::-;28270:11;:62::i;:::-;28211:121;;-1:-1:-1;28211:121:0;-1:-1:-1;28211:121:0;-1:-1:-1;28383:15:0;;-1:-1:-1;28400:4:0;;-1:-1:-1;28406:10:0;;-1:-1:-1;28418:10:0;-1:-1:-1;;;;27965:472:0;;;;;;;;;:::o;2439:98::-;2497:7;2524:5;2528:1;2524;:5;:::i;38537:1639::-;19676:16;:23;;-1:-1:-1;;;;19676:23:0;-1:-1:-1;;;19676:23:0;;;38655:13:::1;::::0;38637::::1;::::0;19676:23;;38637:32:::1;::::0;:13;:17:::1;:32::i;:::-;38622:47;;38680:23;38706:49;38741:13;;38706:30;38731:4;38706:20;:24;;:30;;;;:::i;:::-;:34:::0;::::1;:49::i;:::-;38680:75:::0;-1:-1:-1;38766:23:0::1;38792:41;:20:::0;38680:75;38792:24:::1;:41::i;:::-;38766:67;;38851:39;38869:20;38887:1;38869:13;;:17;;:20;;;;:::i;:::-;38851:13;::::0;;:17:::1;:39::i;:::-;38844:46:::0;-1:-1:-1;38901:12:0::1;38921:22;:15:::0;38941:1:::1;38921:19;:22::i;:::-;38901:42:::0;-1:-1:-1;38954:17:0::1;38974:25;:15:::0;38901:42;38974:19:::1;:25::i;:::-;38954:45:::0;-1:-1:-1;39035:21:0::1;39010:22;39088:25;:15:::0;39108:4;39088:19:::1;:25::i;:::-;39067:46;;39124:28;39141:10;39124:16;:28::i;:::-;39163:18;39184:41;:21;39210:14:::0;39184:25:::1;:41::i;:::-;39163:62;;39236:22;39261:39;39286:13;;39261:20;39276:4;39261:10;:14;;:20;;;;:::i;:39::-;39318:23;::::0;39236:64;;-1:-1:-1;39318:23:0::1;;39313:662;;39385:23;::::0;39377:111:::1;::::0;39359:12:::1;::::0;-1:-1:-1;;;;;39385:23:0::1;::::0;39478:5:::1;::::0;39440:14;;39359:12;39377:111;39359:12;39377:111;39440:14;39385:23;39478:5;39377:111:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39358:130;;;39511:7;39503:65;;;::::0;-1:-1:-1;;;39503:65:0;;17397:2:1;39503:65:0::1;::::0;::::1;17379:21:1::0;17436:2;17416:18;;;17409:30;17475:34;17455:18;;;17448:62;-1:-1:-1;;;17526:18:1;;;17519:43;17579:19;;39503:65:0::1;17195:409:1::0;39503:65:0::1;39343:237;39313:662;;;39655:12;:19:::0;39610:23:::1;::::0;39636:39:::1;::::0;:14;;:18:::1;:39::i;:::-;39610:65;;39695:6;39690:274;39711:12;:19:::0;39707:23;::::1;39690:274;;;39757:12;39783;39796:1;39783:15;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;::::1;::::0;39775:104:::1;::::0;-1:-1:-1;;;;;39783:15:0;;::::1;::::0;39869:5:::1;::::0;39830:15;;39775:104;39783:15;39775:104;39830:15;39783;39869:5;39775:104:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39756:123;;;39906:7;39898:50;;;::::0;-1:-1:-1;;;39898:50:0;;17811:2:1;39898:50:0::1;::::0;::::1;17793:21:1::0;17850:2;17830:18;;;17823:30;17889:32;17869:18;;;17862:60;17939:18;;39898:50:0::1;17609:354:1::0;39898:50:0::1;-1:-1:-1::0;39732:3:0;::::1;::::0;::::1;:::i;:::-;;;;39690:274;;;;39595:380;39313:662;39989:17;40009:46;40034:20;40052:1;40034:13;;:17;;:20;;;;:::i;:::-;40009;:10:::0;40024:4;40009:14:::1;:20::i;:46::-;39989:66;;40066:34;40079:9;40090;40066:12;:34::i;:::-;40124:42;::::0;;18170:25:1;;;18226:2;18211:18;;18204:34;;;18254:18;;;18247:34;;;40124:42:0::1;::::0;18158:2:1;18143:18;40124:42:0::1;;;;;;;-1:-1:-1::0;;19722:16:0;:24;;-1:-1:-1;;;;19722:24:0;;;-1:-1:-1;;;;;;;;;38537:1639:0:o;33613:147::-;33676:22;33691:6;33676:14;:22::i;:::-;33671:81;;33716:10;:23;;;;;;;-1:-1:-1;33716:23:0;;;;;;;;-1:-1:-1;;;;;;33716:23:0;-1:-1:-1;;;;;33716:23:0;;;;;33671:81;33613:147;:::o;38075:454::-;38141:17;;38123:15;:35;:50;;;;-1:-1:-1;38163:10:0;;;;38162:11;38123:50;38119:100;;;38190:10;:17;;-1:-1:-1;;38190:17:0;38203:4;38190:17;;;38119:100;38271:19;;38251:17;;:39;;;;:::i;:::-;38233:15;:57;:73;;;;-1:-1:-1;38295:11:0;;;;;;;38294:12;38233:73;38229:124;;;38323:11;:18;;-1:-1:-1;;38323:18:0;;;;;38229:124;38405:18;;38385:17;;:38;;;;:::i;:::-;38367:15;:56;:71;;;;-1:-1:-1;38428:10:0;;;;;;;38427:11;38367:71;38363:159;;;38455:10;:17;;-1:-1:-1;;38455:17:0;;;;;38487:23;:21;:23::i;:::-;38075:454::o;41113:834::-;41224:7;41220:40;;41246:14;31518:7;;;31500:15;:25;31560:13;;;31536:21;:37;31608:13;;;31584:21;:37;-1:-1:-1;31642:11:0;;;;31664:17;;;;31692;31456:261;41246:14;-1:-1:-1;;;;;41285:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;41309:22:0;;;;;;:11;:22;;;;;;;;41308:23;41285:46;41281:597;;;41348:48;41370:6;41378:9;41389:6;41348:21;:48::i;:::-;41281:597;;;-1:-1:-1;;;;;41419:19:0;;;;;;:11;:19;;;;;;;;41418:20;:46;;;;-1:-1:-1;;;;;;41442:22:0;;;;;;:11;:22;;;;;;;;41418:46;41414:464;;;41481:46;41501:6;41509:9;41520:6;41481:19;:46::i;41414:464::-;-1:-1:-1;;;;;41550:19:0;;;;;;:11;:19;;;;;;;;41549:20;:47;;;;-1:-1:-1;;;;;;41574:22:0;;;;;;:11;:22;;;;;;;;41573:23;41549:47;41545:333;;;41613:44;41631:6;41639:9;41650:6;41613:17;:44::i;41545:333::-;-1:-1:-1;;;;;41679:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;41702:22:0;;;;;;:11;:22;;;;;;;;41679:45;41675:203;;;41741:48;41763:6;41771:9;41782:6;41741:21;:48::i;41675:203::-;41822:44;41840:6;41848:9;41859:6;41822:17;:44::i;:::-;41902:7;41898:41;;41924:15;31783;;31773:7;:25;31825:21;;31809:13;:37;31873:21;;31857:13;:37;31729:173;41924:15;41113:834;;;;:::o;29585:561::-;29682:7;;29718;;29635;;;;;29742:289;29766:9;:16;29762:20;;29742:289;;;29832:7;29808;:21;29816:9;29826:1;29816:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;29816:12:0;29808:21;;;;;;;;;;;;;:31;;:66;;;29867:7;29843;:21;29851:9;29861:1;29851:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;29851:12:0;29843:21;;;;;;;;;;;;;:31;29808:66;29804:97;;;29884:7;;29893;;29876:25;;;;;;;29585:561;;:::o;29804:97::-;29926:34;29938:7;:21;29946:9;29956:1;29946:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;29946:12:0;29938:21;;;;;;;;;;;;;29926:7;;:11;:34::i;:::-;29916:44;;29985:34;29997:7;:21;30005:9;30015:1;30005:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;30005:12:0;29997:21;;;;;;;;;;;;;29985:7;;:11;:34::i;:::-;29975:44;-1:-1:-1;29784:3:0;;;;:::i;:::-;;;;29742:289;;;-1:-1:-1;30067:7:0;;30055;;:20;;:11;:20::i;:::-;30045:7;:30;30041:61;;;30085:7;;30094;;30077:25;;;;;;29585:561;;:::o;30041:61::-;30121:7;;30130;;-1:-1:-1;29585:561:0;-1:-1:-1;29585:561:0:o;28445:429::-;28505:7;28514;28523;28532;28552:12;28567:24;28583:7;28567:15;:24::i;:::-;28552:39;;28602:18;28623:30;28645:7;28623:21;:30::i;:::-;28602:51;;28664:18;28685:30;28707:7;28685:21;:30::i;:::-;28664:51;-1:-1:-1;28726:23:0;28752:49;28664:51;28752:33;28774:10;28752:33;:7;28764:4;28752:11;:17::i;:::-;:21;;:33::i;:49::-;28726:75;28837:4;;-1:-1:-1;28843:10:0;;-1:-1:-1;28843:10:0;-1:-1:-1;28445:429:0;;-1:-1:-1;;;28445:429:0:o;28882:524::-;29017:7;;;;29073:24;:7;29085:11;29073;:24::i;:::-;29055:42;-1:-1:-1;29108:12:0;29123:21;:4;29132:11;29123:8;:21::i;:::-;29108:36;-1:-1:-1;29155:18:0;29176:27;:10;29191:11;29176:14;:27::i;:::-;29155:48;-1:-1:-1;29214:18:0;29235:27;:10;29250:11;29235:14;:27::i;:::-;29214:48;-1:-1:-1;29273:23:0;29299:49;29214:48;29299:33;29321:10;29299:33;:7;29311:4;29299:11;:17::i;:49::-;29367:7;;;;-1:-1:-1;29393:4:0;;-1:-1:-1;28882:524:0;;-1:-1:-1;;;;;;;;;28882:524:0:o;2547:98::-;2605:7;2632:5;2636:1;2632;:5;:::i;40184:499::-;40274:16;;;40288:1;40274:16;;;;;;;;40250:21;;40274:16;;;;;;;;;;-1:-1:-1;40274:16:0;40250:40;;40319:4;40301;40306:1;40301:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;40301:23:0;;;:7;;;;;;;;;;:23;;;;40345:15;;:22;;;-1:-1:-1;;;40345:22:0;;;;:15;;;;;:20;;:22;;;;;40301:7;;40345:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40335:4;40340:1;40335:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;40335:32:0;;;:7;;;;;;;;;:32;40410:15;;40378:62;;40395:4;;40410:15;40428:11;40378:8;:62::i;:::-;40451:15;;:224;;-1:-1:-1;;;40451:224:0;;-1:-1:-1;;;;;40451:15:0;;;;:66;;:224;;40532:11;;40451:15;;40602:4;;40629;;40649:15;;40451:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40691:414;40804:15;;40772:62;;40789:4;;-1:-1:-1;;;;;40804:15:0;40822:11;40772:8;:62::i;:::-;40845:15;;-1:-1:-1;;;;;40845:15:0;:31;40884:9;40917:4;40937:11;40845:15;;41049:7;7653;7680:6;-1:-1:-1;;;;;7680:6:0;;7607:87;41049:7;40845:252;;;;;;-1:-1:-1;;;;;;40845:252:0;;;-1:-1:-1;;;;;19636:15:1;;;40845:252:0;;;19618:34:1;19668:18;;;19661:34;;;;19711:18;;;19704:34;;;;19754:18;;;19747:34;19818:15;;;19797:19;;;19790:44;41071:15:0;19850:19:1;;;19843:35;19552:19;;40845:252:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;40691:414;;:::o;34872:678::-;34934:23;;;;34933:24;34925:65;;;;-1:-1:-1;;;34925:65:0;;7820:2:1;34925:65:0;;;7802:21:1;7859:2;7839:18;;;7832:30;7898;7878:18;;;7871:58;7946:18;;34925:65:0;7618:352:1;34925:65:0;35006:6;35001:113;35022:10;:17;35018:21;;35001:113;;;35061:12;35079:7;:22;35087:10;35098:1;35087:13;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;35087:13:0;35079:22;;;;;;;;;;;;;;;;35061:41;;35087:13;35061:41;;;;;;;;;;;;;;35041:3;;;;:::i;:::-;;;;35001:113;;;;35124:8;:6;:8::i;:::-;35203:6;35224:278;35231:12;:19;35253:2;-1:-1:-1;35224:278:0;;;35277:6;35272:201;35293:10;:17;35289:21;;35272:201;;;35366:12;35379:1;35366:15;;;;;;;;:::i;:::-;;;;;;;;;35340:7;:22;35348:10;35359:1;35348:13;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;35348:13:0;35340:22;;;;;;;;;;;;;:41;35336:122;;35406:12;35424:10;35435:1;35424:13;;;;;;;;:::i;:::-;;;;;;;;;;;;;35406:32;;35424:13;35406:32;;;;;;;;;;;;;;-1:-1:-1;;;;;;35406:32:0;-1:-1:-1;;;;;35424:13:0;;;35406:32;;;;;;35336:122;35312:3;;;;:::i;:::-;;;;35272:201;;;-1:-1:-1;35487:3:0;;;;:::i;:::-;;;;35224:278;;43173:623;43276:15;43293:23;43318:12;43332:23;43357:12;43371:18;43391;43413:19;43424:7;43413:10;:19::i;:::-;43275:157;;;;;;;;;;;;;;43461:28;43481:7;43461;:15;43469:6;-1:-1:-1;;;;;43461:15:0;-1:-1:-1;;;;;43461:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;-1:-1:-1;;;;;43443:15:0;;;;;;:7;:15;;;;;;;;:46;;;;43518:7;:15;;;;:28;;43538:7;43518:19;:28::i;:::-;-1:-1:-1;;;;;43500:15:0;;;;;;;:7;:15;;;;;;:46;;;;43578:18;;;;;;;:39;;43601:15;43578:22;:39::i;:::-;-1:-1:-1;;;;;43557:18:0;;;;;;:7;:18;;;;;:60;43631:26;43646:10;43631:14;:26::i;:::-;43668;43683:10;43668:14;:26::i;:::-;43705:23;43717:4;43723;43705:11;:23::i;:::-;43761:9;-1:-1:-1;;;;;43744:44:0;43753:6;-1:-1:-1;;;;;43744:44:0;;43772:15;43744:44;;;;3042:25:1;;3030:2;3015:18;;2896:177;43744:44:0;;;;;;;;43264:532;;;;;;;43173:623;;;:::o;42522:643::-;42623:15;42640:23;42665:12;42679:23;42704:12;42718:18;42738;42760:19;42771:7;42760:10;:19::i;:::-;42622:157;;;;;;;;;;;;;;42808:28;42828:7;42808;:15;42816:6;-1:-1:-1;;;;;42808:15:0;-1:-1:-1;;;;;42808:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;-1:-1:-1;;;;;42790:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;42868:18;;;;;:7;:18;;;;;:39;;42891:15;42868:22;:39::i;:::-;-1:-1:-1;;;;;42847:18:0;;;;;;:7;:18;;;;;;;;:60;;;;42939:7;:18;;;;:39;;42962:15;42939:22;:39::i;41955:559::-;42054:15;42071:23;42096:12;42110:23;42135:12;42149:18;42169;42191:19;42202:7;42191:10;:19::i;:::-;42053:157;;;;;;;;;;;;;;42239:28;42259:7;42239;:15;42247:6;-1:-1:-1;;;;;42239:15:0;-1:-1:-1;;;;;42239:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;25260:699::-;25363:15;25380:23;25405:12;25419:23;25444:12;25458:18;25478;25500:19;25511:7;25500:10;:19::i;:::-;25362:157;;;;;;;;;;;;;;25548:28;25568:7;25548;:15;25556:6;-1:-1:-1;;;;;25548:15:0;-1:-1:-1;;;;;25548:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;-1:-1:-1;;;;;25530:15:0;;;;;;:7;:15;;;;;;;;:46;;;;25605:7;:15;;;;:28;;25625:7;25605:19;:28::i;30942:154::-;31006:7;31033:55;31072:5;31033:20;31045:7;;31033;:11;;:20;;;;:::i;:::-;:24;;:55::i;31278:166::-;31348:7;31375:61;31420:5;31375:26;31387:13;;31375:7;:11;;:26;;;;:::i;31104:166::-;31174:7;31201:61;31246:5;31201:26;31213:13;;31201:7;:11;;:26;;;;:::i;30158:355::-;30221:19;30244:10;:8;:10::i;:::-;30221:33;-1:-1:-1;30265:18:0;30286:27;:10;30221:33;30286:14;:27::i;:::-;30365:4;30349:22;;;;:7;:22;;;;;;30265:48;;-1:-1:-1;30349:38:0;;30265:48;30349:26;:38::i;:::-;30340:4;30324:22;;;;:7;:22;;;;;;;;:63;;;;30401:11;:26;;;;;;30398:107;;;30483:4;30467:22;;;;:7;:22;;;;;;:38;;30494:10;30467:26;:38::i;:::-;30458:4;30442:22;;;;:7;:22;;;;;:63;30210:303;;30158:355;:::o;30525:405::-;30588:19;30611:10;:8;:10::i;:::-;30588:33;-1:-1:-1;30632:18:0;30653:27;:10;30588:33;30653:14;:27::i;:::-;30734:23;;-1:-1:-1;;;;;30734:23:0;30726:32;;;;:7;:32;;;;;;30632:48;;-1:-1:-1;30726:48:0;;30632;30726:36;:48::i;:::-;30699:23;;;-1:-1:-1;;;;;30699:23:0;;;30691:32;;;;:7;:32;;;;;;;;:83;;;;30800:23;;;;;30788:36;;:11;:36;;;;;;;30785:137;;;30882:23;;-1:-1:-1;;;;;30882:23:0;30874:32;;;;:7;:32;;;;;;:48;;30911:10;30874:36;:48::i;:::-;30847:23;;-1:-1:-1;;;;;30847:23:0;30839:32;;;;:7;:32;;;;;:83;30577:353;;30525:405;:::o;27810:147::-;27888:7;;:17;;27900:4;27888:11;:17::i;:::-;27878:7;:27;27929:10;;:20;;27944:4;27929:14;:20::i;:::-;27916:10;:33;-1:-1:-1;;27810:147:0:o;14:597:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:1;574:15;-1:-1:-1;;570:29:1;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:1:o;616:131::-;-1:-1:-1;;;;;691:31:1;;681:42;;671:70;;737:1;734;727:12;752:134;820:20;;849:31;820:20;849:31;:::i;:::-;752:134;;;:::o;891:315::-;959:6;967;1020:2;1008:9;999:7;995:23;991:32;988:52;;;1036:1;1033;1026:12;988:52;1075:9;1062:23;1094:31;1119:5;1094:31;:::i;:::-;1144:5;1196:2;1181:18;;;;1168:32;;-1:-1:-1;;;891:315:1:o;1403:127::-;1464:10;1459:3;1455:20;1452:1;1445:31;1495:4;1492:1;1485:15;1519:4;1516:1;1509:15;1535:160;1600:20;;1656:13;;1649:21;1639:32;;1629:60;;1685:1;1682;1675:12;1700:1191;1790:6;1798;1851:2;1839:9;1830:7;1826:23;1822:32;1819:52;;;1867:1;1864;1857:12;1819:52;1907:9;1894:23;1936:18;1977:2;1969:6;1966:14;1963:34;;;1993:1;1990;1983:12;1963:34;2031:6;2020:9;2016:22;2006:32;;2076:7;2069:4;2065:2;2061:13;2057:27;2047:55;;2098:1;2095;2088:12;2047:55;2134:2;2121:16;2156:4;2179:2;2175;2172:10;2169:36;;;2185:18;;:::i;:::-;2231:2;2228:1;2224:10;2263:2;2257:9;2326:2;2322:7;2317:2;2313;2309:11;2305:25;2297:6;2293:38;2381:6;2369:10;2366:22;2361:2;2349:10;2346:18;2343:46;2340:72;;;2392:18;;:::i;:::-;2428:2;2421:22;2478:18;;;2512:15;;;;-1:-1:-1;2554:11:1;;;2550:20;;;2582:19;;;2579:39;;;2614:1;2611;2604:12;2579:39;2638:11;;;;2658:148;2674:6;2669:3;2666:15;2658:148;;;2740:23;2759:3;2740:23;:::i;:::-;2728:36;;2691:12;;;;2784;;;;2658:148;;;2825:6;-1:-1:-1;2850:35:1;;-1:-1:-1;2866:18:1;;;2850:35;:::i;:::-;2840:45;;;;;;1700:1191;;;;;:::o;3078:316::-;3155:6;3163;3171;3224:2;3212:9;3203:7;3199:23;3195:32;3192:52;;;3240:1;3237;3230:12;3192:52;-1:-1:-1;;3263:23:1;;;3333:2;3318:18;;3305:32;;-1:-1:-1;3384:2:1;3369:18;;;3356:32;;3078:316;-1:-1:-1;3078:316:1:o;3634:180::-;3693:6;3746:2;3734:9;3725:7;3721:23;3717:32;3714:52;;;3762:1;3759;3752:12;3714:52;-1:-1:-1;3785:23:1;;3634:180;-1:-1:-1;3634:180:1:o;4027:456::-;4104:6;4112;4120;4173:2;4161:9;4152:7;4148:23;4144:32;4141:52;;;4189:1;4186;4179:12;4141:52;4228:9;4215:23;4247:31;4272:5;4247:31;:::i;:::-;4297:5;-1:-1:-1;4354:2:1;4339:18;;4326:32;4367:33;4326:32;4367:33;:::i;:::-;4027:456;;4419:7;;-1:-1:-1;;;4473:2:1;4458:18;;;;4445:32;;4027:456::o;4488:247::-;4547:6;4600:2;4588:9;4579:7;4575:23;4571:32;4568:52;;;4616:1;4613;4606:12;4568:52;4655:9;4642:23;4674:31;4699:5;4674:31;:::i;4740:248::-;4805:6;4813;4866:2;4854:9;4845:7;4841:23;4837:32;4834:52;;;4882:1;4879;4872:12;4834:52;4918:9;4905:23;4895:33;;4947:35;4978:2;4967:9;4963:18;4947:35;:::i;:::-;4937:45;;4740:248;;;;;:::o;4993:180::-;5049:6;5102:2;5090:9;5081:7;5077:23;5073:32;5070:52;;;5118:1;5115;5108:12;5070:52;5141:26;5157:9;5141:26;:::i;5178:388::-;5246:6;5254;5307:2;5295:9;5286:7;5282:23;5278:32;5275:52;;;5323:1;5320;5313:12;5275:52;5362:9;5349:23;5381:31;5406:5;5381:31;:::i;:::-;5431:5;-1:-1:-1;5488:2:1;5473:18;;5460:32;5501:33;5460:32;5501:33;:::i;:::-;5553:7;5543:17;;;5178:388;;;;;:::o;5571:380::-;5650:1;5646:12;;;;5693;;;5714:61;;5768:4;5760:6;5756:17;5746:27;;5714:61;5821:2;5813:6;5810:14;5790:18;5787:38;5784:161;;5867:10;5862:3;5858:20;5855:1;5848:31;5902:4;5899:1;5892:15;5930:4;5927:1;5920:15;5784:161;;5571:380;;;:::o;5956:356::-;6158:2;6140:21;;;6177:18;;;6170:30;6236:34;6231:2;6216:18;;6209:62;6303:2;6288:18;;5956:356::o;6317:127::-;6378:10;6373:3;6369:20;6366:1;6359:31;6409:4;6406:1;6399:15;6433:4;6430:1;6423:15;6449:128;6489:3;6520:1;6516:6;6513:1;6510:13;6507:39;;;6526:18;;:::i;:::-;-1:-1:-1;6562:9:1;;6449:128::o;6935:127::-;6996:10;6991:3;6987:20;6984:1;6977:31;7027:4;7024:1;7017:15;7051:4;7048:1;7041:15;7067:135;7106:3;7127:17;;;7124:43;;7147:18;;:::i;:::-;-1:-1:-1;7194:1:1;7183:13;;7067:135::o;8331:125::-;8371:4;8399:1;8396;8393:8;8390:34;;;8404:18;;:::i;:::-;-1:-1:-1;8441:9:1;;8331:125::o;8461:127::-;8522:10;8517:3;8513:20;8510:1;8503:31;8553:4;8550:1;8543:15;8577:4;8574:1;8567:15;9006:251;9076:6;9129:2;9117:9;9108:7;9104:23;9100:32;9097:52;;;9145:1;9142;9135:12;9097:52;9177:9;9171:16;9196:31;9221:5;9196:31;:::i;11597:422::-;11686:1;11729:5;11686:1;11743:270;11764:7;11754:8;11751:21;11743:270;;;11823:4;11819:1;11815:6;11811:17;11805:4;11802:27;11799:53;;;11832:18;;:::i;:::-;11882:7;11872:8;11868:22;11865:55;;;11902:16;;;;11865:55;11981:22;;;;11941:15;;;;11743:270;;;11747:3;11597:422;;;;;:::o;12024:806::-;12073:5;12103:8;12093:80;;-1:-1:-1;12144:1:1;12158:5;;12093:80;12192:4;12182:76;;-1:-1:-1;12229:1:1;12243:5;;12182:76;12274:4;12292:1;12287:59;;;;12360:1;12355:130;;;;12267:218;;12287:59;12317:1;12308:10;;12331:5;;;12355:130;12392:3;12382:8;12379:17;12376:43;;;12399:18;;:::i;:::-;-1:-1:-1;;12455:1:1;12441:16;;12470:5;;12267:218;;12569:2;12559:8;12556:16;12550:3;12544:4;12541:13;12537:36;12531:2;12521:8;12518:16;12513:2;12507:4;12504:12;12500:35;12497:77;12494:159;;;-1:-1:-1;12606:19:1;;;12638:5;;12494:159;12685:34;12710:8;12704:4;12685:34;:::i;:::-;12755:6;12751:1;12747:6;12743:19;12734:7;12731:32;12728:58;;;12766:18;;:::i;:::-;12804:20;;12024:806;-1:-1:-1;;;12024:806:1:o;12835:131::-;12895:5;12924:36;12951:8;12945:4;12924:36;:::i;12971:168::-;13011:7;13077:1;13073;13069:6;13065:14;13062:1;13059:21;13054:1;13047:9;13040:17;13036:45;13033:71;;;13084:18;;:::i;:::-;-1:-1:-1;13124:9:1;;12971:168::o;16282:217::-;16322:1;16348;16338:132;;16392:10;16387:3;16383:20;16380:1;16373:31;16427:4;16424:1;16417:15;16455:4;16452:1;16445:15;16338:132;-1:-1:-1;16484:9:1;;16282:217::o;16504:267::-;16543:4;16572:9;;;16597:10;;-1:-1:-1;;;16616:19:1;;16609:27;;16593:44;16590:70;;;16640:18;;:::i;:::-;-1:-1:-1;;;;;16687:27:1;;16680:35;;16672:44;;16669:70;;;16719:18;;:::i;:::-;-1:-1:-1;;16756:9:1;;16504:267::o;16776:265::-;16815:3;16843:9;;;16868:10;;-1:-1:-1;;;;;16887:27:1;;;16880:35;;16864:52;16861:78;;;16919:18;;:::i;:::-;-1:-1:-1;;;16966:19:1;;;16959:27;;16951:36;;16948:62;;;16990:18;;:::i;:::-;-1:-1:-1;;17026:9:1;;16776:265::o;17046:144::-;17084:3;-1:-1:-1;;;17105:22:1;;17102:48;;17130:18;;:::i;:::-;-1:-1:-1;;;17166:18:1;;17046:144::o;18292:980::-;18554:4;18602:3;18591:9;18587:19;18633:6;18622:9;18615:25;18659:2;18697:6;18692:2;18681:9;18677:18;18670:34;18740:3;18735:2;18724:9;18720:18;18713:31;18764:6;18799;18793:13;18830:6;18822;18815:22;18868:3;18857:9;18853:19;18846:26;;18907:2;18899:6;18895:15;18881:29;;18928:1;18938:195;18952:6;18949:1;18946:13;18938:195;;;19017:13;;-1:-1:-1;;;;;19013:39:1;19001:52;;19108:15;;;;19073:12;;;;19049:1;18967:9;18938:195;;;-1:-1:-1;;;;;;;19189:32:1;;;;19184:2;19169:18;;19162:60;-1:-1:-1;;;19253:3:1;19238:19;19231:35;19150:3;18292:980;-1:-1:-1;;;18292:980:1:o;19889:306::-;19977:6;19985;19993;20046:2;20034:9;20025:7;20021:23;20017:32;20014:52;;;20062:1;20059;20052:12;20014:52;20091:9;20085:16;20075:26;;20141:2;20130:9;20126:18;20120:25;20110:35;;20185:2;20174:9;20170:18;20164:25;20154:35;;19889:306;;;;;:::o

Swarm Source

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