ETH Price: $3,337.63 (+0.38%)
Gas: 10.6 Gwei

Token

Apollo Inu (APOLLO)
 

Overview

Max Total Supply

2,000,000,000,000 APOLLO

Holders

4,449 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
11,044.470230895 APOLLO

Value
$0.00
0x6e1f5014a600dd500ecb16ceddc73d8a9adc578b
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Apollo is a community-run DAO and token to support and fund creative people to achieve their goals.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
ApolloInu

Compiler Version
v0.8.3+commit.8d00100c

Optimization Enabled:
Yes with 99999 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT


pragma solidity >=0.8.0 <0.9.0;

//Use 0.8.3

library SafeMath {

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


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

    
}

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

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

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

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

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 ApolloInu is IERC20, Context {
    using SafeMath for uint256;

    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;

    mapping (address => bool) private _isExcludedFromReflection;
    address[] private _excludedFromReflection;
   
    uint256 private constant MAX = ~uint256(0);
    uint256 private constant _tTotal = 2 * 10**12 * 10**9;
    uint256 public rTotal = (MAX - (MAX % _tTotal));
    uint256 public tFeeTotal;

    string private _name = 'Apollo Inu';
    string private _symbol = 'APOLLO';
    uint8 private _decimals = 9;
    
    uint256 public reflectionFee = 3;
    uint256 public burnFee = 2;
    uint256 public artistFee = 1;
    
    uint256 private _previousReflectionFee = 0;
    uint256 private _previousBurnFee = 0;
    uint256 private _previousArtistFee = 0;
    
    address public burnAddress = address(0);
    address public artistDAO;
    
    address[] private _excludedFromFees;

    IUniswapV2Router02 public uniswapRouter;
    address public ethPair;
    
    event newDaoAddress(address indexed newDAO);

    constructor () {
        _rOwned[_msgSender()] = rTotal;

        uniswapRouter = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        IUniswapV2Factory factory = IUniswapV2Factory(uniswapRouter.factory());
        ethPair = factory.createPair(address(this),uniswapRouter.WETH());

        artistDAO = _msgSender();
        
        excludeAccountFromReflection(ethPair);
        excludeAccountFromReflection(burnAddress);
        excludeAccountFromReflection(address(this));
        excludeAccountFromReflection(artistDAO);

        excludeFromFees(burnAddress);
        excludeFromFees(artistDAO);
        
        
        emit Transfer(address(0), _msgSender(), _tTotal);
    }

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

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

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

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

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

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

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

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

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

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

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

    function isExcludedFromReflection(address account) public view returns (bool) {
        return _isExcludedFromReflection[account];
    }

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

    function reflect(uint256 tAmount) public {
        address sender = _msgSender();
        require(!_isExcludedFromReflection[sender], "Excluded addresses cannot call this function");
        (uint256 rAmount,,,,) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount, "ERC20: Amount higher than sender balance");
        rTotal = rTotal - rAmount;
        tFeeTotal = tFeeTotal + (tAmount);
    }

    function burn(uint256 burnAmount) external {
        removeAllFee();
        if(isExcludedFromReflection(_msgSender())) {
            _transferBothExcluded(_msgSender(), burnAddress, burnAmount);
        } else {
            _transferToExcluded(_msgSender(), burnAddress, burnAmount);
        }
        restoreAllFee();
    }

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

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

    function excludeAccountFromReflection(address account) private {
        require(!_isExcludedFromReflection[account], "Account is already excluded");
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcludedFromReflection[account] = true;
        _excludedFromReflection.push(account);
    }

    function includeAccount(address account) private {
        require(_isExcludedFromReflection[account], "Account is already excluded");
        for (uint256 i = 0; i < _excludedFromReflection.length; i++) {
            if (_excludedFromReflection[i] == account) {
                _excludedFromReflection[i] = _excludedFromReflection[_excludedFromReflection.length - 1];
                _tOwned[account] = 0;
                _isExcludedFromReflection[account] = false;
                _excludedFromReflection.pop();
                break;
            }
        }
    }

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

    function _transfer(address sender, address recipient, uint256 amount) private {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        
        bool recipientExcludedFromFees = isExcludedFromFees(recipient);
        if(recipientExcludedFromFees || (sender == artistDAO)){
            removeAllFee();
        }
        
        if (_isExcludedFromReflection[sender] && !_isExcludedFromReflection[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcludedFromReflection[sender] && _isExcludedFromReflection[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (!_isExcludedFromReflection[sender] && !_isExcludedFromReflection[recipient]) {
            _transferStandard(sender, recipient, amount);
        } else if (_isExcludedFromReflection[sender] && _isExcludedFromReflection[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }

        if(recipientExcludedFromFees) {
            restoreAllFee();
        }
        
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 tTransferAmount, uint256 tFeeAmount, uint256 currentRate) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount, "ERC20: Amount higher than sender balance");
        _rOwned[recipient] = _rOwned[recipient] + rTransferAmount;       
        if(tFeeAmount > 0) {
            _handleFees(tAmount, currentRate);
        }
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferToExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 tTransferAmount, uint256 tFeeAmount, uint256 currentRate) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount, "ERC20: Amount higher than sender balance");
        _tOwned[recipient] = _tOwned[recipient] + tTransferAmount;
        _rOwned[recipient] = _rOwned[recipient] + rTransferAmount;           
        if(tFeeAmount > 0) {
            _handleFees(tAmount, currentRate);
        }

        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 tTransferAmount, uint256 tFeeAmount, uint256 currentRate) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount, "ERC20: Amount higher than sender balance");
        _rOwned[sender] = _rOwned[sender].sub(rAmount, "ERC20: Amount higher than sender balance");
        _rOwned[recipient] = _rOwned[recipient] + rTransferAmount;   
        if(tFeeAmount > 0) {
            _handleFees(tAmount, currentRate);
        }
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 tTransferAmount, uint256 tFeeAmount, uint256 currentRate) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount, "ERC20: Amount higher than sender balance");
        _rOwned[sender] = _rOwned[sender].sub(rAmount, "ERC20: Amount higher than sender balance");
        _tOwned[recipient] = _tOwned[recipient] + tTransferAmount;
        _rOwned[recipient] = _rOwned[recipient] + rTransferAmount;
        if(tFeeAmount > 0) {
            _handleFees(tAmount, currentRate);
        }
        emit Transfer(sender, recipient, tTransferAmount);
    }
    
    function _handleFees(uint256 tAmount, uint256 currentRate) private {
        uint256 tReflection = tAmount * reflectionFee / 100;
        uint256 rReflection = tReflection * currentRate;
        rTotal = rTotal - rReflection;
        tFeeTotal = tFeeTotal + tReflection;
        
        uint256 tBurn = tAmount * burnFee / 100;
        uint256 rBurn = tBurn * currentRate;
        _rOwned[burnAddress] = _rOwned[burnAddress] + rBurn;
        _tOwned[burnAddress] = _tOwned[burnAddress] + tBurn;
        
        uint256 tArtist = tAmount * artistFee / 100;
        uint256 rArtist = tArtist * currentRate;
        _rOwned[artistDAO] = _rOwned[artistDAO] + rArtist;
        _tOwned[artistDAO] = _tOwned[artistDAO] + tArtist;
    }

    function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256) {
        (uint256 tTransferAmount, uint256 tFeeAmount) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 currentRate) = _getRValues(tAmount, tFeeAmount);
        return (rAmount, rTransferAmount, tTransferAmount, tFeeAmount, currentRate);
    }

    function _getTValues(uint256 tAmount) private view returns (uint256, uint256) {
        uint256 totalFee = reflectionFee + burnFee + artistFee;
        uint256 tFees = tAmount * totalFee / 100;
        uint256 tTransferAmount = tAmount - tFees;
        return (tTransferAmount, tFees);
    }

    function _getRValues(uint256 tAmount, uint256 tFees) private view returns (uint256, uint256, uint256) {
        uint256 currentRate = _getRate();
        uint256 rAmount = tAmount * currentRate;
        uint256 rFees = tFees * currentRate;
        uint256 rTransferAmount = rAmount - rFees;
        return (rAmount, rTransferAmount, currentRate);
    }

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

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = rTotal;
        uint256 tSupply = _tTotal;      
        for (uint256 i = 0; i < _excludedFromReflection.length; i++) {
            if (_rOwned[_excludedFromReflection[i]] > rSupply || _tOwned[_excludedFromReflection[i]] > tSupply) return (rTotal, _tTotal);
            rSupply = rSupply - _rOwned[_excludedFromReflection[i]];
            tSupply = tSupply - _tOwned[_excludedFromReflection[i]];
        }
        if (rSupply < rTotal.div(_tTotal)) return (rTotal, _tTotal);
        return (rSupply, tSupply);
    }
    
    
    function isExcludedFromFees(address user) public view returns (bool) {
        for(uint256 i = 0; i < _excludedFromFees.length; i++){
            if(_excludedFromFees[i] == user) {
                return true;
            }
        }
        return false;
    }
    
    function excludeFromFees(address newUser) private {
        require(!isExcludedFromFees(newUser), "Account is already excluded from fees.");
        _excludedFromFees.push(newUser);
    }
    
    function removeFromExcludeFromFees(address account) private {
        require(isExcludedFromFees(account), "Account isn't excluded");
        for (uint256 i = 0; i < _excludedFromFees.length; i++) {
            if (_excludedFromFees[i] == account) {
                _excludedFromFees[i] = _excludedFromFees[_excludedFromFees.length - 1];
                _excludedFromFees.pop();
                break;
            }
        }
    }

    
    function removeAllFee() private {
        if(burnFee == 0 && reflectionFee == 0 && artistFee ==0) return;
        
        _previousBurnFee = burnFee;
        _previousReflectionFee = reflectionFee;
        _previousArtistFee = artistFee;
        
        burnFee = 0;
        reflectionFee = 0;
        artistFee = 0;
    }
    
    function restoreAllFee() private {
        burnFee = _previousBurnFee;
        reflectionFee = _previousReflectionFee;
        artistFee = _previousArtistFee;
    }

    function changeArtistAddress(address newAddress) external {
        require(_msgSender() == artistDAO , "Only current artistDAO can change the address");
        excludeAccountFromReflection(newAddress);
        excludeFromFees(newAddress);
        removeAllFee();
        _transferBothExcluded(artistDAO, newAddress, balanceOf(artistDAO));
        restoreAllFee();

        includeAccount(artistDAO);
        removeFromExcludeFromFees(artistDAO);


        artistDAO = newAddress;
        emit newDaoAddress(newAddress);
    }



    
    
}

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":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":"newDAO","type":"address"}],"name":"newDaoAddress","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"artistDAO","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"artistFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"uint256","name":"burnAmount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"burnAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"changeArtistAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ethPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":"user","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReflection","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"reflect","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reflectionFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tFeeTotal","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":"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":[],"name":"uniswapRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

60806040526200001b686c6b935b8bbd40000060001962000a4c565b6200002990600019620009d7565b60055560408051808201909152600a8082526941706f6c6c6f20496e7560b01b60209092019182526200005f91600791620008f1565b506040805180820190915260068082526541504f4c4c4f60d01b60209092019182526200008f91600891620008f1565b506009805460ff1916811790556003600a556002600b556001600c556000600d819055600e819055600f55601080546001600160a01b0319169055348015620000d757600080fd5b506005543360009081526020818152604080832093909355601380546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d908117909155835163c45a015560e01b815293519293909263c45a015592600480840193919291829003018186803b1580156200014e57600080fd5b505afa15801562000163573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000189919062000997565b9050806001600160a01b031663c9c6539630601360009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620001ea57600080fd5b505afa158015620001ff573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000225919062000997565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200026e57600080fd5b505af115801562000283573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a9919062000997565b601480546001600160a01b0319166001600160a01b0392909216919091179055620002d13390565b601180546001600160a01b0319166001600160a01b03928316179055601454620002fc9116620003ab565b60105462000313906001600160a01b0316620003ab565b6200031e30620003ab565b60115462000335906001600160a01b0316620003ab565b6010546200034c906001600160a01b0316620004dd565b60115462000363906001600160a01b0316620004dd565b604051686c6b935b8bbd400000815233906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35062000a8f565b6001600160a01b03811660009081526003602052604090205460ff16156200041a5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064015b60405180910390fd5b6001600160a01b0381166000908152602081905260409020541562000477576001600160a01b0381166000908152602081905260409020546200045d9062000598565b6001600160a01b0382166000908152600160205260409020555b6001600160a01b03166000818152600360205260408120805460ff191660019081179091556004805491820181559091527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180546001600160a01b0319169091179055565b620004e88162000632565b15620005465760405162461bcd60e51b815260206004820152602660248201527f4163636f756e7420697320616c7265616479206578636c756465642066726f6d604482015265103332b2b99760d11b606482015260840162000411565b601280546001810182556000919091527fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec34440180546001600160a01b0319166001600160a01b0392909216919091179055565b6000600554821115620006015760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b606482015260840162000411565b60006200060d620006b2565b9050620006298184620006e560201b62000c701790919060201c565b9150505b919050565b6000805b601254811015620006a957826001600160a01b0316601282815481106200066d57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03161415620006945760019150506200062d565b80620006a08162000a2e565b91505062000636565b50600092915050565b60008080620006c0620006fa565b91509150620006de8183620006e560201b62000c701790919060201c565b9250505090565b6000620006f38284620009c0565b9392505050565b6005546000908190686c6b935b8bbd400000825b600454811015620008a05782600080600484815481106200073f57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020541180620007ba57508160016000600484815481106200079357634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15620007da57600554686c6b935b8bbd40000094509450505050620008ed565b60008060048381548110620007ff57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054620008309084620009d7565b925060016000600483815481106200085857634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054620008899083620009d7565b915080620008978162000a2e565b9150506200070e565b50620008c6686c6b935b8bbd400000600554620006e560201b62000c701790919060201c565b821015620008e757600554686c6b935b8bbd400000935093505050620008ed565b90925090505b9091565b828054620008ff90620009f1565b90600052602060002090601f0160209004810192826200092357600085556200096e565b82601f106200093e57805160ff19168380011785556200096e565b828001600101855582156200096e579182015b828111156200096e57825182559160200191906001019062000951565b506200097c92915062000980565b5090565b5b808211156200097c576000815560010162000981565b600060208284031215620009a9578081fd5b81516001600160a01b0381168114620006f3578182fd5b600082620009d257620009d262000a79565b500490565b600082821015620009ec57620009ec62000a63565b500390565b600181811c9082168062000a0657607f821691505b6020821081141562000a2857634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141562000a455762000a4562000a63565b5060010190565b60008262000a5e5762000a5e62000a79565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b6127b58062000a9f6000396000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c8063518bc278116100f957806383ad799411610097578063a9059cbb11610071578063a9059cbb14610401578063b25332ae14610414578063dd62ed3e1461041d578063fce589d814610463576101c4565b806383ad7994146103dd57806395d89b41146103e6578063a457c2d7146103ee576101c4565b806370d5ae05116100d357806370d5ae0514610351578063735de9f7146103715780637b3a400a146103915780637d459db3146103a4576101c4565b8063518bc27814610315578063622a69c61461033557806370a082311461033e576101c4565b80632d83811911610166578063395093511161014057806339509351146102c957806342966c68146102dc5780634549b039146102ef5780634fbee19314610302576101c4565b80632d83811914610298578063313ce567146102ab57806331a75bd0146102c0576101c4565b806313114a9d116101a257806313114a9d1461021f57806318160ddd1461023157806322d0c30d1461024057806323b872dd14610285576101c4565b8063053ab182146101c957806306fdde03146101de578063095ea7b3146101fc575b600080fd5b6101dc6101d73660046124ed565b61046c565b005b6101e66105b9565b6040516101f39190612538565b60405180910390f35b61020f61020a3660046124c4565b61064b565b60405190151581526020016101f3565b6006545b6040519081526020016101f3565b686c6b935b8bbd400000610223565b6014546102609073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101f3565b61020f610293366004612489565b610662565b6102236102a63660046124ed565b6106d8565b60095460405160ff90911681526020016101f3565b61022360065481565b61020f6102d73660046124c4565b61078b565b6101dc6102ea3660046124ed565b6107cf565b6102236102fd366004612505565b61084a565b61020f61031036600461243d565b6108f6565b6011546102609073ffffffffffffffffffffffffffffffffffffffff1681565b61022360055481565b61022361034c36600461243d565b6109a2565b6010546102609073ffffffffffffffffffffffffffffffffffffffff1681565b6013546102609073ffffffffffffffffffffffffffffffffffffffff1681565b6101dc61039f36600461243d565b610a2b565b61020f6103b236600461243d565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205460ff1690565b610223600a5481565b6101e6610bf8565b61020f6103fc3660046124c4565b610c07565b61020f61040f3660046124c4565b610c63565b610223600c5481565b61022361042b366004612457565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260026020908152604080832093909416825291909152205490565b610223600b5481565b3360008181526003602052604090205460ff1615610511576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201527f6869732066756e6374696f6e000000000000000000000000000000000000000060648201526084015b60405180910390fd5b600061051c83610c83565b50505050905061056c8160405180606001604052806028815260200161270b6028913973ffffffffffffffffffffffffffffffffffffffff85166000908152602081905260409020549190610cc1565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260409020556005546105a0908290612637565b6005556006546105b19084906125a9565b600655505050565b6060600780546105c89061264e565b80601f01602080910402602001604051908101604052809291908181526020018280546105f49061264e565b80156106415780601f1061061657610100808354040283529160200191610641565b820191906000526020600020905b81548152906001019060200180831161062457829003601f168201915b5050505050905090565b6000610658338484610d07565b5060015b92915050565b600061066f848484610eba565b6106ce84336106c9856040518060600160405280602881526020016127336028913973ffffffffffffffffffffffffffffffffffffffff8a1660009081526002602090815260408083203384529091529020549190610cc1565b610d07565b5060019392505050565b600060055482111561076c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201527f65666c656374696f6e73000000000000000000000000000000000000000000006064820152608401610508565b60006107766112af565b90506107828382610c70565b9150505b919050565b33600081815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916106589185906106c99086906125a9565b6107d76112d2565b6107e0336103b2565b1561080d576108083360105473ffffffffffffffffffffffffffffffffffffffff168361131b565b610830565b6108303360105473ffffffffffffffffffffffffffffffffffffffff1683611532565b610847600e54600b55600d54600a55600f54600c55565b50565b6000686c6b935b8bbd4000008311156108bf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610508565b816108dd5760006108cf84610c83565b5092945061065c9350505050565b60006108e884610c83565b5091945061065c9350505050565b6000805b601254811015610999578273ffffffffffffffffffffffffffffffffffffffff1660128281548110610955577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff161415610987576001915050610786565b80610991816126a2565b9150506108fa565b50600092915050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526003602052604081205460ff16156109fc575073ffffffffffffffffffffffffffffffffffffffff8116600090815260016020526040902054610786565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205461065c906106d8565b60115473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ae8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4f6e6c792063757272656e742061727469737444414f2063616e206368616e6760448201527f65207468652061646472657373000000000000000000000000000000000000006064820152608401610508565b610af181611597565b610afa81611751565b610b026112d2565b601154610b2e9073ffffffffffffffffffffffffffffffffffffffff1682610b29826109a2565b61131b565b610b45600e54600b55600d54600a55600f54600c55565b601154610b679073ffffffffffffffffffffffffffffffffffffffff1661185e565b601154610b899073ffffffffffffffffffffffffffffffffffffffff16611b4f565b601180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517f4bac9356b30273cf6c6b56f5f8abce14da2488d36631b85711b455870ab4f8b690600090a250565b6060600880546105c89061264e565b600061065833846106c98560405180606001604052806025815260200161275b6025913933600090815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8d1684529091529020549190610cc1565b6000610658338484610eba565b6000610c7c82846125c1565b9392505050565b6000806000806000806000610c9788611d7d565b915091506000806000610caa8b85611dd3565b919d909c50959a5093985092965092945050505050565b60008184841115610cff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105089190612538565b505050900390565b73ffffffffffffffffffffffffffffffffffffffff8316610da9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610508565b73ffffffffffffffffffffffffffffffffffffffff8216610e4c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610508565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610f5d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610508565b73ffffffffffffffffffffffffffffffffffffffff8216611000576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610508565b60008111611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610508565b600061109b836108f6565b905080806110c3575060115473ffffffffffffffffffffffffffffffffffffffff8581169116145b156110d0576110d06112d2565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604090205460ff16801561112b575073ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604090205460ff16155b156111405761113b848484611e1c565b61128c565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604090205460ff1615801561119b575073ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604090205460ff165b156111ab5761113b848484611532565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604090205460ff16158015611207575073ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604090205460ff16155b156112175761113b848484611f4b565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604090205460ff168015611271575073ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604090205460ff165b156112815761113b84848461131b565b61128c848484611f4b565b80156112a9576112a9600e54600b55600d54600a55600f54600c55565b50505050565b60008060006112bc611fb0565b90925090506112cb8282610c70565b9250505090565b600b541580156112e25750600a54155b80156112ee5750600c54155b156112f857611319565b600b8054600e55600a8054600d55600c8054600f5560009283905590829055555b565b600080600080600061132c86610c83565b945094509450945094506113808660405180606001604052806028815260200161270b6028913973ffffffffffffffffffffffffffffffffffffffff8b166000908152600160205260409020549190610cc1565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061140d8560405180606001604052806028815260200161270b6028913973ffffffffffffffffffffffffffffffffffffffff8b166000908152602081905260409020549190610cc1565b73ffffffffffffffffffffffffffffffffffffffff808a1660009081526020818152604080832094909455918a1681526001909152205461144f9084906125a9565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260016020908152604080832093909355819052205461148b9085906125a9565b73ffffffffffffffffffffffffffffffffffffffff881660009081526020819052604090205581156114c1576114c1868261221f565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161152091815260200190565b60405180910390a35050505050505050565b600080600080600061154386610c83565b9450945094509450945061140d8560405180606001604052806028815260200161270b6028913973ffffffffffffffffffffffffffffffffffffffff8b166000908152602081905260409020549190610cc1565b73ffffffffffffffffffffffffffffffffffffffff811660009081526003602052604090205460ff1615611627576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610508565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260208190526040902054156116a85773ffffffffffffffffffffffffffffffffffffffff8116600090815260208190526040902054611681906106d8565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600160205260409020555b73ffffffffffffffffffffffffffffffffffffffff16600081815260036020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091556004805491820181559091527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169091179055565b61175a816108f6565b156117e7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4163636f756e7420697320616c7265616479206578636c756465642066726f6d60448201527f20666565732e00000000000000000000000000000000000000000000000000006064820152608401610508565b601280546001810182556000919091527fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec34440180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b73ffffffffffffffffffffffffffffffffffffffff811660009081526003602052604090205460ff166118ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610508565b60005b600454811015611b4b578173ffffffffffffffffffffffffffffffffffffffff166004828154811061194b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff161415611b39576004805461198390600190612637565b815481106119ba577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000918252602090912001546004805473ffffffffffffffffffffffffffffffffffffffff9092169183908110611a1a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600091825260208083209190910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff948516179055918416815260018252604080822082905560039092522080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556004805480611adc577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60008281526020902081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055019055611b4b565b80611b43816126a2565b9150506118f0565b5050565b611b58816108f6565b611bbe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4163636f756e742069736e2774206578636c75646564000000000000000000006044820152606401610508565b60005b601254811015611b4b578173ffffffffffffffffffffffffffffffffffffffff1660128281548110611c1c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff161415611d6b5760128054611c5490600190612637565b81548110611c8b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000918252602090912001546012805473ffffffffffffffffffffffffffffffffffffffff9092169183908110611ceb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506012805480611adc577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b80611d75816126a2565b915050611bc1565b6000806000600c54600b54600a54611d9591906125a9565b611d9f91906125a9565b905060006064611daf83876125fa565b611db991906125c1565b90506000611dc78287612637565b94509092505050915091565b600080600080611de16112af565b90506000611def82886125fa565b90506000611dfd83886125fa565b90506000611e0b8284612637565b929992985092965090945050505050565b6000806000806000611e2d86610c83565b94509450945094509450611e818660405180606001604052806028815260200161270b6028913973ffffffffffffffffffffffffffffffffffffffff8b166000908152600160205260409020549190610cc1565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611f0e8560405180606001604052806028815260200161270b6028913973ffffffffffffffffffffffffffffffffffffffff8b166000908152602081905260409020549190610cc1565b73ffffffffffffffffffffffffffffffffffffffff808a16600090815260208190526040808220939093559089168152205461148b9085906125a9565b6000806000806000611f5c86610c83565b94509450945094509450611f0e8560405180606001604052806028815260200161270b6028913973ffffffffffffffffffffffffffffffffffffffff8b166000908152602081905260409020549190610cc1565b6005546000908190686c6b935b8bbd400000825b6004548110156121df57826000806004848154811061200c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff16835282019290925260400190205411806120b85750816001600060048481548110612084577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff168352820192909252604001902054115b156120d657600554686c6b935b8bbd4000009450945050505061221b565b60008060048381548110612113577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff16835282019290925260400190205461214f9084612637565b9250600160006004838154811061218f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff1683528201929092526040019020546121cb9083612637565b9150806121d7816126a2565b915050611fc4565b506005546121f690686c6b935b8bbd400000610c70565b82101561221557600554686c6b935b8bbd40000093509350505061221b565b90925090505b9091565b60006064600a548461223191906125fa565b61223b91906125c1565b9050600061224983836125fa565b9050806005546122599190612637565b60055560065461226a9083906125a9565b600655600b5460009060649061228090876125fa565b61228a91906125c1565b9050600061229885836125fa565b60105473ffffffffffffffffffffffffffffffffffffffff166000908152602081905260409020549091506122ce9082906125a9565b6010805473ffffffffffffffffffffffffffffffffffffffff9081166000908152602081815260408083209590955592549091168152600190915220546123169083906125a9565b60105473ffffffffffffffffffffffffffffffffffffffff16600090815260016020526040812091909155600c5460649061235190896125fa565b61235b91906125c1565b9050600061236987836125fa565b60115473ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490915061239f9082906125a9565b6011805473ffffffffffffffffffffffffffffffffffffffff9081166000908152602081815260408083209590955592549091168152600190915220546123e79083906125a9565b60115473ffffffffffffffffffffffffffffffffffffffff166000908152600160205260409020555050505050505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461078657600080fd5b60006020828403121561244e578081fd5b610c7c82612419565b60008060408385031215612469578081fd5b61247283612419565b915061248060208401612419565b90509250929050565b60008060006060848603121561249d578081fd5b6124a684612419565b92506124b460208501612419565b9150604084013590509250925092565b600080604083850312156124d6578182fd5b6124df83612419565b946020939093013593505050565b6000602082840312156124fe578081fd5b5035919050565b60008060408385031215612517578182fd5b823591506020830135801515811461252d578182fd5b809150509250929050565b6000602080835283518082850152825b8181101561256457858101830151858201604001528201612548565b818111156125755783604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b600082198211156125bc576125bc6126db565b500190565b6000826125f5577f4e487b710000000000000000000000000000000000000000000000000000000081526012600452602481fd5b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612632576126326126db565b500290565b600082821015612649576126496126db565b500390565b600181811c9082168061266257607f821691505b6020821081141561269c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156126d4576126d46126db565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfe45524332303a20416d6f756e7420686967686572207468616e2073656e6465722062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212206593a9947e3e99e242c2137949c41488ac1fdd05d952e79e6757fa057ec360e464736f6c63430008030033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101c45760003560e01c8063518bc278116100f957806383ad799411610097578063a9059cbb11610071578063a9059cbb14610401578063b25332ae14610414578063dd62ed3e1461041d578063fce589d814610463576101c4565b806383ad7994146103dd57806395d89b41146103e6578063a457c2d7146103ee576101c4565b806370d5ae05116100d357806370d5ae0514610351578063735de9f7146103715780637b3a400a146103915780637d459db3146103a4576101c4565b8063518bc27814610315578063622a69c61461033557806370a082311461033e576101c4565b80632d83811911610166578063395093511161014057806339509351146102c957806342966c68146102dc5780634549b039146102ef5780634fbee19314610302576101c4565b80632d83811914610298578063313ce567146102ab57806331a75bd0146102c0576101c4565b806313114a9d116101a257806313114a9d1461021f57806318160ddd1461023157806322d0c30d1461024057806323b872dd14610285576101c4565b8063053ab182146101c957806306fdde03146101de578063095ea7b3146101fc575b600080fd5b6101dc6101d73660046124ed565b61046c565b005b6101e66105b9565b6040516101f39190612538565b60405180910390f35b61020f61020a3660046124c4565b61064b565b60405190151581526020016101f3565b6006545b6040519081526020016101f3565b686c6b935b8bbd400000610223565b6014546102609073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101f3565b61020f610293366004612489565b610662565b6102236102a63660046124ed565b6106d8565b60095460405160ff90911681526020016101f3565b61022360065481565b61020f6102d73660046124c4565b61078b565b6101dc6102ea3660046124ed565b6107cf565b6102236102fd366004612505565b61084a565b61020f61031036600461243d565b6108f6565b6011546102609073ffffffffffffffffffffffffffffffffffffffff1681565b61022360055481565b61022361034c36600461243d565b6109a2565b6010546102609073ffffffffffffffffffffffffffffffffffffffff1681565b6013546102609073ffffffffffffffffffffffffffffffffffffffff1681565b6101dc61039f36600461243d565b610a2b565b61020f6103b236600461243d565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205460ff1690565b610223600a5481565b6101e6610bf8565b61020f6103fc3660046124c4565b610c07565b61020f61040f3660046124c4565b610c63565b610223600c5481565b61022361042b366004612457565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260026020908152604080832093909416825291909152205490565b610223600b5481565b3360008181526003602052604090205460ff1615610511576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201527f6869732066756e6374696f6e000000000000000000000000000000000000000060648201526084015b60405180910390fd5b600061051c83610c83565b50505050905061056c8160405180606001604052806028815260200161270b6028913973ffffffffffffffffffffffffffffffffffffffff85166000908152602081905260409020549190610cc1565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260409020556005546105a0908290612637565b6005556006546105b19084906125a9565b600655505050565b6060600780546105c89061264e565b80601f01602080910402602001604051908101604052809291908181526020018280546105f49061264e565b80156106415780601f1061061657610100808354040283529160200191610641565b820191906000526020600020905b81548152906001019060200180831161062457829003601f168201915b5050505050905090565b6000610658338484610d07565b5060015b92915050565b600061066f848484610eba565b6106ce84336106c9856040518060600160405280602881526020016127336028913973ffffffffffffffffffffffffffffffffffffffff8a1660009081526002602090815260408083203384529091529020549190610cc1565b610d07565b5060019392505050565b600060055482111561076c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201527f65666c656374696f6e73000000000000000000000000000000000000000000006064820152608401610508565b60006107766112af565b90506107828382610c70565b9150505b919050565b33600081815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916106589185906106c99086906125a9565b6107d76112d2565b6107e0336103b2565b1561080d576108083360105473ffffffffffffffffffffffffffffffffffffffff168361131b565b610830565b6108303360105473ffffffffffffffffffffffffffffffffffffffff1683611532565b610847600e54600b55600d54600a55600f54600c55565b50565b6000686c6b935b8bbd4000008311156108bf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610508565b816108dd5760006108cf84610c83565b5092945061065c9350505050565b60006108e884610c83565b5091945061065c9350505050565b6000805b601254811015610999578273ffffffffffffffffffffffffffffffffffffffff1660128281548110610955577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff161415610987576001915050610786565b80610991816126a2565b9150506108fa565b50600092915050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526003602052604081205460ff16156109fc575073ffffffffffffffffffffffffffffffffffffffff8116600090815260016020526040902054610786565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205461065c906106d8565b60115473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ae8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4f6e6c792063757272656e742061727469737444414f2063616e206368616e6760448201527f65207468652061646472657373000000000000000000000000000000000000006064820152608401610508565b610af181611597565b610afa81611751565b610b026112d2565b601154610b2e9073ffffffffffffffffffffffffffffffffffffffff1682610b29826109a2565b61131b565b610b45600e54600b55600d54600a55600f54600c55565b601154610b679073ffffffffffffffffffffffffffffffffffffffff1661185e565b601154610b899073ffffffffffffffffffffffffffffffffffffffff16611b4f565b601180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517f4bac9356b30273cf6c6b56f5f8abce14da2488d36631b85711b455870ab4f8b690600090a250565b6060600880546105c89061264e565b600061065833846106c98560405180606001604052806025815260200161275b6025913933600090815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8d1684529091529020549190610cc1565b6000610658338484610eba565b6000610c7c82846125c1565b9392505050565b6000806000806000806000610c9788611d7d565b915091506000806000610caa8b85611dd3565b919d909c50959a5093985092965092945050505050565b60008184841115610cff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105089190612538565b505050900390565b73ffffffffffffffffffffffffffffffffffffffff8316610da9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610508565b73ffffffffffffffffffffffffffffffffffffffff8216610e4c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610508565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610f5d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610508565b73ffffffffffffffffffffffffffffffffffffffff8216611000576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610508565b60008111611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610508565b600061109b836108f6565b905080806110c3575060115473ffffffffffffffffffffffffffffffffffffffff8581169116145b156110d0576110d06112d2565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604090205460ff16801561112b575073ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604090205460ff16155b156111405761113b848484611e1c565b61128c565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604090205460ff1615801561119b575073ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604090205460ff165b156111ab5761113b848484611532565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604090205460ff16158015611207575073ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604090205460ff16155b156112175761113b848484611f4b565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604090205460ff168015611271575073ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604090205460ff165b156112815761113b84848461131b565b61128c848484611f4b565b80156112a9576112a9600e54600b55600d54600a55600f54600c55565b50505050565b60008060006112bc611fb0565b90925090506112cb8282610c70565b9250505090565b600b541580156112e25750600a54155b80156112ee5750600c54155b156112f857611319565b600b8054600e55600a8054600d55600c8054600f5560009283905590829055555b565b600080600080600061132c86610c83565b945094509450945094506113808660405180606001604052806028815260200161270b6028913973ffffffffffffffffffffffffffffffffffffffff8b166000908152600160205260409020549190610cc1565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061140d8560405180606001604052806028815260200161270b6028913973ffffffffffffffffffffffffffffffffffffffff8b166000908152602081905260409020549190610cc1565b73ffffffffffffffffffffffffffffffffffffffff808a1660009081526020818152604080832094909455918a1681526001909152205461144f9084906125a9565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260016020908152604080832093909355819052205461148b9085906125a9565b73ffffffffffffffffffffffffffffffffffffffff881660009081526020819052604090205581156114c1576114c1868261221f565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161152091815260200190565b60405180910390a35050505050505050565b600080600080600061154386610c83565b9450945094509450945061140d8560405180606001604052806028815260200161270b6028913973ffffffffffffffffffffffffffffffffffffffff8b166000908152602081905260409020549190610cc1565b73ffffffffffffffffffffffffffffffffffffffff811660009081526003602052604090205460ff1615611627576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610508565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260208190526040902054156116a85773ffffffffffffffffffffffffffffffffffffffff8116600090815260208190526040902054611681906106d8565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600160205260409020555b73ffffffffffffffffffffffffffffffffffffffff16600081815260036020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091556004805491820181559091527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169091179055565b61175a816108f6565b156117e7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4163636f756e7420697320616c7265616479206578636c756465642066726f6d60448201527f20666565732e00000000000000000000000000000000000000000000000000006064820152608401610508565b601280546001810182556000919091527fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec34440180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b73ffffffffffffffffffffffffffffffffffffffff811660009081526003602052604090205460ff166118ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610508565b60005b600454811015611b4b578173ffffffffffffffffffffffffffffffffffffffff166004828154811061194b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff161415611b39576004805461198390600190612637565b815481106119ba577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000918252602090912001546004805473ffffffffffffffffffffffffffffffffffffffff9092169183908110611a1a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600091825260208083209190910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff948516179055918416815260018252604080822082905560039092522080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556004805480611adc577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60008281526020902081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055019055611b4b565b80611b43816126a2565b9150506118f0565b5050565b611b58816108f6565b611bbe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4163636f756e742069736e2774206578636c75646564000000000000000000006044820152606401610508565b60005b601254811015611b4b578173ffffffffffffffffffffffffffffffffffffffff1660128281548110611c1c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff161415611d6b5760128054611c5490600190612637565b81548110611c8b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000918252602090912001546012805473ffffffffffffffffffffffffffffffffffffffff9092169183908110611ceb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506012805480611adc577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b80611d75816126a2565b915050611bc1565b6000806000600c54600b54600a54611d9591906125a9565b611d9f91906125a9565b905060006064611daf83876125fa565b611db991906125c1565b90506000611dc78287612637565b94509092505050915091565b600080600080611de16112af565b90506000611def82886125fa565b90506000611dfd83886125fa565b90506000611e0b8284612637565b929992985092965090945050505050565b6000806000806000611e2d86610c83565b94509450945094509450611e818660405180606001604052806028815260200161270b6028913973ffffffffffffffffffffffffffffffffffffffff8b166000908152600160205260409020549190610cc1565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611f0e8560405180606001604052806028815260200161270b6028913973ffffffffffffffffffffffffffffffffffffffff8b166000908152602081905260409020549190610cc1565b73ffffffffffffffffffffffffffffffffffffffff808a16600090815260208190526040808220939093559089168152205461148b9085906125a9565b6000806000806000611f5c86610c83565b94509450945094509450611f0e8560405180606001604052806028815260200161270b6028913973ffffffffffffffffffffffffffffffffffffffff8b166000908152602081905260409020549190610cc1565b6005546000908190686c6b935b8bbd400000825b6004548110156121df57826000806004848154811061200c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff16835282019290925260400190205411806120b85750816001600060048481548110612084577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff168352820192909252604001902054115b156120d657600554686c6b935b8bbd4000009450945050505061221b565b60008060048381548110612113577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff16835282019290925260400190205461214f9084612637565b9250600160006004838154811061218f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff1683528201929092526040019020546121cb9083612637565b9150806121d7816126a2565b915050611fc4565b506005546121f690686c6b935b8bbd400000610c70565b82101561221557600554686c6b935b8bbd40000093509350505061221b565b90925090505b9091565b60006064600a548461223191906125fa565b61223b91906125c1565b9050600061224983836125fa565b9050806005546122599190612637565b60055560065461226a9083906125a9565b600655600b5460009060649061228090876125fa565b61228a91906125c1565b9050600061229885836125fa565b60105473ffffffffffffffffffffffffffffffffffffffff166000908152602081905260409020549091506122ce9082906125a9565b6010805473ffffffffffffffffffffffffffffffffffffffff9081166000908152602081815260408083209590955592549091168152600190915220546123169083906125a9565b60105473ffffffffffffffffffffffffffffffffffffffff16600090815260016020526040812091909155600c5460649061235190896125fa565b61235b91906125c1565b9050600061236987836125fa565b60115473ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490915061239f9082906125a9565b6011805473ffffffffffffffffffffffffffffffffffffffff9081166000908152602081815260408083209590955592549091168152600190915220546123e79083906125a9565b60115473ffffffffffffffffffffffffffffffffffffffff166000908152600160205260409020555050505050505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461078657600080fd5b60006020828403121561244e578081fd5b610c7c82612419565b60008060408385031215612469578081fd5b61247283612419565b915061248060208401612419565b90509250929050565b60008060006060848603121561249d578081fd5b6124a684612419565b92506124b460208501612419565b9150604084013590509250925092565b600080604083850312156124d6578182fd5b6124df83612419565b946020939093013593505050565b6000602082840312156124fe578081fd5b5035919050565b60008060408385031215612517578182fd5b823591506020830135801515811461252d578182fd5b809150509250929050565b6000602080835283518082850152825b8181101561256457858101830151858201604001528201612548565b818111156125755783604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b600082198211156125bc576125bc6126db565b500190565b6000826125f5577f4e487b710000000000000000000000000000000000000000000000000000000081526012600452602481fd5b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612632576126326126db565b500290565b600082821015612649576126496126db565b500390565b600181811c9082168061266257607f821691505b6020821081141561269c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156126d4576126d46126db565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfe45524332303a20416d6f756e7420686967686572207468616e2073656e6465722062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212206593a9947e3e99e242c2137949c41488ac1fdd05d952e79e6757fa057ec360e464736f6c63430008030033

Deployed Bytecode Sourcemap

1896:15505:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6000:426;;;;;;:::i;:::-;;:::i;:::-;;3836:83;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4762:163;;;;;;:::i;:::-;;:::i;:::-;;;2260:14:1;;2253:22;2235:41;;2223:2;2208:18;4762:163:0;2190:92:1;5906:86:0;5975:9;;5906:86;;;8096:25:1;;;8084:2;8069:18;5906:86:0;8051:76:1;4113:95:0;2359:18;4113:95;;3022:22;;;;;;;;;;;;2040:42:1;2028:55;;;2010:74;;1998:2;1983:18;3022:22:0;1965:125:1;4933:316:0;;;;;;:::i;:::-;;:::i;7217:252::-;;;;;;:::i;:::-;;:::i;4022:83::-;4088:9;;4022:83;;4088:9;;;;8274:36:1;;8262:2;8247:18;4022:83:0;8229:87:1;2438:24:0;;;;;;5257:216;;;;;;:::i;:::-;;:::i;6434:333::-;;;;;;:::i;:::-;;:::i;6775:434::-;;;;;;:::i;:::-;;:::i;15381:268::-;;;;;;:::i;:::-;;:::i;2895:24::-;;;;;;;;;2384:47;;;;;;4216:212;;;;;;:::i;:::-;;:::i;2849:39::-;;;;;;;;;2976;;;;;;;;;16839:541;;;;;;:::i;:::-;;:::i;5760:138::-;;;;;;:::i;:::-;5856:34;;5832:4;5856:34;;;:25;:34;;;;;;;;;5760:138;2593:32;;;;;;3927:87;;;:::i;5481:271::-;;;;;;:::i;:::-;;:::i;4436:167::-;;;;;;:::i;:::-;;:::i;2665:28::-;;;;;;4611:143;;;;;;:::i;:::-;4719:18;;;;4692:7;4719:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4611:143;2632:26;;;;;;6000:426;589:10;6052:14;6101:33;;;:25;:33;;;;;;;;6100:34;6092:91;;;;;;;7739:2:1;6092:91:0;;;7721:21:1;7778:2;7758:18;;;7751:30;7817:34;7797:18;;;7790:62;7888:14;7868:18;;;7861:42;7920:19;;6092:91:0;;;;;;;;;6195:15;6218:19;6229:7;6218:10;:19::i;:::-;6194:43;;;;;;6266:72;6286:7;6266:72;;;;;;;;;;;;;;;;;:15;;;:7;:15;;;;;;;;;;;;:72;:19;:72::i;:::-;6248:15;;;:7;:15;;;;;;;;;;:90;6358:6;;:16;;6367:7;;6358:16;:::i;:::-;6349:6;:25;6397:9;;:21;;6410:7;;6397:21;:::i;:::-;6385:9;:33;-1:-1:-1;;;6000:426:0:o;3836:83::-;3873:13;3906:5;3899:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3836:83;:::o;4762:163::-;4839:4;4856:39;589:10;4879:7;4888:6;4856:8;:39::i;:::-;-1:-1:-1;4913:4:0;4762:163;;;;;:::o;4933:316::-;5034:4;5051:36;5061:6;5069:9;5080:6;5051:9;:36::i;:::-;5098:121;5107:6;589:10;5129:89;5167:6;5129:89;;;;;;;;;;;;;;;;;:19;;;;;;;:11;:19;;;;;;;;589:10;5129:33;;;;;;;;;;:37;:89::i;:::-;5098:8;:121::i;:::-;-1:-1:-1;5237:4:0;4933:316;;;;;:::o;7217:252::-;7283:7;7322:6;;7311:7;:17;;7303:72;;;;;;;3816:2:1;7303:72:0;;;3798:21:1;3855:2;3835:18;;;3828:30;3894:34;3874:18;;;3867:62;3965:12;3945:18;;;3938:40;3995:19;;7303:72:0;3788:232:1;7303:72:0;7386:19;7409:10;:8;:10::i;:::-;7386:33;-1:-1:-1;7437:24:0;:7;7386:33;7437:11;:24::i;:::-;7430:31;;;7217:252;;;;:::o;5257:216::-;589:10;5346:4;5395:25;;;:11;:25;;;;;;;;;:34;;;;;;;;;;5346:4;;5363:80;;5386:7;;5395:47;;5432:10;;5395:47;:::i;6434:333::-;6488:14;:12;:14::i;:::-;6516:38;589:10;6541:12;509:98;6516:38;6513:221;;;6571:60;589:10;6607:11;;;;6620:10;6571:21;:60::i;:::-;6513:221;;;6664:58;589:10;6698:11;;;;6711:10;6664:19;:58::i;:::-;6744:15;16717:16;;16707:7;:26;16760:22;;16744:13;:38;16805:18;;16793:9;:30;16663:168;6744:15;6434:333;:::o;6775:434::-;6865:7;2359:18;6893:7;:18;;6885:62;;;;;;;5400:2:1;6885:62:0;;;5382:21:1;5439:2;5419:18;;;5412:30;5478:33;5458:18;;;5451:61;5529:18;;6885:62:0;5372:181:1;6885:62:0;6963:17;6958:244;;6998:15;7021:19;7032:7;7021:10;:19::i;:::-;-1:-1:-1;6997:43:0;;-1:-1:-1;7055:14:0;;-1:-1:-1;;;;7055:14:0;6958:244;7104:23;7134:19;7145:7;7134:10;:19::i;:::-;-1:-1:-1;7102:51:0;;-1:-1:-1;7168:22:0;;-1:-1:-1;;;;7168:22:0;15381:268;15444:4;;15461:158;15484:17;:24;15480:28;;15461:158;;;15556:4;15532:28;;:17;15550:1;15532:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;:28;15529:79;;;15588:4;15581:11;;;;;15529:79;15510:3;;;;:::i;:::-;;;;15461:158;;;-1:-1:-1;15636:5:0;;15381:268;-1:-1:-1;;15381:268:0:o;4216:212::-;4306:34;;;4282:7;4306:34;;;:25;:34;;;;;;;;4302:63;;;-1:-1:-1;4349:16:0;;;;;;;:7;:16;;;;;;4342:23;;4302:63;4403:16;;;:7;:16;;;;;;;;;;;4383:37;;:19;:37::i;16839:541::-;16932:9;;;;589:10;16916:25;;;16908:84;;;;;;;4986:2:1;16908:84:0;;;4968:21:1;5025:2;5005:18;;;4998:30;5064:34;5044:18;;;5037:62;5135:15;5115:18;;;5108:43;5168:19;;16908:84:0;4958:235:1;16908:84:0;17003:40;17032:10;17003:28;:40::i;:::-;17054:27;17070:10;17054:15;:27::i;:::-;17092:14;:12;:14::i;:::-;17139:9;;17117:66;;17139:9;;17150:10;17162:20;17139:9;17162;:20::i;:::-;17117:21;:66::i;:::-;17194:15;16717:16;;16707:7;:26;16760:22;;16744:13;:38;16805:18;;16793:9;:30;16663:168;17194:15;17237:9;;17222:25;;17237:9;;17222:14;:25::i;:::-;17284:9;;17258:36;;17284:9;;17258:25;:36::i;:::-;17309:9;:22;;;;;;;;;;;;;17347:25;;;;-1:-1:-1;;17347:25:0;16839:541;:::o;3927:87::-;3966:13;3999:7;3992:14;;;;;:::i;5481:271::-;5576:4;5593:129;589:10;5616:7;5625:96;5664:15;5625:96;;;;;;;;;;;;;;;;;589:10;5625:25;;;;:11;:25;;;;;;;;;:34;;;;;;;;;;;;:38;:96::i;4436:167::-;4514:4;4531:42;589:10;4555:9;4566:6;4531:9;:42::i;113:98::-;171:7;198:5;202:1;198;:5;:::i;:::-;191:12;113:98;-1:-1:-1;;;113:98:0:o;13507:386::-;13566:7;13575;13584;13593;13602;13623:23;13648:18;13670:20;13682:7;13670:11;:20::i;:::-;13622:68;;;;13702:15;13719:23;13744:19;13767:32;13779:7;13788:10;13767:11;:32::i;:::-;13701:98;;;;-1:-1:-1;13844:15:0;;-1:-1:-1;13861:10:0;;-1:-1:-1;13701:98:0;;-1:-1:-1;13507:386:0;;-1:-1:-1;;;;;13507:386:0:o;221:240::-;341:7;402:12;394:6;;;;386:29;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;437:5:0;;;221:240::o;8445:335::-;8538:19;;;8530:68;;;;;;;6927:2:1;8530:68:0;;;6909:21:1;6966:2;6946:18;;;6939:30;7005:34;6985:18;;;6978:62;7076:6;7056:18;;;7049:34;7100:19;;8530:68:0;6899:226:1;8530:68:0;8617:21;;;8609:68;;;;;;;4227:2:1;8609:68:0;;;4209:21:1;4266:2;4246:18;;;4239:30;4305:34;4285:18;;;4278:62;4376:4;4356:18;;;4349:32;4398:19;;8609:68:0;4199:224:1;8609:68:0;8688:18;;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;8740:32;;8096:25:1;;;8740:32:0;;8069:18:1;8740:32:0;;;;;;;8445:335;;;:::o;8788:1335::-;8885:20;;;8877:70;;;;;;;6521:2:1;8877:70:0;;;6503:21:1;6560:2;6540:18;;;6533:30;6599:34;6579:18;;;6572:62;6670:7;6650:18;;;6643:35;6695:19;;8877:70:0;6493:227:1;8877:70:0;8966:23;;;8958:71;;;;;;;3412:2:1;8958:71:0;;;3394:21:1;3451:2;3431:18;;;3424:30;3490:34;3470:18;;;3463:62;3561:5;3541:18;;;3534:33;3584:19;;8958:71:0;3384:225:1;8958:71:0;9057:1;9048:6;:10;9040:64;;;;;;;5760:2:1;9040:64:0;;;5742:21:1;5799:2;5779:18;;;5772:30;5838:34;5818:18;;;5811:62;5909:11;5889:18;;;5882:39;5938:19;;9040:64:0;5732:231:1;9040:64:0;9125:30;9158:29;9177:9;9158:18;:29::i;:::-;9125:62;;9201:25;:50;;;-1:-1:-1;9241:9:0;;;9231:19;;;9241:9;;9231:19;9201:50;9198:95;;;9267:14;:12;:14::i;:::-;9317:33;;;;;;;:25;:33;;;;;;;;:74;;;;-1:-1:-1;9355:36:0;;;;;;;:25;:36;;;;;;;;9354:37;9317:74;9313:709;;;9408:48;9430:6;9438:9;9449:6;9408:21;:48::i;:::-;9313:709;;;9479:33;;;;;;;:25;:33;;;;;;;;9478:34;:74;;;;-1:-1:-1;9516:36:0;;;;;;;:25;:36;;;;;;;;9478:74;9474:548;;;9569:46;9589:6;9597:9;9608:6;9569:19;:46::i;9474:548::-;9638:33;;;;;;;:25;:33;;;;;;;;9637:34;:75;;;;-1:-1:-1;9676:36:0;;;;;;;:25;:36;;;;;;;;9675:37;9637:75;9633:389;;;9729:44;9747:6;9755:9;9766:6;9729:17;:44::i;9633:389::-;9795:33;;;;;;;:25;:33;;;;;;;;:73;;;;-1:-1:-1;9832:36:0;;;;;;;:25;:36;;;;;;;;9795:73;9791:231;;;9885:48;9907:6;9915:9;9926:6;9885:21;:48::i;9791:231::-;9966:44;9984:6;9992:9;10003:6;9966:17;:44::i;:::-;10037:25;10034:72;;;10079:15;16717:16;;16707:7;:26;16760:22;;16744:13;:38;16805:18;;16793:9;:30;16663:168;10079:15;8788:1335;;;;:::o;14571:163::-;14612:7;14633:15;14650;14669:19;:17;:19::i;:::-;14632:56;;-1:-1:-1;14632:56:0;-1:-1:-1;14706:20:0;14632:56;;14706:11;:20::i;:::-;14699:27;;;;14571:163;:::o;16317:334::-;16363:7;;:12;:34;;;;-1:-1:-1;16379:13:0;;:18;16363:34;:51;;;;-1:-1:-1;16401:9:0;;:13;16363:51;16360:63;;;16416:7;;16360:63;16462:7;;;16443:16;:26;16505:13;;;16480:22;:38;16550:9;;;16529:18;:30;-1:-1:-1;16580:11:0;;;;16602:17;;;;16630:13;16317:334;:::o;12015:727::-;12118:15;12135:23;12160;12185:18;12205:19;12228;12239:7;12228:10;:19::i;:::-;12117:130;;;;;;;;;;12276:72;12296:7;12276:72;;;;;;;;;;;;;;;;;:15;;;;;;;:7;:15;;;;;;;:72;:19;:72::i;:::-;12258:7;:15;12266:6;12258:15;;;;;;;;;;;;;;;:90;;;;12377:72;12397:7;12377:72;;;;;;;;;;;;;;;;;:15;;;:7;:15;;;;;;;;;;;;:72;:19;:72::i;:::-;12359:15;;;;:7;:15;;;;;;;;;;;:90;;;;12481:18;;;;;:7;:18;;;;;:36;;12502:15;;12481:36;:::i;:::-;12460:18;;;;;;;:7;:18;;;;;;;;:57;;;;12549:18;;;;;:36;;12570:15;;12549:36;:::i;:::-;12528:18;;;:7;:18;;;;;;;;;;:57;12599:14;;12596:79;;12630:33;12642:7;12651:11;12630;:33::i;:::-;12707:9;12690:44;;12699:6;12690:44;;;12718:15;12690:44;;;;8096:25:1;;8084:2;8069:18;;8051:76;12690:44:0;;;;;;;;12015:727;;;;;;;;:::o;10700:637::-;10801:15;10818:23;10843;10868:18;10888:19;10911;10922:7;10911:10;:19::i;:::-;10800:130;;;;;;;;;;10959:72;10979:7;10959:72;;;;;;;;;;;;;;;;;:15;;;:7;:15;;;;;;;;;;;;:72;:19;:72::i;7477:375::-;7560:34;;;;;;;:25;:34;;;;;;;;7559:35;7551:75;;;;;;;4630:2:1;7551:75:0;;;4612:21:1;4669:2;4649:18;;;4642:30;4708:29;4688:18;;;4681:57;4755:18;;7551:75:0;4602:177:1;7551:75:0;7640:16;;;7659:1;7640:16;;;;;;;;;;;:20;7637:108;;7716:16;;;:7;:16;;;;;;;;;;;7696:37;;:19;:37::i;:::-;7677:16;;;;;;;:7;:16;;;;;:56;7637:108;7755:34;;;;;;:25;:34;;;;;:41;;;;7792:4;7755:41;;;;;;7807:23;:37;;;;;;;;;;;;;;;;;;;;;7477:375::o;15661:190::-;15731:27;15750:7;15731:18;:27::i;:::-;15730:28;15722:79;;;;;;;7332:2:1;15722:79:0;;;7314:21:1;7371:2;7351:18;;;7344:30;7410:34;7390:18;;;7383:62;7481:8;7461:18;;;7454:36;7507:19;;15722:79:0;7304:228:1;15722:79:0;15812:17;:31;;;;;;;-1:-1:-1;15812:31:0;;;;;;;;;;;;;;;;;;;;;15661:190::o;7860:577::-;7928:34;;;;;;;:25;:34;;;;;;;;7920:74;;;;;;;4630:2:1;7920:74:0;;;4612:21:1;4669:2;4649:18;;;4642:30;4708:29;4688:18;;;4681:57;4755:18;;7920:74:0;4602:177:1;7920:74:0;8010:9;8005:425;8029:23;:30;8025:34;;8005:425;;;8115:7;8085:37;;:23;8109:1;8085:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;:37;8081:338;;;8172:23;8196:30;;:34;;8229:1;;8196:34;:::i;:::-;8172:59;;;;;;;;;;;;;;;;;;;;;;;;;;8143:23;:26;;8172:59;;;;;8167:1;;8143:26;;;;;;;;;;;;;;;;;;;;;;;;;;:88;;;;;;;;;;;8250:16;;;;;-1:-1:-1;8250:16:0;;;;;;:20;;;8289:25;:34;;;;:42;;;;;;8350:23;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8398:5;;8081:338;8061:3;;;;:::i;:::-;;;;8005:425;;;;7860:577;:::o;15863:440::-;15942:27;15961:7;15942:18;:27::i;:::-;15934:62;;;;;;;6170:2:1;15934:62:0;;;6152:21:1;6209:2;6189:18;;;6182:30;6248:24;6228:18;;;6221:52;6290:18;;15934:62:0;6142:172:1;15934:62:0;16012:9;16007:289;16031:17;:24;16027:28;;16007:289;;;16105:7;16081:31;;:17;16099:1;16081:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;:31;16077:208;;;16156:17;16174:24;;:28;;16201:1;;16174:28;:::i;:::-;16156:47;;;;;;;;;;;;;;;;;;;;;;;;;;16133:17;:20;;16156:47;;;;;16151:1;;16133:20;;;;;;;;;;;;;;;;;;;;;;:70;;;;;;;;;;;;;;;;;;16222:17;:23;;;;;;;;;;;;;;16077:208;16057:3;;;;:::i;:::-;;;;16007:289;;13901:296;13961:7;13970;13990:16;14035:9;;14025:7;;14009:13;;:23;;;;:::i;:::-;:35;;;;:::i;:::-;13990:54;-1:-1:-1;14055:13:0;14092:3;14071:18;13990:54;14071:7;:18;:::i;:::-;:24;;;;:::i;:::-;14055:40;-1:-1:-1;14106:23:0;14132:15;14055:40;14132:7;:15;:::i;:::-;14106:41;-1:-1:-1;14183:5:0;;-1:-1:-1;;;13901:296:0;;;:::o;14205:358::-;14280:7;14289;14298;14318:19;14340:10;:8;:10::i;:::-;14318:32;-1:-1:-1;14361:15:0;14379:21;14318:32;14379:7;:21;:::i;:::-;14361:39;-1:-1:-1;14411:13:0;14427:19;14435:11;14427:5;:19;:::i;:::-;14411:35;-1:-1:-1;14457:23:0;14483:15;14411:35;14483:7;:15;:::i;:::-;14517:7;;;;-1:-1:-1;14543:11:0;;-1:-1:-1;14205:358:0;;-1:-1:-1;;;;;14205:358:0:o;11345:662::-;11448:15;11465:23;11490;11515:18;11535:19;11558;11569:7;11558:10;:19::i;:::-;11447:130;;;;;;;;;;11606:72;11626:7;11606:72;;;;;;;;;;;;;;;;;:15;;;;;;;:7;:15;;;;;;;:72;:19;:72::i;:::-;11588:7;:15;11596:6;11588:15;;;;;;;;;;;;;;;:90;;;;11707:72;11727:7;11707:72;;;;;;;;;;;;;;;;;:15;;;:7;:15;;;;;;;;;;;;:72;:19;:72::i;:::-;11689:15;;;;:7;:15;;;;;;;;;;;:90;;;;11811:18;;;;;;;:36;;11832:15;;11811:36;:::i;10131:561::-;10230:15;10247:23;10272;10297:18;10317:19;10340;10351:7;10340:10;:19::i;:::-;10229:130;;;;;;;;;;10388:72;10408:7;10388:72;;;;;;;;;;;;;;;;;:15;;;:7;:15;;;;;;;;;;;;:72;:19;:72::i;14742:621::-;14839:6;;14792:7;;;;2359:18;14792:7;14898:352;14922:23;:30;14918:34;;14898:352;;;15016:7;14978;:35;14986:23;15010:1;14986:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14978:35;;;;;;;;;;;;;:45;;:94;;;15065:7;15027;:35;15035:23;15059:1;15035:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15027:35;;;;;;;;;;;;;:45;14978:94;14974:124;;;15082:6;;2359:18;15074:24;;;;;;;;;14974:124;15133:7;:35;15141:23;15165:1;15141:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15133:35;;;;;;;;;;;;;15123:45;;:7;:45;:::i;:::-;15113:55;;15203:7;:35;15211:23;15235:1;15211:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15203:35;;;;;;;;;;;;;15193:45;;:7;:45;:::i;:::-;15183:55;-1:-1:-1;14954:3:0;;;;:::i;:::-;;;;14898:352;;;-1:-1:-1;15274:6:0;;:19;;2359:18;15274:10;:19::i;:::-;15264:7;:29;15260:59;;;15303:6;;2359:18;15295:24;;;;;;;;15260:59;15338:7;;-1:-1:-1;15347:7:0;-1:-1:-1;14742:621:0;;;:::o;12754:745::-;12832:19;12880:3;12864:13;;12854:7;:23;;;;:::i;:::-;:29;;;;:::i;:::-;12832:51;-1:-1:-1;12894:19:0;12916:25;12930:11;12832:51;12916:25;:::i;:::-;12894:47;;12970:11;12961:6;;:20;;;;:::i;:::-;12952:6;:29;13004:9;;:23;;13016:11;;13004:23;:::i;:::-;12992:9;:35;13074:7;;13048:13;;13084:3;;13064:17;;:7;:17;:::i;:::-;:23;;;;:::i;:::-;13048:39;-1:-1:-1;13098:13:0;13114:19;13122:11;13048:39;13114:19;:::i;:::-;13175:11;;;;13167:7;:20;;;;;;;;;;;13098:35;;-1:-1:-1;13167:28:0;;13098:35;;13167:28;:::i;:::-;13152:11;;;;;;;13144:7;:20;;;;;;;;;;;:51;;;;13237:11;;;;;13229:20;;13152:11;13229:20;;;;;:28;;13252:5;;13229:28;:::i;:::-;13214:11;;;;13206:20;;;;:7;:20;;;;;:51;;;;13306:9;;13318:3;;13296:19;;:7;:19;:::i;:::-;:25;;;;:::i;:::-;13278:43;-1:-1:-1;13332:15:0;13350:21;13360:11;13278:43;13350:21;:::i;:::-;13411:9;;;;13403:7;:18;;;;;;;;;;;13332:39;;-1:-1:-1;13403:28:0;;13332:39;;13403:28;:::i;:::-;13390:9;;;;;;;13382:7;:18;;;;;;;;;;;:49;;;;13471:9;;;;;13463:18;;13390:9;13463:18;;;;;:28;;13484:7;;13463:28;:::i;:::-;13450:9;;;;13442:18;;;;:7;:18;;;;;:49;-1:-1:-1;;;;;;;;12754:745:0:o;14:196:1:-;82:20;;142:42;131:54;;121:65;;111:2;;200:1;197;190:12;215:196;;327:2;315:9;306:7;302:23;298:32;295:2;;;348:6;340;333:22;295:2;376:29;395:9;376:29;:::i;416:270::-;;;545:2;533:9;524:7;520:23;516:32;513:2;;;566:6;558;551:22;513:2;594:29;613:9;594:29;:::i;:::-;584:39;;642:38;676:2;665:9;661:18;642:38;:::i;:::-;632:48;;503:183;;;;;:::o;691:338::-;;;;837:2;825:9;816:7;812:23;808:32;805:2;;;858:6;850;843:22;805:2;886:29;905:9;886:29;:::i;:::-;876:39;;934:38;968:2;957:9;953:18;934:38;:::i;:::-;924:48;;1019:2;1008:9;1004:18;991:32;981:42;;795:234;;;;;:::o;1034:264::-;;;1163:2;1151:9;1142:7;1138:23;1134:32;1131:2;;;1184:6;1176;1169:22;1131:2;1212:29;1231:9;1212:29;:::i;:::-;1202:39;1288:2;1273:18;;;;1260:32;;-1:-1:-1;;;1121:177:1:o;1303:190::-;;1415:2;1403:9;1394:7;1390:23;1386:32;1383:2;;;1436:6;1428;1421:22;1383:2;-1:-1:-1;1464:23:1;;1373:120;-1:-1:-1;1373:120:1:o;1498:361::-;;;1624:2;1612:9;1603:7;1599:23;1595:32;1592:2;;;1645:6;1637;1630:22;1592:2;1686:9;1673:23;1663:33;;1746:2;1735:9;1731:18;1718:32;1793:5;1786:13;1779:21;1772:5;1769:32;1759:2;;1820:6;1812;1805:22;1759:2;1848:5;1838:15;;;1582:277;;;;;:::o;2543:662::-;;2684:2;2713;2702:9;2695:21;2745:6;2739:13;2788:6;2783:2;2772:9;2768:18;2761:34;2813:4;2826:140;2840:6;2837:1;2834:13;2826:140;;;2935:14;;;2931:23;;2925:30;2901:17;;;2920:2;2897:26;2890:66;2855:10;;2826:140;;;2984:6;2981:1;2978:13;2975:2;;;3054:4;3049:2;3040:6;3029:9;3025:22;3021:31;3014:45;2975:2;-1:-1:-1;3121:2:1;3109:15;3126:66;3105:88;3090:104;;;;3196:2;3086:113;;2664:541;-1:-1:-1;;;2664:541:1:o;8321:128::-;;8392:1;8388:6;8385:1;8382:13;8379:2;;;8398:18;;:::i;:::-;-1:-1:-1;8434:9:1;;8369:80::o;8454:274::-;;8520:1;8510:2;;8555:77;8552:1;8545:88;8656:4;8653:1;8646:15;8684:4;8681:1;8674:15;8510:2;-1:-1:-1;8713:9:1;;8500:228::o;8733:::-;;8899:1;8831:66;8827:74;8824:1;8821:81;8816:1;8809:9;8802:17;8798:105;8795:2;;;8906:18;;:::i;:::-;-1:-1:-1;8946:9:1;;8785:176::o;8966:125::-;;9034:1;9031;9028:8;9025:2;;;9039:18;;:::i;:::-;-1:-1:-1;9076:9:1;;9015:76::o;9096:437::-;9175:1;9171:12;;;;9218;;;9239:2;;9293:4;9285:6;9281:17;9271:27;;9239:2;9346;9338:6;9335:14;9315:18;9312:38;9309:2;;;9383:77;9380:1;9373:88;9484:4;9481:1;9474:15;9512:4;9509:1;9502:15;9309:2;;9151:382;;;:::o;9538:195::-;;9608:66;9601:5;9598:77;9595:2;;;9678:18;;:::i;:::-;-1:-1:-1;9725:1:1;9714:13;;9585:148::o;9738:184::-;9790:77;9787:1;9780:88;9887:4;9884:1;9877:15;9911:4;9908:1;9901:15

Swarm Source

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