ETH Price: $3,919.66 (+0.21%)

Token

ERC-20: Shibana (SHIBANA)
 

Overview

Max Total Supply

69,000,000 SHIBANA

Holders

109

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
905,286.705969315 SHIBANA

Value
$0.00
0xaa747f556d2b3445e33b24b6339278cbbf2dc683
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:
Shibana

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
Yes with 50 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-05-08
*/

// SPDX-License-Identifier: MIT

/*

    Shibana - DAO Empowered Charity

Telegram: https://t.me/ShibanaDAO
Twitter: https://twitter.com/shibanadao 
Website: https://shibanadao.com/

*/

pragma solidity ^0.8.13;


library EnumerableSet {
    // To implement this library for multiple types with as little code
    // repetition as possible, we write it in terms of a generic Set type with
    // bytes32 values.
    // The Set implementation uses private functions, and user-facing
    // implementations (such as AddressSet) are just wrappers around the
    // underlying Set.
    // This means that we can only create new EnumerableSets for types that fit
    // in bytes32.

    struct Set {
        // Storage of set values
        bytes32[] _values;

        // Position of the value in the `values` array, plus 1 because index 0
        // means a value is not in the set.
        mapping (bytes32 => uint256) _indexes;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function _add(Set storage set, bytes32 value) private returns (bool) {
        if (!_contains(set, value)) {
            set._values.push(value);
            // The value is stored at length-1, but we add 1 to all indexes
            // and use 0 as a sentinel value
            set._indexes[value] = set._values.length;
            return true;
        } else {
            return false;
        }
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function _remove(Set storage set, bytes32 value) private returns (bool) {
        // We read and store the value's index to prevent multiple reads from the same storage slot
        uint256 valueIndex = set._indexes[value];

        if (valueIndex != 0) { // Equivalent to contains(set, value)
            // To delete an element from the _values array in O(1), we swap the element to delete with the last one in
            // the array, and then remove the last element (sometimes called as 'swap and pop').
            // This modifies the order of the array, as noted in {at}.

            uint256 toDeleteIndex = valueIndex - 1;
            uint256 lastIndex = set._values.length - 1;

            // When the value to delete is the last one, the swap operation is unnecessary. However, since this occurs
            // so rarely, we still do the swap anyway to avoid the gas cost of adding an 'if' statement.

            bytes32 lastvalue = set._values[lastIndex];

            // Move the last value to the index where the value to delete is
            set._values[toDeleteIndex] = lastvalue;
            // Update the index for the moved value
            set._indexes[lastvalue] = toDeleteIndex + 1; // All indexes are 1-based

            // Delete the slot where the moved value was stored
            set._values.pop();

            // Delete the index for the deleted slot
            delete set._indexes[value];

            return true;
        } else {
            return false;
        }
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function _contains(Set storage set, bytes32 value) private view returns (bool) {
        return set._indexes[value] != 0;
    }

    /**
     * @dev Returns the number of values on the set. O(1).
     */
    function _length(Set storage set) private view returns (uint256) {
        return set._values.length;
    }

   /**
    * @dev Returns the value stored at position `index` in the set. O(1).
    *
    * Note that there are no guarantees on the ordering of values inside the
    * array, and it may change when more values are added or removed.
    *
    * Requirements:
    *
    * - `index` must be strictly less than {length}.
    */
    function _at(Set storage set, uint256 index) private view returns (bytes32) {
        require(set._values.length > index, "EnumerableSet: index out of bounds");
        return set._values[index];
    }

     

    // AddressSet

    struct AddressSet {
        Set _inner;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function add(AddressSet storage set, address value) internal returns (bool) {
        return _add(set._inner, bytes32(uint256(uint160(value))));
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function remove(AddressSet storage set, address value) internal returns (bool) {
        return _remove(set._inner, bytes32(uint256(uint160(value))));
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function contains(AddressSet storage set, address value) internal view returns (bool) {
        return _contains(set._inner, bytes32(uint256(uint160(value))));
    }

    /**
     * @dev Returns the number of values in the set. O(1).
     */
    function length(AddressSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

   /**
    * @dev Returns the value stored at position `index` in the set. O(1).
    *
    * Note that there are no guarantees on the ordering of values inside the
    * array, and it may change when more values are added or removed.
    *
    * Requirements:
    *
    * - `index` must be strictly less than {length}.
    */
    function at(AddressSet storage set, uint256 index) internal view returns (address) {
        return address(uint160(uint256(_at(set._inner, index))));
    }
}


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


contract Ownable {
    address private _owner;
    address private _previousOwner;

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

    constructor () {
        _owner = msg.sender;
        emit OwnershipTransferred(address(0), msg.sender);
    }

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

    modifier onlyOwner() {
        require(_owner == msg.sender, "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;
    }
}

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

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

contract Shibana is IERC20, Ownable {

    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) public botWallets;

    address[] private _excluded;
    
    using EnumerableSet for EnumerableSet.AddressSet;
    EnumerableSet.AddressSet electedCouncil;

    address constant public ZERO = address(0x0);
 
    address public DAOcandidate;
    uint256 public DAOcandidateScore;
    mapping(address => uint256) public DAOwinningBuy;
    
    uint256 public timeLastDAOcandidate;    
    uint256 public DAOcandidateRoundDuration = 6 hours;    
    uint256 public totalDAOrewards;
    
    uint256 public launchBlock;
   
    uint256 public constant MAX = ~uint256(0);
    uint256 private constant _tTotal = 69_000_000 * 10**_decimals;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    
    address public autoLiquidityReceiver = 0x96c8dB3284948011FFE230d669c2e2Ab3A103Ef0;
    address public treasuryAddress = 0x506F5D1c3E403d234c9Df98Cb3a79F2fbCC905d1;
	address public developmentAddress = msg.sender;

    address private constant USDCaddress = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48;
    address private constant WETHaddress = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;

    uint256 public charityFunds;
    uint256 public treasuryFunds;
    uint256 private developmentFunds;

    string private constant _name = "Shibana";
    string private constant _symbol = "SHIBANA";
    uint8 private constant _decimals = 9;
    
    uint256 public _taxFee = 3;
    uint256 private _previousTaxFee = _taxFee;
   
    uint256 public _liquidityFee = 9;
    uint256 private _previousLiquidityFee = _liquidityFee;

    IUniswapV2Router public constant uniswapV2Router = IUniswapV2Router(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); //Mainnet & Testnet ETH;
    address public uniswapV2Pair;
     
    bool inSwapAndLiquify;
    
    uint256 public walletRestrictionAmount; // max token transaction and wallet amount
    uint256 public constant MIN_WALLETRESTRICTION_AMOUNT = 3 * _tTotal / 200; // 1.5% 
 
    uint256 public numTokensSellToAddToLiquidity =  _tTotal / 200; // 0.5...%
    
    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event V1Airdrop(address indexed sender, uint256 indexed totalAirdroppedTokens);
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    constructor() {
        _rOwned[msg.sender] = _rTotal;
        
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;      
        
        emit Transfer(address(0), msg.sender, _tTotal);
    }

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

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

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

    function totalSupply() external pure 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) external override returns (bool) {
        _transfer(msg.sender, recipient, amount);
        return true;
    }

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

    function approve(address spender, uint256 amount) external override returns (bool) {
        _approve(msg.sender, spender, amount);
        return true;
    }

    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        _transfer(sender, recipient, amount);
        uint256 _allowance = _allowances[sender][msg.sender];
        _approve(sender, msg.sender, _allowance - amount);
        return true;
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue) external virtual returns (bool) {
        uint256 _allowance = _allowances[msg.sender][spender];
        _approve(msg.sender, spender, _allowance - subtractedValue);
        return true;
    }

    function totalFees() external view returns (uint256) {
        return _tFeeTotal;
    }
    
    function deliver(uint256 tAmount) external {
        require(!_isExcluded[ msg.sender], "Excluded addresses cannot call this function");
        (uint256 rAmount,,,,,) = _getValues(tAmount);
        _rOwned[ msg.sender] = _rOwned[ msg.sender]  - rAmount;
        _rTotal = _rTotal - rAmount;
        _tFeeTotal = _tFeeTotal + tAmount;
    }

    function reflectionFromToken(uint256 tAmount, bool deductTransferFee) external 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 / currentRate;
    }

    function excludeFromReward(address account) external 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 excluded");
        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 isExcludedFromReward(address account) external view returns (bool) {
        return _isExcluded[account];
    }

    function excludeFromFee(address account) external onlyOwner {
        _isExcludedFromFee[account] = true;
    }
    
    function includeInFee(address account) external onlyOwner {
        _isExcludedFromFee[account] = false;
    }

    function setSwapThresholdAmount(uint256 _numTokensSellToAddToLiquidity) external onlyOwner {
        require(_numTokensSellToAddToLiquidity >= _tTotal / 1000, "[0.1,MAXUINT_256] % supply)");
        numTokensSellToAddToLiquidity = _numTokensSellToAddToLiquidity;
    }
    
    function claimStuckTokens(address tokenAddress, address walletaddress) external onlyOwner {
        require(tokenAddress != address(this));
        IERC20 token = IERC20(tokenAddress);
        token.transfer(walletaddress, token.balanceOf(address(this)));
    }
    
    function claimStuckBalance(address payable walletaddress) external onlyOwner {
        walletaddress.transfer(address(this).balance - charityFunds - developmentFunds - treasuryFunds);
    }
    
    function addBotWallet(address botwallet) external onlyOwner {
        require(block.number <= launchBlock + 60, "Antibot only first 60 blocks");
        botWallets[botwallet] = true;
    }
    
    function removeBotWallet(address botwallet) external onlyOwner {
        botWallets[botwallet] = false;
    }
    
    function allowtrading() payable external onlyOwner() {
        require(walletRestrictionAmount < MIN_WALLETRESTRICTION_AMOUNT, "Launched");
        walletRestrictionAmount = MIN_WALLETRESTRICTION_AMOUNT;

        uint256 liquidityAmount = (balanceOf(msg.sender) - 5 * _tTotal / 100) * _getRate();
        _rOwned[msg.sender] -= liquidityAmount;
        _rOwned[address(this)] += liquidityAmount;
        emit Transfer(msg.sender, address(this), tokenFromReflection(liquidityAmount));

        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory())
            .createPair(address(this), WETHaddress); 
            
        _approve(address(this), address(uniswapV2Router), MAX);
        uniswapV2Router.addLiquidityETH{value: msg.value}(
            address(this),
            tokenFromReflection(liquidityAmount),
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            owner(),
            block.timestamp
        );

        launchBlock = block.number;        
    }    

    function setWalletRestrictionAmount(uint256 _walletRestrictionAmount) external onlyOwner {
        require(_walletRestrictionAmount >= MIN_WALLETRESTRICTION_AMOUNT, "[1.5, MAXUINT_256] %");
        walletRestrictionAmount = _walletRestrictionAmount;
    }

    function setFeeReceivers(address _treasuryAddress, address _developmentAddress) external onlyOwner {
        treasuryAddress = _treasuryAddress;
        developmentAddress = _developmentAddress;
    }

    function setDAOcandidateRoundDuration(uint256 _roundDurationHours) external onlyOwner {
        require(_roundDurationHours >= 6);
        DAOcandidateRoundDuration = _roundDurationHours * 1 hours;
    }

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal - rFee;
        _tFeeTotal = _tFeeTotal + tFee;
    }

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

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

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 currentRate) 
            private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount * currentRate;
        uint256 rFee = tFee * currentRate;
        uint256 rLiquidity = tLiquidity * currentRate;
        uint256 rTransferAmount = rAmount - rFee - rLiquidity;
        return (rAmount, rTransferAmount, rFee);
    }

    function _getRate() private view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply / 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 - _rOwned[_excluded[i]];
            tSupply = tSupply - _tOwned[_excluded[i]];
        }
        if (rSupply < _rTotal / _tTotal) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }
    
    function _takeLiquidity(uint256 tLiquidity) private {
        uint256 currentRate =  _getRate();        

        uint256 contractTokens = 7 * tLiquidity / 9;
        tLiquidity -= contractTokens;

        uint256 rLiquidity = tLiquidity * currentRate;
        _rOwned[autoLiquidityReceiver] = _rOwned[autoLiquidityReceiver] + rLiquidity;
        if(_isExcluded[autoLiquidityReceiver])
            _tOwned[autoLiquidityReceiver] = _tOwned[autoLiquidityReceiver] + tLiquidity;

        rLiquidity = contractTokens * currentRate;
        _rOwned[address(this)] = _rOwned[address(this)] + rLiquidity;
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)] + contractTokens;
    }
    
    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount * _taxFee / 10**2;
    }

    function calculateLiquidityFee(uint256 _amount) private view returns (uint256) {
        return _amount * _liquidityFee / 10**2;
    }
    
    function removeAllFee() private {
        if(_taxFee == 0 && _liquidityFee == 0) return;
        
        _previousTaxFee = _taxFee;
        _previousLiquidityFee = _liquidityFee;
        
        _taxFee = 0;
        _liquidityFee = 0;
    }
    
    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _liquidityFee = _previousLiquidityFee;
    }
    
    function isExcludedFromFee(address account) external view returns(bool) {
        return _isExcludedFromFee[account];
    }

    function _approve(address owner, address spender, uint256 amount) private {
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
  
    function _transfer(address from, address to, uint256 amount) private {
        require(amount > 0, "Transfer more than 0");
        require(!botWallets[from], "No bots");        

        bool takeFee = true;
        if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){
            takeFee = false;
        }
        else{
            uint256 _walletRestrictionAmount = walletRestrictionAmount;
            require(_walletRestrictionAmount >= MIN_WALLETRESTRICTION_AMOUNT, "Launching");
            //Limits in effect
            if(_walletRestrictionAmount < MAX){    
                require(amount <= _walletRestrictionAmount && 
               (to == uniswapV2Pair || (balanceOf(to) + amount <= _walletRestrictionAmount)), "maxTx/maxWallet");                      
            }
        }

        if(takeFee){
            address _DAOcandidate = DAOcandidate;
            if(from == uniswapV2Pair){
                address[] memory path = new address[](2);
                path[0] = WETHaddress;
                path[1] = address(this);
                uint256 buyAmountETH = uniswapV2Router.getAmountsIn(amount, path)[0];                
                if(block.timestamp > timeLastDAOcandidate + DAOcandidateRoundDuration && _DAOcandidate != ZERO){
                    if(electedCouncil.contains(_DAOcandidate) == false){
                        electedCouncil.add(_DAOcandidate);
                    }                    
                    DAOwinningBuy[_DAOcandidate] = DAOcandidateScore;
                    DAOcandidateScore = 0;
                }
                if(buyAmountETH > DAOcandidateScore){                                    
                    if(_DAOcandidate != to){ 
                        DAOcandidate = to;
                    }
                    DAOcandidateScore = buyAmountETH;
                    timeLastDAOcandidate = block.timestamp;
                }
            }
            else{
                if(from == DAOcandidate){                       
                    DAOcandidate = ZERO;
                    DAOcandidateScore = 0;
                    timeLastDAOcandidate = block.timestamp;
                }
                else if(!inSwapAndLiquify){
                    uint256 _numTokensSellToAddToLiquidity = numTokensSellToAddToLiquidity;
                    if(balanceOf(autoLiquidityReceiver) >= _numTokensSellToAddToLiquidity){
                        addLiquidity(_numTokensSellToAddToLiquidity);
                    }
                    else if(balanceOf(address(this)) >= _numTokensSellToAddToLiquidity && _DAOcandidate != ZERO){
                        swapAndLiquify(_numTokensSellToAddToLiquidity);
                    }
                }                                
            }
        }
        _tokenTransfer(from,to,amount,takeFee);
    }

    function swapAndLiquify(uint256 tokenAmount) private lockTheSwap {

        uint256 oldBalance = address(this).balance;
        swapTokensForEth(tokenAmount); 
        uint256 swappedBalance = address(this).balance - oldBalance;

        treasuryFunds += swappedBalance * 3 / 7; 
		developmentFunds += swappedBalance / 7;
		charityFunds += swappedBalance * 2 / 7;
        uint256 DAOrewards = swappedBalance / 7;
        payable(DAOcandidate).transfer(DAOrewards);	 
        totalDAOrewards += DAOrewards;
    }

    function addLiquidity(uint256 tokenAmount) private lockTheSwap {
        uint256 rTransferAmount = tokenAmount * _getRate();
        _rOwned[autoLiquidityReceiver] -= rTransferAmount;
        _rOwned[address(this)] += rTransferAmount;
                
        uint256 amountToLiquify = tokenAmount / 2;
        uint256 amountToSwap = tokenAmount - amountToLiquify;

        uint256 balanceBefore = address(this).balance;
        swapTokensForEth(amountToSwap);
        uint256 amountETHLiquidity = address(this).balance - balanceBefore;

        if (amountToLiquify > 0 && amountETHLiquidity > 0) { 
            uniswapV2Router.addLiquidityETH{value: amountETHLiquidity}(
                address(this),
                amountToLiquify,
                0, // slippage is unavoidable
                0, // slippage is unavoidable
                owner(),
                block.timestamp
            );
        }
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = WETHaddress;

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function donateToCharity(address _charityAddress, uint256 _charityContribution) external onlyOwner {
        payable(_charityAddress).transfer(_charityContribution);		
        charityFunds -= _charityContribution;
    }
    
    function transferToTreasury() external {
        require(msg.sender == treasuryAddress || msg.sender == owner());
        payable(treasuryAddress).transfer(treasuryFunds);
        treasuryFunds -= treasuryFunds;
    }
    function viewTreasuryFunds() external view returns (uint256) {
        return treasuryFunds;
    }
    function transferToDevelopment() external {
        require(msg.sender == developmentAddress || msg.sender == owner());
        payable(developmentAddress).transfer(developmentFunds);
        developmentFunds -= developmentFunds;
    }
    function viewDevelopmentFunds() external view returns (uint256) {
        require(msg.sender == developmentAddress || msg.sender == owner());
        return developmentFunds;
    }

    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) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender] - rAmount;
        _rOwned[recipient] = _rOwned[recipient] + rTransferAmount;
        _takeLiquidity(tLiquidity);
        _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) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender] - rAmount;
        _tOwned[recipient] = _tOwned[recipient] + tTransferAmount;
        _rOwned[recipient] = _rOwned[recipient] + rTransferAmount;           
        _takeLiquidity(tLiquidity);
        _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) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender] - tAmount;
        _rOwned[sender] = _rOwned[sender] - rAmount;
        _rOwned[recipient] = _rOwned[recipient] + rTransferAmount;   
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, 
          uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender] - tAmount;
        _rOwned[sender] = _rOwned[sender] - rAmount;
        _tOwned[recipient] = _tOwned[recipient] + tTransferAmount;
        _rOwned[recipient] = _rOwned[recipient] + rTransferAmount;        
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function numDAOelected() external view returns (uint256) {
        return electedCouncil.length();
    }

    function viewDAOelected(uint256 index) external view returns (address) {
        return electedCouncil.at(index);
    }

    function estimatedUSD(uint256 amount) internal view returns (uint256) {
        address[] memory path = new address[](2);
        path[0] = USDCaddress;
        path[1] = WETHaddress; 
        return uniswapV2Router.getAmountsIn(amount, path)[0];
    }

    struct WalletData {
        uint256 tokenBalance;        
        uint256 DAOwinningBuy;        
    }

    struct TokenData {
        uint256 totalReflections;
        uint256 DAOcandidateRoundDuration;
        address DAOcandidate;
        uint256 DAOcandidateScore;
        uint256 timeLastDAOcandidate;
        uint256 numDAOmembers;
        uint256 totalDAOrewards;
        uint256 treasuryFunds;
        uint256 charityFunds;
        uint256 liquidityFunds;        
    }

    function fetchWalletData(address wallet) external view returns (WalletData memory) {
        return WalletData(balanceOf(wallet), DAOwinningBuy[wallet]);
    }

    function fetchBigDataA() external view returns (TokenData memory) {
        return TokenData(_tFeeTotal, DAOcandidateRoundDuration, DAOcandidate, 
            DAOcandidateScore, timeLastDAOcandidate, electedCouncil.length(), totalDAOrewards, 
            treasuryFunds, charityFunds, IERC20(WETHaddress).balanceOf(uniswapV2Pair));
    }
    function fetchBigDataB() external view returns (TokenData memory) {
        return TokenData(_tFeeTotal, DAOcandidateRoundDuration, DAOcandidate, 
            DAOcandidateScore, timeLastDAOcandidate, electedCouncil.length(), totalDAOrewards, 
            estimatedUSD(treasuryFunds), estimatedUSD(charityFunds), 
            estimatedUSD(IERC20(WETHaddress).balanceOf(uniswapV2Pair)));
    }
     
    function V1airdrop(address[] calldata wallets, uint256[] calldata airdropAmounts) external onlyOwner {
        uint256 airdroppedTokens;
        uint256 currentRate = _getRate();
        address sender = msg.sender;
        for(uint256 i = 0; i < wallets.length; i++){
            uint256 rAmount = airdropAmounts[i] * currentRate;
            _rOwned[wallets[i]] += rAmount;
            airdroppedTokens += rAmount;
            emit Transfer(sender, wallets[i], airdropAmounts[i]);
        }
        _rOwned[sender] -= airdroppedTokens;
        emit V1Airdrop(sender, airdroppedTokens);
    }

    receive() external payable {}
}

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":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"uint256","name":"totalAirdroppedTokens","type":"uint256"}],"name":"V1Airdrop","type":"event"},{"inputs":[],"name":"DAOcandidate","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DAOcandidateRoundDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DAOcandidateScore","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"DAOwinningBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MIN_WALLETRESTRICTION_AMOUNT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"uint256[]","name":"airdropAmounts","type":"uint256[]"}],"name":"V1airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ZERO","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":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"botwallet","type":"address"}],"name":"addBotWallet","outputs":[],"stateMutability":"nonpayable","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":[],"name":"allowtrading","outputs":[],"stateMutability":"payable","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":[],"name":"autoLiquidityReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"botWallets","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"charityFunds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"walletaddress","type":"address"}],"name":"claimStuckBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"address","name":"walletaddress","type":"address"}],"name":"claimStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"developmentAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_charityAddress","type":"address"},{"internalType":"uint256","name":"_charityContribution","type":"uint256"}],"name":"donateToCharity","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":"fetchBigDataA","outputs":[{"components":[{"internalType":"uint256","name":"totalReflections","type":"uint256"},{"internalType":"uint256","name":"DAOcandidateRoundDuration","type":"uint256"},{"internalType":"address","name":"DAOcandidate","type":"address"},{"internalType":"uint256","name":"DAOcandidateScore","type":"uint256"},{"internalType":"uint256","name":"timeLastDAOcandidate","type":"uint256"},{"internalType":"uint256","name":"numDAOmembers","type":"uint256"},{"internalType":"uint256","name":"totalDAOrewards","type":"uint256"},{"internalType":"uint256","name":"treasuryFunds","type":"uint256"},{"internalType":"uint256","name":"charityFunds","type":"uint256"},{"internalType":"uint256","name":"liquidityFunds","type":"uint256"}],"internalType":"struct Shibana.TokenData","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fetchBigDataB","outputs":[{"components":[{"internalType":"uint256","name":"totalReflections","type":"uint256"},{"internalType":"uint256","name":"DAOcandidateRoundDuration","type":"uint256"},{"internalType":"address","name":"DAOcandidate","type":"address"},{"internalType":"uint256","name":"DAOcandidateScore","type":"uint256"},{"internalType":"uint256","name":"timeLastDAOcandidate","type":"uint256"},{"internalType":"uint256","name":"numDAOmembers","type":"uint256"},{"internalType":"uint256","name":"totalDAOrewards","type":"uint256"},{"internalType":"uint256","name":"treasuryFunds","type":"uint256"},{"internalType":"uint256","name":"charityFunds","type":"uint256"},{"internalType":"uint256","name":"liquidityFunds","type":"uint256"}],"internalType":"struct Shibana.TokenData","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"fetchWalletData","outputs":[{"components":[{"internalType":"uint256","name":"tokenBalance","type":"uint256"},{"internalType":"uint256","name":"DAOwinningBuy","type":"uint256"}],"internalType":"struct Shibana.WalletData","name":"","type":"tuple"}],"stateMutability":"view","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":[],"name":"launchBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"numDAOelected","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[{"internalType":"address","name":"botwallet","type":"address"}],"name":"removeBotWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_roundDurationHours","type":"uint256"}],"name":"setDAOcandidateRoundDuration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_treasuryAddress","type":"address"},{"internalType":"address","name":"_developmentAddress","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_numTokensSellToAddToLiquidity","type":"uint256"}],"name":"setSwapThresholdAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_walletRestrictionAmount","type":"uint256"}],"name":"setWalletRestrictionAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"timeLastDAOcandidate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"totalDAOrewards","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":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferToDevelopment","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferToTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasuryFunds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"viewDAOelected","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"viewDevelopmentFunds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"viewTreasuryFunds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"walletRestrictionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052615460600f55620000186009600a620002e2565b620000289063041cdb40620002fa565b620000369060001962000332565b620000449060001962000349565b601255601480546001600160a01b03199081167396c8db3284948011ffe230d669c2e2ab3a103ef01790915560158054821673506f5d1c3e403d234c9df98cb3a79f2fbcc905d117905560168054909116331790556003601a819055601b556009601c819055601d81905560c890620000bf90600a620002e2565b620000cf9063041cdb40620002fa565b620000db919062000363565b602055348015620000eb57600080fd5b50600080546001600160a01b0319163390811782556040519091907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a36012543360008181526002602090815260408083209490945581546001600160a01b03168252600590528281208054600160ff199182168117909255308352938220805490941617909255907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef620001a66009600a620002e2565b620001b69063041cdb40620002fa565b60405190815260200160405180910390a36200037a565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000224578160001904821115620002085762000208620001cd565b808516156200021657918102915b93841c9390800290620001e8565b509250929050565b6000826200023d57506001620002dc565b816200024c57506000620002dc565b8160018114620002655760028114620002705762000290565b6001915050620002dc565b60ff841115620002845762000284620001cd565b50506001821b620002dc565b5060208310610133831016604e8410600b8410161715620002b5575081810a620002dc565b620002c18383620001e3565b8060001904821115620002d857620002d8620001cd565b0290505b92915050565b6000620002f360ff8416836200022c565b9392505050565b6000816000190483118215151615620003175762000317620001cd565b500290565b634e487b7160e01b600052601260045260246000fd5b6000826200034457620003446200031c565b500690565b6000828210156200035e576200035e620001cd565b500390565b6000826200037557620003756200031c565b500490565b613d98806200038a6000396000f3fe60806040526004361061035d5760003560e01c806367b5096a116101bd578063a7a63722116100f8578063d49d51811161009b578063d49d518114610a49578063dd62ed3e14610a5f578063dee601a814610aa5578063e17901d814610ac5578063ea2f0b3714610adb578063ecc9c0b314610afb578063ed5091c814610b10578063f2fde38b14610b30578063f63821f614610b5057600080fd5b8063a7a6372214610971578063a8eb226d14610987578063a9059cbb146109a7578063b782dd2d146109c7578063c5f956af146109dd578063ca33e64c146109fd578063d00efb2f14610a1d578063d12a768814610a3357600080fd5b806388f820201161016057806388f82020146108805780638da5cb5b146108b957806395d89b41146108ce5780639c01a401146108fe578063a3f8a32914610914578063a457c2d714610929578063a4b45c0014610949578063a63342311461096957600080fd5b806367b5096a1461079a5780636bc87c3a146107ba5780636ff86162146107d057806370a08231146107e5578063715018a61461080557806372bb61be1461081a57806381946a251461082f578063845dc2d21461086a57600080fd5b80633685d4191161029857806349bd5a5e1161023b57806349bd5a5e146106805780634aa46a35146106a057806350e7c4a2146106c057806352390c02146106d65780635342acb4146106f657806358fa63ca1461072f5780635b897c941461074457806360ffe08614610764578063638b1b141461077a57600080fd5b80633685d4191461058857806339509351146105a85780633b124fe7146105c85780633b77f0eb146105de5780633bd5d173146105f35780633c09f7de14610613578063437823ec146106405780634549b0391461066057600080fd5b806323b872dd1161030057806323b872dd1461048a57806326d51091146104aa57806329e04b4a146104cc5780632a360631146104ec5780632baa8a881461050c5780632d8381191461052c578063302707cb1461054c578063313ce5671461056c57600080fd5b806301cfbeb7146103695780630305caff1461039157806306fdde03146103b3578063095ea7b3146103ec57806313114a9d1461041c5780631694505e1461043157806318160ddd1461046057806321fb7a751461047557600080fd5b3661036457005b600080fd5b34801561037557600080fd5b5061037e610b80565b6040519081526020015b60405180910390f35b34801561039d57600080fd5b506103b16103ac366004613617565b610bb4565b005b3480156103bf57600080fd5b5060408051808201909152600781526653686962616e6160c81b60208201525b6040516103889190613634565b3480156103f857600080fd5b5061040c610407366004613689565b610c08565b6040519015158152602001610388565b34801561042857600080fd5b5060135461037e565b34801561043d57600080fd5b50610453600080516020613d2383398151915281565b60405161038891906136b5565b34801561046c57600080fd5b5061037e610c1f565b34801561048157600080fd5b506103b1610c40565b34801561049657600080fd5b5061040c6104a53660046136c9565b610ccf565b3480156104b657600080fd5b506104bf610d22565b604051610388919061370a565b3480156104d857600080fd5b506103b16104e736600461378c565b610e20565b3480156104f857600080fd5b506103b1610507366004613617565b610ec3565b34801561051857600080fd5b506103b16105273660046137f1565b610f6e565b34801561053857600080fd5b5061037e61054736600461378c565b61113f565b34801561055857600080fd5b506103b1610567366004613617565b6111c3565b34801561057857600080fd5b5060405160098152602001610388565b34801561059457600080fd5b506103b16105a3366004613617565b61124e565b3480156105b457600080fd5b5061040c6105c3366004613689565b6113d0565b3480156105d457600080fd5b5061037e601a5481565b3480156105ea57600080fd5b5060185461037e565b3480156105ff57600080fd5b506103b161060e36600461378c565b611407565b34801561061f57600080fd5b5061037e61062e366004613617565b600d6020526000908152604090205481565b34801561064c57600080fd5b506103b161065b366004613617565b6114e2565b34801561066c57600080fd5b5061037e61067b36600461386b565b611530565b34801561068c57600080fd5b50601e54610453906001600160a01b031681565b3480156106ac57600080fd5b506104536106bb36600461378c565b6115d4565b3480156106cc57600080fd5b5061037e60105481565b3480156106e257600080fd5b506103b16106f1366004613617565b6115e1565b34801561070257600080fd5b5061040c610711366004613617565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561073b57600080fd5b50610453600081565b34801561075057600080fd5b506103b161075f366004613689565b611704565b34801561077057600080fd5b5061037e600e5481565b34801561078657600080fd5b50601654610453906001600160a01b031681565b3480156107a657600080fd5b506103b16107b536600461378c565b611780565b3480156107c657600080fd5b5061037e601c5481565b3480156107dc57600080fd5b506103b1611826565b3480156107f157600080fd5b5061037e610800366004613617565b6118ae565b34801561081157600080fd5b506103b161190d565b34801561082657600080fd5b5061037e611981565b34801561083b57600080fd5b5061084f61084a366004613617565b6119c5565b60408051825181526020928301519281019290925201610388565b34801561087657600080fd5b5061037e600c5481565b34801561088c57600080fd5b5061040c61089b366004613617565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156108c557600080fd5b50610453611a16565b3480156108da57600080fd5b5060408051808201909152600781526653484942414e4160c81b60208201526103df565b34801561090a57600080fd5b5061037e60185481565b34801561092057600080fd5b5061037e611a25565b34801561093557600080fd5b5061040c610944366004613689565b611a31565b34801561095557600080fd5b506103b161096436600461389b565b611a70565b6103b1611ac8565b34801561097d57600080fd5b5061037e600f5481565b34801561099357600080fd5b506103b16109a236600461389b565b611e2d565b3480156109b357600080fd5b5061040c6109c2366004613689565b611f5a565b3480156109d357600080fd5b5061037e601f5481565b3480156109e957600080fd5b50601554610453906001600160a01b031681565b348015610a0957600080fd5b50601454610453906001600160a01b031681565b348015610a2957600080fd5b5061037e60115481565b348015610a3f57600080fd5b5061037e60205481565b348015610a5557600080fd5b5061037e60001981565b348015610a6b57600080fd5b5061037e610a7a36600461389b565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b348015610ab157600080fd5b506103b1610ac036600461378c565b611f67565b348015610ad157600080fd5b5061037e60175481565b348015610ae757600080fd5b506103b1610af6366004613617565b611fb1565b348015610b0757600080fd5b506104bf611ffc565b348015610b1c57600080fd5b50600b54610453906001600160a01b031681565b348015610b3c57600080fd5b506103b1610b4b366004613617565b61210b565b348015610b5c57600080fd5b5061040c610b6b366004613617565b60076020526000908152604090205460ff1681565b60c8610b8e6009600a6139c3565b610b9c9063041cdb406139d2565b610ba79060036139d2565b610bb191906139f1565b81565b6000546001600160a01b03163314610be75760405162461bcd60e51b8152600401610bde90613a13565b60405180910390fd5b6001600160a01b03166000908152600760205260409020805460ff19169055565b6000610c153384846121f5565b5060015b92915050565b6000610c2d6009600a6139c3565b610c3b9063041cdb406139d2565b905090565b6016546001600160a01b0316331480610c715750610c5c611a16565b6001600160a01b0316336001600160a01b0316145b610c7a57600080fd5b6016546019546040516001600160a01b039092169181156108fc0291906000818181858888f19350505050158015610cb6573d6000803e3d6000fd5b5060198054906000610cc88380613a48565b9091555050565b6000610cdc848484612256565b6001600160a01b03841660009081526004602090815260408083203380855292529091205490610d17908690610d128685613a48565b6121f5565b506001949350505050565b610d2a6135a3565b60408051610140810182526013548152600f546020820152600b546001600160a01b031691810191909152600c546060820152600e54608082015260a08101610d7360096126f0565b815260105460208201526018546040808301919091526017546060830152601e5490516370a0823160e01b815260809092019173c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2916370a0823191610dd8916001600160a01b0316906004016136b5565b602060405180830381865afa158015610df5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e199190613a5f565b9052919050565b6000546001600160a01b03163314610e4a5760405162461bcd60e51b8152600401610bde90613a13565b6103e8610e596009600a6139c3565b610e679063041cdb406139d2565b610e7191906139f1565b811015610ebe5760405162461bcd60e51b815260206004820152601b60248201527a5b302e312c4d415855494e545f3235365d202520737570706c792960281b6044820152606401610bde565b602055565b6000546001600160a01b03163314610eed5760405162461bcd60e51b8152600401610bde90613a13565b601154610efb90603c613a78565b431115610f4a5760405162461bcd60e51b815260206004820152601c60248201527f416e7469626f74206f6e6c7920666972737420363020626c6f636b73000000006044820152606401610bde565b6001600160a01b03166000908152600760205260409020805460ff19166001179055565b6000546001600160a01b03163314610f985760405162461bcd60e51b8152600401610bde90613a13565b600080610fa36126fa565b90503360005b868110156110d257600083878784818110610fc657610fc6613a90565b90506020020135610fd791906139d2565b905080600260008b8b86818110610ff057610ff0613a90565b90506020020160208101906110059190613617565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008282546110349190613a78565b9091555061104490508186613a78565b945088888381811061105857611058613a90565b905060200201602081019061106d9190613617565b6001600160a01b0316836001600160a01b0316600080516020613d438339815191528989868181106110a1576110a1613a90565b905060200201356040516110b791815260200190565b60405180910390a350806110ca81613aa6565b915050610fa9565b506001600160a01b038116600090815260026020526040812080548592906110fb908490613a48565b909155505060405183906001600160a01b038316907f2549808b266e4863926470d547842fd62d0a3b1d32cd23d5e8ac5190741c254590600090a350505050505050565b60006012548211156111a65760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610bde565b60006111b06126fa565b90506111bc81846139f1565b9392505050565b6000546001600160a01b031633146111ed5760405162461bcd60e51b8152600401610bde90613a13565b806001600160a01b03166108fc6018546019546017544761120e9190613a48565b6112189190613a48565b6112229190613a48565b6040518115909202916000818181858888f1935050505015801561124a573d6000803e3d6000fd5b5050565b6000546001600160a01b031633146112785760405162461bcd60e51b8152600401610bde90613a13565b6001600160a01b03811660009081526006602052604090205460ff166112b05760405162461bcd60e51b8152600401610bde90613abf565b60005b60085481101561124a57816001600160a01b0316600882815481106112da576112da613a90565b6000918252602090912001546001600160a01b0316036113be576008805461130490600190613a48565b8154811061131457611314613a90565b600091825260209091200154600880546001600160a01b03909216918390811061134057611340613a90565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600382526040808220829055600690925220805460ff19169055600880548061139857611398613af4565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b806113c881613aa6565b9150506112b3565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610c15918590610d12908690613a78565b3360009081526006602052604090205460ff161561147c5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610bde565b60006114878261271d565b5050336000908152600260205260409020549394506114ac938593509150613a489050565b336000908152600260205260409020556012546114ca908290613a48565b6012556013546114db908390613a78565b6013555050565b6000546001600160a01b0316331461150c5760405162461bcd60e51b8152600401610bde90613a13565b6001600160a01b03166000908152600560205260409020805460ff19166001179055565b600061153e6009600a6139c3565b61154c9063041cdb406139d2565b83111561159b5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610bde565b816115ba5760006115ab8461271d565b50939550610c19945050505050565b60006115c58461271d565b50929550610c19945050505050565b6000610c1960098361276c565b6000546001600160a01b0316331461160b5760405162461bcd60e51b8152600401610bde90613a13565b6001600160a01b03811660009081526006602052604090205460ff16156116445760405162461bcd60e51b8152600401610bde90613abf565b6001600160a01b0381166000908152600260205260409020541561169e576001600160a01b0381166000908152600260205260409020546116849061113f565b6001600160a01b0382166000908152600360205260409020555b6001600160a01b03166000818152600660205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6000546001600160a01b0316331461172e5760405162461bcd60e51b8152600401610bde90613a13565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015611764573d6000803e3d6000fd5b5080601760008282546117779190613a48565b90915550505050565b6000546001600160a01b031633146117aa5760405162461bcd60e51b8152600401610bde90613a13565b60c86117b86009600a6139c3565b6117c69063041cdb406139d2565b6117d19060036139d2565b6117db91906139f1565b8110156118215760405162461bcd60e51b81526020600482015260146024820152735b312e352c204d415855494e545f3235365d202560601b6044820152606401610bde565b601f55565b6015546001600160a01b03163314806118575750611842611a16565b6001600160a01b0316336001600160a01b0316145b61186057600080fd5b6015546018546040516001600160a01b039092169181156108fc0291906000818181858888f1935050505015801561189c573d6000803e3d6000fd5b5060188054906000610cc88380613a48565b6001600160a01b03811660009081526006602052604081205460ff16156118eb57506001600160a01b031660009081526003602052604090205490565b6001600160a01b038216600090815260026020526040902054610c199061113f565b6000546001600160a01b031633146119375760405162461bcd60e51b8152600401610bde90613a13565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6016546000906001600160a01b03163314806119b557506119a0611a16565b6001600160a01b0316336001600160a01b0316145b6119be57600080fd5b5060195490565b604080518082019091526000808252602082015260405180604001604052806119ed846118ae565b81526001600160a01b039093166000908152600d60209081526040909120549301929092525090565b6000546001600160a01b031690565b6000610c3b60096126f0565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091611a669085610d128685613a48565b5060019392505050565b6000546001600160a01b03163314611a9a5760405162461bcd60e51b8152600401610bde90613a13565b601580546001600160a01b039384166001600160a01b03199182161790915560168054929093169116179055565b6000546001600160a01b03163314611af25760405162461bcd60e51b8152600401610bde90613a13565b60c8611b006009600a6139c3565b611b0e9063041cdb406139d2565b611b199060036139d2565b611b2391906139f1565b601f5410611b5e5760405162461bcd60e51b815260206004820152600860248201526713185d5b98da195960c21b6044820152606401610bde565b60c8611b6c6009600a6139c3565b611b7a9063041cdb406139d2565b611b859060036139d2565b611b8f91906139f1565b601f556000611b9c6126fa565b6064611baa6009600a6139c3565b611bb89063041cdb406139d2565b611bc39060056139d2565b611bcd91906139f1565b611bd6336118ae565b611be09190613a48565b611bea91906139d2565b33600090815260026020526040812080549293508392909190611c0e908490613a48565b90915550503060009081526002602052604081208054839290611c32908490613a78565b9091555030905033600080516020613d43833981519152611c528461113f565b60405190815260200160405180910390a3600080516020613d238339815191526001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611caf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cd39190613b0a565b6040516364e329cb60e11b815230600482015273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc260248201526001600160a01b03919091169063c9c65396906044016020604051808303816000875af1158015611d35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d599190613b0a565b601e80546001600160a01b0319166001600160a01b0392909216919091179055611d9430600080516020613d238339815191526000196121f5565b600080516020613d2383398151915263f305d7193430611db38561113f565b600080611dbe611a16565b426040518863ffffffff1660e01b8152600401611de096959493929190613b27565b60606040518083038185885af1158015611dfe573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611e239190613b62565b5050436011555050565b6000546001600160a01b03163314611e575760405162461bcd60e51b8152600401610bde90613a13565b306001600160a01b03831603611e6c57600080fd5b6040516370a0823160e01b815282906001600160a01b0382169063a9059cbb90849083906370a0823190611ea49030906004016136b5565b602060405180830381865afa158015611ec1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee59190613a5f565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015611f30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f549190613b90565b50505050565b6000610c15338484612256565b6000546001600160a01b03163314611f915760405162461bcd60e51b8152600401610bde90613a13565b6006811015611f9f57600080fd5b611fab81610e106139d2565b600f5550565b6000546001600160a01b03163314611fdb5760405162461bcd60e51b8152600401610bde90613a13565b6001600160a01b03166000908152600560205260409020805460ff19169055565b6120046135a3565b60408051610140810182526013548152600f546020820152600b546001600160a01b031691810191909152600c546060820152600e54608082015260a0810161204d60096126f0565b81526020016010548152602001612065601854612778565b8152602001612075601754612778565b8152601e546040516370a0823160e01b8152602090920191610e199173c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2916370a08231916120c5916001600160a01b03909116906004016136b5565b602060405180830381865afa1580156120e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121069190613a5f565b612778565b6000546001600160a01b031633146121355760405162461bcd60e51b8152600401610bde90613a13565b6001600160a01b03811661219a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bde565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000811161229d5760405162461bcd60e51b815260206004820152601460248201527305472616e73666572206d6f7265207468616e20360641b6044820152606401610bde565b6001600160a01b03831660009081526007602052604090205460ff16156122f05760405162461bcd60e51b81526020600482015260076024820152664e6f20626f747360c81b6044820152606401610bde565b6001600160a01b03831660009081526005602052604090205460019060ff168061233257506001600160a01b03831660009081526005602052604090205460ff165b1561233f57506000612432565b601f5460c86123506009600a6139c3565b61235e9063041cdb406139d2565b6123699060036139d2565b61237391906139f1565b8110156123ae5760405162461bcd60e51b81526020600482015260096024820152684c61756e6368696e6760b81b6044820152606401610bde565b600019811015612430578083111580156123f25750601e546001600160a01b03858116911614806123f2575080836123e5866118ae565b6123ef9190613a78565b11155b6124305760405162461bcd60e51b815260206004820152600f60248201526e1b585e151e0bdb585e15d85b1b195d608a1b6044820152606401610bde565b505b80156126e457600b54601e546001600160a01b0391821691908116908616036126405760408051600280825260608201835260009260208301908036833701905050905073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28160008151811061249e5761249e613a90565b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106124d2576124d2613a90565b6001600160a01b03909216602092830291909101909101526040516307c0329d60e21b8152600090600080516020613d2383398151915290631f00ca74906125209088908690600401613c07565b600060405180830381865afa15801561253d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526125659190810190613c28565b60008151811061257757612577613a90565b60200260200101519050600f54600e546125919190613a78565b421180156125a757506001600160a01b03831615155b156125f0576125b76009846128bf565b15156000036125cd576125cb6009846128e1565b505b600c80546001600160a01b0385166000908152600d602052604081209190915590555b600c5481111561263957856001600160a01b0316836001600160a01b03161461262f57600b80546001600160a01b0319166001600160a01b0388161790555b600c81905542600e555b50506126e2565b600b546001600160a01b039081169086160361267457600b80546001600160a01b03191690556000600c5542600e556126e2565b601e54600160a01b900460ff166126e257602054601454819061269f906001600160a01b03166118ae565b106126b2576126ad816128f6565b6126e0565b806126bc306118ae565b101580156126d257506001600160a01b03821615155b156126e0576126e081612a60565b505b505b611f5484848484612b7c565b6000610c19825490565b6000806000612707612cf3565b909250905061271681836139f1565b9250505090565b60008060008060008060008060006127348a612ed6565b92509250925060008060006127528d868661274d6126fa565b612f19565b919f909e50909c50959a5093985091965092945050505050565b60006111bc8383612f70565b6040805160028082526060820183526000928392919060208301908036833701905050905073a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48816000815181106127c5576127c5613a90565b60200260200101906001600160a01b031690816001600160a01b03168152505073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28160018151811061280d5761280d613a90565b6001600160a01b03909216602092830291909101909101526040516307c0329d60e21b8152600080516020613d2383398151915290631f00ca74906128589086908590600401613c07565b600060405180830381865afa158015612875573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261289d9190810190613c28565b6000815181106128af576128af613a90565b6020026020010151915050919050565b6001600160a01b038116600090815260018301602052604081205415156111bc565b60006111bc836001600160a01b038416612ff6565b601e805460ff60a01b1916600160a01b17905560006129136126fa565b61291d90836139d2565b6014546001600160a01b031660009081526002602052604081208054929350839290919061294c908490613a48565b90915550503060009081526002602052604081208054839290612970908490613a78565b90915550600090506129836002846139f1565b905060006129918285613a48565b90504761299d82613045565b60006129a98247613a48565b90506000841180156129bb5750600081115b15612a4b57600080516020613d2383398151915263f305d7198230876000806129e2611a16565b426040518863ffffffff1660e01b8152600401612a0496959493929190613b27565b60606040518083038185885af1158015612a22573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612a479190613b62565b5050505b5050601e805460ff60a01b1916905550505050565b601e805460ff60a01b1916600160a01b17905547612a7d82613045565b6000612a898247613a48565b90506007612a988260036139d2565b612aa291906139f1565b60186000828254612ab39190613a78565b90915550612ac490506007826139f1565b60196000828254612ad59190613a78565b9091555060079050612ae88260026139d2565b612af291906139f1565b60176000828254612b039190613a78565b9091555060009050612b166007836139f1565b600b546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015612b51573d6000803e3d6000fd5b508060106000828254612b649190613a78565b9091555050601e805460ff60a01b1916905550505050565b80612b8957612b8961314a565b6001600160a01b03841660009081526006602052604090205460ff168015612bca57506001600160a01b03831660009081526006602052604090205460ff16155b15612bdf57612bda848484613178565b612cdd565b6001600160a01b03841660009081526006602052604090205460ff16158015612c2057506001600160a01b03831660009081526006602052604090205460ff165b15612c3057612bda84848461328f565b6001600160a01b03841660009081526006602052604090205460ff16158015612c7257506001600160a01b03831660009081526006602052604090205460ff16155b15612c8257612bda84848461333b565b6001600160a01b03841660009081526006602052604090205460ff168015612cc257506001600160a01b03831660009081526006602052604090205460ff165b15612cd257612bda848484613380565b612cdd84848461333b565b80611f5457611f54601b54601a55601d54601c55565b601254600090819081612d086009600a6139c3565b612d169063041cdb406139d2565b905060005b600854811015612e7757826002600060088481548110612d3d57612d3d613a90565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612da85750816003600060088481548110612d8157612d81613a90565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612dd557601254612dbc6009600a6139c3565b612dca9063041cdb406139d2565b945094505050509091565b6002600060088381548110612dec57612dec613a90565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612e1b9084613a48565b92506003600060088381548110612e3457612e34613a90565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612e639083613a48565b915080612e6f81613aa6565b915050612d1b565b50612e846009600a6139c3565b612e929063041cdb406139d2565b601254612e9f91906139f1565b821015612ecd57601254612eb56009600a6139c3565b612ec39063041cdb406139d2565b9350935050509091565b90939092509050565b600080600080612ee5856133f5565b90506000612ef286613411565b9050600081612f018489613a48565b612f0b9190613a48565b979296509094509092505050565b6000808080612f2885896139d2565b90506000612f3686896139d2565b90506000612f4487896139d2565b9050600081612f538486613a48565b612f5d9190613a48565b939b939a50919850919650505050505050565b81546000908210612fce5760405162461bcd60e51b815260206004820152602260248201527f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e604482015261647360f01b6064820152608401610bde565b826000018281548110612fe357612fe3613a90565b9060005260206000200154905092915050565b600081815260018301602052604081205461303d57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610c19565b506000610c19565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061307a5761307a613a90565b60200260200101906001600160a01b031690816001600160a01b03168152505073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2816001815181106130c2576130c2613a90565b6001600160a01b039092166020928302919091019091015260405163791ac94760e01b8152600080516020613d238339815191529063791ac94790613114908590600090869030904290600401613ce6565b600060405180830381600087803b15801561312e57600080fd5b505af1158015613142573d6000803e3d6000fd5b505050505050565b601a5415801561315a5750601c54155b1561316157565b601a8054601b55601c8054601d5560009182905555565b60008060008060008061318a8761271d565b6001600160a01b038f16600090815260036020526040902054959b509399509197509550935091506131bd908890613a48565b6001600160a01b038a166000908152600360209081526040808320939093556002905220546131ed908790613a48565b6001600160a01b03808b1660009081526002602052604080822093909355908a168152205461321d908690613a78565b6001600160a01b03891660009081526002602052604090205561323f81613423565b6132498483613584565b876001600160a01b0316896001600160a01b0316600080516020613d438339815191528560405161327c91815260200190565b60405180910390a3505050505050505050565b6000806000806000806132a18761271d565b6001600160a01b038f16600090815260026020526040902054959b509399509197509550935091506132d4908790613a48565b6001600160a01b03808b16600090815260026020908152604080832094909455918b1681526003909152205461330b908490613a78565b6001600160a01b03891660009081526003602090815260408083209390935560029052205461321d908690613a78565b60008060008060008061334d8761271d565b6001600160a01b038f16600090815260026020526040902054959b509399509197509550935091506131ed908790613a48565b6000806000806000806133928761271d565b6001600160a01b038f16600090815260036020526040902054959b509399509197509550935091506133c5908890613a48565b6001600160a01b038a166000908152600360209081526040808320939093556002905220546132d4908790613a48565b60006064601a548361340791906139d2565b610c1991906139f1565b60006064601c548361340791906139d2565b600061342d6126fa565b90506000600961343e8460076139d2565b61344891906139f1565b90506134548184613a48565b9250600061346283856139d2565b6014546001600160a01b031660009081526002602052604090205490915061348b908290613a78565b601480546001600160a01b03908116600090815260026020908152604080832095909555925490911681526006909152205460ff1615613507576014546001600160a01b03166000908152600360205260409020546134eb908590613a78565b6014546001600160a01b03166000908152600360205260409020555b61351183836139d2565b3060009081526002602052604090205490915061352f908290613a78565b3060009081526002602090815260408083209390935560069052205460ff1615611f54573060009081526003602052604090205461356e908390613a78565b3060009081526003602052604090205550505050565b816012546135929190613a48565b6012556013546114db908290613a78565b604051806101400160405280600081526020016000815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b038116811461361457600080fd5b50565b60006020828403121561362957600080fd5b81356111bc816135ff565b600060208083528351808285015260005b8181101561366157858101830151858201604001528201613645565b81811115613673576000604083870101525b50601f01601f1916929092016040019392505050565b6000806040838503121561369c57600080fd5b82356136a7816135ff565b946020939093013593505050565b6001600160a01b0391909116815260200190565b6000806000606084860312156136de57600080fd5b83356136e9816135ff565b925060208401356136f9816135ff565b929592945050506040919091013590565b6000610140820190508251825260208301516020830152604083015161373b60408401826001600160a01b03169052565b50606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015160e083015261010080840151818401525061012080840151818401525092915050565b60006020828403121561379e57600080fd5b5035919050565b60008083601f8401126137b757600080fd5b50813567ffffffffffffffff8111156137cf57600080fd5b6020830191508360208260051b85010111156137ea57600080fd5b9250929050565b6000806000806040858703121561380757600080fd5b843567ffffffffffffffff8082111561381f57600080fd5b61382b888389016137a5565b9096509450602087013591508082111561384457600080fd5b50613851878288016137a5565b95989497509550505050565b801515811461361457600080fd5b6000806040838503121561387e57600080fd5b8235915060208301356138908161385d565b809150509250929050565b600080604083850312156138ae57600080fd5b82356138b9816135ff565b91506020830135613890816135ff565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111561391a578160001904821115613900576139006138c9565b8085161561390d57918102915b93841c93908002906138e4565b509250929050565b60008261393157506001610c19565b8161393e57506000610c19565b8160018114613954576002811461395e5761397a565b6001915050610c19565b60ff84111561396f5761396f6138c9565b50506001821b610c19565b5060208310610133831016604e8410600b841016171561399d575081810a610c19565b6139a783836138df565b80600019048211156139bb576139bb6138c9565b029392505050565b60006111bc60ff841683613922565b60008160001904831182151516156139ec576139ec6138c9565b500290565b600082613a0e57634e487b7160e01b600052601260045260246000fd5b500490565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600082821015613a5a57613a5a6138c9565b500390565b600060208284031215613a7157600080fd5b5051919050565b60008219821115613a8b57613a8b6138c9565b500190565b634e487b7160e01b600052603260045260246000fd5b600060018201613ab857613ab86138c9565b5060010190565b6020808252601b908201527a1058d8dbdd5b9d081a5cc8185b1c9958591e48195e18db1d591959602a1b604082015260600190565b634e487b7160e01b600052603160045260246000fd5b600060208284031215613b1c57600080fd5b81516111bc816135ff565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b600080600060608486031215613b7757600080fd5b8351925060208401519150604084015190509250925092565b600060208284031215613ba257600080fd5b81516111bc8161385d565b634e487b7160e01b600052604160045260246000fd5b600081518084526020808501945080840160005b83811015613bfc5781516001600160a01b031687529582019590820190600101613bd7565b509495945050505050565b828152604060208201526000613c206040830184613bc3565b949350505050565b60006020808385031215613c3b57600080fd5b825167ffffffffffffffff80821115613c5357600080fd5b818501915085601f830112613c6757600080fd5b815181811115613c7957613c79613bad565b8060051b604051601f19603f83011681018181108582111715613c9e57613c9e613bad565b604052918252848201925083810185019188831115613cbc57600080fd5b938501935b82851015613cda57845184529385019392850192613cc1565b98975050505050505050565b85815284602082015260a060408201526000613d0560a0830186613bc3565b6001600160a01b039490941660608301525060800152939250505056fe0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488dddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa264697066735822122021d1c538158cfb01099ba5e6cdc23ed2f031f3653274d2744886880d49ad235664736f6c634300080d0033

Deployed Bytecode

0x60806040526004361061035d5760003560e01c806367b5096a116101bd578063a7a63722116100f8578063d49d51811161009b578063d49d518114610a49578063dd62ed3e14610a5f578063dee601a814610aa5578063e17901d814610ac5578063ea2f0b3714610adb578063ecc9c0b314610afb578063ed5091c814610b10578063f2fde38b14610b30578063f63821f614610b5057600080fd5b8063a7a6372214610971578063a8eb226d14610987578063a9059cbb146109a7578063b782dd2d146109c7578063c5f956af146109dd578063ca33e64c146109fd578063d00efb2f14610a1d578063d12a768814610a3357600080fd5b806388f820201161016057806388f82020146108805780638da5cb5b146108b957806395d89b41146108ce5780639c01a401146108fe578063a3f8a32914610914578063a457c2d714610929578063a4b45c0014610949578063a63342311461096957600080fd5b806367b5096a1461079a5780636bc87c3a146107ba5780636ff86162146107d057806370a08231146107e5578063715018a61461080557806372bb61be1461081a57806381946a251461082f578063845dc2d21461086a57600080fd5b80633685d4191161029857806349bd5a5e1161023b57806349bd5a5e146106805780634aa46a35146106a057806350e7c4a2146106c057806352390c02146106d65780635342acb4146106f657806358fa63ca1461072f5780635b897c941461074457806360ffe08614610764578063638b1b141461077a57600080fd5b80633685d4191461058857806339509351146105a85780633b124fe7146105c85780633b77f0eb146105de5780633bd5d173146105f35780633c09f7de14610613578063437823ec146106405780634549b0391461066057600080fd5b806323b872dd1161030057806323b872dd1461048a57806326d51091146104aa57806329e04b4a146104cc5780632a360631146104ec5780632baa8a881461050c5780632d8381191461052c578063302707cb1461054c578063313ce5671461056c57600080fd5b806301cfbeb7146103695780630305caff1461039157806306fdde03146103b3578063095ea7b3146103ec57806313114a9d1461041c5780631694505e1461043157806318160ddd1461046057806321fb7a751461047557600080fd5b3661036457005b600080fd5b34801561037557600080fd5b5061037e610b80565b6040519081526020015b60405180910390f35b34801561039d57600080fd5b506103b16103ac366004613617565b610bb4565b005b3480156103bf57600080fd5b5060408051808201909152600781526653686962616e6160c81b60208201525b6040516103889190613634565b3480156103f857600080fd5b5061040c610407366004613689565b610c08565b6040519015158152602001610388565b34801561042857600080fd5b5060135461037e565b34801561043d57600080fd5b50610453600080516020613d2383398151915281565b60405161038891906136b5565b34801561046c57600080fd5b5061037e610c1f565b34801561048157600080fd5b506103b1610c40565b34801561049657600080fd5b5061040c6104a53660046136c9565b610ccf565b3480156104b657600080fd5b506104bf610d22565b604051610388919061370a565b3480156104d857600080fd5b506103b16104e736600461378c565b610e20565b3480156104f857600080fd5b506103b1610507366004613617565b610ec3565b34801561051857600080fd5b506103b16105273660046137f1565b610f6e565b34801561053857600080fd5b5061037e61054736600461378c565b61113f565b34801561055857600080fd5b506103b1610567366004613617565b6111c3565b34801561057857600080fd5b5060405160098152602001610388565b34801561059457600080fd5b506103b16105a3366004613617565b61124e565b3480156105b457600080fd5b5061040c6105c3366004613689565b6113d0565b3480156105d457600080fd5b5061037e601a5481565b3480156105ea57600080fd5b5060185461037e565b3480156105ff57600080fd5b506103b161060e36600461378c565b611407565b34801561061f57600080fd5b5061037e61062e366004613617565b600d6020526000908152604090205481565b34801561064c57600080fd5b506103b161065b366004613617565b6114e2565b34801561066c57600080fd5b5061037e61067b36600461386b565b611530565b34801561068c57600080fd5b50601e54610453906001600160a01b031681565b3480156106ac57600080fd5b506104536106bb36600461378c565b6115d4565b3480156106cc57600080fd5b5061037e60105481565b3480156106e257600080fd5b506103b16106f1366004613617565b6115e1565b34801561070257600080fd5b5061040c610711366004613617565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561073b57600080fd5b50610453600081565b34801561075057600080fd5b506103b161075f366004613689565b611704565b34801561077057600080fd5b5061037e600e5481565b34801561078657600080fd5b50601654610453906001600160a01b031681565b3480156107a657600080fd5b506103b16107b536600461378c565b611780565b3480156107c657600080fd5b5061037e601c5481565b3480156107dc57600080fd5b506103b1611826565b3480156107f157600080fd5b5061037e610800366004613617565b6118ae565b34801561081157600080fd5b506103b161190d565b34801561082657600080fd5b5061037e611981565b34801561083b57600080fd5b5061084f61084a366004613617565b6119c5565b60408051825181526020928301519281019290925201610388565b34801561087657600080fd5b5061037e600c5481565b34801561088c57600080fd5b5061040c61089b366004613617565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156108c557600080fd5b50610453611a16565b3480156108da57600080fd5b5060408051808201909152600781526653484942414e4160c81b60208201526103df565b34801561090a57600080fd5b5061037e60185481565b34801561092057600080fd5b5061037e611a25565b34801561093557600080fd5b5061040c610944366004613689565b611a31565b34801561095557600080fd5b506103b161096436600461389b565b611a70565b6103b1611ac8565b34801561097d57600080fd5b5061037e600f5481565b34801561099357600080fd5b506103b16109a236600461389b565b611e2d565b3480156109b357600080fd5b5061040c6109c2366004613689565b611f5a565b3480156109d357600080fd5b5061037e601f5481565b3480156109e957600080fd5b50601554610453906001600160a01b031681565b348015610a0957600080fd5b50601454610453906001600160a01b031681565b348015610a2957600080fd5b5061037e60115481565b348015610a3f57600080fd5b5061037e60205481565b348015610a5557600080fd5b5061037e60001981565b348015610a6b57600080fd5b5061037e610a7a36600461389b565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b348015610ab157600080fd5b506103b1610ac036600461378c565b611f67565b348015610ad157600080fd5b5061037e60175481565b348015610ae757600080fd5b506103b1610af6366004613617565b611fb1565b348015610b0757600080fd5b506104bf611ffc565b348015610b1c57600080fd5b50600b54610453906001600160a01b031681565b348015610b3c57600080fd5b506103b1610b4b366004613617565b61210b565b348015610b5c57600080fd5b5061040c610b6b366004613617565b60076020526000908152604090205460ff1681565b60c8610b8e6009600a6139c3565b610b9c9063041cdb406139d2565b610ba79060036139d2565b610bb191906139f1565b81565b6000546001600160a01b03163314610be75760405162461bcd60e51b8152600401610bde90613a13565b60405180910390fd5b6001600160a01b03166000908152600760205260409020805460ff19169055565b6000610c153384846121f5565b5060015b92915050565b6000610c2d6009600a6139c3565b610c3b9063041cdb406139d2565b905090565b6016546001600160a01b0316331480610c715750610c5c611a16565b6001600160a01b0316336001600160a01b0316145b610c7a57600080fd5b6016546019546040516001600160a01b039092169181156108fc0291906000818181858888f19350505050158015610cb6573d6000803e3d6000fd5b5060198054906000610cc88380613a48565b9091555050565b6000610cdc848484612256565b6001600160a01b03841660009081526004602090815260408083203380855292529091205490610d17908690610d128685613a48565b6121f5565b506001949350505050565b610d2a6135a3565b60408051610140810182526013548152600f546020820152600b546001600160a01b031691810191909152600c546060820152600e54608082015260a08101610d7360096126f0565b815260105460208201526018546040808301919091526017546060830152601e5490516370a0823160e01b815260809092019173c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2916370a0823191610dd8916001600160a01b0316906004016136b5565b602060405180830381865afa158015610df5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e199190613a5f565b9052919050565b6000546001600160a01b03163314610e4a5760405162461bcd60e51b8152600401610bde90613a13565b6103e8610e596009600a6139c3565b610e679063041cdb406139d2565b610e7191906139f1565b811015610ebe5760405162461bcd60e51b815260206004820152601b60248201527a5b302e312c4d415855494e545f3235365d202520737570706c792960281b6044820152606401610bde565b602055565b6000546001600160a01b03163314610eed5760405162461bcd60e51b8152600401610bde90613a13565b601154610efb90603c613a78565b431115610f4a5760405162461bcd60e51b815260206004820152601c60248201527f416e7469626f74206f6e6c7920666972737420363020626c6f636b73000000006044820152606401610bde565b6001600160a01b03166000908152600760205260409020805460ff19166001179055565b6000546001600160a01b03163314610f985760405162461bcd60e51b8152600401610bde90613a13565b600080610fa36126fa565b90503360005b868110156110d257600083878784818110610fc657610fc6613a90565b90506020020135610fd791906139d2565b905080600260008b8b86818110610ff057610ff0613a90565b90506020020160208101906110059190613617565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008282546110349190613a78565b9091555061104490508186613a78565b945088888381811061105857611058613a90565b905060200201602081019061106d9190613617565b6001600160a01b0316836001600160a01b0316600080516020613d438339815191528989868181106110a1576110a1613a90565b905060200201356040516110b791815260200190565b60405180910390a350806110ca81613aa6565b915050610fa9565b506001600160a01b038116600090815260026020526040812080548592906110fb908490613a48565b909155505060405183906001600160a01b038316907f2549808b266e4863926470d547842fd62d0a3b1d32cd23d5e8ac5190741c254590600090a350505050505050565b60006012548211156111a65760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610bde565b60006111b06126fa565b90506111bc81846139f1565b9392505050565b6000546001600160a01b031633146111ed5760405162461bcd60e51b8152600401610bde90613a13565b806001600160a01b03166108fc6018546019546017544761120e9190613a48565b6112189190613a48565b6112229190613a48565b6040518115909202916000818181858888f1935050505015801561124a573d6000803e3d6000fd5b5050565b6000546001600160a01b031633146112785760405162461bcd60e51b8152600401610bde90613a13565b6001600160a01b03811660009081526006602052604090205460ff166112b05760405162461bcd60e51b8152600401610bde90613abf565b60005b60085481101561124a57816001600160a01b0316600882815481106112da576112da613a90565b6000918252602090912001546001600160a01b0316036113be576008805461130490600190613a48565b8154811061131457611314613a90565b600091825260209091200154600880546001600160a01b03909216918390811061134057611340613a90565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600382526040808220829055600690925220805460ff19169055600880548061139857611398613af4565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b806113c881613aa6565b9150506112b3565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610c15918590610d12908690613a78565b3360009081526006602052604090205460ff161561147c5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610bde565b60006114878261271d565b5050336000908152600260205260409020549394506114ac938593509150613a489050565b336000908152600260205260409020556012546114ca908290613a48565b6012556013546114db908390613a78565b6013555050565b6000546001600160a01b0316331461150c5760405162461bcd60e51b8152600401610bde90613a13565b6001600160a01b03166000908152600560205260409020805460ff19166001179055565b600061153e6009600a6139c3565b61154c9063041cdb406139d2565b83111561159b5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610bde565b816115ba5760006115ab8461271d565b50939550610c19945050505050565b60006115c58461271d565b50929550610c19945050505050565b6000610c1960098361276c565b6000546001600160a01b0316331461160b5760405162461bcd60e51b8152600401610bde90613a13565b6001600160a01b03811660009081526006602052604090205460ff16156116445760405162461bcd60e51b8152600401610bde90613abf565b6001600160a01b0381166000908152600260205260409020541561169e576001600160a01b0381166000908152600260205260409020546116849061113f565b6001600160a01b0382166000908152600360205260409020555b6001600160a01b03166000818152600660205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6000546001600160a01b0316331461172e5760405162461bcd60e51b8152600401610bde90613a13565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015611764573d6000803e3d6000fd5b5080601760008282546117779190613a48565b90915550505050565b6000546001600160a01b031633146117aa5760405162461bcd60e51b8152600401610bde90613a13565b60c86117b86009600a6139c3565b6117c69063041cdb406139d2565b6117d19060036139d2565b6117db91906139f1565b8110156118215760405162461bcd60e51b81526020600482015260146024820152735b312e352c204d415855494e545f3235365d202560601b6044820152606401610bde565b601f55565b6015546001600160a01b03163314806118575750611842611a16565b6001600160a01b0316336001600160a01b0316145b61186057600080fd5b6015546018546040516001600160a01b039092169181156108fc0291906000818181858888f1935050505015801561189c573d6000803e3d6000fd5b5060188054906000610cc88380613a48565b6001600160a01b03811660009081526006602052604081205460ff16156118eb57506001600160a01b031660009081526003602052604090205490565b6001600160a01b038216600090815260026020526040902054610c199061113f565b6000546001600160a01b031633146119375760405162461bcd60e51b8152600401610bde90613a13565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6016546000906001600160a01b03163314806119b557506119a0611a16565b6001600160a01b0316336001600160a01b0316145b6119be57600080fd5b5060195490565b604080518082019091526000808252602082015260405180604001604052806119ed846118ae565b81526001600160a01b039093166000908152600d60209081526040909120549301929092525090565b6000546001600160a01b031690565b6000610c3b60096126f0565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091611a669085610d128685613a48565b5060019392505050565b6000546001600160a01b03163314611a9a5760405162461bcd60e51b8152600401610bde90613a13565b601580546001600160a01b039384166001600160a01b03199182161790915560168054929093169116179055565b6000546001600160a01b03163314611af25760405162461bcd60e51b8152600401610bde90613a13565b60c8611b006009600a6139c3565b611b0e9063041cdb406139d2565b611b199060036139d2565b611b2391906139f1565b601f5410611b5e5760405162461bcd60e51b815260206004820152600860248201526713185d5b98da195960c21b6044820152606401610bde565b60c8611b6c6009600a6139c3565b611b7a9063041cdb406139d2565b611b859060036139d2565b611b8f91906139f1565b601f556000611b9c6126fa565b6064611baa6009600a6139c3565b611bb89063041cdb406139d2565b611bc39060056139d2565b611bcd91906139f1565b611bd6336118ae565b611be09190613a48565b611bea91906139d2565b33600090815260026020526040812080549293508392909190611c0e908490613a48565b90915550503060009081526002602052604081208054839290611c32908490613a78565b9091555030905033600080516020613d43833981519152611c528461113f565b60405190815260200160405180910390a3600080516020613d238339815191526001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611caf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cd39190613b0a565b6040516364e329cb60e11b815230600482015273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc260248201526001600160a01b03919091169063c9c65396906044016020604051808303816000875af1158015611d35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d599190613b0a565b601e80546001600160a01b0319166001600160a01b0392909216919091179055611d9430600080516020613d238339815191526000196121f5565b600080516020613d2383398151915263f305d7193430611db38561113f565b600080611dbe611a16565b426040518863ffffffff1660e01b8152600401611de096959493929190613b27565b60606040518083038185885af1158015611dfe573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611e239190613b62565b5050436011555050565b6000546001600160a01b03163314611e575760405162461bcd60e51b8152600401610bde90613a13565b306001600160a01b03831603611e6c57600080fd5b6040516370a0823160e01b815282906001600160a01b0382169063a9059cbb90849083906370a0823190611ea49030906004016136b5565b602060405180830381865afa158015611ec1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee59190613a5f565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015611f30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f549190613b90565b50505050565b6000610c15338484612256565b6000546001600160a01b03163314611f915760405162461bcd60e51b8152600401610bde90613a13565b6006811015611f9f57600080fd5b611fab81610e106139d2565b600f5550565b6000546001600160a01b03163314611fdb5760405162461bcd60e51b8152600401610bde90613a13565b6001600160a01b03166000908152600560205260409020805460ff19169055565b6120046135a3565b60408051610140810182526013548152600f546020820152600b546001600160a01b031691810191909152600c546060820152600e54608082015260a0810161204d60096126f0565b81526020016010548152602001612065601854612778565b8152602001612075601754612778565b8152601e546040516370a0823160e01b8152602090920191610e199173c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2916370a08231916120c5916001600160a01b03909116906004016136b5565b602060405180830381865afa1580156120e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121069190613a5f565b612778565b6000546001600160a01b031633146121355760405162461bcd60e51b8152600401610bde90613a13565b6001600160a01b03811661219a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bde565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000811161229d5760405162461bcd60e51b815260206004820152601460248201527305472616e73666572206d6f7265207468616e20360641b6044820152606401610bde565b6001600160a01b03831660009081526007602052604090205460ff16156122f05760405162461bcd60e51b81526020600482015260076024820152664e6f20626f747360c81b6044820152606401610bde565b6001600160a01b03831660009081526005602052604090205460019060ff168061233257506001600160a01b03831660009081526005602052604090205460ff165b1561233f57506000612432565b601f5460c86123506009600a6139c3565b61235e9063041cdb406139d2565b6123699060036139d2565b61237391906139f1565b8110156123ae5760405162461bcd60e51b81526020600482015260096024820152684c61756e6368696e6760b81b6044820152606401610bde565b600019811015612430578083111580156123f25750601e546001600160a01b03858116911614806123f2575080836123e5866118ae565b6123ef9190613a78565b11155b6124305760405162461bcd60e51b815260206004820152600f60248201526e1b585e151e0bdb585e15d85b1b195d608a1b6044820152606401610bde565b505b80156126e457600b54601e546001600160a01b0391821691908116908616036126405760408051600280825260608201835260009260208301908036833701905050905073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28160008151811061249e5761249e613a90565b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106124d2576124d2613a90565b6001600160a01b03909216602092830291909101909101526040516307c0329d60e21b8152600090600080516020613d2383398151915290631f00ca74906125209088908690600401613c07565b600060405180830381865afa15801561253d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526125659190810190613c28565b60008151811061257757612577613a90565b60200260200101519050600f54600e546125919190613a78565b421180156125a757506001600160a01b03831615155b156125f0576125b76009846128bf565b15156000036125cd576125cb6009846128e1565b505b600c80546001600160a01b0385166000908152600d602052604081209190915590555b600c5481111561263957856001600160a01b0316836001600160a01b03161461262f57600b80546001600160a01b0319166001600160a01b0388161790555b600c81905542600e555b50506126e2565b600b546001600160a01b039081169086160361267457600b80546001600160a01b03191690556000600c5542600e556126e2565b601e54600160a01b900460ff166126e257602054601454819061269f906001600160a01b03166118ae565b106126b2576126ad816128f6565b6126e0565b806126bc306118ae565b101580156126d257506001600160a01b03821615155b156126e0576126e081612a60565b505b505b611f5484848484612b7c565b6000610c19825490565b6000806000612707612cf3565b909250905061271681836139f1565b9250505090565b60008060008060008060008060006127348a612ed6565b92509250925060008060006127528d868661274d6126fa565b612f19565b919f909e50909c50959a5093985091965092945050505050565b60006111bc8383612f70565b6040805160028082526060820183526000928392919060208301908036833701905050905073a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48816000815181106127c5576127c5613a90565b60200260200101906001600160a01b031690816001600160a01b03168152505073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28160018151811061280d5761280d613a90565b6001600160a01b03909216602092830291909101909101526040516307c0329d60e21b8152600080516020613d2383398151915290631f00ca74906128589086908590600401613c07565b600060405180830381865afa158015612875573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261289d9190810190613c28565b6000815181106128af576128af613a90565b6020026020010151915050919050565b6001600160a01b038116600090815260018301602052604081205415156111bc565b60006111bc836001600160a01b038416612ff6565b601e805460ff60a01b1916600160a01b17905560006129136126fa565b61291d90836139d2565b6014546001600160a01b031660009081526002602052604081208054929350839290919061294c908490613a48565b90915550503060009081526002602052604081208054839290612970908490613a78565b90915550600090506129836002846139f1565b905060006129918285613a48565b90504761299d82613045565b60006129a98247613a48565b90506000841180156129bb5750600081115b15612a4b57600080516020613d2383398151915263f305d7198230876000806129e2611a16565b426040518863ffffffff1660e01b8152600401612a0496959493929190613b27565b60606040518083038185885af1158015612a22573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612a479190613b62565b5050505b5050601e805460ff60a01b1916905550505050565b601e805460ff60a01b1916600160a01b17905547612a7d82613045565b6000612a898247613a48565b90506007612a988260036139d2565b612aa291906139f1565b60186000828254612ab39190613a78565b90915550612ac490506007826139f1565b60196000828254612ad59190613a78565b9091555060079050612ae88260026139d2565b612af291906139f1565b60176000828254612b039190613a78565b9091555060009050612b166007836139f1565b600b546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015612b51573d6000803e3d6000fd5b508060106000828254612b649190613a78565b9091555050601e805460ff60a01b1916905550505050565b80612b8957612b8961314a565b6001600160a01b03841660009081526006602052604090205460ff168015612bca57506001600160a01b03831660009081526006602052604090205460ff16155b15612bdf57612bda848484613178565b612cdd565b6001600160a01b03841660009081526006602052604090205460ff16158015612c2057506001600160a01b03831660009081526006602052604090205460ff165b15612c3057612bda84848461328f565b6001600160a01b03841660009081526006602052604090205460ff16158015612c7257506001600160a01b03831660009081526006602052604090205460ff16155b15612c8257612bda84848461333b565b6001600160a01b03841660009081526006602052604090205460ff168015612cc257506001600160a01b03831660009081526006602052604090205460ff165b15612cd257612bda848484613380565b612cdd84848461333b565b80611f5457611f54601b54601a55601d54601c55565b601254600090819081612d086009600a6139c3565b612d169063041cdb406139d2565b905060005b600854811015612e7757826002600060088481548110612d3d57612d3d613a90565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612da85750816003600060088481548110612d8157612d81613a90565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612dd557601254612dbc6009600a6139c3565b612dca9063041cdb406139d2565b945094505050509091565b6002600060088381548110612dec57612dec613a90565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612e1b9084613a48565b92506003600060088381548110612e3457612e34613a90565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612e639083613a48565b915080612e6f81613aa6565b915050612d1b565b50612e846009600a6139c3565b612e929063041cdb406139d2565b601254612e9f91906139f1565b821015612ecd57601254612eb56009600a6139c3565b612ec39063041cdb406139d2565b9350935050509091565b90939092509050565b600080600080612ee5856133f5565b90506000612ef286613411565b9050600081612f018489613a48565b612f0b9190613a48565b979296509094509092505050565b6000808080612f2885896139d2565b90506000612f3686896139d2565b90506000612f4487896139d2565b9050600081612f538486613a48565b612f5d9190613a48565b939b939a50919850919650505050505050565b81546000908210612fce5760405162461bcd60e51b815260206004820152602260248201527f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e604482015261647360f01b6064820152608401610bde565b826000018281548110612fe357612fe3613a90565b9060005260206000200154905092915050565b600081815260018301602052604081205461303d57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610c19565b506000610c19565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061307a5761307a613a90565b60200260200101906001600160a01b031690816001600160a01b03168152505073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2816001815181106130c2576130c2613a90565b6001600160a01b039092166020928302919091019091015260405163791ac94760e01b8152600080516020613d238339815191529063791ac94790613114908590600090869030904290600401613ce6565b600060405180830381600087803b15801561312e57600080fd5b505af1158015613142573d6000803e3d6000fd5b505050505050565b601a5415801561315a5750601c54155b1561316157565b601a8054601b55601c8054601d5560009182905555565b60008060008060008061318a8761271d565b6001600160a01b038f16600090815260036020526040902054959b509399509197509550935091506131bd908890613a48565b6001600160a01b038a166000908152600360209081526040808320939093556002905220546131ed908790613a48565b6001600160a01b03808b1660009081526002602052604080822093909355908a168152205461321d908690613a78565b6001600160a01b03891660009081526002602052604090205561323f81613423565b6132498483613584565b876001600160a01b0316896001600160a01b0316600080516020613d438339815191528560405161327c91815260200190565b60405180910390a3505050505050505050565b6000806000806000806132a18761271d565b6001600160a01b038f16600090815260026020526040902054959b509399509197509550935091506132d4908790613a48565b6001600160a01b03808b16600090815260026020908152604080832094909455918b1681526003909152205461330b908490613a78565b6001600160a01b03891660009081526003602090815260408083209390935560029052205461321d908690613a78565b60008060008060008061334d8761271d565b6001600160a01b038f16600090815260026020526040902054959b509399509197509550935091506131ed908790613a48565b6000806000806000806133928761271d565b6001600160a01b038f16600090815260036020526040902054959b509399509197509550935091506133c5908890613a48565b6001600160a01b038a166000908152600360209081526040808320939093556002905220546132d4908790613a48565b60006064601a548361340791906139d2565b610c1991906139f1565b60006064601c548361340791906139d2565b600061342d6126fa565b90506000600961343e8460076139d2565b61344891906139f1565b90506134548184613a48565b9250600061346283856139d2565b6014546001600160a01b031660009081526002602052604090205490915061348b908290613a78565b601480546001600160a01b03908116600090815260026020908152604080832095909555925490911681526006909152205460ff1615613507576014546001600160a01b03166000908152600360205260409020546134eb908590613a78565b6014546001600160a01b03166000908152600360205260409020555b61351183836139d2565b3060009081526002602052604090205490915061352f908290613a78565b3060009081526002602090815260408083209390935560069052205460ff1615611f54573060009081526003602052604090205461356e908390613a78565b3060009081526003602052604090205550505050565b816012546135929190613a48565b6012556013546114db908290613a78565b604051806101400160405280600081526020016000815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b038116811461361457600080fd5b50565b60006020828403121561362957600080fd5b81356111bc816135ff565b600060208083528351808285015260005b8181101561366157858101830151858201604001528201613645565b81811115613673576000604083870101525b50601f01601f1916929092016040019392505050565b6000806040838503121561369c57600080fd5b82356136a7816135ff565b946020939093013593505050565b6001600160a01b0391909116815260200190565b6000806000606084860312156136de57600080fd5b83356136e9816135ff565b925060208401356136f9816135ff565b929592945050506040919091013590565b6000610140820190508251825260208301516020830152604083015161373b60408401826001600160a01b03169052565b50606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015160e083015261010080840151818401525061012080840151818401525092915050565b60006020828403121561379e57600080fd5b5035919050565b60008083601f8401126137b757600080fd5b50813567ffffffffffffffff8111156137cf57600080fd5b6020830191508360208260051b85010111156137ea57600080fd5b9250929050565b6000806000806040858703121561380757600080fd5b843567ffffffffffffffff8082111561381f57600080fd5b61382b888389016137a5565b9096509450602087013591508082111561384457600080fd5b50613851878288016137a5565b95989497509550505050565b801515811461361457600080fd5b6000806040838503121561387e57600080fd5b8235915060208301356138908161385d565b809150509250929050565b600080604083850312156138ae57600080fd5b82356138b9816135ff565b91506020830135613890816135ff565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111561391a578160001904821115613900576139006138c9565b8085161561390d57918102915b93841c93908002906138e4565b509250929050565b60008261393157506001610c19565b8161393e57506000610c19565b8160018114613954576002811461395e5761397a565b6001915050610c19565b60ff84111561396f5761396f6138c9565b50506001821b610c19565b5060208310610133831016604e8410600b841016171561399d575081810a610c19565b6139a783836138df565b80600019048211156139bb576139bb6138c9565b029392505050565b60006111bc60ff841683613922565b60008160001904831182151516156139ec576139ec6138c9565b500290565b600082613a0e57634e487b7160e01b600052601260045260246000fd5b500490565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600082821015613a5a57613a5a6138c9565b500390565b600060208284031215613a7157600080fd5b5051919050565b60008219821115613a8b57613a8b6138c9565b500190565b634e487b7160e01b600052603260045260246000fd5b600060018201613ab857613ab86138c9565b5060010190565b6020808252601b908201527a1058d8dbdd5b9d081a5cc8185b1c9958591e48195e18db1d591959602a1b604082015260600190565b634e487b7160e01b600052603160045260246000fd5b600060208284031215613b1c57600080fd5b81516111bc816135ff565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b600080600060608486031215613b7757600080fd5b8351925060208401519150604084015190509250925092565b600060208284031215613ba257600080fd5b81516111bc8161385d565b634e487b7160e01b600052604160045260246000fd5b600081518084526020808501945080840160005b83811015613bfc5781516001600160a01b031687529582019590820190600101613bd7565b509495945050505050565b828152604060208201526000613c206040830184613bc3565b949350505050565b60006020808385031215613c3b57600080fd5b825167ffffffffffffffff80821115613c5357600080fd5b818501915085601f830112613c6757600080fd5b815181811115613c7957613c79613bad565b8060051b604051601f19603f83011681018181108582111715613c9e57613c9e613bad565b604052918252848201925083810185019188831115613cbc57600080fd5b938501935b82851015613cda57845184529385019392850192613cc1565b98975050505050505050565b85815284602082015260a060408201526000613d0560a0830186613bc3565b6001600160a01b039490941660608301525060800152939250505056fe0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488dddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa264697066735822122021d1c538158cfb01099ba5e6cdc23ed2f031f3653274d2744886880d49ad235664736f6c634300080d0033

Deployed Bytecode Sourcemap

8373:25515:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10639:72;;;;;;;;;;;;;:::i;:::-;;;160:25:1;;;148:2;133:18;10639:72:0;;;;;;;;16574:111;;;;;;;;;;-1:-1:-1;16574:111:0;;;;;:::i;:::-;;:::i;:::-;;11345:85;;;;;;;;;;-1:-1:-1;11417:5:0;;;;;;;;;;;;-1:-1:-1;;;11417:5:0;;;;11345:85;;;;;;;:::i;12267:161::-;;;;;;;;;;-1:-1:-1;12267:161:0;;;;;:::i;:::-;;:::i;:::-;;;1671:14:1;;1664:22;1646:41;;1634:2;1619:18;12267:161:0;1506:187:1;13244:89:0;;;;;;;;;;-1:-1:-1;13315:10:0;;13244:89;;10332:111;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10332:111:0;;;;;;;;;:::i;11628:97::-;;;;;;;;;;;;;:::i;27692:239::-;;;;;;;;;;;;;:::i;12436:306::-;;;;;;;;;;-1:-1:-1;12436:306:0;;;;;:::i;:::-;;:::i;32488:340::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;15608:271::-;;;;;;;;;;-1:-1:-1;15608:271:0;;;;;:::i;:::-;;:::i;16371:191::-;;;;;;;;;;-1:-1:-1;16371:191:0;;;;;:::i;:::-;;:::i;33243:605::-;;;;;;;;;;-1:-1:-1;33243:605:0;;;;;:::i;:::-;;:::i;14145:250::-;;;;;;;;;;-1:-1:-1;14145:250:0;;;;;:::i;:::-;;:::i;16168:191::-;;;;;;;;;;-1:-1:-1;16168:191:0;;;;;:::i;:::-;;:::i;11535:85::-;;;;;;;;;;-1:-1:-1;11535:85:0;;10131:1;5143:36:1;;5131:2;5116:18;11535:85:0;5001:184:1;14746:479:0;;;;;;;;;;-1:-1:-1;14746:479:0;;;;;:::i;:::-;;:::i;12750:213::-;;;;;;;;;;-1:-1:-1;12750:213:0;;;;;:::i;:::-;;:::i;10145:26::-;;;;;;;;;;;;;;;;27586:100;;;;;;;;;;-1:-1:-1;27665:13:0;;27586:100;;13345:346;;;;;;;;;;-1:-1:-1;13345:346:0;;;;;:::i;:::-;;:::i;9026:48::-;;;;;;;;;;-1:-1:-1;9026:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;15363:113;;;;;;;;;;-1:-1:-1;15363:113:0;;;;;:::i;:::-;;:::i;13699:438::-;;;;;;;;;;-1:-1:-1;13699:438:0;;;;;:::i;:::-;;:::i;10475:28::-;;;;;;;;;;-1:-1:-1;10475:28:0;;;;-1:-1:-1;;;;;10475:28:0;;;31424:121;;;;;;;;;;-1:-1:-1;31424:121:0;;;;;:::i;:::-;;:::i;9194:30::-;;;;;;;;;;;;;;;;14403:335;;;;;;;;;;-1:-1:-1;14403:335:0;;;;;:::i;:::-;;:::i;21940:125::-;;;;;;;;;;-1:-1:-1;21940:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;22030:27:0;22006:4;22030:27;;;:18;:27;;;;;;;;;21940:125;8900:43;;;;;;;;;;;;8939:3;8900:43;;27125:222;;;;;;;;;;-1:-1:-1;27125:222:0;;;;;:::i;:::-;;:::i;9087:35::-;;;;;;;;;;;;;;;;9655:46;;;;;;;;;;-1:-1:-1;9655:46:0;;;;-1:-1:-1;;;;;9655:46:0;;;17747:258;;;;;;;;;;-1:-1:-1;17747:258:0;;;;;:::i;:::-;;:::i;10231:32::-;;;;;;;;;;;;;;;;27359:221;;;;;;;;;;;;;:::i;11733:198::-;;;;;;;;;;-1:-1:-1;11733:198:0;;;;;:::i;:::-;;:::i;7145:148::-;;;;;;;;;;;;;:::i;27937:183::-;;;;;;;;;;;;;:::i;32319:161::-;;;;;;;;;;-1:-1:-1;32319:161:0;;;;;:::i;:::-;;:::i;:::-;;;;6055:13:1;;6037:32;;6125:4;6113:17;;;6107:24;6085:20;;;6078:54;;;;6010:18;32319:161:0;5835:303:1;8987:32:0;;;;;;;;;;;;;;;;15233:122;;;;;;;;;;-1:-1:-1;15233:122:0;;;;;:::i;:::-;-1:-1:-1;;;;;15327:20:0;15303:4;15327:20;;;:11;:20;;;;;;;;;15233:122;6933:79;;;;;;;;;;;;;:::i;11438:89::-;;;;;;;;;;-1:-1:-1;11512:7:0;;;;;;;;;;;;-1:-1:-1;;;11512:7:0;;;;11438:89;;9922:28;;;;;;;;;;;;;;;;31310:106;;;;;;;;;;;;;:::i;12971:265::-;;;;;;;;;;-1:-1:-1;12971:265:0;;;;;:::i;:::-;;:::i;18013:203::-;;;;;;;;;;-1:-1:-1;18013:203:0;;;;;:::i;:::-;;:::i;16697:1038::-;;;:::i;9133:50::-;;;;;;;;;;;;;;;;15891:265;;;;;;;;;;-1:-1:-1;15891:265:0;;;;;:::i;:::-;;:::i;11939:167::-;;;;;;;;;;-1:-1:-1;11939:167:0;;;;;:::i;:::-;;:::i;10551:38::-;;;;;;;;;;;;;;;;9576:75;;;;;;;;;;-1:-1:-1;9576:75:0;;;;-1:-1:-1;;;;;9576:75:0;;;9488:81;;;;;;;;;;-1:-1:-1;9488:81:0;;;;-1:-1:-1;;;;;9488:81:0;;;9237:26;;;;;;;;;;;;;;;;10730:61;;;;;;;;;;;;;;;;9275:41;;;;;;;;;;-1:-1:-1;9275:41:0;-1:-1:-1;;9275:41:0;;12114:145;;;;;;;;;;-1:-1:-1;12114:145:0;;;;;:::i;:::-;-1:-1:-1;;;;;12224:18:0;;;12197:7;12224:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;12114:145;18224:206;;;;;;;;;;-1:-1:-1;18224:206:0;;;;;:::i;:::-;;:::i;9888:27::-;;;;;;;;;;;;;;;;15488:112;;;;;;;;;;-1:-1:-1;15488:112:0;;;;;:::i;:::-;;:::i;32834:396::-;;;;;;;;;;;;;:::i;8953:27::-;;;;;;;;;;-1:-1:-1;8953:27:0;;;;-1:-1:-1;;;;;8953:27:0;;;7301:244;;;;;;;;;;-1:-1:-1;7301:244:0;;;;;:::i;:::-;;:::i;8706:42::-;;;;;;;;;;-1:-1:-1;8706:42:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;10639:72;10708:3;9371:13;10131:1;9371:2;:13;:::i;:::-;9358:26;;:10;:26;:::i;:::-;10694:11;;:1;:11;:::i;:::-;:17;;;;:::i;:::-;10639:72;:::o;16574:111::-;7060:6;;-1:-1:-1;;;;;7060:6:0;7070:10;7060:20;7052:65;;;;-1:-1:-1;;;7052:65:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;16648:21:0::1;16672:5;16648:21:::0;;;:10:::1;:21;::::0;;;;:29;;-1:-1:-1;;16648:29:0::1;::::0;;16574:111::o;12267:161::-;12344:4;12361:37;12370:10;12382:7;12391:6;12361:8;:37::i;:::-;-1:-1:-1;12416:4:0;12267:161;;;;;:::o;11628:97::-;11683:7;9371:13;10131:1;9371:2;:13;:::i;:::-;9358:26;;:10;:26;:::i;:::-;11703:14;;11628:97;:::o;27692:239::-;27767:18;;-1:-1:-1;;;;;27767:18:0;27753:10;:32;;:57;;;27803:7;:5;:7::i;:::-;-1:-1:-1;;;;;27789:21:0;:10;-1:-1:-1;;;;;27789:21:0;;27753:57;27745:66;;;;;;27830:18;;27859:16;;27822:54;;-1:-1:-1;;;;;27830:18:0;;;;27822:54;;;;;27859:16;27830:18;27822:54;27830:18;27822:54;27859:16;27830:18;27822:54;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27907:16:0;;;;27887;:36;27907:16;;27887:36;:::i;:::-;;;;-1:-1:-1;;27692:239:0:o;12436:306::-;12536:4;12553:36;12563:6;12571:9;12582:6;12553:9;:36::i;:::-;-1:-1:-1;;;;;12621:19:0;;12600:18;12621:19;;;:11;:19;;;;;;;;12641:10;12621:31;;;;;;;;;;12663:49;;12633:6;;12692:19;12705:6;12621:31;12692:19;:::i;:::-;12663:8;:49::i;:::-;-1:-1:-1;12730:4:0;;12436:306;-1:-1:-1;;;;12436:306:0:o;32488:340::-;32536:16;;:::i;:::-;32572:248;;;;;;;;32582:10;;32572:248;;32594:25;;32572:248;;;;32621:12;;-1:-1:-1;;;;;32621:12:0;32572:248;;;;;;;32649:17;;32572:248;;;;32668:20;;32572:248;;;;;;;32690:23;:14;:21;:23::i;:::-;32572:248;;32715:15;;32572:248;;;;32746:13;;32572:248;;;;;;;;32761:12;;32572:248;;;;32805:13;;32775:44;;-1:-1:-1;;;32775:44:0;;32572:248;;;;;9837:42;;32775:29;;:44;;-1:-1:-1;;;;;32805:13:0;;32775:44;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32572:248;;32565:255;32488:340;-1:-1:-1;32488:340:0:o;15608:271::-;7060:6;;-1:-1:-1;;;;;7060:6:0;7070:10;7060:20;7052:65;;;;-1:-1:-1;;;7052:65:0;;;;;;;:::i;:::-;15762:4:::1;9371:13;10131:1;9371:2;:13;:::i;:::-;9358:26;::::0;:10:::1;:26;:::i;:::-;15752:14;;;;:::i;:::-;15718:30;:48;;15710:88;;;::::0;-1:-1:-1;;;15710:88:0;;9328:2:1;15710:88:0::1;::::0;::::1;9310:21:1::0;9367:2;9347:18;;;9340:30;-1:-1:-1;;;9386:18:1;;;9379:57;9453:18;;15710:88:0::1;9126:351:1::0;15710:88:0::1;15809:29;:62:::0;15608:271::o;16371:191::-;7060:6;;-1:-1:-1;;;;;7060:6:0;7070:10;7060:20;7052:65;;;;-1:-1:-1;;;7052:65:0;;;;;;;:::i;:::-;16466:11:::1;::::0;:16:::1;::::0;16480:2:::1;16466:16;:::i;:::-;16450:12;:32;;16442:73;;;::::0;-1:-1:-1;;;16442:73:0;;9817:2:1;16442:73:0::1;::::0;::::1;9799:21:1::0;9856:2;9836:18;;;9829:30;9895;9875:18;;;9868:58;9943:18;;16442:73:0::1;9615:352:1::0;16442:73:0::1;-1:-1:-1::0;;;;;16526:21:0::1;;::::0;;;:10:::1;:21;::::0;;;;:28;;-1:-1:-1;;16526:28:0::1;16550:4;16526:28;::::0;;16371:191::o;33243:605::-;7060:6;;-1:-1:-1;;;;;7060:6:0;7070:10;7060:20;7052:65;;;;-1:-1:-1;;;7052:65:0;;;;;;;:::i;:::-;33355:24:::1;33390:19:::0;33412:10:::1;:8;:10::i;:::-;33390:32:::0;-1:-1:-1;33450:10:0::1;33433:14;33471:273;33490:18:::0;;::::1;33471:273;;;33529:15;33567:11;33547:14;;33562:1;33547:17;;;;;;;:::i;:::-;;;;;;;:31;;;;:::i;:::-;33529:49;;33616:7;33593;:19;33601:7;;33609:1;33601:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;33593:19:0::1;-1:-1:-1::0;;;;;33593:19:0::1;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;33638:27:0::1;::::0;-1:-1:-1;33658:7:0;33638:27;::::1;:::i;:::-;;;33702:7;;33710:1;33702:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;33685:47:0::1;33694:6;-1:-1:-1::0;;;;;33685:47:0::1;-1:-1:-1::0;;;;;;;;;;;33714:14:0::1;;33729:1;33714:17;;;;;;;:::i;:::-;;;;;;;33685:47;;;;160:25:1::0;;148:2;133:18;;14:177;33685:47:0::1;;;;;;;;-1:-1:-1::0;33510:3:0;::::1;::::0;::::1;:::i;:::-;;;;33471:273;;;-1:-1:-1::0;;;;;;33754:15:0;::::1;;::::0;;;:7:::1;:15;::::0;;;;:35;;33773:16;;33754:15;:35:::1;::::0;33773:16;;33754:35:::1;:::i;:::-;::::0;;;-1:-1:-1;;33805:35:0::1;::::0;33823:16;;-1:-1:-1;;;;;33805:35:0;::::1;::::0;::::1;::::0;;;::::1;33344:504;;;33243:605:::0;;;;:::o;14145:250::-;14211:7;14250;;14239;:18;;14231:73;;;;-1:-1:-1;;;14231:73:0;;10446:2:1;14231:73:0;;;10428:21:1;10485:2;10465:18;;;10458:30;10524:34;10504:18;;;10497:62;-1:-1:-1;;;10575:18:1;;;10568:40;10625:19;;14231:73:0;10244:406:1;14231:73:0;14315:19;14338:10;:8;:10::i;:::-;14315:33;-1:-1:-1;14366:21:0;14315:33;14366:7;:21;:::i;:::-;14359:28;14145:250;-1:-1:-1;;;14145:250:0:o;16168:191::-;7060:6;;-1:-1:-1;;;;;7060:6:0;7070:10;7060:20;7052:65;;;;-1:-1:-1;;;7052:65:0;;;;;;;:::i;:::-;16256:13:::1;-1:-1:-1::0;;;;;16256:22:0::1;:95;16337:13;;16318:16;;16303:12;;16279:21;:36;;;;:::i;:::-;:55;;;;:::i;:::-;:71;;;;:::i;:::-;16256:95;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;16168:191:::0;:::o;14746:479::-;7060:6;;-1:-1:-1;;;;;7060:6:0;7070:10;7060:20;7052:65;;;;-1:-1:-1;;;7052:65:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14828:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;14820:60;;;;-1:-1:-1::0;;;14820:60:0::1;;;;;;;:::i;:::-;14896:9;14891:327;14915:9;:16:::0;14911:20;::::1;14891:327;;;14973:7;-1:-1:-1::0;;;;;14957:23:0::1;:9;14967:1;14957:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;14957:12:0::1;:23:::0;14953:254:::1;;15016:9;15026:16:::0;;:20:::1;::::0;15045:1:::1;::::0;15026:20:::1;:::i;:::-;15016:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;15001:9:::1;:12:::0;;-1:-1:-1;;;;;15016:31:0;;::::1;::::0;15011:1;;15001:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;15001:46:0::1;-1:-1:-1::0;;;;;15001:46:0;;::::1;;::::0;;15066:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;15105:11:::1;:20:::0;;;;:28;;-1:-1:-1;;15105:28:0::1;::::0;;15152:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;15152:15:0;;;;;-1:-1:-1;;;;;;15152:15:0::1;::::0;;;;;16256:95:::1;16168:191:::0;:::o;14953:254::-:1;14933:3:::0;::::1;::::0;::::1;:::i;:::-;;;;14891:327;;12750:213:::0;12866:10;12840:4;12887:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;12887:32:0;;;;;;;;;;12840:4;;12857:76;;12878:7;;12887:45;;12922:10;;12887:45;:::i;13345:346::-;13421:10;13408:24;;;;:11;:24;;;;;;;;13407:25;13399:82;;;;-1:-1:-1;;;13399:82:0;;11345:2:1;13399:82:0;;;11327:21:1;11384:2;11364:18;;;11357:30;11423:34;11403:18;;;11396:62;-1:-1:-1;;;11474:18:1;;;11467:42;11526:19;;13399:82:0;11143:408:1;13399:82:0;13493:15;13517:19;13528:7;13517:10;:19::i;:::-;-1:-1:-1;;13579:10:0;13570:20;;;;:7;:20;;;;;;13492:44;;-1:-1:-1;13570:31:0;;13492:44;;-1:-1:-1;13570:20:0;-1:-1:-1;13570:31:0;;-1:-1:-1;13570:31:0:i;:::-;13556:10;13547:20;;;;:7;:20;;;;;:54;13622:7;;:17;;13632:7;;13622:17;:::i;:::-;13612:7;:27;13663:10;;:20;;13676:7;;13663:20;:::i;:::-;13650:10;:33;-1:-1:-1;;13345:346:0:o;15363:113::-;7060:6;;-1:-1:-1;;;;;7060:6:0;7070:10;7060:20;7052:65;;;;-1:-1:-1;;;7052:65:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15434:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;15434:34:0::1;15464:4;15434:34;::::0;;15363:113::o;13699:438::-;13791:7;9371:13;10131:1;9371:2;:13;:::i;:::-;9358:26;;:10;:26;:::i;:::-;13819:7;:18;;13811:62;;;;-1:-1:-1;;;13811:62:0;;11758:2:1;13811:62:0;;;11740:21:1;11797:2;11777:18;;;11770:30;11836:33;11816:18;;;11809:61;11887:18;;13811:62:0;11556:355:1;13811:62:0;13889:17;13884:246;;13924:15;13948:19;13959:7;13948:10;:19::i;:::-;-1:-1:-1;13923:44:0;;-1:-1:-1;13982:14:0;;-1:-1:-1;;;;;13982:14:0;13884:246;14031:23;14062:19;14073:7;14062:10;:19::i;:::-;-1:-1:-1;14029:52:0;;-1:-1:-1;14096:22:0;;-1:-1:-1;;;;;14096:22:0;31424:121;31486:7;31513:24;:14;31531:5;31513:17;:24::i;14403:335::-;7060:6;;-1:-1:-1;;;;;7060:6:0;7070:10;7060:20;7052:65;;;;-1:-1:-1;;;7052:65:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14488:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;14487:21;14479:61;;;;-1:-1:-1::0;;;14479:61:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;14554:16:0;::::1;14573:1;14554:16:::0;;;:7:::1;:16;::::0;;;;;:20;14551:108:::1;;-1:-1:-1::0;;;;;14630:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;14610:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;14591:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;14551:108:::1;-1:-1:-1::0;;;;;14669:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;14669:27:0::1;14692:4;14669:27:::0;;::::1;::::0;;;14707:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;14707:23:0::1;::::0;;::::1;::::0;;14403:335::o;27125:222::-;7060:6;;-1:-1:-1;;;;;7060:6:0;7070:10;7060:20;7052:65;;;;-1:-1:-1;;;7052:65:0;;;;;;;:::i;:::-;27235:55:::1;::::0;-1:-1:-1;;;;;27235:33:0;::::1;::::0;:55;::::1;;;::::0;27269:20;;27235:55:::1;::::0;;;27269:20;27235:33;:55;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;27319:20;27303:12;;:36;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;;;27125:222:0:o;17747:258::-;7060:6;;-1:-1:-1;;;;;7060:6:0;7070:10;7060:20;7052:65;;;;-1:-1:-1;;;7052:65:0;;;;;;;:::i;:::-;10708:3:::1;9371:13;10131:1;9371:2;:13;:::i;:::-;9358:26;::::0;:10:::1;:26;:::i;:::-;10694:11;::::0;:1:::1;:11;:::i;:::-;:17;;;;:::i;:::-;17855:24;:56;;17847:89;;;::::0;-1:-1:-1;;;17847:89:0;;12118:2:1;17847:89:0::1;::::0;::::1;12100:21:1::0;12157:2;12137:18;;;12130:30;-1:-1:-1;;;12176:18:1;;;12169:50;12236:18;;17847:89:0::1;11916:344:1::0;17847:89:0::1;17947:23;:50:::0;17747:258::o;27359:221::-;27431:15;;-1:-1:-1;;;;;27431:15:0;27417:10;:29;;:54;;;27464:7;:5;:7::i;:::-;-1:-1:-1;;;;;27450:21:0;:10;-1:-1:-1;;;;;27450:21:0;;27417:54;27409:63;;;;;;27491:15;;27517:13;;27483:48;;-1:-1:-1;;;;;27491:15:0;;;;27483:48;;;;;27517:13;27491:15;27483:48;27491:15;27483:48;27517:13;27491:15;27483:48;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27559:13:0;;;;27542;:30;27559:13;;27542:30;:::i;11733:198::-;-1:-1:-1;;;;;11823:20:0;;11799:7;11823:20;;;:11;:20;;;;;;;;11819:49;;;-1:-1:-1;;;;;;11852:16:0;;;;;:7;:16;;;;;;;11733:198::o;11819:49::-;-1:-1:-1;;;;;11906:16:0;;;;;;:7;:16;;;;;;11886:37;;:19;:37::i;7145:148::-;7060:6;;-1:-1:-1;;;;;7060:6:0;7070:10;7060:20;7052:65;;;;-1:-1:-1;;;7052:65:0;;;;;;;:::i;:::-;7252:1:::1;7236:6:::0;;7215:40:::1;::::0;-1:-1:-1;;;;;7236:6:0;;::::1;::::0;7215:40:::1;::::0;7252:1;;7215:40:::1;7283:1;7266:19:::0;;-1:-1:-1;;;;;;7266:19:0::1;::::0;;7145:148::o;27937:183::-;28034:18;;27992:7;;-1:-1:-1;;;;;28034:18:0;28020:10;:32;;:57;;;28070:7;:5;:7::i;:::-;-1:-1:-1;;;;;28056:21:0;:10;-1:-1:-1;;;;;28056:21:0;;28020:57;28012:66;;;;;;-1:-1:-1;28096:16:0;;;27937:183::o;32319:161::-;-1:-1:-1;;;;;;;;;;;;;;;;;32420:52:0;;;;;;;;32431:17;32441:6;32431:9;:17::i;:::-;32420:52;;-1:-1:-1;;;;;32450:21:0;;;;;;;:13;32420:52;32450:21;;;;;;;;32420:52;;;;;;-1:-1:-1;32413:59:0;32319:161::o;6933:79::-;6971:7;6998:6;-1:-1:-1;;;;;6998:6:0;;6933:79::o;31310:106::-;31358:7;31385:23;:14;:21;:23::i;12971:265::-;13116:10;13066:4;13104:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;13104:32:0;;;;;;;;;;13066:4;;13147:59;;13128:7;13177:28;13190:15;13104:32;13177:28;:::i;13147:59::-;-1:-1:-1;13224:4:0;;12971:265;-1:-1:-1;;;12971:265:0:o;18013:203::-;7060:6;;-1:-1:-1;;;;;7060:6:0;7070:10;7060:20;7052:65;;;;-1:-1:-1;;;7052:65:0;;;;;;;:::i;:::-;18123:15:::1;:34:::0;;-1:-1:-1;;;;;18123:34:0;;::::1;-1:-1:-1::0;;;;;;18123:34:0;;::::1;;::::0;;;18168:18:::1;:40:::0;;;;;::::1;::::0;::::1;;::::0;;18013:203::o;16697:1038::-;7060:6;;-1:-1:-1;;;;;7060:6:0;7070:10;7060:20;7052:65;;;;-1:-1:-1;;;7052:65:0;;;;;;;:::i;:::-;10708:3:::1;9371:13;10131:1;9371:2;:13;:::i;:::-;9358:26;::::0;:10:::1;:26;:::i;:::-;10694:11;::::0;:1:::1;:11;:::i;:::-;:17;;;;:::i;:::-;16769:23;;:54;16761:75;;;::::0;-1:-1:-1;;;16761:75:0;;12467:2:1;16761:75:0::1;::::0;::::1;12449:21:1::0;12506:1;12486:18;;;12479:29;-1:-1:-1;;;12524:18:1;;;12517:38;12572:18;;16761:75:0::1;12265:331:1::0;16761:75:0::1;10708:3;9371:13;10131:1;9371:2;:13;:::i;:::-;9358:26;::::0;:10:::1;:26;:::i;:::-;10694:11;::::0;:1:::1;:11;:::i;:::-;:17;;;;:::i;:::-;16847:23;:54:::0;16914:23:::1;16986:10;:8;:10::i;:::-;16979:3;9371:13;10131:1;9371:2;:13;:::i;:::-;9358:26;::::0;:10:::1;:26;:::i;:::-;16965:11;::::0;:1:::1;:11;:::i;:::-;:17;;;;:::i;:::-;16941:21;16951:10;16941:9;:21::i;:::-;:41;;;;:::i;:::-;16940:56;;;;:::i;:::-;17015:10;17007:19;::::0;;;:7:::1;:19;::::0;;;;:38;;16914:82;;-1:-1:-1;16914:82:0;;17007:19;;;:38:::1;::::0;16914:82;;17007:38:::1;:::i;:::-;::::0;;;-1:-1:-1;;17072:4:0::1;17056:22;::::0;;;:7:::1;:22;::::0;;;;:41;;17082:15;;17056:22;:41:::1;::::0;17082:15;;17056:41:::1;:::i;:::-;::::0;;;-1:-1:-1;17142:4:0::1;::::0;-1:-1:-1;17122:10:0::1;-1:-1:-1::0;;;;;;;;;;;17149:36:0::1;17169:15:::0;17149:19:::1;:36::i;:::-;17113:73;::::0;160:25:1;;;148:2;133:18;17113:73:0::1;;;;;;;-1:-1:-1::0;;;;;;;;;;;;;;;;17233:23:0::1;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17215:97;::::0;-1:-1:-1;;;17215:97:0;;17293:4:::1;17215:97;::::0;::::1;13069:34:1::0;9837:42:0::1;13119:18:1::0;;;13112:43;-1:-1:-1;;;;;17215:69:0;;;::::1;::::0;::::1;::::0;13004:18:1;;17215:97:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17199:13;:113:::0;;-1:-1:-1;;;;;;17199:113:0::1;-1:-1:-1::0;;;;;17199:113:0;;;::::1;::::0;;;::::1;::::0;;17338:54:::1;17355:4;-1:-1:-1::0;;;;;;;;;;;;;17338:8:0::1;:54::i;:::-;-1:-1:-1::0;;;;;;;;;;;17403:31:0::1;17442:9;17475:4;17495:36;17515:15:::0;17495:19:::1;:36::i;:::-;17546:1;17589::::0;17632:7:::1;:5;:7::i;:::-;17654:15;17403:277;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;17707:12:0::1;17693:11;:26:::0;-1:-1:-1;;16697:1038:0:o;15891:265::-;7060:6;;-1:-1:-1;;;;;7060:6:0;7070:10;7060:20;7052:65;;;;-1:-1:-1;;;7052:65:0;;;;;;;:::i;:::-;16024:4:::1;-1:-1:-1::0;;;;;16000:29:0;::::1;::::0;15992:38:::1;;;::::0;::::1;;16117:30;::::0;-1:-1:-1;;;16117:30:0;;16063:12;;-1:-1:-1;;;;;16087:14:0;::::1;::::0;::::1;::::0;16102:13;;16087:14;;16117:15:::1;::::0;:30:::1;::::0;16141:4:::1;::::0;16117:30:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16087:61;::::0;-1:-1:-1;;;;;;16087:61:0::1;::::0;;;;;;-1:-1:-1;;;;;14281:32:1;;;16087:61:0::1;::::0;::::1;14263:51:1::0;14330:18;;;14323:34;14236:18;;16087:61:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;15981:175;15891:265:::0;;:::o;11939:167::-;12019:4;12036:40;12046:10;12058:9;12069:6;12036:9;:40::i;18224:206::-;7060:6;;-1:-1:-1;;;;;7060:6:0;7070:10;7060:20;7052:65;;;;-1:-1:-1;;;7052:65:0;;;;;;;:::i;:::-;18352:1:::1;18329:19;:24;;18321:33;;;::::0;::::1;;18393:29;:19:::0;18415:7:::1;18393:29;:::i;:::-;18365:25;:57:::0;-1:-1:-1;18224:206:0:o;15488:112::-;7060:6;;-1:-1:-1;;;;;7060:6:0;7070:10;7060:20;7052:65;;;;-1:-1:-1;;;7052:65:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15557:27:0::1;15587:5;15557:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;15557:35:0::1;::::0;;15488:112::o;32834:396::-;32882:16;;:::i;:::-;32918:304;;;;;;;;32928:10;;32918:304;;32940:25;;32918:304;;;;32967:12;;-1:-1:-1;;;;;32967:12:0;32918:304;;;;;;;32995:17;;32918:304;;;;33014:20;;32918:304;;;;;;;33036:23;:14;:21;:23::i;:::-;32918:304;;;;33061:15;;32918:304;;;;33092:27;33105:13;;33092:12;:27::i;:::-;32918:304;;;;33121:26;33134:12;;33121;:26::i;:::-;32918:304;;33206:13;;33176:44;;-1:-1:-1;;;33176:44:0;;32918:304;;;;;33163:58;;9837:42;;33176:29;;:44;;-1:-1:-1;;;;;33206:13:0;;;;33176:44;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33163:12;:58::i;7301:244::-;7060:6;;-1:-1:-1;;;;;7060:6:0;7070:10;7060:20;7052:65;;;;-1:-1:-1;;;7052:65:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7390:22:0;::::1;7382:73;;;::::0;-1:-1:-1;;;7382:73:0;;14820:2:1;7382:73:0::1;::::0;::::1;14802:21:1::0;14859:2;14839:18;;;14832:30;14898:34;14878:18;;;14871:62;-1:-1:-1;;;14949:18:1;;;14942:36;14995:19;;7382:73:0::1;14618:402:1::0;7382:73:0::1;7492:6;::::0;;7471:38:::1;::::0;-1:-1:-1;;;;;7471:38:0;;::::1;::::0;7492:6;::::1;::::0;7471:38:::1;::::0;::::1;7520:6;:17:::0;;-1:-1:-1;;;;;;7520:17:0::1;-1:-1:-1::0;;;;;7520:17:0;;;::::1;::::0;;;::::1;::::0;;7301:244::o;22073:177::-;-1:-1:-1;;;;;22158:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;22210:32;;160:25:1;;;22210:32:0;;133:18:1;22210:32:0;;;;;;;22073:177;;;:::o;22260:2870::-;22357:1;22348:6;:10;22340:43;;;;-1:-1:-1;;;22340:43:0;;15227:2:1;22340:43:0;;;15209:21:1;15266:2;15246:18;;;15239:30;-1:-1:-1;;;15285:18:1;;;15278:50;15345:18;;22340:43:0;15025:344:1;22340:43:0;-1:-1:-1;;;;;22403:16:0;;;;;;:10;:16;;;;;;;;22402:17;22394:37;;;;-1:-1:-1;;;22394:37:0;;15576:2:1;22394:37:0;;;15558:21:1;15615:1;15595:18;;;15588:29;-1:-1:-1;;;15633:18:1;;;15626:37;15680:18;;22394:37:0;15374:330:1;22394:37:0;-1:-1:-1;;;;;22485:24:0;;22452:12;22485:24;;;:18;:24;;;;;;22467:4;;22485:24;;;:50;;-1:-1:-1;;;;;;22513:22:0;;;;;;:18;:22;;;;;;;;22485:50;22482:589;;;-1:-1:-1;22561:5:0;22482:589;;;22642:23;;10708:3;9371:13;10131:1;9371:2;:13;:::i;:::-;9358:26;;:10;:26;:::i;:::-;10694:11;;:1;:11;:::i;:::-;:17;;;;:::i;:::-;22688:24;:56;;22680:78;;;;-1:-1:-1;;;22680:78:0;;15911:2:1;22680:78:0;;;15893:21:1;15950:1;15930:18;;;15923:29;-1:-1:-1;;;15968:18:1;;;15961:39;16017:18;;22680:78:0;15709:332:1;22680:78:0;-1:-1:-1;;22808:30:0;;22805:255;;;22880:24;22870:6;:34;;:132;;;;-1:-1:-1;22932:13:0;;-1:-1:-1;;;;;22926:19:0;;;22932:13;;22926:19;;:75;;;22976:24;22966:6;22950:13;22960:2;22950:9;:13::i;:::-;:22;;;;:::i;:::-;:50;;22926:75;22862:160;;;;-1:-1:-1;;;22862:160:0;;16248:2:1;22862:160:0;;;16230:21:1;16287:2;16267:18;;;16260:30;-1:-1:-1;;;16306:18:1;;;16299:45;16361:18;;22862:160:0;16046:339:1;22862:160:0;22592:479;22482:589;23086:7;23083:1991;;;23133:12;;23171:13;;-1:-1:-1;;;;;23133:12:0;;;;23171:13;;;23163:21;;;;23160:1903;;23228:16;;;23242:1;23228:16;;;;;;;;23204:21;;23228:16;;;;;;;;;;-1:-1:-1;23228:16:0;23204:40;;9837:42;23263:4;23268:1;23263:7;;;;;;;;:::i;:::-;;;;;;:21;-1:-1:-1;;;;;23263:21:0;;;-1:-1:-1;;;;;23263:21:0;;;;;23321:4;23303;23308:1;23303:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;23303:23:0;;;:7;;;;;;;;;;;:23;23368:42;;-1:-1:-1;;;23368:42:0;;23345:20;;-1:-1:-1;;;;;;;;;;;10400:42:0;23368:28;;:42;;23397:6;;23405:4;;23368:42;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;23368:42:0;;;;;;;;;;;;:::i;:::-;23411:1;23368:45;;;;;;;;:::i;:::-;;;;;;;23345:68;;23492:25;;23469:20;;:48;;;;:::i;:::-;23451:15;:66;:91;;;;-1:-1:-1;;;;;;23521:21:0;;;;23451:91;23448:407;;;23569:38;:14;23593:13;23569:23;:38::i;:::-;:47;;23611:5;23569:47;23566:135;;23644:33;:14;23663:13;23644:18;:33::i;:::-;;23566:135;23774:17;;;-1:-1:-1;;;;;23743:28:0;;;;;;:13;:28;;;;;:48;;;;23814:21;;23448:407;23891:17;;23876:12;:32;23873:322;;;23988:2;-1:-1:-1;;;;;23971:19:0;:13;-1:-1:-1;;;;;23971:19:0;;23968:92;;24019:12;:17;;-1:-1:-1;;;;;;24019:17:0;-1:-1:-1;;;;;24019:17:0;;;;;23968:92;24082:17;:32;;;24160:15;24137:20;:38;23873:322;23185:1025;;23160:1903;;;24258:12;;-1:-1:-1;;;;;24258:12:0;;;24250:20;;;;24247:769;;24317:12;:19;;-1:-1:-1;;;;;;24317:19:0;;;8939:3;24359:17;:21;24426:15;24403:20;:38;24247:769;;;24488:16;;-1:-1:-1;;;24488:16:0;;;;24484:532;;24569:29;;24634:21;;24569:29;;24624:32;;-1:-1:-1;;;;;24634:21:0;24624:9;:32::i;:::-;:66;24621:376;;24718:44;24731:30;24718:12;:44::i;:::-;24621:376;;;24844:30;24816:24;24834:4;24816:9;:24::i;:::-;:58;;:83;;;;-1:-1:-1;;;;;;24878:21:0;;;;24816:83;24813:184;;;24927:46;24942:30;24927:14;:46::i;:::-;24505:511;24484:532;23094:1980;23083:1991;25084:38;25099:4;25104:2;25107:6;25114:7;25084:14;:38::i;5321:117::-;5384:7;5411:19;5419:3;3659:18;;3576:109;19782:160;19823:7;19844:15;19861;19880:19;:17;:19::i;:::-;19843:56;;-1:-1:-1;19843:56:0;-1:-1:-1;19917:17:0;19843:56;;19917:17;:::i;:::-;19910:24;;;;19782:160;:::o;18587:419::-;18646:7;18655;18664;18673;18682;18691;18712:23;18737:12;18751:18;18773:20;18785:7;18773:11;:20::i;:::-;18711:82;;;;;;18805:15;18822:23;18847:12;18863:50;18875:7;18884:4;18890:10;18902;:8;:10::i;:::-;18863:11;:50::i;:::-;18804:109;;;;-1:-1:-1;18804:109:0;;-1:-1:-1;18964:15:0;;-1:-1:-1;18981:4:0;;-1:-1:-1;18987:10:0;;-1:-1:-1;18587:419:0;;-1:-1:-1;;;;;18587:419:0:o;5782:158::-;5856:7;5907:22;5911:3;5923:5;5907:3;:22::i;31553:257::-;31658:16;;;31672:1;31658:16;;;;;;;;31614:7;;;;31658:16;31672:1;31658:16;;;;;;;;;;-1:-1:-1;31658:16:0;31634:40;;9749:42;31685:4;31690:1;31685:7;;;;;;;;:::i;:::-;;;;;;:21;-1:-1:-1;;;;;31685:21:0;;;-1:-1:-1;;;;;31685:21:0;;;;;9837:42;31717:4;31722:1;31717:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;31717:21:0;;;:7;;;;;;;;;;;:21;31757:42;;-1:-1:-1;;;31757:42:0;;-1:-1:-1;;;;;;;;;;;10400:42:0;31757:28;;:42;;31786:6;;31794:4;;31757:42;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;31757:42:0;;;;;;;;;;;;:::i;:::-;31800:1;31757:45;;;;;;;;:::i;:::-;;;;;;;31750:52;;;31553:257;;;:::o;5068:167::-;-1:-1:-1;;;;;5202:23:0;;5148:4;3458:19;;;:12;;;:19;;;;;;:24;;5172:55;3361:129;4496:152;4566:4;4590:50;4595:3;-1:-1:-1;;;;;4615:23:0;;4590:4;:50::i;25669:937::-;11006:16;:23;;-1:-1:-1;;;;11006:23:0;-1:-1:-1;;;11006:23:0;;;;25783:10:::1;:8;:10::i;:::-;25769:24;::::0;:11;:24:::1;:::i;:::-;25812:21;::::0;-1:-1:-1;;;;;25812:21:0::1;25804:30;::::0;;;:7:::1;:30;::::0;;;;:49;;25743:50;;-1:-1:-1;25743:50:0;;25804:30;;;:49:::1;::::0;25743:50;;25804:49:::1;:::i;:::-;::::0;;;-1:-1:-1;;25880:4:0::1;25864:22;::::0;;;:7:::1;:22;::::0;;;;:41;;25890:15;;25864:22;:41:::1;::::0;25890:15;;25864:41:::1;:::i;:::-;::::0;;;-1:-1:-1;25934:23:0::1;::::0;-1:-1:-1;25960:15:0::1;25974:1;25960:11:::0;:15:::1;:::i;:::-;25934:41:::0;-1:-1:-1;25986:20:0::1;26009:29;25934:41:::0;26009:11;:29:::1;:::i;:::-;25986:52:::0;-1:-1:-1;26075:21:0::1;26107:30;25986:52:::0;26107:16:::1;:30::i;:::-;26148:26;26177:37;26201:13:::0;26177:21:::1;:37;:::i;:::-;26148:66;;26249:1;26231:15;:19;:45;;;;;26275:1;26254:18;:22;26231:45;26227:372;;;-1:-1:-1::0;;;;;;;;;;;26294:31:0::1;26333:18:::0;26379:4:::1;26403:15:::0;26437:1:::1;::::0;26531:7:::1;:5;:7::i;:::-;26557:15;26294:293;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;26227:372;-1:-1:-1::0;;11052:16:0;:24;;-1:-1:-1;;;;11052:24:0;;;-1:-1:-1;;;;25669:937:0:o;25138:523::-;11006:16;:23;;-1:-1:-1;;;;11006:23:0;-1:-1:-1;;;11006:23:0;;;25237:21:::1;25269:29;25286:11:::0;25269:16:::1;:29::i;:::-;25310:22;25335:34;25359:10:::0;25335:21:::1;:34;:::i;:::-;25310:59:::0;-1:-1:-1;25420:1:0::1;25399:18;25310:59:::0;25416:1:::1;25399:18;:::i;:::-;:22;;;;:::i;:::-;25382:13;;:39;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;25447:18:0::1;::::0;-1:-1:-1;25464:1:0::1;25447:14:::0;:18:::1;:::i;:::-;25427:16;;:38;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;25507:1:0::1;::::0;-1:-1:-1;25486:18:0::1;:14:::0;25503:1:::1;25486:18;:::i;:::-;:22;;;;:::i;:::-;25470:12;;:38;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;25519:18:0::1;::::0;-1:-1:-1;25540:18:0::1;25557:1;25540:14:::0;:18:::1;:::i;:::-;25577:12;::::0;25569:42:::1;::::0;25519:39;;-1:-1:-1;;;;;;25577:12:0::1;::::0;25569:42;::::1;;;::::0;25519:39;;25577:12:::1;25569:42:::0;25577:12;25569:42;25519:39;25577:12;25569:42;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;25643:10;25624:15;;:29;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;11052:16:0;:24;;-1:-1:-1;;;;11052:24:0;;;-1:-1:-1;;;;25138:523:0:o;28128:834::-;28239:7;28235:40;;28261:14;:12;:14::i;:::-;-1:-1:-1;;;;;28300:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;28324:22:0;;;;;;:11;:22;;;;;;;;28323:23;28300:46;28296:597;;;28363:48;28385:6;28393:9;28404:6;28363:21;:48::i;:::-;28296:597;;;-1:-1:-1;;;;;28434:19:0;;;;;;:11;:19;;;;;;;;28433:20;:46;;;;-1:-1:-1;;;;;;28457:22:0;;;;;;:11;:22;;;;;;;;28433:46;28429:464;;;28496:46;28516:6;28524:9;28535:6;28496:19;:46::i;28429:464::-;-1:-1:-1;;;;;28565:19:0;;;;;;:11;:19;;;;;;;;28564:20;:47;;;;-1:-1:-1;;;;;;28589:22:0;;;;;;:11;:22;;;;;;;;28588:23;28564:47;28560:333;;;28628:44;28646:6;28654:9;28665:6;28628:17;:44::i;28560:333::-;-1:-1:-1;;;;;28694:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;28717:22:0;;;;;;:11;:22;;;;;;;;28694:45;28690:203;;;28756:48;28778:6;28786:9;28797:6;28756:21;:48::i;28690:203::-;28837:44;28855:6;28863:9;28874:6;28837:17;:44::i;:::-;28917:7;28913:41;;28939:15;21857;;21847:7;:25;21899:21;;21883:13;:37;21803:125;19950:552;20047:7;;20000;;;;;9371:13;10131:1;9371:2;:13;:::i;:::-;9358:26;;:10;:26;:::i;:::-;20065:25;;20112:9;20107:283;20131:9;:16;20127:20;;20107:283;;;20197:7;20173;:21;20181:9;20191:1;20181:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;20181:12:0;20173:21;;;;;;;;;;;;;:31;;:66;;;20232:7;20208;:21;20216:9;20226:1;20216:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;20216:12:0;20208:21;;;;;;;;;;;;;:31;20173:66;20169:97;;;20249:7;;9371:13;10131:1;9371:2;:13;:::i;:::-;9358:26;;:10;:26;:::i;:::-;20241:25;;;;;;;19950:552;;:::o;20169:97::-;20301:7;:21;20309:9;20319:1;20309:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;20309:12:0;20301:21;;;;;;;;;;;;;20291:31;;:7;:31;:::i;:::-;20281:41;;20357:7;:21;20365:9;20375:1;20365:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;20365:12:0;20357:21;;;;;;;;;;;;;20347:31;;:7;:31;:::i;:::-;20337:41;-1:-1:-1;20149:3:0;;;;:::i;:::-;;;;20107:283;;;-1:-1:-1;9371:13:0;10131:1;9371:2;:13;:::i;:::-;9358:26;;:10;:26;:::i;:::-;20414:7;;:17;;;;:::i;:::-;20404:7;:27;20400:58;;;20441:7;;9371:13;10131:1;9371:2;:13;:::i;:::-;9358:26;;:10;:26;:::i;:::-;20433:25;;;;;;19950:552;;:::o;20400:58::-;20477:7;;20486;;-1:-1:-1;19950:552:0;-1:-1:-1;19950:552:0:o;19014:324::-;19074:7;19083;19092;19112:12;19127:24;19143:7;19127:15;:24::i;:::-;19112:39;;19162:18;19183:30;19205:7;19183:21;:30::i;:::-;19162:51;-1:-1:-1;19224:23:0;19162:51;19250:14;19260:4;19250:7;:14;:::i;:::-;:27;;;;:::i;:::-;19224:53;19313:4;;-1:-1:-1;19319:10:0;;-1:-1:-1;19014:324:0;;-1:-1:-1;;;19014:324:0:o;19346:428::-;19475:7;;;;19531:21;19541:11;19531:7;:21;:::i;:::-;19513:39;-1:-1:-1;19563:12:0;19578:18;19585:11;19578:4;:18;:::i;:::-;19563:33;-1:-1:-1;19607:18:0;19628:24;19641:11;19628:10;:24;:::i;:::-;19607:45;-1:-1:-1;19663:23:0;19607:45;19689:14;19699:4;19689:7;:14;:::i;:::-;:27;;;;:::i;:::-;19735:7;;;;-1:-1:-1;19761:4:0;;-1:-1:-1;19346:428:0;;-1:-1:-1;;;;;;;19346:428:0:o;4029:204::-;4124:18;;4096:7;;4124:26;-1:-1:-1;4116:73:0;;;;-1:-1:-1;;;4116:73:0;;18637:2:1;4116:73:0;;;18619:21:1;18676:2;18656:18;;;18649:30;18715:34;18695:18;;;18688:62;-1:-1:-1;;;18766:18:1;;;18759:32;18808:19;;4116:73:0;18435:398:1;4116:73:0;4207:3;:11;;4219:5;4207:18;;;;;;;;:::i;:::-;;;;;;;;;4200:25;;4029:204;;;;:::o;1141:414::-;1204:4;3458:19;;;:12;;;:19;;;;;;1221:327;;-1:-1:-1;1264:23:0;;;;;;;;:11;:23;;;;;;;;;;;;;1447:18;;1425:19;;;:12;;;:19;;;;;;:40;;;;1480:11;;1221:327;-1:-1:-1;1531:5:0;1524:12;;26614:503;26764:16;;;26778:1;26764:16;;;;;;;;26740:21;;26764:16;;;;;;;;;;-1:-1:-1;26764:16:0;26740:40;;26809:4;26791;26796:1;26791:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;26791:23:0;;;-1:-1:-1;;;;;26791:23:0;;;;;9837:42;26825:4;26830:1;26825:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;26825:21:0;;;:7;;;;;;;;;;;:21;26885:224;;-1:-1:-1;;;26885:224:0;;-1:-1:-1;;;;;;;;;;;10400:42:0;26885:66;;:224;;26966:11;;26992:1;;27036:4;;27063;;27083:15;;26885:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26669:448;26614:503;:::o;21541:250::-;21587:7;;:12;:34;;;;-1:-1:-1;21603:13:0;;:18;21587:34;21584:46;;;21541:250::o;21584:46::-;21668:7;;;21650:15;:25;21710:13;;;21686:21;:37;-1:-1:-1;21744:11:0;;;;21766:17;21541:250::o;30083:569::-;30186:15;30203:23;30228:12;30254:23;30279:12;30293:18;30315:19;30326:7;30315:10;:19::i;:::-;-1:-1:-1;;;;;30363:15:0;;;;;;:7;:15;;;;;;30185:149;;-1:-1:-1;30185:149:0;;-1:-1:-1;30185:149:0;;-1:-1:-1;30185:149:0;-1:-1:-1;30185:149:0;-1:-1:-1;30185:149:0;-1:-1:-1;30363:25:0;;30381:7;;30363:25;:::i;:::-;-1:-1:-1;;;;;30345:15:0;;;;;;:7;:15;;;;;;;;:43;;;;30417:7;:15;;;;:25;;30435:7;;30417:25;:::i;:::-;-1:-1:-1;;;;;30399:15:0;;;;;;;:7;:15;;;;;;:43;;;;30474:18;;;;;;;:36;;30495:15;;30474:36;:::i;:::-;-1:-1:-1;;;;;30453:18:0;;;;;;:7;:18;;;;;:57;30524:26;30539:10;30524:14;:26::i;:::-;30561:23;30573:4;30579;30561:11;:23::i;:::-;30617:9;-1:-1:-1;;;;;30600:44:0;30609:6;-1:-1:-1;;;;;30600:44:0;-1:-1:-1;;;;;;;;;;;30628:15:0;30600:44;;;;160:25:1;;148:2;133:18;;14:177;30600:44:0;;;;;;;;30174:478;;;;;;30083:569;;;:::o;29486:589::-;29587:15;29604:23;29629:12;29655:23;29680:12;29694:18;29716:19;29727:7;29716:10;:19::i;:::-;-1:-1:-1;;;;;29764:15:0;;;;;;:7;:15;;;;;;29586:149;;-1:-1:-1;29586:149:0;;-1:-1:-1;29586:149:0;;-1:-1:-1;29586:149:0;-1:-1:-1;29586:149:0;-1:-1:-1;29586:149:0;-1:-1:-1;29764:25:0;;29586:149;;29764:25;:::i;:::-;-1:-1:-1;;;;;29746:15:0;;;;;;;:7;:15;;;;;;;;:43;;;;29821:18;;;;;:7;:18;;;;;:36;;29842:15;;29821:36;:::i;:::-;-1:-1:-1;;;;;29800:18:0;;;;;;:7;:18;;;;;;;;:57;;;;29889:7;:18;;;;:36;;29910:15;;29889:36;:::i;28970:508::-;29069:15;29086:23;29111:12;29137:23;29162:12;29176:18;29198:19;29209:7;29198:10;:19::i;:::-;-1:-1:-1;;;;;29246:15:0;;;;;;:7;:15;;;;;;29068:149;;-1:-1:-1;29068:149:0;;-1:-1:-1;29068:149:0;;-1:-1:-1;29068:149:0;-1:-1:-1;29068:149:0;-1:-1:-1;29068:149:0;-1:-1:-1;29246:25:0;;29068:149;;29246:25;:::i;30660:642::-;30763:15;30780:23;30805:12;30831:23;30856:12;30870:18;30892:19;30903:7;30892:10;:19::i;:::-;-1:-1:-1;;;;;30940:15:0;;;;;;:7;:15;;;;;;30762:149;;-1:-1:-1;30762:149:0;;-1:-1:-1;30762:149:0;;-1:-1:-1;30762:149:0;-1:-1:-1;30762:149:0;-1:-1:-1;30762:149:0;-1:-1:-1;30940:25:0;;30958:7;;30940:25;:::i;:::-;-1:-1:-1;;;;;30922:15:0;;;;;;:7;:15;;;;;;;;:43;;;;30994:7;:15;;;;:25;;31012:7;;30994:25;:::i;21261:124::-;21325:7;21372:5;21362:7;;21352;:17;;;;:::i;:::-;:25;;;;:::i;21393:136::-;21463:7;21516:5;21500:13;;21490:7;:23;;;;:::i;20514:735::-;20577:19;20600:10;:8;:10::i;:::-;20577:33;-1:-1:-1;20631:22:0;20673:1;20656:14;20660:10;20656:1;:14;:::i;:::-;:18;;;;:::i;:::-;20631:43;-1:-1:-1;20685:28:0;20631:43;20685:28;;:::i;:::-;;-1:-1:-1;20726:18:0;20747:24;20760:11;20685:28;20747:24;:::i;:::-;20823:21;;-1:-1:-1;;;;;20823:21:0;20815:30;;;;:7;:30;;;;;;20726:45;;-1:-1:-1;20815:43:0;;20726:45;;20815:43;:::i;:::-;20790:21;;;-1:-1:-1;;;;;20790:21:0;;;20782:30;;;;:7;:30;;;;;;;;:76;;;;20884:21;;;;;20872:34;;:11;:34;;;;;;;20869:128;;;20962:21;;-1:-1:-1;;;;;20962:21:0;20954:30;;;;:7;:30;;;;;;:43;;20987:10;;20954:43;:::i;:::-;20929:21;;-1:-1:-1;;;;;20929:21:0;20921:30;;;;:7;:30;;;;;:76;20869:128;21023:28;21040:11;21023:14;:28;:::i;:::-;21103:4;21087:22;;;;:7;:22;;;;;;21010:41;;-1:-1:-1;21087:35:0;;21010:41;;21087:35;:::i;:::-;21078:4;21062:22;;;;:7;:22;;;;;;;;:60;;;;21136:11;:26;;;;;;21133:108;;;21218:4;21202:22;;;;:7;:22;;;;;;:39;;21227:14;;21202:39;:::i;:::-;21193:4;21177:22;;;;:7;:22;;;;;:64;20566:683;;;20514:735;:::o;18438:141::-;18526:4;18516:7;;:14;;;;:::i;:::-;18506:7;:24;18554:10;;:17;;18567:4;;18554:17;:::i;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;196:131:1:-;-1:-1:-1;;;;;271:31:1;;261:42;;251:70;;317:1;314;307:12;251:70;196:131;:::o;332:247::-;391:6;444:2;432:9;423:7;419:23;415:32;412:52;;;460:1;457;450:12;412:52;499:9;486:23;518:31;543:5;518:31;:::i;584:597::-;696:4;725:2;754;743:9;736:21;786:6;780:13;829:6;824:2;813:9;809:18;802:34;854:1;864:140;878:6;875:1;872:13;864:140;;;973:14;;;969:23;;963:30;939:17;;;958:2;935:26;928:66;893:10;;864:140;;;1022:6;1019:1;1016:13;1013:91;;;1092:1;1087:2;1078:6;1067:9;1063:22;1059:31;1052:42;1013:91;-1:-1:-1;1165:2:1;1144:15;-1:-1:-1;;1140:29:1;1125:45;;;;1172:2;1121:54;;584:597;-1:-1:-1;;;584:597:1:o;1186:315::-;1254:6;1262;1315:2;1303:9;1294:7;1290:23;1286:32;1283:52;;;1331:1;1328;1321:12;1283:52;1370:9;1357:23;1389:31;1414:5;1389:31;:::i;:::-;1439:5;1491:2;1476:18;;;;1463:32;;-1:-1:-1;;;1186:315:1:o;1698:227::-;-1:-1:-1;;;;;1886:32:1;;;;1868:51;;1856:2;1841:18;;1698:227::o;1930:456::-;2007:6;2015;2023;2076:2;2064:9;2055:7;2051:23;2047:32;2044:52;;;2092:1;2089;2082:12;2044:52;2131:9;2118:23;2150:31;2175:5;2150:31;:::i;:::-;2200:5;-1:-1:-1;2257:2:1;2242:18;;2229:32;2270:33;2229:32;2270:33;:::i;:::-;1930:456;;2322:7;;-1:-1:-1;;;2376:2:1;2361:18;;;;2348:32;;1930:456::o;2500:901::-;2646:4;2688:3;2677:9;2673:19;2665:27;;2725:6;2719:13;2708:9;2701:32;2789:4;2781:6;2777:17;2771:24;2764:4;2753:9;2749:20;2742:54;2843:4;2835:6;2831:17;2825:24;2858:54;2906:4;2895:9;2891:20;2877:12;-1:-1:-1;;;;;2457:31:1;2445:44;;2391:104;2858:54;;2968:4;2960:6;2956:17;2950:24;2943:4;2932:9;2928:20;2921:54;3031:4;3023:6;3019:17;3013:24;3006:4;2995:9;2991:20;2984:54;3094:4;3086:6;3082:17;3076:24;3069:4;3058:9;3054:20;3047:54;3157:4;3149:6;3145:17;3139:24;3132:4;3121:9;3117:20;3110:54;3220:4;3212:6;3208:17;3202:24;3195:4;3184:9;3180:20;3173:54;3246:6;3306:2;3298:6;3294:15;3288:22;3283:2;3272:9;3268:18;3261:50;;3330:6;3390:2;3382:6;3378:15;3372:22;3367:2;3356:9;3352:18;3345:50;;2500:901;;;;:::o;3406:180::-;3465:6;3518:2;3506:9;3497:7;3493:23;3489:32;3486:52;;;3534:1;3531;3524:12;3486:52;-1:-1:-1;3557:23:1;;3406:180;-1:-1:-1;3406:180:1:o;3591:367::-;3654:8;3664:6;3718:3;3711:4;3703:6;3699:17;3695:27;3685:55;;3736:1;3733;3726:12;3685:55;-1:-1:-1;3759:20:1;;3802:18;3791:30;;3788:50;;;3834:1;3831;3824:12;3788:50;3871:4;3863:6;3859:17;3847:29;;3931:3;3924:4;3914:6;3911:1;3907:14;3899:6;3895:27;3891:38;3888:47;3885:67;;;3948:1;3945;3938:12;3885:67;3591:367;;;;;:::o;3963:773::-;4085:6;4093;4101;4109;4162:2;4150:9;4141:7;4137:23;4133:32;4130:52;;;4178:1;4175;4168:12;4130:52;4218:9;4205:23;4247:18;4288:2;4280:6;4277:14;4274:34;;;4304:1;4301;4294:12;4274:34;4343:70;4405:7;4396:6;4385:9;4381:22;4343:70;:::i;:::-;4432:8;;-1:-1:-1;4317:96:1;-1:-1:-1;4520:2:1;4505:18;;4492:32;;-1:-1:-1;4536:16:1;;;4533:36;;;4565:1;4562;4555:12;4533:36;;4604:72;4668:7;4657:8;4646:9;4642:24;4604:72;:::i;:::-;3963:773;;;;-1:-1:-1;4695:8:1;-1:-1:-1;;;;3963:773:1:o;5190:118::-;5276:5;5269:13;5262:21;5255:5;5252:32;5242:60;;5298:1;5295;5288:12;5313:309;5378:6;5386;5439:2;5427:9;5418:7;5414:23;5410:32;5407:52;;;5455:1;5452;5445:12;5407:52;5491:9;5478:23;5468:33;;5551:2;5540:9;5536:18;5523:32;5564:28;5586:5;5564:28;:::i;:::-;5611:5;5601:15;;;5313:309;;;;;:::o;6143:388::-;6211:6;6219;6272:2;6260:9;6251:7;6247:23;6243:32;6240:52;;;6288:1;6285;6278:12;6240:52;6327:9;6314:23;6346:31;6371:5;6346:31;:::i;:::-;6396:5;-1:-1:-1;6453:2:1;6438:18;;6425:32;6466:33;6425:32;6466:33;:::i;6536:127::-;6597:10;6592:3;6588:20;6585:1;6578:31;6628:4;6625:1;6618:15;6652:4;6649:1;6642:15;6668:422;6757:1;6800:5;6757:1;6814:270;6835:7;6825:8;6822:21;6814:270;;;6894:4;6890:1;6886:6;6882:17;6876:4;6873:27;6870:53;;;6903:18;;:::i;:::-;6953:7;6943:8;6939:22;6936:55;;;6973:16;;;;6936:55;7052:22;;;;7012:15;;;;6814:270;;;6818:3;6668:422;;;;;:::o;7095:806::-;7144:5;7174:8;7164:80;;-1:-1:-1;7215:1:1;7229:5;;7164:80;7263:4;7253:76;;-1:-1:-1;7300:1:1;7314:5;;7253:76;7345:4;7363:1;7358:59;;;;7431:1;7426:130;;;;7338:218;;7358:59;7388:1;7379:10;;7402:5;;;7426:130;7463:3;7453:8;7450:17;7447:43;;;7470:18;;:::i;:::-;-1:-1:-1;;7526:1:1;7512:16;;7541:5;;7338:218;;7640:2;7630:8;7627:16;7621:3;7615:4;7612:13;7608:36;7602:2;7592:8;7589:16;7584:2;7578:4;7575:12;7571:35;7568:77;7565:159;;;-1:-1:-1;7677:19:1;;;7709:5;;7565:159;7756:34;7781:8;7775:4;7756:34;:::i;:::-;7826:6;7822:1;7818:6;7814:19;7805:7;7802:32;7799:58;;;7837:18;;:::i;:::-;7875:20;;7095:806;-1:-1:-1;;;7095:806:1:o;7906:140::-;7964:5;7993:47;8034:4;8024:8;8020:19;8014:4;7993:47;:::i;8051:168::-;8091:7;8157:1;8153;8149:6;8145:14;8142:1;8139:21;8134:1;8127:9;8120:17;8116:45;8113:71;;;8164:18;;:::i;:::-;-1:-1:-1;8204:9:1;;8051:168::o;8224:217::-;8264:1;8290;8280:132;;8334:10;8329:3;8325:20;8322:1;8315:31;8369:4;8366:1;8359:15;8397:4;8394:1;8387:15;8280:132;-1:-1:-1;8426:9:1;;8224:217::o;8446:356::-;8648:2;8630:21;;;8667:18;;;8660:30;8726:34;8721:2;8706:18;;8699:62;8793:2;8778:18;;8446:356::o;8807:125::-;8847:4;8875:1;8872;8869:8;8866:34;;;8880:18;;:::i;:::-;-1:-1:-1;8917:9:1;;8807:125::o;8937:184::-;9007:6;9060:2;9048:9;9039:7;9035:23;9031:32;9028:52;;;9076:1;9073;9066:12;9028:52;-1:-1:-1;9099:16:1;;8937:184;-1:-1:-1;8937:184:1:o;9482:128::-;9522:3;9553:1;9549:6;9546:1;9543:13;9540:39;;;9559:18;;:::i;:::-;-1:-1:-1;9595:9:1;;9482:128::o;9972:127::-;10033:10;10028:3;10024:20;10021:1;10014:31;10064:4;10061:1;10054:15;10088:4;10085:1;10078:15;10104:135;10143:3;10164:17;;;10161:43;;10184:18;;:::i;:::-;-1:-1:-1;10231:1:1;10220:13;;10104:135::o;10655:351::-;10857:2;10839:21;;;10896:2;10876:18;;;10869:30;-1:-1:-1;;;10930:2:1;10915:18;;10908:57;10997:2;10982:18;;10655:351::o;11011:127::-;11072:10;11067:3;11063:20;11060:1;11053:31;11103:4;11100:1;11093:15;11127:4;11124:1;11117:15;12601:251;12671:6;12724:2;12712:9;12703:7;12699:23;12695:32;12692:52;;;12740:1;12737;12730:12;12692:52;12772:9;12766:16;12791:31;12816:5;12791:31;:::i;13166:607::-;-1:-1:-1;;;;;13525:15:1;;;13507:34;;13572:2;13557:18;;13550:34;;;;13615:2;13600:18;;13593:34;;;;13658:2;13643:18;;13636:34;;;;13707:15;;;13701:3;13686:19;;13679:44;13487:3;13739:19;;13732:35;;;;13456:3;13441:19;;13166:607::o;13778:306::-;13866:6;13874;13882;13935:2;13923:9;13914:7;13910:23;13906:32;13903:52;;;13951:1;13948;13941:12;13903:52;13980:9;13974:16;13964:26;;14030:2;14019:9;14015:18;14009:25;13999:35;;14074:2;14063:9;14059:18;14053:25;14043:35;;13778:306;;;;;:::o;14368:245::-;14435:6;14488:2;14476:9;14467:7;14463:23;14459:32;14456:52;;;14504:1;14501;14494:12;14456:52;14536:9;14530:16;14555:28;14577:5;14555:28;:::i;16390:127::-;16451:10;16446:3;16442:20;16439:1;16432:31;16482:4;16479:1;16472:15;16506:4;16503:1;16496:15;16522:461;16575:3;16613:5;16607:12;16640:6;16635:3;16628:19;16666:4;16695:2;16690:3;16686:12;16679:19;;16732:2;16725:5;16721:14;16753:1;16763:195;16777:6;16774:1;16771:13;16763:195;;;16842:13;;-1:-1:-1;;;;;16838:39:1;16826:52;;16898:12;;;;16933:15;;;;16874:1;16792:9;16763:195;;;-1:-1:-1;16974:3:1;;16522:461;-1:-1:-1;;;;;16522:461:1:o;16988:332::-;17195:6;17184:9;17177:25;17238:2;17233;17222:9;17218:18;17211:30;17158:4;17258:56;17310:2;17299:9;17295:18;17287:6;17258:56;:::i;:::-;17250:64;16988:332;-1:-1:-1;;;;16988:332:1:o;17325:1105::-;17420:6;17451:2;17494;17482:9;17473:7;17469:23;17465:32;17462:52;;;17510:1;17507;17500:12;17462:52;17543:9;17537:16;17572:18;17613:2;17605:6;17602:14;17599:34;;;17629:1;17626;17619:12;17599:34;17667:6;17656:9;17652:22;17642:32;;17712:7;17705:4;17701:2;17697:13;17693:27;17683:55;;17734:1;17731;17724:12;17683:55;17763:2;17757:9;17785:2;17781;17778:10;17775:36;;;17791:18;;:::i;:::-;17837:2;17834:1;17830:10;17869:2;17863:9;17932:2;17928:7;17923:2;17919;17915:11;17911:25;17903:6;17899:38;17987:6;17975:10;17972:22;17967:2;17955:10;17952:18;17949:46;17946:72;;;17998:18;;:::i;:::-;18034:2;18027:22;18084:18;;;18118:15;;;;-1:-1:-1;18160:11:1;;;18156:20;;;18188:19;;;18185:39;;;18220:1;18217;18210:12;18185:39;18244:11;;;;18264:135;18280:6;18275:3;18272:15;18264:135;;;18346:10;;18334:23;;18297:12;;;;18377;;;;18264:135;;;18418:6;17325:1105;-1:-1:-1;;;;;;;;17325:1105:1:o;18838:582::-;19137:6;19126:9;19119:25;19180:6;19175:2;19164:9;19160:18;19153:34;19223:3;19218:2;19207:9;19203:18;19196:31;19100:4;19244:57;19296:3;19285:9;19281:19;19273:6;19244:57;:::i;:::-;-1:-1:-1;;;;;19337:32:1;;;;19332:2;19317:18;;19310:60;-1:-1:-1;19401:3:1;19386:19;19379:35;19236:65;18838:582;-1:-1:-1;;;18838:582:1:o

Swarm Source

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