ETH Price: $2,452.50 (+2.15%)

Token

Aimi Neko (AIMI)
 

Overview

Max Total Supply

10,000,000,000 AIMI

Holders

58

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
405,173.725646582 AIMI

Value
$0.00
0x560a2642223aee8647b675b4dff2a630a8672cca
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:
AimiNeko

Compiler Version
v0.8.1+commit.df193b15

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-05-31
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}


/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}


contract AimiNeko is Context, IERC20, IERC20Metadata, Ownable {
    
    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;

    mapping (address => bool) private _isExcluded;
    address[] private _excluded;
    
    string private _name = 'Aimi Neko';
    string private _symbol = 'AIMI';
    uint8 private _decimals = 9;
    uint256 private constant _tenBillion = 10**10;
    uint256 private constant _decimalPoints = 10**9;
    
    uint256 private constant _finalTotal = _tenBillion * _decimalPoints;
    uint256 private constant MAX = ~uint256(0);
    uint256 private constant _tTotal = _finalTotal;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;
    
    uint256 public _maxTxAmount = _tTotal / 100;

    constructor () {
        _rOwned[_msgSender()] = _rTotal;
        emit Transfer(address(0), _msgSender(), _tTotal);
    }

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

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

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

    function totalSupply() public 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) 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);
        require(amount <= _allowances[sender][_msgSender()], "ERC20: transfer amount exceeds allowance");
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()]- amount);
        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) {
        require(subtractedValue <= _allowances[_msgSender()][spender], "ERC20: decreased allowance below zero");
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue);
        return true;
    }

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

    function totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }
    
    
    function setMaxTxPercent(uint256 maxTxPercent) external onlyOwner() {
        _maxTxAmount = ((_tTotal * maxTxPercent) / 10**2);
    }

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

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

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

    function excludeAccount(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 includeAccount(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 _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");
        
        if(sender != owner() && recipient != owner()) {
          require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
        }
            
        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);
        }
    }

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

    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 tTransferAmount, uint256 tFee) = _getTValues(tAmount);
        uint256 currentRate =  _getRate();
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, currentRate);
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee);
    }

    function _getTValues(uint256 tAmount) private pure returns (uint256, uint256) {
        uint256 tFee = ((tAmount / 100) * 5);
        uint256 tTransferAmount = tAmount - tFee;
        return (tTransferAmount, tFee);
    }

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount * currentRate;
        uint256 rFee = tFee * currentRate;
        uint256 rTransferAmount = rAmount - rFee;
        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);
    }
}

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":"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"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeAccount","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":"isExcluded","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":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"reflect","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxPercent","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"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":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526040518060400160405280600981526020017f41696d69204e656b6f00000000000000000000000000000000000000000000008152506006908051906020019062000051929190620002ca565b506040518060400160405280600481526020017f41494d4900000000000000000000000000000000000000000000000000000000815250600790805190602001906200009f929190620002ca565b506009600860006101000a81548160ff021916908360ff160217905550633b9aca006402540be400620000d39190620003e0565b600019620000e29190620004bc565b600019620000f1919062000441565b6009556064633b9aca006402540be4006200010d9190620003e0565b620001199190620003a8565b600b553480156200012957600080fd5b5060006200013c620002c260201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35060095460016000620001f1620002c260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506200023f620002c260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef633b9aca006402540be400620002a59190620003e0565b604051620002b491906200038b565b60405180910390a362000581565b600033905090565b828054620002d89062000486565b90600052602060002090601f016020900481019282620002fc576000855562000348565b82601f106200031757805160ff191683800117855562000348565b8280016001018555821562000348579182015b82811115620003475782518255916020019190600101906200032a565b5b5090506200035791906200035b565b5090565b5b80821115620003765760008160009055506001016200035c565b5090565b62000385816200047c565b82525050565b6000602082019050620003a260008301846200037a565b92915050565b6000620003b5826200047c565b9150620003c2836200047c565b925082620003d557620003d462000523565b5b828204905092915050565b6000620003ed826200047c565b9150620003fa836200047c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620004365762000435620004f4565b5b828202905092915050565b60006200044e826200047c565b91506200045b836200047c565b925082821015620004715762000470620004f4565b5b828203905092915050565b6000819050919050565b600060028204905060018216806200049f57607f821691505b60208210811415620004b657620004b562000552565b5b50919050565b6000620004c9826200047c565b9150620004d6836200047c565b925082620004e957620004e862000523565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6139e480620005916000396000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c8063715018a6116100c3578063cba0e9961161007c578063cba0e996146103ca578063d543dbeb146103fa578063dd62ed3e14610416578063f2cc0c1814610446578063f2fde38b14610462578063f84354f11461047e5761014d565b8063715018a6146103065780637d1db4a5146103105780638da5cb5b1461032e57806395d89b411461034c578063a457c2d71461036a578063a9059cbb1461039a5761014d565b806323b872dd1161011557806323b872dd146101f85780632d83811914610228578063313ce5671461025857806339509351146102765780634549b039146102a657806370a08231146102d65761014d565b8063053ab1821461015257806306fdde031461016e578063095ea7b31461018c57806313114a9d146101bc57806318160ddd146101da575b600080fd5b61016c60048036038101906101679190612da5565b61049a565b005b6101766105ff565b604051610183919061309f565b60405180910390f35b6101a660048036038101906101a19190612d69565b610691565b6040516101b39190613084565b60405180910390f35b6101c46106af565b6040516101d19190613281565b60405180910390f35b6101e26106b9565b6040516101ef9190613281565b60405180910390f35b610212600480360381019061020d9190612d1a565b6106d5565b60405161021f9190613084565b60405180910390f35b610242600480360381019061023d9190612da5565b610853565b60405161024f9190613281565b60405180910390f35b6102606108ba565b60405161026d919061329c565b60405180910390f35b610290600480360381019061028b9190612d69565b6108d1565b60405161029d9190613084565b60405180910390f35b6102c060048036038101906102bb9190612dce565b61097d565b6040516102cd9190613281565b60405180910390f35b6102f060048036038101906102eb9190612cb5565b610a11565b6040516102fd9190613281565b60405180910390f35b61030e610afc565b005b610318610c36565b6040516103259190613281565b60405180910390f35b610336610c3c565b6040516103439190613069565b60405180910390f35b610354610c65565b604051610361919061309f565b60405180910390f35b610384600480360381019061037f9190612d69565b610cf7565b6040516103919190613084565b60405180910390f35b6103b460048036038101906103af9190612d69565b610e69565b6040516103c19190613084565b60405180910390f35b6103e460048036038101906103df9190612cb5565b610e87565b6040516103f19190613084565b60405180910390f35b610414600480360381019061040f9190612da5565b610edd565b005b610430600480360381019061042b9190612cde565b610f8e565b60405161043d9190613281565b60405180910390f35b610460600480360381019061045b9190612cb5565b611015565b005b61047c60048036038101906104779190612cb5565b6112b0565b005b61049860048036038101906104939190612cb5565b611459565b005b60006104a4611827565b9050600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161052a90613241565b60405180910390fd5b600061053e8361182f565b50505050905080600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461058f91906133b4565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550806009546105e091906133b4565b60098190555082600a546105f491906132d3565b600a81905550505050565b60606006805461060e90613470565b80601f016020809104026020016040519081016040528092919081815260200182805461063a90613470565b80156106875780601f1061065c57610100808354040283529160200191610687565b820191906000526020600020905b81548152906001019060200180831161066a57829003601f168201915b5050505050905090565b60006106a561069e611827565b8484611887565b6001905092915050565b6000600a54905090565b6000633b9aca006402540be4006106d0919061335a565b905090565b60006106e2848484611a52565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061072b611827565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211156107a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079f906131a1565b60405180910390fd5b610848846107b4611827565b84600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006107fe611827565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461084391906133b4565b611887565b600190509392505050565b600060095482111561089a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610891906130e1565b60405180910390fd5b60006108a4611f2a565b905080836108b29190613329565b915050919050565b6000600860009054906101000a900460ff16905090565b60006109736108de611827565b8484600360006108ec611827565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461096e91906132d3565b611887565b6001905092915050565b6000633b9aca006402540be400610994919061335a565b8311156109d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109cd90613161565b60405180910390fd5b816109f55760006109e68461182f565b50505050905080915050610a0b565b6000610a008461182f565b505050915050809150505b92915050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610aac57600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050610af7565b610af4600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610853565b90505b919050565b610b04611827565b73ffffffffffffffffffffffffffffffffffffffff16610b22610c3c565b73ffffffffffffffffffffffffffffffffffffffff1614610b78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6f906131c1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600b5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060078054610c7490613470565b80601f0160208091040260200160405190810160405280929190818152602001828054610ca090613470565b8015610ced5780601f10610cc257610100808354040283529160200191610ced565b820191906000526020600020905b815481529060010190602001808311610cd057829003601f168201915b5050505050905090565b600060036000610d05611827565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115610dbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db690613261565b60405180910390fd5b610e5f610dca611827565b848460036000610dd8611827565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e5a91906133b4565b611887565b6001905092915050565b6000610e7d610e76611827565b8484611a52565b6001905092915050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610ee5611827565b73ffffffffffffffffffffffffffffffffffffffff16610f03610c3c565b73ffffffffffffffffffffffffffffffffffffffff1614610f59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f50906131c1565b60405180910390fd5b606481633b9aca006402540be400610f71919061335a565b610f7b919061335a565b610f859190613329565b600b8190555050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61101d611827565b73ffffffffffffffffffffffffffffffffffffffff1661103b610c3c565b73ffffffffffffffffffffffffffffffffffffffff1614611091576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611088906131c1565b60405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561111e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111590613141565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156111f2576111ae600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610853565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506005819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6112b8611827565b73ffffffffffffffffffffffffffffffffffffffff166112d6610c3c565b73ffffffffffffffffffffffffffffffffffffffff161461132c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611323906131c1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561139c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139390613101565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611461611827565b73ffffffffffffffffffffffffffffffffffffffff1661147f610c3c565b73ffffffffffffffffffffffffffffffffffffffff16146114d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114cc906131c1565b60405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611561576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155890613141565b60405180910390fd5b60005b600580549050811015611823578173ffffffffffffffffffffffffffffffffffffffff16600582815481106115c2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611810576005600160058054905061161d91906133b4565b81548110611654577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600582815481106116b9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060058054806117d6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611823565b808061181b906134a2565b915050611564565b5050565b600033905090565b600080600080600080600061184388611f4e565b915091506000611851611f2a565b905060008060006118638c8686611f8b565b92509250925082828288889a509a509a509a509a5050505050505091939590929450565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156118f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ee90613221565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611967576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195e90613121565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611a459190613281565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611ac2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab990613201565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b29906130c1565b60405180910390fd5b60008111611b75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6c906131e1565b60405180910390fd5b611b7d610c3c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611beb5750611bbb610c3c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15611c3657600b54811115611c35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2c90613181565b60405180910390fd5b5b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611cd95750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611cee57611ce9838383611fd4565b611f25565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611d915750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611da657611da1838383612212565b611f24565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611e4a5750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611e5f57611e5a838383612450565b611f23565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611f015750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611f1657611f11838383612600565b611f22565b611f21838383612450565b5b5b5b5b505050565b6000806000611f376128cc565b915091508082611f479190613329565b9250505090565b60008060006005606485611f629190613329565b611f6c919061335a565b905060008185611f7c91906133b4565b90508082935093505050915091565b6000806000808487611f9d919061335a565b905060008587611fad919061335a565b905060008183611fbd91906133b4565b905082818395509550955050505093509350939050565b6000806000806000611fe58661182f565b9450945094509450945085600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461203a91906133b4565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555084600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120c891906133b4565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555083600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461215691906132d3565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506121a38382612c4a565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516122009190613281565b60405180910390a35050505050505050565b60008060008060006122238661182f565b9450945094509450945084600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461227891906133b4565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461230691906132d3565b600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555083600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461239491906132d3565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506123e18382612c4a565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161243e9190613281565b60405180910390a35050505050505050565b60008060008060006124618661182f565b9450945094509450945084600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124b691906133b4565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555083600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461254491906132d3565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506125918382612c4a565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516125ee9190613281565b60405180910390a35050505050505050565b60008060008060006126118661182f565b9450945094509450945085600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461266691906133b4565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555084600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126f491906133b4565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461278291906132d3565b600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555083600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461281091906132d3565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061285d8382612c4a565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516128ba9190613281565b60405180910390a35050505050505050565b600080600060095490506000633b9aca006402540be4006128ed919061335a565b905060005b600580549050811015612bf05782600160006005848154811061293e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180612a5257508160026000600584815481106129ea577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15612a7b57600954633b9aca006402540be400612a6f919061335a565b94509450505050612c46565b6001600060058381548110612ab9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483612b2a91906133b4565b92506002600060058381548110612b6a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482612bdb91906133b4565b91508080612be8906134a2565b9150506128f2565b50633b9aca006402540be400612c06919061335a565b600954612c139190613329565b821015612c3d57600954633b9aca006402540be400612c32919061335a565b935093505050612c46565b81819350935050505b9091565b81600954612c5891906133b4565b60098190555080600a54612c6c91906132d3565b600a819055505050565b600081359050612c8581613969565b92915050565b600081359050612c9a81613980565b92915050565b600081359050612caf81613997565b92915050565b600060208284031215612cc757600080fd5b6000612cd584828501612c76565b91505092915050565b60008060408385031215612cf157600080fd5b6000612cff85828601612c76565b9250506020612d1085828601612c76565b9150509250929050565b600080600060608486031215612d2f57600080fd5b6000612d3d86828701612c76565b9350506020612d4e86828701612c76565b9250506040612d5f86828701612ca0565b9150509250925092565b60008060408385031215612d7c57600080fd5b6000612d8a85828601612c76565b9250506020612d9b85828601612ca0565b9150509250929050565b600060208284031215612db757600080fd5b6000612dc584828501612ca0565b91505092915050565b60008060408385031215612de157600080fd5b6000612def85828601612ca0565b9250506020612e0085828601612c8b565b9150509250929050565b612e13816133e8565b82525050565b612e22816133fa565b82525050565b6000612e33826132b7565b612e3d81856132c2565b9350612e4d81856020860161343d565b612e5681613578565b840191505092915050565b6000612e6e6023836132c2565b9150612e7982613589565b604082019050919050565b6000612e91602a836132c2565b9150612e9c826135d8565b604082019050919050565b6000612eb46026836132c2565b9150612ebf82613627565b604082019050919050565b6000612ed76022836132c2565b9150612ee282613676565b604082019050919050565b6000612efa601b836132c2565b9150612f05826136c5565b602082019050919050565b6000612f1d601f836132c2565b9150612f28826136ee565b602082019050919050565b6000612f406028836132c2565b9150612f4b82613717565b604082019050919050565b6000612f636028836132c2565b9150612f6e82613766565b604082019050919050565b6000612f866020836132c2565b9150612f91826137b5565b602082019050919050565b6000612fa96029836132c2565b9150612fb4826137de565b604082019050919050565b6000612fcc6025836132c2565b9150612fd78261382d565b604082019050919050565b6000612fef6024836132c2565b9150612ffa8261387c565b604082019050919050565b6000613012602c836132c2565b915061301d826138cb565b604082019050919050565b60006130356025836132c2565b91506130408261391a565b604082019050919050565b61305481613426565b82525050565b61306381613430565b82525050565b600060208201905061307e6000830184612e0a565b92915050565b60006020820190506130996000830184612e19565b92915050565b600060208201905081810360008301526130b98184612e28565b905092915050565b600060208201905081810360008301526130da81612e61565b9050919050565b600060208201905081810360008301526130fa81612e84565b9050919050565b6000602082019050818103600083015261311a81612ea7565b9050919050565b6000602082019050818103600083015261313a81612eca565b9050919050565b6000602082019050818103600083015261315a81612eed565b9050919050565b6000602082019050818103600083015261317a81612f10565b9050919050565b6000602082019050818103600083015261319a81612f33565b9050919050565b600060208201905081810360008301526131ba81612f56565b9050919050565b600060208201905081810360008301526131da81612f79565b9050919050565b600060208201905081810360008301526131fa81612f9c565b9050919050565b6000602082019050818103600083015261321a81612fbf565b9050919050565b6000602082019050818103600083015261323a81612fe2565b9050919050565b6000602082019050818103600083015261325a81613005565b9050919050565b6000602082019050818103600083015261327a81613028565b9050919050565b6000602082019050613296600083018461304b565b92915050565b60006020820190506132b1600083018461305a565b92915050565b600081519050919050565b600082825260208201905092915050565b60006132de82613426565b91506132e983613426565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561331e5761331d6134eb565b5b828201905092915050565b600061333482613426565b915061333f83613426565b92508261334f5761334e61351a565b5b828204905092915050565b600061336582613426565b915061337083613426565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156133a9576133a86134eb565b5b828202905092915050565b60006133bf82613426565b91506133ca83613426565b9250828210156133dd576133dc6134eb565b5b828203905092915050565b60006133f382613406565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b8381101561345b578082015181840152602081019050613440565b8381111561346a576000848401525b50505050565b6000600282049050600182168061348857607f821691505b6020821081141561349c5761349b613549565b5b50919050565b60006134ad82613426565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156134e0576134df6134eb565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b613972816133e8565b811461397d57600080fd5b50565b613989816133fa565b811461399457600080fd5b50565b6139a081613426565b81146139ab57600080fd5b5056fea264697066735822122023a463bde5711989fc373629f52814384b436278d13a607517317133abe3527164736f6c63430008010033

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061014d5760003560e01c8063715018a6116100c3578063cba0e9961161007c578063cba0e996146103ca578063d543dbeb146103fa578063dd62ed3e14610416578063f2cc0c1814610446578063f2fde38b14610462578063f84354f11461047e5761014d565b8063715018a6146103065780637d1db4a5146103105780638da5cb5b1461032e57806395d89b411461034c578063a457c2d71461036a578063a9059cbb1461039a5761014d565b806323b872dd1161011557806323b872dd146101f85780632d83811914610228578063313ce5671461025857806339509351146102765780634549b039146102a657806370a08231146102d65761014d565b8063053ab1821461015257806306fdde031461016e578063095ea7b31461018c57806313114a9d146101bc57806318160ddd146101da575b600080fd5b61016c60048036038101906101679190612da5565b61049a565b005b6101766105ff565b604051610183919061309f565b60405180910390f35b6101a660048036038101906101a19190612d69565b610691565b6040516101b39190613084565b60405180910390f35b6101c46106af565b6040516101d19190613281565b60405180910390f35b6101e26106b9565b6040516101ef9190613281565b60405180910390f35b610212600480360381019061020d9190612d1a565b6106d5565b60405161021f9190613084565b60405180910390f35b610242600480360381019061023d9190612da5565b610853565b60405161024f9190613281565b60405180910390f35b6102606108ba565b60405161026d919061329c565b60405180910390f35b610290600480360381019061028b9190612d69565b6108d1565b60405161029d9190613084565b60405180910390f35b6102c060048036038101906102bb9190612dce565b61097d565b6040516102cd9190613281565b60405180910390f35b6102f060048036038101906102eb9190612cb5565b610a11565b6040516102fd9190613281565b60405180910390f35b61030e610afc565b005b610318610c36565b6040516103259190613281565b60405180910390f35b610336610c3c565b6040516103439190613069565b60405180910390f35b610354610c65565b604051610361919061309f565b60405180910390f35b610384600480360381019061037f9190612d69565b610cf7565b6040516103919190613084565b60405180910390f35b6103b460048036038101906103af9190612d69565b610e69565b6040516103c19190613084565b60405180910390f35b6103e460048036038101906103df9190612cb5565b610e87565b6040516103f19190613084565b60405180910390f35b610414600480360381019061040f9190612da5565b610edd565b005b610430600480360381019061042b9190612cde565b610f8e565b60405161043d9190613281565b60405180910390f35b610460600480360381019061045b9190612cb5565b611015565b005b61047c60048036038101906104779190612cb5565b6112b0565b005b61049860048036038101906104939190612cb5565b611459565b005b60006104a4611827565b9050600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161052a90613241565b60405180910390fd5b600061053e8361182f565b50505050905080600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461058f91906133b4565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550806009546105e091906133b4565b60098190555082600a546105f491906132d3565b600a81905550505050565b60606006805461060e90613470565b80601f016020809104026020016040519081016040528092919081815260200182805461063a90613470565b80156106875780601f1061065c57610100808354040283529160200191610687565b820191906000526020600020905b81548152906001019060200180831161066a57829003601f168201915b5050505050905090565b60006106a561069e611827565b8484611887565b6001905092915050565b6000600a54905090565b6000633b9aca006402540be4006106d0919061335a565b905090565b60006106e2848484611a52565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061072b611827565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211156107a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079f906131a1565b60405180910390fd5b610848846107b4611827565b84600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006107fe611827565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461084391906133b4565b611887565b600190509392505050565b600060095482111561089a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610891906130e1565b60405180910390fd5b60006108a4611f2a565b905080836108b29190613329565b915050919050565b6000600860009054906101000a900460ff16905090565b60006109736108de611827565b8484600360006108ec611827565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461096e91906132d3565b611887565b6001905092915050565b6000633b9aca006402540be400610994919061335a565b8311156109d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109cd90613161565b60405180910390fd5b816109f55760006109e68461182f565b50505050905080915050610a0b565b6000610a008461182f565b505050915050809150505b92915050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610aac57600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050610af7565b610af4600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610853565b90505b919050565b610b04611827565b73ffffffffffffffffffffffffffffffffffffffff16610b22610c3c565b73ffffffffffffffffffffffffffffffffffffffff1614610b78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6f906131c1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600b5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060078054610c7490613470565b80601f0160208091040260200160405190810160405280929190818152602001828054610ca090613470565b8015610ced5780601f10610cc257610100808354040283529160200191610ced565b820191906000526020600020905b815481529060010190602001808311610cd057829003601f168201915b5050505050905090565b600060036000610d05611827565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115610dbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db690613261565b60405180910390fd5b610e5f610dca611827565b848460036000610dd8611827565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e5a91906133b4565b611887565b6001905092915050565b6000610e7d610e76611827565b8484611a52565b6001905092915050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610ee5611827565b73ffffffffffffffffffffffffffffffffffffffff16610f03610c3c565b73ffffffffffffffffffffffffffffffffffffffff1614610f59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f50906131c1565b60405180910390fd5b606481633b9aca006402540be400610f71919061335a565b610f7b919061335a565b610f859190613329565b600b8190555050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61101d611827565b73ffffffffffffffffffffffffffffffffffffffff1661103b610c3c565b73ffffffffffffffffffffffffffffffffffffffff1614611091576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611088906131c1565b60405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561111e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111590613141565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156111f2576111ae600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610853565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506005819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6112b8611827565b73ffffffffffffffffffffffffffffffffffffffff166112d6610c3c565b73ffffffffffffffffffffffffffffffffffffffff161461132c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611323906131c1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561139c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139390613101565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611461611827565b73ffffffffffffffffffffffffffffffffffffffff1661147f610c3c565b73ffffffffffffffffffffffffffffffffffffffff16146114d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114cc906131c1565b60405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611561576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155890613141565b60405180910390fd5b60005b600580549050811015611823578173ffffffffffffffffffffffffffffffffffffffff16600582815481106115c2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611810576005600160058054905061161d91906133b4565b81548110611654577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600582815481106116b9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060058054806117d6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611823565b808061181b906134a2565b915050611564565b5050565b600033905090565b600080600080600080600061184388611f4e565b915091506000611851611f2a565b905060008060006118638c8686611f8b565b92509250925082828288889a509a509a509a509a5050505050505091939590929450565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156118f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ee90613221565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611967576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195e90613121565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611a459190613281565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611ac2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab990613201565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b29906130c1565b60405180910390fd5b60008111611b75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6c906131e1565b60405180910390fd5b611b7d610c3c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611beb5750611bbb610c3c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15611c3657600b54811115611c35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2c90613181565b60405180910390fd5b5b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611cd95750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611cee57611ce9838383611fd4565b611f25565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611d915750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611da657611da1838383612212565b611f24565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611e4a5750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611e5f57611e5a838383612450565b611f23565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611f015750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611f1657611f11838383612600565b611f22565b611f21838383612450565b5b5b5b5b505050565b6000806000611f376128cc565b915091508082611f479190613329565b9250505090565b60008060006005606485611f629190613329565b611f6c919061335a565b905060008185611f7c91906133b4565b90508082935093505050915091565b6000806000808487611f9d919061335a565b905060008587611fad919061335a565b905060008183611fbd91906133b4565b905082818395509550955050505093509350939050565b6000806000806000611fe58661182f565b9450945094509450945085600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461203a91906133b4565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555084600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120c891906133b4565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555083600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461215691906132d3565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506121a38382612c4a565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516122009190613281565b60405180910390a35050505050505050565b60008060008060006122238661182f565b9450945094509450945084600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461227891906133b4565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461230691906132d3565b600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555083600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461239491906132d3565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506123e18382612c4a565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161243e9190613281565b60405180910390a35050505050505050565b60008060008060006124618661182f565b9450945094509450945084600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124b691906133b4565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555083600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461254491906132d3565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506125918382612c4a565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516125ee9190613281565b60405180910390a35050505050505050565b60008060008060006126118661182f565b9450945094509450945085600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461266691906133b4565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555084600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126f491906133b4565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461278291906132d3565b600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555083600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461281091906132d3565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061285d8382612c4a565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516128ba9190613281565b60405180910390a35050505050505050565b600080600060095490506000633b9aca006402540be4006128ed919061335a565b905060005b600580549050811015612bf05782600160006005848154811061293e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180612a5257508160026000600584815481106129ea577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15612a7b57600954633b9aca006402540be400612a6f919061335a565b94509450505050612c46565b6001600060058381548110612ab9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483612b2a91906133b4565b92506002600060058381548110612b6a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482612bdb91906133b4565b91508080612be8906134a2565b9150506128f2565b50633b9aca006402540be400612c06919061335a565b600954612c139190613329565b821015612c3d57600954633b9aca006402540be400612c32919061335a565b935093505050612c46565b81819350935050505b9091565b81600954612c5891906133b4565b60098190555080600a54612c6c91906132d3565b600a819055505050565b600081359050612c8581613969565b92915050565b600081359050612c9a81613980565b92915050565b600081359050612caf81613997565b92915050565b600060208284031215612cc757600080fd5b6000612cd584828501612c76565b91505092915050565b60008060408385031215612cf157600080fd5b6000612cff85828601612c76565b9250506020612d1085828601612c76565b9150509250929050565b600080600060608486031215612d2f57600080fd5b6000612d3d86828701612c76565b9350506020612d4e86828701612c76565b9250506040612d5f86828701612ca0565b9150509250925092565b60008060408385031215612d7c57600080fd5b6000612d8a85828601612c76565b9250506020612d9b85828601612ca0565b9150509250929050565b600060208284031215612db757600080fd5b6000612dc584828501612ca0565b91505092915050565b60008060408385031215612de157600080fd5b6000612def85828601612ca0565b9250506020612e0085828601612c8b565b9150509250929050565b612e13816133e8565b82525050565b612e22816133fa565b82525050565b6000612e33826132b7565b612e3d81856132c2565b9350612e4d81856020860161343d565b612e5681613578565b840191505092915050565b6000612e6e6023836132c2565b9150612e7982613589565b604082019050919050565b6000612e91602a836132c2565b9150612e9c826135d8565b604082019050919050565b6000612eb46026836132c2565b9150612ebf82613627565b604082019050919050565b6000612ed76022836132c2565b9150612ee282613676565b604082019050919050565b6000612efa601b836132c2565b9150612f05826136c5565b602082019050919050565b6000612f1d601f836132c2565b9150612f28826136ee565b602082019050919050565b6000612f406028836132c2565b9150612f4b82613717565b604082019050919050565b6000612f636028836132c2565b9150612f6e82613766565b604082019050919050565b6000612f866020836132c2565b9150612f91826137b5565b602082019050919050565b6000612fa96029836132c2565b9150612fb4826137de565b604082019050919050565b6000612fcc6025836132c2565b9150612fd78261382d565b604082019050919050565b6000612fef6024836132c2565b9150612ffa8261387c565b604082019050919050565b6000613012602c836132c2565b915061301d826138cb565b604082019050919050565b60006130356025836132c2565b91506130408261391a565b604082019050919050565b61305481613426565b82525050565b61306381613430565b82525050565b600060208201905061307e6000830184612e0a565b92915050565b60006020820190506130996000830184612e19565b92915050565b600060208201905081810360008301526130b98184612e28565b905092915050565b600060208201905081810360008301526130da81612e61565b9050919050565b600060208201905081810360008301526130fa81612e84565b9050919050565b6000602082019050818103600083015261311a81612ea7565b9050919050565b6000602082019050818103600083015261313a81612eca565b9050919050565b6000602082019050818103600083015261315a81612eed565b9050919050565b6000602082019050818103600083015261317a81612f10565b9050919050565b6000602082019050818103600083015261319a81612f33565b9050919050565b600060208201905081810360008301526131ba81612f56565b9050919050565b600060208201905081810360008301526131da81612f79565b9050919050565b600060208201905081810360008301526131fa81612f9c565b9050919050565b6000602082019050818103600083015261321a81612fbf565b9050919050565b6000602082019050818103600083015261323a81612fe2565b9050919050565b6000602082019050818103600083015261325a81613005565b9050919050565b6000602082019050818103600083015261327a81613028565b9050919050565b6000602082019050613296600083018461304b565b92915050565b60006020820190506132b1600083018461305a565b92915050565b600081519050919050565b600082825260208201905092915050565b60006132de82613426565b91506132e983613426565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561331e5761331d6134eb565b5b828201905092915050565b600061333482613426565b915061333f83613426565b92508261334f5761334e61351a565b5b828204905092915050565b600061336582613426565b915061337083613426565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156133a9576133a86134eb565b5b828202905092915050565b60006133bf82613426565b91506133ca83613426565b9250828210156133dd576133dc6134eb565b5b828203905092915050565b60006133f382613406565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b8381101561345b578082015181840152602081019050613440565b8381111561346a576000848401525b50505050565b6000600282049050600182168061348857607f821691505b6020821081141561349c5761349b613549565b5b50919050565b60006134ad82613426565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156134e0576134df6134eb565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b613972816133e8565b811461397d57600080fd5b50565b613989816133fa565b811461399457600080fd5b50565b6139a081613426565b81146139ab57600080fd5b5056fea264697066735822122023a463bde5711989fc373629f52814384b436278d13a607517317133abe3527164736f6c63430008010033

Deployed Bytecode Sourcemap

6425:10767:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9877:367;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7452:92;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8391:161;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9628:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7756:95;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8560:372;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10694:252;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7656:92;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8940:215;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10252:434;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7859:198;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5869:148;;;:::i;:::-;;7268:43;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5218:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7552:96;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9163:339;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8065:167;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9510:110;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9733:136;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8240:143;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10954:332;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6172:244;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11294:478;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9877:367;9929:14;9946:12;:10;:12::i;:::-;9929:29;;9978:11;:19;9990:6;9978:19;;;;;;;;;;;;;;;;;;;;;;;;;9977:20;9969:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;10058:15;10081:19;10092:7;10081:10;:19::i;:::-;10057:43;;;;;;10147:7;10129;:15;10137:6;10129:15;;;;;;;;;;;;;;;;:25;;;;:::i;:::-;10111:7;:15;10119:6;10111:15;;;;;;;;;;;;;;;:43;;;;10185:7;10175;;:17;;;;:::i;:::-;10165:7;:27;;;;10229:7;10216:10;;:20;;;;:::i;:::-;10203:10;:33;;;;9877:367;;;:::o;7452:92::-;7498:13;7531:5;7524:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7452:92;:::o;8391:161::-;8466:4;8483:39;8492:12;:10;:12::i;:::-;8506:7;8515:6;8483:8;:39::i;:::-;8540:4;8533:11;;8391:161;;;;:::o;9628:87::-;9670:7;9697:10;;9690:17;;9628:87;:::o;7756:95::-;7809:7;6979:5;6924:6;7036:28;;;;:::i;:::-;7829:14;;7756:95;:::o;8560:372::-;8658:4;8675:36;8685:6;8693:9;8704:6;8675:9;:36::i;:::-;8740:11;:19;8752:6;8740:19;;;;;;;;;;;;;;;:33;8760:12;:10;:12::i;:::-;8740:33;;;;;;;;;;;;;;;;8730:6;:43;;8722:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;8829:73;8838:6;8846:12;:10;:12::i;:::-;8895:6;8860:11;:19;8872:6;8860:19;;;;;;;;;;;;;;;:33;8880:12;:10;:12::i;:::-;8860:33;;;;;;;;;;;;;;;;:41;;;;:::i;:::-;8829:8;:73::i;:::-;8920:4;8913:11;;8560:372;;;;;:::o;10694:252::-;10760:7;10799;;10788;:18;;10780:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;10864:19;10887:10;:8;:10::i;:::-;10864:33;;10926:11;10916:7;:21;;;;:::i;:::-;10908:30;;;10694:252;;;:::o;7656:92::-;7706:5;7731:9;;;;;;;;;;;7724:16;;7656:92;:::o;8940:215::-;9028:4;9045:80;9054:12;:10;:12::i;:::-;9068:7;9114:10;9077:11;:25;9089:12;:10;:12::i;:::-;9077:25;;;;;;;;;;;;;;;:34;9103:7;9077:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;9045:8;:80::i;:::-;9143:4;9136:11;;8940:215;;;;:::o;10252:434::-;10342:7;6979:5;6924:6;7036:28;;;;:::i;:::-;10370:7;:18;;10362:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;10440:17;10435:244;;10475:15;10498:19;10509:7;10498:10;:19::i;:::-;10474:43;;;;;;10539:7;10532:14;;;;;10435:244;10581:23;10611:19;10622:7;10611:10;:19::i;:::-;10579:51;;;;;;10652:15;10645:22;;;10252:434;;;;;:::o;7859:198::-;7925:7;7949:11;:20;7961:7;7949:20;;;;;;;;;;;;;;;;;;;;;;;;;7945:49;;;7978:7;:16;7986:7;7978:16;;;;;;;;;;;;;;;;7971:23;;;;7945:49;8012:37;8032:7;:16;8040:7;8032:16;;;;;;;;;;;;;;;;8012:19;:37::i;:::-;8005:44;;7859:198;;;;:::o;5869:148::-;5449:12;:10;:12::i;:::-;5438:23;;:7;:5;:7::i;:::-;:23;;;5430:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5976:1:::1;5939:40;;5960:6;::::0;::::1;;;;;;;;5939:40;;;;;;;;;;;;6007:1;5990:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;5869:148::o:0;7268:43::-;;;;:::o;5218:87::-;5264:7;5291:6;;;;;;;;;;;5284:13;;5218:87;:::o;7552:96::-;7600:13;7633:7;7626:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7552:96;:::o;9163:339::-;9256:4;9300:11;:25;9312:12;:10;:12::i;:::-;9300:25;;;;;;;;;;;;;;;:34;9326:7;9300:34;;;;;;;;;;;;;;;;9281:15;:53;;9273:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;9387:85;9396:12;:10;:12::i;:::-;9410:7;9456:15;9419:11;:25;9431:12;:10;:12::i;:::-;9419:25;;;;;;;;;;;;;;;:34;9445:7;9419:34;;;;;;;;;;;;;;;;:52;;;;:::i;:::-;9387:8;:85::i;:::-;9490:4;9483:11;;9163:339;;;;:::o;8065:167::-;8143:4;8160:42;8170:12;:10;:12::i;:::-;8184:9;8195:6;8160:9;:42::i;:::-;8220:4;8213:11;;8065:167;;;;:::o;9510:110::-;9568:4;9592:11;:20;9604:7;9592:20;;;;;;;;;;;;;;;;;;;;;;;;;9585:27;;9510:110;;;:::o;9733:136::-;5449:12;:10;:12::i;:::-;5438:23;;:7;:5;:7::i;:::-;:23;;;5430:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9855:5:::1;9839:12;6979:5;6924:6;7036:28;;;;:::i;:::-;9829:22;;;;:::i;:::-;9828:32;;;;:::i;:::-;9812:12;:49;;;;9733:136:::0;:::o;8240:143::-;8321:7;8348:11;:18;8360:5;8348:18;;;;;;;;;;;;;;;:27;8367:7;8348:27;;;;;;;;;;;;;;;;8341:34;;8240:143;;;;:::o;10954:332::-;5449:12;:10;:12::i;:::-;5438:23;;:7;:5;:7::i;:::-;:23;;;5430:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11036:11:::1;:20;11048:7;11036:20;;;;;;;;;;;;;;;;;;;;;;;;;11035:21;11027:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;11121:1;11102:7;:16;11110:7;11102:16;;;;;;;;;;;;;;;;:20;11099:108;;;11158:37;11178:7;:16;11186:7;11178:16;;;;;;;;;;;;;;;;11158:19;:37::i;:::-;11139:7;:16;11147:7;11139:16;;;;;;;;;;;;;;;:56;;;;11099:108;11240:4;11217:11;:20;11229:7;11217:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;11255:9;11270:7;11255:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10954:332:::0;:::o;6172:244::-;5449:12;:10;:12::i;:::-;5438:23;;:7;:5;:7::i;:::-;:23;;;5430:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6281:1:::1;6261:22;;:8;:22;;;;6253:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;6371:8;6342:38;;6363:6;::::0;::::1;;;;;;;;6342:38;;;;;;;;;;;;6400:8;6391:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;6172:244:::0;:::o;11294:478::-;5449:12;:10;:12::i;:::-;5438:23;;:7;:5;:7::i;:::-;:23;;;5430:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11375:11:::1;:20;11387:7;11375:20;;;;;;;;;;;;;;;;;;;;;;;;;11367:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;11443:9;11438:327;11462:9;:16;;;;11458:1;:20;11438:327;;;11520:7;11504:23;;:9;11514:1;11504:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;11500:254;;;11563:9;11592:1;11573:9;:16;;;;:20;;;;:::i;:::-;11563:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11548:9;11558:1;11548:12;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;11632:1;11613:7;:16;11621:7;11613:16;;;;;;;;;;;;;;;:20;;;;11675:5;11652:11;:20;11664:7;11652:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;11699:9;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11733:5;;11500:254;11480:3;;;;;:::i;:::-;;;;11438:327;;;;11294:478:::0;:::o;601:98::-;654:7;681:10;674:17;;601:98;:::o;15480:411::-;15539:7;15548;15557;15566;15575;15596:23;15621:12;15637:20;15649:7;15637:11;:20::i;:::-;15595:62;;;;15668:19;15691:10;:8;:10::i;:::-;15668:33;;15713:15;15730:23;15755:12;15771:39;15783:7;15792:4;15798:11;15771;:39::i;:::-;15712:98;;;;;;15829:7;15838:15;15855:4;15861:15;15878:4;15821:62;;;;;;;;;;;;;;;;15480:411;;;;;;;:::o;11780:337::-;11890:1;11873:19;;:5;:19;;;;11865:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11971:1;11952:21;;:7;:21;;;;11944:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12055:6;12025:11;:18;12037:5;12025:18;;;;;;;;;;;;;;;:27;12044:7;12025:27;;;;;;;;;;;;;;;:36;;;;12093:7;12077:32;;12086:5;12077:32;;;12102:6;12077:32;;;;;;:::i;:::-;;;;;;;;11780:337;;;:::o;12129:1111::-;12244:1;12226:20;;:6;:20;;;;12218:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;12328:1;12307:23;;:9;:23;;;;12299:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;12398:1;12389:6;:10;12381:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;12479:7;:5;:7::i;:::-;12469:17;;:6;:17;;;;:41;;;;;12503:7;:5;:7::i;:::-;12490:20;;:9;:20;;;;12469:41;12466:146;;;12543:12;;12533:6;:22;;12525:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;12466:146;12640:11;:19;12652:6;12640:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;12664:11;:22;12676:9;12664:22;;;;;;;;;;;;;;;;;;;;;;;;;12663:23;12640:46;12636:597;;;12703:48;12725:6;12733:9;12744:6;12703:21;:48::i;:::-;12636:597;;;12774:11;:19;12786:6;12774:19;;;;;;;;;;;;;;;;;;;;;;;;;12773:20;:46;;;;;12797:11;:22;12809:9;12797:22;;;;;;;;;;;;;;;;;;;;;;;;;12773:46;12769:464;;;12836:46;12856:6;12864:9;12875:6;12836:19;:46::i;:::-;12769:464;;;12905:11;:19;12917:6;12905:19;;;;;;;;;;;;;;;;;;;;;;;;;12904:20;:47;;;;;12929:11;:22;12941:9;12929:22;;;;;;;;;;;;;;;;;;;;;;;;;12928:23;12904:47;12900:333;;;12968:44;12986:6;12994:9;13005:6;12968:17;:44::i;:::-;12900:333;;;13034:11;:19;13046:6;13034:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;13057:11;:22;13069:9;13057:22;;;;;;;;;;;;;;;;;;;;;;;;;13034:45;13030:203;;;13096:48;13118:6;13126:9;13137:6;13096:21;:48::i;:::-;13030:203;;;13177:44;13195:6;13203:9;13214:6;13177:17;:44::i;:::-;13030:203;12900:333;12769:464;12636:597;12129:1111;;;:::o;16465:162::-;16506:7;16527:15;16544;16563:19;:17;:19::i;:::-;16526:56;;;;16611:7;16601;:17;;;;:::i;:::-;16593:26;;;;16465:162;:::o;15899:225::-;15959:7;15968;15988:12;16022:1;16015:3;16005:7;:13;;;;:::i;:::-;16004:19;;;;:::i;:::-;15988:36;;16035:23;16071:4;16061:7;:14;;;;:::i;:::-;16035:40;;16094:15;16111:4;16086:30;;;;;;15899:225;;;:::o;16132:325::-;16227:7;16236;16245;16265:15;16293:11;16283:7;:21;;;;:::i;:::-;16265:39;;16315:12;16337:11;16330:4;:18;;;;:::i;:::-;16315:33;;16359:23;16395:4;16385:7;:14;;;;:::i;:::-;16359:40;;16418:7;16427:15;16444:4;16410:39;;;;;;;;;16132:325;;;;;;;:::o;14230:500::-;14333:15;14350:23;14375:12;14389:23;14414:12;14430:19;14441:7;14430:10;:19::i;:::-;14332:117;;;;;;;;;;14496:7;14478;:15;14486:6;14478:15;;;;;;;;;;;;;;;;:25;;;;:::i;:::-;14460:7;:15;14468:6;14460:15;;;;;;;;;;;;;;;:43;;;;14550:7;14532;:15;14540:6;14532:15;;;;;;;;;;;;;;;;:25;;;;:::i;:::-;14514:7;:15;14522:6;14514:15;;;;;;;;;;;;;;;:43;;;;14610:15;14589:7;:18;14597:9;14589:18;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;14568:7;:18;14576:9;14568:18;;;;;;;;;;;;;;;:57;;;;14639:23;14651:4;14657;14639:11;:23::i;:::-;14695:9;14678:44;;14687:6;14678:44;;;14706:15;14678:44;;;;;;:::i;:::-;;;;;;;;14230:500;;;;;;;;:::o;13702:520::-;13803:15;13820:23;13845:12;13859:23;13884:12;13900:19;13911:7;13900:10;:19::i;:::-;13802:117;;;;;;;;;;13966:7;13948;:15;13956:6;13948:15;;;;;;;;;;;;;;;;:25;;;;:::i;:::-;13930:7;:15;13938:6;13930:15;;;;;;;;;;;;;;;:43;;;;14026:15;14005:7;:18;14013:9;14005:18;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;13984:7;:18;13992:9;13984:18;;;;;;;;;;;;;;;:57;;;;14094:15;14073:7;:18;14081:9;14073:18;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;14052:7;:18;14060:9;14052:18;;;;;;;;;;;;;;;:57;;;;14131:23;14143:4;14149;14131:11;:23::i;:::-;14187:9;14170:44;;14179:6;14170:44;;;14198:15;14170:44;;;;;;:::i;:::-;;;;;;;;13702:520;;;;;;;;:::o;13248:446::-;13347:15;13364:23;13389:12;13403:23;13428:12;13444:19;13455:7;13444:10;:19::i;:::-;13346:117;;;;;;;;;;13510:7;13492;:15;13500:6;13492:15;;;;;;;;;;;;;;;;:25;;;;:::i;:::-;13474:7;:15;13482:6;13474:15;;;;;;;;;;;;;;;:43;;;;13570:15;13549:7;:18;13557:9;13549:18;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;13528:7;:18;13536:9;13528:18;;;;;;;;;;;;;;;:57;;;;13603:23;13615:4;13621;13603:11;:23::i;:::-;13659:9;13642:44;;13651:6;13642:44;;;13670:15;13642:44;;;;;;:::i;:::-;;;;;;;;13248:446;;;;;;;;:::o;14738:573::-;14841:15;14858:23;14883:12;14897:23;14922:12;14938:19;14949:7;14938:10;:19::i;:::-;14840:117;;;;;;;;;;15004:7;14986;:15;14994:6;14986:15;;;;;;;;;;;;;;;;:25;;;;:::i;:::-;14968:7;:15;14976:6;14968:15;;;;;;;;;;;;;;;:43;;;;15058:7;15040;:15;15048:6;15040:15;;;;;;;;;;;;;;;;:25;;;;:::i;:::-;15022:7;:15;15030:6;15022:15;;;;;;;;;;;;;;;:43;;;;15118:15;15097:7;:18;15105:9;15097:18;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;15076:7;:18;15084:9;15076:18;;;;;;;;;;;;;;;:57;;;;15186:15;15165:7;:18;15173:9;15165:18;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;15144:7;:18;15152:9;15144:18;;;;;;;;;;;;;;;:57;;;;15220:23;15232:4;15238;15220:11;:23::i;:::-;15276:9;15259:44;;15268:6;15259:44;;;15287:15;15259:44;;;;;;:::i;:::-;;;;;;;;14738:573;;;;;;;;:::o;16635:554::-;16685:7;16694;16714:15;16732:7;;16714:25;;16750:15;6979:5;6924:6;7036:28;;;;:::i;:::-;16750:25;;16797:9;16792:283;16816:9;:16;;;;16812:1;:20;16792:283;;;16882:7;16858;:21;16866:9;16876:1;16866:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16858:21;;;;;;;;;;;;;;;;:31;:66;;;;16917:7;16893;:21;16901:9;16911:1;16901:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16893:21;;;;;;;;;;;;;;;;:31;16858:66;16854:97;;;16934:7;;6979:5;6924:6;7036:28;;;;:::i;:::-;16926:25;;;;;;;;;16854:97;16986:7;:21;16994:9;17004:1;16994:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16986:21;;;;;;;;;;;;;;;;16976:7;:31;;;;:::i;:::-;16966:41;;17042:7;:21;17050:9;17060:1;17050:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17042:21;;;;;;;;;;;;;;;;17032:7;:31;;;;:::i;:::-;17022:41;;16834:3;;;;;:::i;:::-;;;;16792:283;;;;6979:5;6924:6;7036:28;;;;:::i;:::-;17100:7;;:17;;;;:::i;:::-;17089:7;:29;17085:60;;;17128:7;;6979:5;6924:6;7036:28;;;;:::i;:::-;17120:25;;;;;;;;17085:60;17164:7;17173;17156:25;;;;;;16635:554;;;:::o;15319:141::-;15407:4;15397:7;;:14;;;;:::i;:::-;15387:7;:24;;;;15448:4;15435:10;;:17;;;;:::i;:::-;15422:10;:30;;;;15319:141;;:::o;7:139:1:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:133::-;;233:6;220:20;211:29;;249:30;273:5;249:30;:::i;:::-;201:84;;;;:::o;291:139::-;;375:6;362:20;353:29;;391:33;418:5;391:33;:::i;:::-;343:87;;;;:::o;436:262::-;;544:2;532:9;523:7;519:23;515:32;512:2;;;560:1;557;550:12;512:2;603:1;628:53;673:7;664:6;653:9;649:22;628:53;:::i;:::-;618:63;;574:117;502:196;;;;:::o;704:407::-;;;829:2;817:9;808:7;804:23;800:32;797:2;;;845:1;842;835:12;797:2;888:1;913:53;958:7;949:6;938:9;934:22;913:53;:::i;:::-;903:63;;859:117;1015:2;1041:53;1086:7;1077:6;1066:9;1062:22;1041:53;:::i;:::-;1031:63;;986:118;787:324;;;;;:::o;1117:552::-;;;;1259:2;1247:9;1238:7;1234:23;1230:32;1227:2;;;1275:1;1272;1265:12;1227:2;1318:1;1343:53;1388:7;1379:6;1368:9;1364:22;1343:53;:::i;:::-;1333:63;;1289:117;1445:2;1471:53;1516:7;1507:6;1496:9;1492:22;1471:53;:::i;:::-;1461:63;;1416:118;1573:2;1599:53;1644:7;1635:6;1624:9;1620:22;1599:53;:::i;:::-;1589:63;;1544:118;1217:452;;;;;:::o;1675:407::-;;;1800:2;1788:9;1779:7;1775:23;1771:32;1768:2;;;1816:1;1813;1806:12;1768:2;1859:1;1884:53;1929:7;1920:6;1909:9;1905:22;1884:53;:::i;:::-;1874:63;;1830:117;1986:2;2012:53;2057:7;2048:6;2037:9;2033:22;2012:53;:::i;:::-;2002:63;;1957:118;1758:324;;;;;:::o;2088:262::-;;2196:2;2184:9;2175:7;2171:23;2167:32;2164:2;;;2212:1;2209;2202:12;2164:2;2255:1;2280:53;2325:7;2316:6;2305:9;2301:22;2280:53;:::i;:::-;2270:63;;2226:117;2154:196;;;;:::o;2356:401::-;;;2478:2;2466:9;2457:7;2453:23;2449:32;2446:2;;;2494:1;2491;2484:12;2446:2;2537:1;2562:53;2607:7;2598:6;2587:9;2583:22;2562:53;:::i;:::-;2552:63;;2508:117;2664:2;2690:50;2732:7;2723:6;2712:9;2708:22;2690:50;:::i;:::-;2680:60;;2635:115;2436:321;;;;;:::o;2763:118::-;2850:24;2868:5;2850:24;:::i;:::-;2845:3;2838:37;2828:53;;:::o;2887:109::-;2968:21;2983:5;2968:21;:::i;:::-;2963:3;2956:34;2946:50;;:::o;3002:364::-;;3118:39;3151:5;3118:39;:::i;:::-;3173:71;3237:6;3232:3;3173:71;:::i;:::-;3166:78;;3253:52;3298:6;3293:3;3286:4;3279:5;3275:16;3253:52;:::i;:::-;3330:29;3352:6;3330:29;:::i;:::-;3325:3;3321:39;3314:46;;3094:272;;;;;:::o;3372:366::-;;3535:67;3599:2;3594:3;3535:67;:::i;:::-;3528:74;;3611:93;3700:3;3611:93;:::i;:::-;3729:2;3724:3;3720:12;3713:19;;3518:220;;;:::o;3744:366::-;;3907:67;3971:2;3966:3;3907:67;:::i;:::-;3900:74;;3983:93;4072:3;3983:93;:::i;:::-;4101:2;4096:3;4092:12;4085:19;;3890:220;;;:::o;4116:366::-;;4279:67;4343:2;4338:3;4279:67;:::i;:::-;4272:74;;4355:93;4444:3;4355:93;:::i;:::-;4473:2;4468:3;4464:12;4457:19;;4262:220;;;:::o;4488:366::-;;4651:67;4715:2;4710:3;4651:67;:::i;:::-;4644:74;;4727:93;4816:3;4727:93;:::i;:::-;4845:2;4840:3;4836:12;4829:19;;4634:220;;;:::o;4860:366::-;;5023:67;5087:2;5082:3;5023:67;:::i;:::-;5016:74;;5099:93;5188:3;5099:93;:::i;:::-;5217:2;5212:3;5208:12;5201:19;;5006:220;;;:::o;5232:366::-;;5395:67;5459:2;5454:3;5395:67;:::i;:::-;5388:74;;5471:93;5560:3;5471:93;:::i;:::-;5589:2;5584:3;5580:12;5573:19;;5378:220;;;:::o;5604:366::-;;5767:67;5831:2;5826:3;5767:67;:::i;:::-;5760:74;;5843:93;5932:3;5843:93;:::i;:::-;5961:2;5956:3;5952:12;5945:19;;5750:220;;;:::o;5976:366::-;;6139:67;6203:2;6198:3;6139:67;:::i;:::-;6132:74;;6215:93;6304:3;6215:93;:::i;:::-;6333:2;6328:3;6324:12;6317:19;;6122:220;;;:::o;6348:366::-;;6511:67;6575:2;6570:3;6511:67;:::i;:::-;6504:74;;6587:93;6676:3;6587:93;:::i;:::-;6705:2;6700:3;6696:12;6689:19;;6494:220;;;:::o;6720:366::-;;6883:67;6947:2;6942:3;6883:67;:::i;:::-;6876:74;;6959:93;7048:3;6959:93;:::i;:::-;7077:2;7072:3;7068:12;7061:19;;6866:220;;;:::o;7092:366::-;;7255:67;7319:2;7314:3;7255:67;:::i;:::-;7248:74;;7331:93;7420:3;7331:93;:::i;:::-;7449:2;7444:3;7440:12;7433:19;;7238:220;;;:::o;7464:366::-;;7627:67;7691:2;7686:3;7627:67;:::i;:::-;7620:74;;7703:93;7792:3;7703:93;:::i;:::-;7821:2;7816:3;7812:12;7805:19;;7610:220;;;:::o;7836:366::-;;7999:67;8063:2;8058:3;7999:67;:::i;:::-;7992:74;;8075:93;8164:3;8075:93;:::i;:::-;8193:2;8188:3;8184:12;8177:19;;7982:220;;;:::o;8208:366::-;;8371:67;8435:2;8430:3;8371:67;:::i;:::-;8364:74;;8447:93;8536:3;8447:93;:::i;:::-;8565:2;8560:3;8556:12;8549:19;;8354:220;;;:::o;8580:118::-;8667:24;8685:5;8667:24;:::i;:::-;8662:3;8655:37;8645:53;;:::o;8704:112::-;8787:22;8803:5;8787:22;:::i;:::-;8782:3;8775:35;8765:51;;:::o;8822:222::-;;8953:2;8942:9;8938:18;8930:26;;8966:71;9034:1;9023:9;9019:17;9010:6;8966:71;:::i;:::-;8920:124;;;;:::o;9050:210::-;;9175:2;9164:9;9160:18;9152:26;;9188:65;9250:1;9239:9;9235:17;9226:6;9188:65;:::i;:::-;9142:118;;;;:::o;9266:313::-;;9417:2;9406:9;9402:18;9394:26;;9466:9;9460:4;9456:20;9452:1;9441:9;9437:17;9430:47;9494:78;9567:4;9558:6;9494:78;:::i;:::-;9486:86;;9384:195;;;;:::o;9585:419::-;;9789:2;9778:9;9774:18;9766:26;;9838:9;9832:4;9828:20;9824:1;9813:9;9809:17;9802:47;9866:131;9992:4;9866:131;:::i;:::-;9858:139;;9756:248;;;:::o;10010:419::-;;10214:2;10203:9;10199:18;10191:26;;10263:9;10257:4;10253:20;10249:1;10238:9;10234:17;10227:47;10291:131;10417:4;10291:131;:::i;:::-;10283:139;;10181:248;;;:::o;10435:419::-;;10639:2;10628:9;10624:18;10616:26;;10688:9;10682:4;10678:20;10674:1;10663:9;10659:17;10652:47;10716:131;10842:4;10716:131;:::i;:::-;10708:139;;10606:248;;;:::o;10860:419::-;;11064:2;11053:9;11049:18;11041:26;;11113:9;11107:4;11103:20;11099:1;11088:9;11084:17;11077:47;11141:131;11267:4;11141:131;:::i;:::-;11133:139;;11031:248;;;:::o;11285:419::-;;11489:2;11478:9;11474:18;11466:26;;11538:9;11532:4;11528:20;11524:1;11513:9;11509:17;11502:47;11566:131;11692:4;11566:131;:::i;:::-;11558:139;;11456:248;;;:::o;11710:419::-;;11914:2;11903:9;11899:18;11891:26;;11963:9;11957:4;11953:20;11949:1;11938:9;11934:17;11927:47;11991:131;12117:4;11991:131;:::i;:::-;11983:139;;11881:248;;;:::o;12135:419::-;;12339:2;12328:9;12324:18;12316:26;;12388:9;12382:4;12378:20;12374:1;12363:9;12359:17;12352:47;12416:131;12542:4;12416:131;:::i;:::-;12408:139;;12306:248;;;:::o;12560:419::-;;12764:2;12753:9;12749:18;12741:26;;12813:9;12807:4;12803:20;12799:1;12788:9;12784:17;12777:47;12841:131;12967:4;12841:131;:::i;:::-;12833:139;;12731:248;;;:::o;12985:419::-;;13189:2;13178:9;13174:18;13166:26;;13238:9;13232:4;13228:20;13224:1;13213:9;13209:17;13202:47;13266:131;13392:4;13266:131;:::i;:::-;13258:139;;13156:248;;;:::o;13410:419::-;;13614:2;13603:9;13599:18;13591:26;;13663:9;13657:4;13653:20;13649:1;13638:9;13634:17;13627:47;13691:131;13817:4;13691:131;:::i;:::-;13683:139;;13581:248;;;:::o;13835:419::-;;14039:2;14028:9;14024:18;14016:26;;14088:9;14082:4;14078:20;14074:1;14063:9;14059:17;14052:47;14116:131;14242:4;14116:131;:::i;:::-;14108:139;;14006:248;;;:::o;14260:419::-;;14464:2;14453:9;14449:18;14441:26;;14513:9;14507:4;14503:20;14499:1;14488:9;14484:17;14477:47;14541:131;14667:4;14541:131;:::i;:::-;14533:139;;14431:248;;;:::o;14685:419::-;;14889:2;14878:9;14874:18;14866:26;;14938:9;14932:4;14928:20;14924:1;14913:9;14909:17;14902:47;14966:131;15092:4;14966:131;:::i;:::-;14958:139;;14856:248;;;:::o;15110:419::-;;15314:2;15303:9;15299:18;15291:26;;15363:9;15357:4;15353:20;15349:1;15338:9;15334:17;15327:47;15391:131;15517:4;15391:131;:::i;:::-;15383:139;;15281:248;;;:::o;15535:222::-;;15666:2;15655:9;15651:18;15643:26;;15679:71;15747:1;15736:9;15732:17;15723:6;15679:71;:::i;:::-;15633:124;;;;:::o;15763:214::-;;15890:2;15879:9;15875:18;15867:26;;15903:67;15967:1;15956:9;15952:17;15943:6;15903:67;:::i;:::-;15857:120;;;;:::o;15983:99::-;;16069:5;16063:12;16053:22;;16042:40;;;:::o;16088:169::-;;16206:6;16201:3;16194:19;16246:4;16241:3;16237:14;16222:29;;16184:73;;;;:::o;16263:305::-;;16322:20;16340:1;16322:20;:::i;:::-;16317:25;;16356:20;16374:1;16356:20;:::i;:::-;16351:25;;16510:1;16442:66;16438:74;16435:1;16432:81;16429:2;;;16516:18;;:::i;:::-;16429:2;16560:1;16557;16553:9;16546:16;;16307:261;;;;:::o;16574:185::-;;16631:20;16649:1;16631:20;:::i;:::-;16626:25;;16665:20;16683:1;16665:20;:::i;:::-;16660:25;;16704:1;16694:2;;16709:18;;:::i;:::-;16694:2;16751:1;16748;16744:9;16739:14;;16616:143;;;;:::o;16765:348::-;;16828:20;16846:1;16828:20;:::i;:::-;16823:25;;16862:20;16880:1;16862:20;:::i;:::-;16857:25;;17050:1;16982:66;16978:74;16975:1;16972:81;16967:1;16960:9;16953:17;16949:105;16946:2;;;17057:18;;:::i;:::-;16946:2;17105:1;17102;17098:9;17087:20;;16813:300;;;;:::o;17119:191::-;;17179:20;17197:1;17179:20;:::i;:::-;17174:25;;17213:20;17231:1;17213:20;:::i;:::-;17208:25;;17252:1;17249;17246:8;17243:2;;;17257:18;;:::i;:::-;17243:2;17302:1;17299;17295:9;17287:17;;17164:146;;;;:::o;17316:96::-;;17382:24;17400:5;17382:24;:::i;:::-;17371:35;;17361:51;;;:::o;17418:90::-;;17495:5;17488:13;17481:21;17470:32;;17460:48;;;:::o;17514:126::-;;17591:42;17584:5;17580:54;17569:65;;17559:81;;;:::o;17646:77::-;;17712:5;17701:16;;17691:32;;;:::o;17729:86::-;;17804:4;17797:5;17793:16;17782:27;;17772:43;;;:::o;17821:307::-;17889:1;17899:113;17913:6;17910:1;17907:13;17899:113;;;17998:1;17993:3;17989:11;17983:18;17979:1;17974:3;17970:11;17963:39;17935:2;17932:1;17928:10;17923:15;;17899:113;;;18030:6;18027:1;18024:13;18021:2;;;18110:1;18101:6;18096:3;18092:16;18085:27;18021:2;17870:258;;;;:::o;18134:320::-;;18215:1;18209:4;18205:12;18195:22;;18262:1;18256:4;18252:12;18283:18;18273:2;;18339:4;18331:6;18327:17;18317:27;;18273:2;18401;18393:6;18390:14;18370:18;18367:38;18364:2;;;18420:18;;:::i;:::-;18364:2;18185:269;;;;:::o;18460:233::-;;18522:24;18540:5;18522:24;:::i;:::-;18513:33;;18568:66;18561:5;18558:77;18555:2;;;18638:18;;:::i;:::-;18555:2;18685:1;18678:5;18674:13;18667:20;;18503:190;;;:::o;18699:180::-;18747:77;18744:1;18737:88;18844:4;18841:1;18834:15;18868:4;18865:1;18858:15;18885:180;18933:77;18930:1;18923:88;19030:4;19027:1;19020:15;19054:4;19051:1;19044:15;19071:180;19119:77;19116:1;19109:88;19216:4;19213:1;19206:15;19240:4;19237:1;19230:15;19257:102;;19349:2;19345:7;19340:2;19333:5;19329:14;19325:28;19315:38;;19305:54;;;:::o;19365:222::-;19505:34;19501:1;19493:6;19489:14;19482:58;19574:5;19569:2;19561:6;19557:15;19550:30;19471:116;:::o;19593:229::-;19733:34;19729:1;19721:6;19717:14;19710:58;19802:12;19797:2;19789:6;19785:15;19778:37;19699:123;:::o;19828:225::-;19968:34;19964:1;19956:6;19952:14;19945:58;20037:8;20032:2;20024:6;20020:15;20013:33;19934:119;:::o;20059:221::-;20199:34;20195:1;20187:6;20183:14;20176:58;20268:4;20263:2;20255:6;20251:15;20244:29;20165:115;:::o;20286:177::-;20426:29;20422:1;20414:6;20410:14;20403:53;20392:71;:::o;20469:181::-;20609:33;20605:1;20597:6;20593:14;20586:57;20575:75;:::o;20656:227::-;20796:34;20792:1;20784:6;20780:14;20773:58;20865:10;20860:2;20852:6;20848:15;20841:35;20762:121;:::o;20889:227::-;21029:34;21025:1;21017:6;21013:14;21006:58;21098:10;21093:2;21085:6;21081:15;21074:35;20995:121;:::o;21122:182::-;21262:34;21258:1;21250:6;21246:14;21239:58;21228:76;:::o;21310:228::-;21450:34;21446:1;21438:6;21434:14;21427:58;21519:11;21514:2;21506:6;21502:15;21495:36;21416:122;:::o;21544:224::-;21684:34;21680:1;21672:6;21668:14;21661:58;21753:7;21748:2;21740:6;21736:15;21729:32;21650:118;:::o;21774:223::-;21914:34;21910:1;21902:6;21898:14;21891:58;21983:6;21978:2;21970:6;21966:15;21959:31;21880:117;:::o;22003:231::-;22143:34;22139:1;22131:6;22127:14;22120:58;22212:14;22207:2;22199:6;22195:15;22188:39;22109:125;:::o;22240:224::-;22380:34;22376:1;22368:6;22364:14;22357:58;22449:7;22444:2;22436:6;22432:15;22425:32;22346:118;:::o;22470:122::-;22543:24;22561:5;22543:24;:::i;:::-;22536:5;22533:35;22523:2;;22582:1;22579;22572:12;22523:2;22513:79;:::o;22598:116::-;22668:21;22683:5;22668:21;:::i;:::-;22661:5;22658:32;22648:2;;22704:1;22701;22694:12;22648:2;22638:76;:::o;22720:122::-;22793:24;22811:5;22793:24;:::i;:::-;22786:5;22783:35;22773:2;;22832:1;22829;22822:12;22773:2;22763:79;:::o

Swarm Source

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